Skip to content

refactor: Admin App with better layouts and Meta Information#7200

Merged
sriramveeraghanta merged 13 commits intopreviewfrom
refactor-admin-barrel-imports
Jul 2, 2025
Merged

refactor: Admin App with better layouts and Meta Information#7200
sriramveeraghanta merged 13 commits intopreviewfrom
refactor-admin-barrel-imports

Conversation

@sriramveeraghanta
Copy link
Member

@sriramveeraghanta sriramveeraghanta commented Jun 10, 2025

Description

This pull request include changes related to:

  • Improve Layout options inside the Admin Application
  • Delete unused components and clean up
  • Created form components with better import structure
  • Remove barrel files from the components folder.
  • Fixed the General Page unauthorised user flicker issue.

Type of Change

  • Code refactoring

Summary by CodeRabbit

  • New Features

    • Added new layout and provider components for enhanced theming, state management, and context handling across the admin app.
    • Introduced authentication banners, loading spinners, and sign-in forms on the home page.
    • Created dedicated layout components for GitHub, GitLab, Google authentication, and workspace management.
    • Expanded authentication modes with additional options and richer configurations.
  • Refactor

    • Renamed and reorganized sidebar and header components for improved clarity and consistency.
    • Updated import paths to more specific locations for various components.
    • Simplified layout components by removing unnecessary wrappers and updating page metadata.
    • Adjusted theme-based background logic and logo selection on the home layout.
    • Streamlined authentication and instance-related UI logic.
  • Chores

    • Removed unused index and aggregation files for common, authentication, instance, login, and workspace components.
    • Enhanced TypeScript and ESLint configurations with new path aliases and import order adjustments.
  • Bug Fixes

    • Improved handling of error and loading states in instance and authentication flows.
  • Revert

    • Removed axios response interceptor logic from the API service and related status validation in user service methods.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jun 10, 2025

Walkthrough

This update refactors the admin dashboard's structure, reorganizing component imports, layouts, and providers. It removes centralized index files, introduces new layout and provider components, updates authentication and sidebar component naming, and simplifies the main layout logic. Several new components are added, while redundant or aggregated files are deleted. Configuration and import paths are also adjusted for clarity and modularity.

Changes

File(s) / Group Change Summary
admin/app/(all)/(dashboard)/*/layout.tsx, admin/app/(all)/(dashboard)/layout.tsx, admin/app/(all)/(dashboard)/header.tsx, admin/app/(all)/(dashboard)/sidebar.tsx, admin/app/(all)/(dashboard)/sidebar-dropdown.tsx, admin/app/(all)/(dashboard)/sidebar-help-section.tsx, admin/app/(all)/(dashboard)/sidebar-menu.tsx Refactored layout and sidebar components: removed AdminLayout wrappers, renamed components for admin context, updated import paths, and split header logic.
admin/app/(all)/(dashboard)/authentication/*/form.tsx, admin/app/(all)/(dashboard)/ai/form.tsx, admin/app/(all)/(dashboard)/general/form.tsx, admin/app/(all)/(dashboard)/email/email-config-form.tsx, admin/app/(all)/(dashboard)/image/form.tsx Changed import paths for form components to use more specific subdirectories.
admin/app/(all)/(dashboard)/authentication/*/layout.tsx Added new layout components for each authentication method with updated metadata titles.
admin/app/(all)/(dashboard)/authentication/*/page.tsx Refined import paths for authentication method cards, removed PageHeader usage, and simplified toggle logic.
admin/app/(all)/(dashboard)/workspace/layout.tsx, admin/app/(all)/(dashboard)/workspace/page.tsx Simplified workspace layout and updated import path for workspace list item.
admin/app/(all)/(home)/auth-banner.tsx Added new AuthBanner component for displaying authentication banners.
admin/app/(all)/(home)/auth-helpers.tsx Refactored authentication component imports to use specific sub-paths.
admin/app/(all)/(home)/layout.tsx Changed layout component name and logic, always renders background image, updated theme logic.
admin/app/(all)/(home)/page.tsx Added new main home page component with conditional rendering for loading, error, setup, and sign-in states.
admin/app/(all)/(home)/sign-in-form.tsx Added new sign-in form component with CSRF handling, error banners, and controlled inputs.
admin/app/(all)/instance.provider.tsx Added new InstanceProvider component using SWR for instance fetching.
admin/app/(all)/layout.tsx Introduced new root layout with nested providers and theme/toast configuration.
admin/app/(all)/toast.tsx Added new themed toast component.
admin/app/(all)/user.provider.tsx Minor formatting: added a blank line, no functional changes.
admin/app/layout.tsx Removed all context providers and theming from root layout, added page metadata export.
admin/app/page.tsx Deleted old login page and metadata.
admin/ce/components/authentication/authentication-modes.tsx Replaced dynamic authentication modes with explicit hardcoded array, added new modes and icons.
admin/core/components/admin-sidebar/index.ts, admin/core/components/admin-sidebar/sidebar-menu-hamburger-toogle.tsx, admin/core/components/authentication/index.ts, admin/core/components/common/index.ts, admin/core/components/instance/index.ts, admin/core/components/login/index.ts, admin/core/components/login/sign-in-form.tsx, admin/core/components/workspace/index.ts, admin/core/lib/instance-provider.tsx Deleted index and redundant/aggregated files, removing centralized exports and old sign-in logic.
admin/core/components/instance/loading.tsx Added new loading spinner component based on theme.
admin/core/components/instance/setup-form.tsx Updated imports for banner and password strength meter to use specific paths.
admin/core/hooks/store/use-instance.tsx, admin/core/hooks/store/use-theme.tsx, admin/core/hooks/store/use-user.tsx, admin/core/hooks/store/use-workspace.tsx Updated StoreContext import paths to new provider location.
admin/core/store/instance.store.ts Commented out a debug log statement.
admin/tsconfig.json Added new path alias for @/app/*.
packages/eslint-config/next.js Downgraded import/order rule severity and added new path group for public/**.
packages/services/src/api.service.ts, packages/services/src/user/user.service.ts Removed axios response interceptors and related config, updated HTTP request options.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant RootLayout
  participant ThemeProvider
  participant StoreProvider
  participant InstanceProvider
  participant UserProvider
  participant SWRConfig
  participant ToastWithTheme

  User->>RootLayout: Loads app
  RootLayout->>ThemeProvider: Wrap children with theme support
  ThemeProvider->>ToastWithTheme: Render themed toast notifications
  ThemeProvider->>SWRConfig: Setup SWR config
  SWRConfig->>StoreProvider: Provide global state
  StoreProvider->>InstanceProvider: Provide instance context
  InstanceProvider->>UserProvider: Provide user context
  UserProvider->>RootLayout: Render children
Loading
sequenceDiagram
  participant User
  participant HomePage
  participant useInstance
  participant InstanceLoading
  participant InstanceFailureView
  participant InstanceSetupForm
  participant InstanceSignInForm

  User->>HomePage: Access /
  HomePage->>useInstance: Fetch instance state
  alt Loading
    HomePage->>InstanceLoading: Show loading spinner
  else Error
    HomePage->>InstanceFailureView: Show error view
  else Setup incomplete
    HomePage->>InstanceSetupForm: Show setup form
  else Setup complete
    HomePage->>InstanceSignInForm: Show sign-in form
  end
Loading

Suggested labels

🧹chore, ready_to_merge

Poem

Hoppity hop, through code we go,
Refactor here, and layouts flow.
Sidebars renamed, old files retired,
New banners wave, as forms are wired.
With every merge, the dashboard's bright—
A rabbit's joy, in code's delight!
🐇✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0223a6a and 0a6ad75.

📒 Files selected for processing (1)
  • admin/app/(all)/(home)/sign-in-form.tsx (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: mathalav55
PR: makeplane/plane#6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/archive.tsx:11-14
Timestamp: 2024-11-28T07:02:54.664Z
Learning: When components are still located in `core`, it's appropriate for files to import them using `@/components/...`, and the migration to the new import paths is not necessary in such cases.
Learnt from: mathalav55
PR: makeplane/plane#6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/read.tsx:11-12
Timestamp: 2024-11-28T07:02:15.514Z
Learning: Some components are still in core and have not been moved yet, so their import paths remain the same.
admin/app/(all)/(home)/sign-in-form.tsx (1)
Learnt from: prateekshourya29
PR: makeplane/plane#7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.
🪛 Biome (1.9.4)
admin/app/(all)/(home)/sign-in-form.tsx

[error] 90-90: Unnecessary use of boolean literals in conditional expression.

Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with

(lint/complexity/noUselessTernary)

⏰ Context from checks skipped due to timeout of 90000ms (2)
  • GitHub Check: Analyze (javascript)
  • GitHub Check: Analyze (python)
✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@sriramveeraghanta
Copy link
Member Author

@coderabbitai review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jun 10, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

🔭 Outside diff range comments (3)
admin/app/(all)/(dashboard)/authentication/google/page.tsx (1)

36-41: ⚠️ Potential issue

setPromiseToast success message evaluates "0" as truthy – status text is inverted

value is passed as the literal string "0" / "1".
Because any non-empty string is truthy in JS, "0" will be treated as true and the UI will say the auth method is active when it was just disabled.

-        message: () => `Google authentication is now ${value ? "active" : "disabled"}.`,
+        message: () =>
+          `Google authentication is now ${value === "1" ? "active" : "disabled"}.`,
admin/app/(all)/(dashboard)/authentication/github/page.tsx (1)

42-47: ⚠️ Potential issue

Success toast always says “active” because "0" is truthy

"0" is a non-empty string and therefore truthy, so the message will report “active” even when authentication is disabled.

-        message: () => `GitHub authentication is now ${value ? "active" : "disabled"}.`,
+        message: () =>
+          `GitHub authentication is now ${value === "1" ? "active" : "disabled"}.`,
admin/app/(all)/(dashboard)/sidebar.tsx (1)

28-39: 🛠️ Refactor suggestion

Avoid redundant sidebar toggles on every resize event

handleResize always calls toggleSidebar(true) when the viewport ≤ 768 px, even if the sidebar is already collapsed. This triggers an unnecessary MobX action on every resize / orientation-change event and can cause flicker.

-const handleResize = () => {
-  if (window.innerWidth <= 768) {
-    toggleSidebar(true);
-  }
-};
+const handleResize = () => {
+  if (window.innerWidth <= 768 && !isSidebarCollapsed) {
+    toggleSidebar(true);
+  }
+};

Remember to include isSidebarCollapsed in the dependency array so the closure stays current.

♻️ Duplicate comments (3)
admin/core/hooks/store/use-user.tsx (1)

3-4: Same concern as in use-instance.tsx – ensure every file points to @/app/(all)/store.provider.

admin/core/hooks/store/use-workspace.tsx (1)

3-4: Same concern as in use-instance.tsx – ensure every file points to @/app/(all)/store.provider.

admin/app/(all)/(dashboard)/image/layout.tsx (1)

8-14: Same concern as General layout: direct render without outer layout

Double-check that losing the AdminLayout wrapper here does not strip essential UI chrome for the Images section.

🧹 Nitpick comments (17)
admin/app/(all)/(home)/layout.tsx (1)

28-30: Background <Image> can be simplified with fill

The wrapper <div> is redundant. Let the next/image component occupy the absolute area itself:

-        <div className="absolute inset-0 z-0">
-          <Image src={patternBackground} className="w-screen h-full object-cover" alt="Plane background pattern" />
-        </div>
+        <Image
+          src={patternBackground}
+          alt="Plane background pattern"
+          fill
+          priority
+          className="object-cover z-0"
+        />

This avoids an extra node and guarantees the image stretches correctly.

admin/app/(all)/(dashboard)/email/email-config-form.tsx (1)

10-10: Refine ControllerInput import to its submodule
Switching to the specific controller-input path maintains modularity after removing barrel files. Verify consistency across other forms to prevent mixed import sources.

Optionally, scan for any remaining generic common imports:

#!/bin/bash
rg -n "components/common(['\"/])" -g "admin/app/(all)/dashboard/**/**.tsx"
admin/app/(all)/user.provider.tsx (1)

22-22: Remove extraneous blank line
The added blank line after the SWR hook does not affect functionality but breaks consistency. Removing it keeps the code tidy.

-  });
- 
-  useSWR("INSTANCE_ADMINS", () => fetchInstanceAdmins());
+  });
+
+  useSWR("INSTANCE_ADMINS", () => fetchInstanceAdmins());
admin/core/store/user.store.ts (1)

60-60: Remove or replace debug console.log.

The console.log("currentUser: ", currentUser) appears to be a leftover debug statement. Consider removing it or swapping it out for a structured logging solution that can be toggled or leveled appropriately.

admin/core/store/instance.store.ts (1)

103-103: Remove commented-out debug code.

The commented line // console.log("instanceInfo: ", instanceInfo); clutters the code. It's best to delete this remnant to keep the codebase clean.

admin/app/(all)/(dashboard)/general/form.tsx (1)

53-62: Surface failures to the UI, not just the console

Only logging the error on updateInstanceInfo failure leaves the user without feedback.

-      .catch((err) => console.error(err));
+      .catch((err) => {
+        console.error(err);
+        setToast({
+          type: TOAST_TYPE.ERROR,
+          title: "Something went wrong",
+          message: "We couldn’t update the settings. Please try again.",
+        });
+      });
admin/app/(all)/(dashboard)/authentication/google/page.tsx (1)

68-73: Boolean conversion via Boolean(parseInt(...)) is needlessly opaque

enableGoogleConfig === "1" is clearer, avoids a numeric parse, and removes the NaN edge-case.

-                value={Boolean(parseInt(enableGoogleConfig))}
+                value={enableGoogleConfig === "1"}
 ...
-                  Boolean(parseInt(enableGoogleConfig)) === true
+                  enableGoogleConfig === "1"
                     ? updateConfig("IS_GOOGLE_ENABLED", "0")
                     : updateConfig("IS_GOOGLE_ENABLED", "1");
admin/app/(all)/toast.tsx (1)

7-10: Guard against resolvedTheme being undefined on first render

next-themes can return undefined during hydration, which would propagate into resolveGeneralTheme() and potentially break theming or cause a runtime warning if the util does not handle it.

-  const { resolvedTheme } = useTheme();
-  return <Toast theme={resolveGeneralTheme(resolvedTheme)} />;
+  const { resolvedTheme } = useTheme();
+  const theme = resolveGeneralTheme(resolvedTheme ?? "light");
+  return <Toast theme={theme} />;
packages/services/src/user/user.service.ts (1)

24-31: Duplicate error-handling boilerplate – consider a private helper

Both methods share identical then(...).catch(...) chains. Extracting a small helper (e.g. this.safeGet<T>(url)) would cut repetition and centralise error formatting.

Also applies to: 79-85

admin/core/components/instance/loading.tsx (2)

8-10: Provide a fallback for unknown theme value

resolvedTheme can be "system" or undefined during SSR/first paint. Currently everything except "dark" falls back to the light spinner, which is fine, but being explicit improves readability.

-  const logoSrc = resolvedTheme === "dark" ? LogoSpinnerDark : LogoSpinnerLight;
+  const logoSrc =
+    resolvedTheme === "dark" ? LogoSpinnerDark : LogoSpinnerLight;

14-17: Accessibility nit – alt text & redundant priority={false}

  1. The alt text "logo" does not convey purpose; e.g. "Plane loading spinner" is more descriptive.
  2. priority={false} is the default for next/image; the prop can be omitted.
admin/app/(all)/(dashboard)/authentication/gitlab/layout.tsx (1)

8-10: Use consistent “GitLab” capitalization in the component name

GitlabAuthenticationLayout is the only place in the codebase that spells “GitLab” with a lowercase “l”.
Align it with the metadata title ("GitLab Authentication - God Mode") and the GitHub counterpart to avoid confusing imports and inconsistent auto-import suggestions.

-export default function GitlabAuthenticationLayout({ children }: { children: ReactNode }) {
+export default function GitLabAuthenticationLayout({ children }: { children: ReactNode }) {
admin/app/(all)/(dashboard)/sidebar.tsx (1)

41-49: Tailwind class duplication – consider clsx/template helpers

The width / margin classes for sm:, md:, lg: are repeated twice. A small helper or clsx call would cut this string in half and remove the risk of accidental divergence when tweaking breakpoints.

admin/app/(all)/(home)/auth-banner.tsx (2)

14-16: Return null instead of an empty fragment for early exits

React treats both equally, but null is the idiomatic “render nothing”.

-if (!bannerData) return <></>;
+if (!bannerData) return null;

22-24: Leverage optional chaining for cleaner onClick handler

Static-analysis flagged this; it also tightens the type check.

-onClick={() => handleBannerData && handleBannerData(undefined)}
+onClick={() => handleBannerData?.(undefined)}
🧰 Tools
🪛 Biome (1.9.4)

[error] 23-23: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

admin/app/(all)/(home)/page.tsx (1)

17-42: Consolidate the three almost-identical wrapper blocks to avoid repetition

The three early-return branches (loading, failure, setup) all return the same wrapper <div> with identical utility classes – only the child component differs.
Extracting a small wrapper component (e.g. <CenteredView>), or at least hoisting the common <div> outside the switch logic, will trim ~20 lines, make future style edits less error-prone, and keep the intent crystal clear.

Example sketch:

const CenteredView: FC<{ children: React.ReactNode }> = ({ children }) => (
  <div className="relative h-full w-full overflow-y-auto px-6 py-10 mx-auto flex justify-center items-center">
    {children}
  </div>
);

if (!instance && !error) return <CenteredView><InstanceLoading /></CenteredView>;
if (error)             return <CenteredView><InstanceFailureView /></CenteredView>;
if (!instance.is_setup_done) return <CenteredView><InstanceSetupForm /></CenteredView>;
admin/ce/components/authentication/authentication-modes.tsx (1)

34-41: Minor perf/readability tweak: cache getAuthenticationModes with useMemo

getAuthenticationModes allocates fresh objects on every render, triggering needless re-renders of all AuthenticationMethodCards even when props haven’t changed. Wrapping the call in useMemo keyed on [disabled, updateConfig, resolvedTheme] (or memoising inside the util itself) keeps renders lean without altering behaviour.

-      {getAuthenticationModes({ disabled, updateConfig, resolvedTheme }).map((method) => (
+      {useMemo(
+        () => getAuthenticationModes({ disabled, updateConfig, resolvedTheme }),
+        [disabled, updateConfig, resolvedTheme],
+      ).map((method) => (

Also applies to: 101-118

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9c28db8 and 22ae37f.

⛔ Files ignored due to path filters (1)
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (60)
  • admin/app/(all)/(dashboard)/ai/form.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/ai/layout.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/authentication/github/form.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/authentication/github/layout.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/authentication/github/page.tsx (3 hunks)
  • admin/app/(all)/(dashboard)/authentication/gitlab/form.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/authentication/gitlab/layout.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/authentication/gitlab/page.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/authentication/google/form.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/authentication/google/layout.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/authentication/google/page.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/authentication/layout.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/email/email-config-form.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/email/layout.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/general/form.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/general/layout.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/header.tsx (2 hunks)
  • admin/app/(all)/(dashboard)/image/form.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/image/layout.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/layout.tsx (2 hunks)
  • admin/app/(all)/(dashboard)/sidebar-dropdown.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/sidebar-help-section.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/sidebar-menu.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/sidebar.tsx (2 hunks)
  • admin/app/(all)/(dashboard)/workspace/layout.tsx (1 hunks)
  • admin/app/(all)/(dashboard)/workspace/page.tsx (1 hunks)
  • admin/app/(all)/(home)/auth-banner.tsx (1 hunks)
  • admin/app/(all)/(home)/auth-helpers.tsx (1 hunks)
  • admin/app/(all)/(home)/layout.tsx (2 hunks)
  • admin/app/(all)/(home)/page.tsx (1 hunks)
  • admin/app/(all)/(home)/sign-in-form.tsx (1 hunks)
  • admin/app/(all)/instance.provider.tsx (1 hunks)
  • admin/app/(all)/layout.tsx (1 hunks)
  • admin/app/(all)/toast.tsx (1 hunks)
  • admin/app/(all)/user.provider.tsx (1 hunks)
  • admin/app/layout.tsx (2 hunks)
  • admin/app/page.tsx (0 hunks)
  • admin/ce/components/authentication/authentication-modes.tsx (2 hunks)
  • admin/core/components/admin-sidebar/index.ts (0 hunks)
  • admin/core/components/admin-sidebar/sidebar-menu-hamburger-toogle.tsx (0 hunks)
  • admin/core/components/authentication/auth-banner.tsx (0 hunks)
  • admin/core/components/authentication/index.ts (0 hunks)
  • admin/core/components/common/index.ts (0 hunks)
  • admin/core/components/instance/index.ts (0 hunks)
  • admin/core/components/instance/loading.tsx (1 hunks)
  • admin/core/components/instance/setup-form.tsx (1 hunks)
  • admin/core/components/login/index.ts (0 hunks)
  • admin/core/components/login/sign-in-form.tsx (0 hunks)
  • admin/core/components/workspace/index.ts (0 hunks)
  • admin/core/hooks/store/use-instance.tsx (1 hunks)
  • admin/core/hooks/store/use-theme.tsx (1 hunks)
  • admin/core/hooks/store/use-user.tsx (1 hunks)
  • admin/core/hooks/store/use-workspace.tsx (1 hunks)
  • admin/core/lib/instance-provider.tsx (0 hunks)
  • admin/core/store/instance.store.ts (1 hunks)
  • admin/core/store/user.store.ts (1 hunks)
  • admin/tsconfig.json (1 hunks)
  • packages/eslint-config/next.js (2 hunks)
  • packages/services/src/api.service.ts (0 hunks)
  • packages/services/src/user/user.service.ts (2 hunks)
💤 Files with no reviewable changes (12)
  • admin/core/components/workspace/index.ts
  • admin/core/components/login/index.ts
  • admin/core/components/admin-sidebar/index.ts
  • admin/core/components/authentication/auth-banner.tsx
  • admin/core/components/instance/index.ts
  • admin/core/components/admin-sidebar/sidebar-menu-hamburger-toogle.tsx
  • packages/services/src/api.service.ts
  • admin/core/lib/instance-provider.tsx
  • admin/core/components/authentication/index.ts
  • admin/core/components/login/sign-in-form.tsx
  • admin/core/components/common/index.ts
  • admin/app/page.tsx
🧰 Additional context used
🧬 Code Graph Analysis (12)
admin/core/store/user.store.ts (1)
web/core/services/user.service.ts (1)
  • currentUser (48-55)
admin/app/(all)/toast.tsx (2)
admin/core/hooks/store/use-theme.tsx (1)
  • useTheme (6-10)
packages/ui/src/toast/index.tsx (1)
  • Toast (58-61)
admin/core/components/instance/loading.tsx (1)
admin/core/hooks/store/use-theme.tsx (1)
  • useTheme (6-10)
admin/app/(all)/(dashboard)/authentication/google/layout.tsx (2)
admin/app/(all)/(dashboard)/authentication/github/layout.tsx (1)
  • metadata (4-6)
admin/app/(all)/(dashboard)/authentication/gitlab/layout.tsx (1)
  • metadata (4-6)
admin/app/(all)/(dashboard)/authentication/gitlab/layout.tsx (2)
admin/app/(all)/(dashboard)/authentication/github/layout.tsx (1)
  • metadata (4-6)
admin/app/(all)/(dashboard)/authentication/google/layout.tsx (1)
  • metadata (4-6)
admin/app/(all)/instance.provider.tsx (1)
admin/core/hooks/store/use-instance.tsx (1)
  • useInstance (6-10)
admin/app/(all)/(dashboard)/authentication/github/layout.tsx (2)
admin/app/(all)/(dashboard)/authentication/gitlab/layout.tsx (1)
  • metadata (4-6)
admin/app/(all)/(dashboard)/authentication/google/layout.tsx (1)
  • metadata (4-6)
packages/services/src/user/user.service.ts (1)
packages/types/src/users.d.ts (1)
  • IUser (17-35)
admin/app/(all)/layout.tsx (4)
admin/app/(all)/toast.tsx (1)
  • ToastWithTheme (7-10)
admin/app/(all)/store.provider.tsx (1)
  • StoreProvider (31-34)
admin/app/(all)/instance.provider.tsx (1)
  • InstanceProvider (11-23)
admin/app/(all)/user.provider.tsx (1)
  • UserProvider (13-32)
admin/app/(all)/(home)/page.tsx (3)
admin/core/hooks/store/use-instance.tsx (1)
  • useInstance (6-10)
admin/core/components/instance/loading.tsx (1)
  • InstanceLoading (7-21)
admin/core/components/instance/failure.tsx (1)
  • InstanceFailureView (10-38)
admin/app/(all)/(home)/layout.tsx (1)
admin/core/hooks/store/use-theme.tsx (1)
  • useTheme (6-10)
admin/app/(all)/(dashboard)/header.tsx (1)
admin/core/hooks/store/use-theme.tsx (1)
  • useTheme (6-10)
🪛 Biome (1.9.4)
admin/app/(all)/(home)/auth-banner.tsx

[error] 23-23: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

admin/app/(all)/(home)/sign-in-form.tsx

[error] 45-45: Unexpected empty object pattern.

(lint/correctness/noEmptyPattern)


[error] 91-91: Unnecessary use of boolean literals in conditional expression.

Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with

(lint/complexity/noUselessTernary)

🔇 Additional comments (34)
packages/eslint-config/next.js (2)

54-57: Downgrading import/order to a warning undermines consistency enforcement

import/order violations now only emit warnings, which can easily be ignored and accumulate over time. Given that import order is auto-fixable (eslint --fix), keeping it at “error” usually has zero developer friction while guaranteeing a consistently sorted import tree.

-      "warn",
+      "error",

Consider retaining the previous error level unless there is a demonstrable productivity issue.


83-87: Verify that the new public/** path group resolves correctly

Adding public/** as an internal path assumes a webpack/TS alias that lets files be imported as e.g. import logo from "public/logo.svg".

  1. Ensure tsconfig.paths and the Next.js webpack config resolve public/ to the project root; otherwise ESLint will pass but the build will fail.
  2. Remember that pathGroupsExcludedImportTypes contains "internal", so this new group will not force a blank line separation. Confirm this matches your desired grouping.

No code change needed if the alias exists; otherwise add the alias or change the pattern.

admin/core/components/instance/setup-form.tsx (1)

13-15: Explicit imports look good

Moving away from the barrel file and importing the components directly from their dedicated paths is clearer and avoids accidental tree-shaking issues. No further action required.

admin/core/hooks/store/use-instance.tsx (1)

3-4: 💡 Verification agent

🧩 Analysis chain

Verify all imports switched to the new store.provider path

Great catch updating the path. To ensure no stale imports remain, run:


🏁 Script executed:

#!/bin/bash
# Detect leftover references to the removed barrel path
rg --line-number --color=always '"@/lib/store-provider"' || echo "✅ No stale imports found"

Length of output: 1974


Fix remaining stale imports to the new store.provider path

The grep check found several files still importing from the old "@/lib/store-provider". Please update each to use the new "@/app/(all)/store.provider" path:

• space/app/provider.tsx:7
• space/core/hooks/store/use-label.ts:3
• space/core/hooks/store/use-issue-filter.ts:3
• space/core/hooks/store/use-issue-details.tsx:3
• space/core/hooks/store/use-instance.ts:3
• space/core/hooks/store/use-issue.ts:3
• space/core/hooks/store/publish/use-publish-list.ts:3
• space/core/hooks/store/publish/use-publish.ts:3
• space/core/hooks/store/use-cycle.ts:3
• space/core/hooks/store/use-member.ts:3
• space/core/hooks/store/use-module.ts:3
• space/core/hooks/store/use-state.ts:3
• space/core/hooks/store/use-user.ts:3
• space/core/hooks/store/use-user-profile.ts:3

Example diff for each:

-import { StoreContext } from "@/lib/store-provider";
+import { StoreContext } from "@/app/(all)/store.provider";

And for the provider component:

-import { StoreProvider } from "@/lib/store-provider";
+import { StoreProvider } from "@/app/(all)/store.provider";

Likely an incorrect or invalid review comment.

admin/app/(all)/(dashboard)/workspace/page.tsx (1)

13-13: Update import path to specific component location
The import for WorkspaceListItem now correctly targets its dedicated file after removing the barrel export. Ensure no other code still references the old module path.

admin/core/hooks/store/use-theme.tsx (1)

3-3:

Details

✅ Verification successful

Align context import with new app structure
The StoreContext path has been updated to reflect its new home in the app directory. Confirm that @/app/(all)/store.provider exports StoreContext as expected and that no duplicate contexts exist.

Run this script to verify the export:


🏁 Script executed:

#!/bin/bash
rg -n "export\\s+\\{?\\s*StoreContext" -g "admin/app/(all)/store.provider.tsx"

Length of output: 77


🏁 Script executed:

#!/bin/bash
# Locate any store.provider.tsx files in the repo
fd store.provider.tsx

# Verify that StoreContext is indeed exported from those files
rg -n "export\s+\{?\s*StoreContext" -g "**/store.provider.tsx"

Length of output: 157


🏁 Script executed:

#!/bin/bash
# Inspect context creation and exports in the new provider file
rg -n "createContext" -g "admin/app/(all)/store.provider.tsx"
rg -n "StoreContext"   -g "admin/app/(all)/store.provider.tsx"
rg -n "export"         -g "admin/app/(all)/store.provider.tsx"

# Dump the first 200 lines to see full definitions
sed -n '1,200p' "admin/app/(all)/store.provider.tsx"

Length of output: 2086


StoreContext export and uniqueness verified
The import path @/app/(all)/store.provider is correct:

  • admin/app/(all)/store.provider.tsx exports StoreContext at line 9.
  • No other StoreContext exports were found in the repo.

No duplicates detected—no further changes needed.

admin/app/(all)/(dashboard)/sidebar-menu.tsx (1)

52-52:

Details

✅ Verification successful

Rename component to AdminSidebarMenu
The rename clarifies its role in the admin dashboard and aligns with other prefixed components. Ensure all references—especially in layout files—are updated accordingly.

Run this check for stale references:


🏁 Script executed:

#!/bin/bash
rg -n "SidebarMenu" -g "*.tsx"

Length of output: 909


Rename complete: No stale SidebarMenu references found
All imports and usages in admin/app/(all)/(dashboard)/sidebar.tsx now reference AdminSidebarMenu, and no remaining “SidebarMenu” occurrences were detected in .tsx files.

admin/app/(all)/(dashboard)/sidebar-dropdown.tsx (1)

19-19:

Details

✅ Verification successful

Ensure imports reflect the new component name.

Confirm no remaining references to the old SidebarDropdown identifier exist to prevent import errors or stale references.


🏁 Script executed:

#!/bin/bash
# Search for stale imports or references to the old component name
rg -l "SidebarDropdown" -g "admin/app/**/*.tsx"

Length of output: 136


🏁 Script executed:

#!/bin/bash
# Show all occurrences of the old component identifier for precise context
rg -n "SidebarDropdown" -g 'admin/app/**/*.tsx'

Length of output: 330


No stale SidebarDropdown references remain

All occurrences have been updated to the new AdminSidebarDropdown identifier:

  • admin/app/(all)/(dashboard)/sidebar.tsx:
    • Import at line 10: import { AdminSidebarDropdown } from "./sidebar-dropdown";
    • Usage at line 52: <AdminSidebarDropdown />
  • admin/app/(all)/(dashboard)/sidebar-dropdown.tsx:
    • Export at line 19: export const AdminSidebarDropdown = observer(() => { … });
admin/app/(all)/(dashboard)/sidebar-help-section.tsx (1)

36-36:

Details

✅ Verification successful

Verify component renaming consistency.

Ensure all imports, tests, and references use AdminSidebarHelpSection instead of the old HelpSection to avoid runtime errors or broken links.


🏁 Script executed:

#!/bin/bash
# Search for old component usage
rg -l "HelpSection" -g "admin/app/**/*.tsx"

Length of output: 136


🏁 Script executed:

#!/bin/bash
# Inspect references in the sidebar container
rg -n "HelpSection" -C2 'admin/app/(all)/(dashboard)/sidebar.tsx'

# Inspect any lingering references in the component file
rg -n "HelpSection" -C2 'admin/app/(all)/(dashboard)/sidebar-help-section.tsx'

# Check for tests still referencing the old name
rg -l "HelpSection" -g "admin/app/**/*.test.tsx"

Length of output: 841


🏁 Script executed:

#!/bin/bash
# Search for any leftover 'HelpSection' references across code, tests, and docs
rg -n "HelpSection" --glob "*.{ts,tsx,js,jsx,md,mdx}"

Length of output: 871


Renaming verified: no leftover HelpSection references in admin code

All imports and usages in the admin folder now consistently use AdminSidebarHelpSection. A global search shows:

  • admin/app/(all)/(dashboard)/sidebar.tsx imports and renders AdminSidebarHelpSection
  • admin/app/(all)/(dashboard)/sidebar-help-section.tsx exports AdminSidebarHelpSection
  • No other .ts, .tsx (or tests) in the admin tree reference the old HelpSection identifier

No further changes are required here.

admin/tsconfig.json (1)

11-11:

Details

✅ Verification successful

Verify new path alias doesn’t collide.

Double-check that the new "@/app/*": ["app/*"] mapping resolves correctly in all modules and doesn't overlap with existing aliases.


🏁 Script executed:

#!/bin/bash
# List files importing via the new alias
rg -l "@/app/" -g "admin/**/*.tsx"

Length of output: 188


🏁 Script executed:

#!/bin/bash
# Display path mappings in admin/tsconfig.json
echo "=== Paths in admin/tsconfig.json ==="
awk '/"paths"/,/\]/' admin/tsconfig.json

# Display path mappings in root tsconfig.json (if present)
if [ -f tsconfig.json ]; then
  echo -e "\n=== Paths in root tsconfig.json ==="
  awk '/"paths"/,/\]/' tsconfig.json
else
  echo -e "\nNo root tsconfig.json found"
fi

# Check for the admin/app directory and list its contents
echo -e "\n=== admin/app directory contents ==="
if [ -d admin/app ]; then
  find admin/app -maxdepth 2 -type f | head -n 20
else
  echo "admin/app directory not found"
fi

# Show import statements using the "@/app/" alias in the affected files
echo -e "\n=== Imports using '@/app/' alias ==="
rg "from [\"']@/app/[^\"']*[\"']" -n admin/core/hooks/store/use-*.tsx

Length of output: 1321


Alias "@/app/*" mapping validated successfully

  • Only one "@/app/*": ["app/*"] entry exists in admin/tsconfig.json.
  • The files under admin/app/… (e.g. (all)/store.provider.tsx) match the alias and are resolved by all four hook imports.
  • No other path aliases in the admin config overlap with "@/app/*".

No further action needed.

admin/app/(all)/(dashboard)/general/form.tsx (1)

11-11: Granular import path looks good

Directly importing from @/components/common/controller-input eliminates the barrel-file indirection and helps tree-shaking. No concerns here.

admin/app/(all)/(dashboard)/image/form.tsx (1)

7-7: Import path update acknowledged

Same rationale as the general form – scoped import matches the new component structure.

admin/app/(all)/(dashboard)/ai/form.tsx (1)

8-8: Scoped imports are consistent

Moving both ControllerInput and its type helper to their dedicated module keeps typings collocated with implementation.

admin/app/(all)/(dashboard)/authentication/layout.tsx (2)

5-6: Metadata title still says “Plane Web” – mismatch with refactor goal

The PR description/summary mentions re-branding titles to “God Mode”, yet this file still exports
title: "Authentication Settings - Plane Web".

Would you like to align this with the other updated titles?

Likely an incorrect or invalid review comment.


9-9: Dropping AdminLayout wrapper – double-check shared theming

Returning bare children removes any padding/background that AdminLayout might have provided. Verify there’s an ancestor layout compensating for this; otherwise pages may render unstyled.

admin/app/(all)/(dashboard)/authentication/gitlab/form.tsx (1)

11-15: Split common imports – LGTM

Breaking imports into specific files keeps tree-shaking effective after barrel removal. No action needed.

admin/app/(all)/(dashboard)/email/layout.tsx (2)

9-10: Title update looks good

The re-branding to “God Mode” is reflected in the metadata and won’t affect runtime behaviour.


12-14: AdminLayout wrapper removed – verify side-effects

Returning children directly drops any styling / guards formerly provided by AdminLayout (sidebar padding, auth check, breadcrumbs, etc.).
If the parent dashboard layout already wraps this route, great — otherwise this page may render unstyled or without auth protection.

Please confirm, e.g. in the browser, that /dashboard/email still:

  1. Shows the expected sidebar / header,
  2. Redirects unauthenticated users, and
  3. Uses the same container width as sibling pages.
admin/app/(all)/(dashboard)/authentication/gitlab/page.tsx (1)

9-9: Import path refinement LGTM

Directly importing authentication-method-card instead of the old barrel is clearer and avoids circular-import pitfalls.

admin/app/(all)/(dashboard)/workspace/layout.tsx (2)

5-6: Metadata change acknowledged

Renaming the title to “God Mode” is cosmetic only.


8-10: Loss of AdminLayout – double-check consistency

As with other layout files, dropping AdminLayout may strip shared UI and auth checks.
Ensure /dashboard/workspace still inherits the global dashboard layout higher up the tree; otherwise users might see a bare page.

admin/app/(all)/(dashboard)/ai/layout.tsx (2)

5-6: Metadata update is fine

No functional concerns.


8-10: Confirm visual / auth parity after wrapper removal

Same concern as the other layout files: without AdminLayout, verify that AI settings still display with the expected dashboard chrome and remain behind authentication.

admin/app/(all)/(dashboard)/authentication/google/form.tsx (1)

12-15: Verify that the targeted files export named components

The switch from barrel imports to deep paths assumes the underlying files export the symbols as named exports:

import { ConfirmDiscardModal } from "@/components/common/confirm-discard-modal";

If the file’s default export is ConfirmDiscardModal, this will break at compile time.
Please confirm each of the following files has a export const <Name> (or export function) and not a default export:

  • components/common/code-block
  • components/common/confirm-discard-modal
  • components/common/controller-input
  • components/common/copy-field
admin/app/(all)/(dashboard)/general/layout.tsx (1)

5-10: Removal of AdminLayout wrapper – confirm global layout still adds header / sidebar

This file now renders children directly. Ensure that the higher-level (dashboard)/layout.tsx still wraps the page with the required sidebar, header, providers, etc., otherwise the General page may lose navigation or styling.

admin/app/(all)/(home)/auth-helpers.tsx (1)

10-14: Import path update looks correct

Granular imports improve tree-shaking and remove the barrel dependency. No further issues spotted.

packages/services/src/user/user.service.ts (1)

24-31: Re-check callers after removing validateStatus: null

By dropping { validateStatus: null } the promise now rejects for non-2xx codes (e.g. 401). Several UI flows previously relied on response?.status from a resolved promise to branch their logic; now they will hit the catch path and may surface unhandled toast/redirect errors.

Please audit callers of UserService.me() and .adminDetails() to ensure they correctly handle a rejected promise.

Also applies to: 79-85

admin/app/(all)/(dashboard)/authentication/google/layout.tsx (1)

4-10: Layout looks good

Straight-through layout with scoped metadata keeps things simple. No issues spotted.

admin/app/(all)/(dashboard)/authentication/github/layout.tsx (1)

4-10: Looks good – mirrors the GitLab/Google layout components
No issues spotted; consistent metadata and simple passthrough layout.

admin/app/(all)/layout.tsx (1)

1-33: LGTM! Well-structured layout component with proper provider hierarchy.

The InstanceLayout establishes a solid foundation for the admin app with appropriate provider nesting and SWR configuration. The 10-minute refresh interval and disabled revalidation on focus/hidden states are reasonable choices for an admin dashboard.

admin/app/layout.tsx (1)

8-39: Clean separation of concerns with comprehensive metadata.

The refactoring properly separates the root layout responsibilities from the instance-specific providers. The metadata configuration is well-structured with appropriate SEO tags.

admin/app/(all)/(dashboard)/header.tsx (1)

14-24: Good component extraction for mobile navigation.

The HamburgerToggle component properly encapsulates mobile sidebar toggle functionality with appropriate responsive design (md:hidden).

admin/app/(all)/(dashboard)/layout.tsx (1)

19-56: Well-implemented authentication flow with proper loading states.

The component correctly handles the authentication lifecycle: loading state, redirect for unauthenticated users, and conditional rendering. The change to default export with observer wrapper is consistent with the codebase patterns.

admin/ce/components/authentication/authentication-modes.tsx (1)

49-54: Verify key naming consistency with backend/schema

"passwords-login" introduces a new pluralised key.
If the server or enum type expects "password-login" (singular) or another string, toggling the switch will silently fail. Double-check TInstanceAuthenticationMethodKeys and any API contracts before merging.

@sriramveeraghanta sriramveeraghanta marked this pull request as ready for review July 1, 2025 14:25
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (3)
admin/app/(all)/(home)/sign-in-form.tsx (3)

39-39: Fix typo in variable name.

The variable name has a typo: defaultFromData should be defaultFormData.

Also applies to: 54-54


90-93: Simplify the boolean expression.

The ternary operator with boolean literals is unnecessary and makes the code less readable.


110-110: Remove invalid onError handler.

The onError attribute is not a valid event handler for HTML form elements. Form submission errors should be handled within the onSubmit handler or through other means.

🧹 Nitpick comments (2)
admin/app/(all)/(home)/sign-in-form.tsx (2)

95-102: Consider consolidating duplicate error handling logic.

The error handling in this useEffect appears to duplicate the logic already present in the errorData calculation (lines 71-88). Both process URL error parameters and set error state.

Consider consolidating this logic to avoid duplication:

-  useEffect(() => {
-    if (errorCode) {
-      const errorDetail = authErrorHandler(errorCode?.toString() as EAdminAuthErrorCodes);
-      if (errorDetail) {
-        setErrorInfo(errorDetail);
-      }
-    }
-  }, [errorCode]);

And integrate the authErrorHandler logic into the existing errorData calculation instead.


112-116: Improve conditional rendering logic.

The conditional rendering can be simplified and the empty fragment is unnecessary.

-      {errorData.type && errorData?.message ? (
-        <Banner type="error" message={errorData?.message} />
-      ) : (
-        <>{errorInfo && <AuthBanner bannerData={errorInfo} handleBannerData={(value) => setErrorInfo(value)} />}</>
-      )}
+      {errorData.type && errorData.message ? (
+        <Banner type="error" message={errorData.message} />
+      ) : (
+        errorInfo && <AuthBanner bannerData={errorInfo} handleBannerData={(value) => setErrorInfo(value)} />
+      )}
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e3142ac and 0223a6a.

📒 Files selected for processing (3)
  • admin/app/(all)/(dashboard)/header.tsx (2 hunks)
  • admin/app/(all)/(home)/sign-in-form.tsx (1 hunks)
  • apps/space/next-env.d.ts (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • apps/space/next-env.d.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • admin/app/(all)/(dashboard)/header.tsx
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: mathalav55
PR: makeplane/plane#6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/archive.tsx:11-14
Timestamp: 2024-11-28T07:02:54.664Z
Learning: When components are still located in `core`, it's appropriate for files to import them using `@/components/...`, and the migration to the new import paths is not necessary in such cases.
Learnt from: mathalav55
PR: makeplane/plane#6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/read.tsx:11-12
Timestamp: 2024-11-28T07:02:15.514Z
Learning: Some components are still in core and have not been moved yet, so their import paths remain the same.
🧬 Code Graph Analysis (1)
admin/app/(all)/(home)/sign-in-form.tsx (5)
packages/services/src/auth/auth.service.ts (1)
  • AuthService (12-125)
packages/constants/src/auth.ts (1)
  • TAdminAuthErrorInfo (90-95)
admin/app/(all)/(home)/auth-helpers.tsx (1)
  • authErrorHandler (87-112)
admin/core/components/common/banner.tsx (1)
  • Banner (9-32)
admin/app/(all)/(home)/auth-banner.tsx (1)
  • AuthBanner (11-29)
🪛 Biome (1.9.4)
admin/app/(all)/(home)/sign-in-form.tsx

[error] 45-45: Unexpected empty object pattern.

(lint/correctness/noEmptyPattern)


[error] 91-91: Unnecessary use of boolean literals in conditional expression.

Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with

(lint/complexity/noUselessTernary)

⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: Analyze (javascript)

@sriramveeraghanta sriramveeraghanta merged commit 8cc23bc into preview Jul 2, 2025
13 of 14 checks passed
@sriramveeraghanta sriramveeraghanta deleted the refactor-admin-barrel-imports branch July 2, 2025 14:13
lifeiscontent pushed a commit that referenced this pull request Aug 18, 2025
* fix: layout structure in admin

* fix: layout structure in admin

* fix: delete layout files

* chore: updated form related info

* fix: admin import statements

* fix: general page unauthorized flickering issue

* chore: logs related

* chore: lock file updates

* fix: build errors

* fix: coderabbit suggestions
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants