Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
b18aa45
feat: admin react-router migration
lifeiscontent Oct 9, 2025
97083c9
chore: update dependencies and improve server configuration
prateekshourya29 Oct 10, 2025
35f87a5
feat: add ensureTrailingSlash utility and integrate into Link and use…
prateekshourya29 Oct 10, 2025
fa73c33
refactor: remove old error page and implement ErrorBoundary in root c…
prateekshourya29 Oct 10, 2025
c15ceb0
feat: add custom 404 page and catch-all route for improved error hand…
prateekshourya29 Oct 10, 2025
2894119
fix: update nginx server listen port from 3000 to 3001
prateekshourya29 Oct 10, 2025
a48c9fd
fix: revert nginx server listen port from 3001 back to 3000 and remov…
prateekshourya29 Oct 11, 2025
4b2cc27
fix: merge conflicts
prateekshourya29 Oct 14, 2025
57e324e
chore: update dependencies across multiple packages
prateekshourya29 Oct 14, 2025
bf6fdef
Merge branch 'preview' of github.com:makeplane/plane into feat/admin-…
prateekshourya29 Oct 14, 2025
557e146
feat: migrate to Vite with React Router and update project structure
prateekshourya29 Oct 14, 2025
edc198e
refactor: remove deprecated views layout and page components
prateekshourya29 Oct 14, 2025
263b46f
refactor: update import path for Route type in client layout
prateekshourya29 Oct 14, 2025
06ade41
fix: enable verbatim module syntax in TypeScript configuration for Re…
prateekshourya29 Oct 14, 2025
0eda662
[WEB-5169] feat: migrate admin app from Next.js to React Router
lifeiscontent Oct 18, 2025
d9d78c8
chore: update dependencies in admin app and clean up package.json
prateekshourya29 Oct 28, 2025
559a7cb
fix: merge conflicts
prateekshourya29 Oct 28, 2025
5b56cd2
feat: redirect logged-in users to the general page
prateekshourya29 Oct 28, 2025
d5871cc
chore: remove mobx-react-lite dependency from admin app
prateekshourya29 Oct 28, 2025
d814898
fix: merge conflicts
prateekshourya29 Oct 28, 2025
c1077af
feat: add Gitea authentication route and update header
prateekshourya29 Oct 28, 2025
2757c4c
fix: merge conflicts
prateekshourya29 Oct 28, 2025
c5dc294
chore: clean up package dependencies and remove unused packages
prateekshourya29 Oct 28, 2025
77616d3
chore: remove unused path alias from tsconfig.json
prateekshourya29 Oct 29, 2025
c37b962
fix: format
prateekshourya29 Oct 29, 2025
106fcda
Merge branch 'preview' of github.com:makeplane/plane into feat/admin-…
prateekshourya29 Oct 29, 2025
67d2ba8
Merge branch 'feat/admin-react-router-migration' of github.com:makepl…
prateekshourya29 Oct 29, 2025
f502402
Merge branch 'preview' of github.com:makeplane/plane into feat/admin-…
prateekshourya29 Oct 30, 2025
a748ef0
fix: merge conflicts
prateekshourya29 Oct 30, 2025
2593206
fix: space app build
prateekshourya29 Oct 31, 2025
1f0d97f
Merge branch 'preview' of github.com:makeplane/plane into feat/admin-…
prateekshourya29 Oct 31, 2025
e84254c
Merge branch 'feat/admin-react-router-migration' of github.com:makepl…
prateekshourya29 Oct 31, 2025
25dd6fd
fix: update admin deployment configs
prateekshourya29 Nov 3, 2025
5d33d9d
Merge branch 'preview' of github.com:makeplane/plane into feat/admin-…
prateekshourya29 Nov 3, 2025
4c8e1ad
feat: integrate BProgress for navigation feedback in admin app
prateekshourya29 Nov 3, 2025
8266cde
Merge branch 'feat/admin-react-router-migration' of github.com:makepl…
prateekshourya29 Nov 3, 2025
b89af20
fix: update space app Dockerfile and nginx configuration
prateekshourya29 Nov 3, 2025
925b65f
feat: integrate BProgress for navigation feedback in space app
prateekshourya29 Nov 3, 2025
9e34463
fix: update X-Frame-Options header in middleware for improved security
prateekshourya29 Nov 3, 2025
e3bc0b5
refactor: replace redirect and notFound with useRouter for improved n…
prateekshourya29 Nov 3, 2025
bd092a5
fix: update X-Frame-Options header in admin middleware to SAMEORIGIN
prateekshourya29 Nov 3, 2025
4476c56
Merge branch 'feat/admin-react-router-migration' of github.com:makepl…
prateekshourya29 Nov 3, 2025
cb1ae94
Revert "fix: update X-Frame-Options header in admin middleware to SAM…
prateekshourya29 Nov 3, 2025
c25b6d4
Merge branch 'feat/admin-react-router-migration' of github.com:makepl…
prateekshourya29 Nov 3, 2025
30c2676
refactor: migrate IssuesPage to use react-router for navigation
prateekshourya29 Nov 3, 2025
193d331
Merge branch 'preview' of github.com:makeplane/plane into feat/admin-…
prateekshourya29 Nov 4, 2025
9374848
feat: enhance AppProgressBar to support disabling in production build…
prateekshourya29 Nov 5, 2025
0df22d6
Merge branch 'feat/admin-react-router-migration' of github.com:makepl…
prateekshourya29 Nov 5, 2025
4a6b5bb
feat: enhance AppProgressBar to support disabling in production build…
prateekshourya29 Nov 5, 2025
57e6669
fix: merge conflicts
prateekshourya29 Nov 6, 2025
28d4e18
fix: lint fomat
prateekshourya29 Nov 6, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,10 @@ storybook-static

CLAUDE.md

build/
.react-router/
AGENTS.md
Comment on lines +106 to +108
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Remove duplicate ignore entries.

Lines 106-108 duplicate the entries at lines 110-112 (build/, .react-router/, AGENTS.md). Remove one set to avoid redundancy.

Apply this diff to remove the duplicate entries:

-build/
-.react-router/
-AGENTS.md
-
 build/
 .react-router/
 AGENTS.md

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In .gitignore around lines 106 to 108, the entries "build/", ".react-router/",
and "AGENTS.md" are duplicated later at lines 110-112; remove one of the
duplicate blocks so each ignore pattern appears only once — delete the redundant
lines 106-108 (or the later duplicate) to avoid redundancy and keep the file
tidy.


build/
.react-router/
AGENTS.md
Expand Down
4 changes: 2 additions & 2 deletions apps/admin/app/(all)/(dashboard)/ai/form.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"use client";
import type { FC } from "react";

import { useForm } from "react-hook-form";
import { Lightbulb } from "lucide-react";
import { Button } from "@plane/propel/button";
Expand All @@ -17,7 +17,7 @@ type IInstanceAIForm = {

type AIFormValues = Record<TInstanceAIConfigurationKeys, string>;

export const InstanceAIForm: FC<IInstanceAIForm> = (props) => {
export const InstanceAIForm: React.FC<IInstanceAIForm> = (props) => {
const { config } = props;
// store
const { updateInstanceConfigurations } = useInstance();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
"use client";

import type { FC } from "react";
import { useState } from "react";
import { isEmpty } from "lodash-es";
import Link from "next/link";
Expand Down Expand Up @@ -29,7 +28,7 @@ type Props = {

type GithubConfigFormValues = Record<TInstanceGithubAuthenticationConfigurationKeys, string>;

export const InstanceGithubConfigForm: FC<Props> = (props) => {
export const InstanceGithubConfigForm: React.FC<Props> = (props) => {
const { config } = props;
// states
const [isDiscardChangesModalOpen, setIsDiscardChangesModalOpen] = useState(false);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import type { FC } from "react";
import { useState } from "react";
import { isEmpty } from "lodash-es";
import Link from "next/link";
Expand All @@ -25,7 +24,7 @@ type Props = {

type GitlabConfigFormValues = Record<TInstanceGitlabAuthenticationConfigurationKeys, string>;

export const InstanceGitlabConfigForm: FC<Props> = (props) => {
export const InstanceGitlabConfigForm: React.FC<Props> = (props) => {
const { config } = props;
// states
const [isDiscardChangesModalOpen, setIsDiscardChangesModalOpen] = useState(false);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"use client";
import type { FC } from "react";

import { useState } from "react";
import { isEmpty } from "lodash-es";
import Link from "next/link";
Expand Down Expand Up @@ -27,7 +27,7 @@ type Props = {

type GoogleConfigFormValues = Record<TInstanceGoogleAuthenticationConfigurationKeys, string>;

export const InstanceGoogleConfigForm: FC<Props> = (props) => {
export const InstanceGoogleConfigForm: React.FC<Props> = (props) => {
const { config } = props;
// states
const [isDiscardChangesModalOpen, setIsDiscardChangesModalOpen] = useState(false);
Expand Down
5 changes: 2 additions & 3 deletions apps/admin/app/(all)/(dashboard)/email/email-config-form.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
"use client";

import type { FC } from "react";
import React, { useMemo, useState } from "react";
import { useMemo, useState } from "react";
import { useForm } from "react-hook-form";
// types
import { Button } from "@plane/propel/button";
Expand Down Expand Up @@ -31,7 +30,7 @@ const EMAIL_SECURITY_OPTIONS: { [key in TEmailSecurityKeys]: string } = {
NONE: "No email security",
};

export const InstanceEmailForm: FC<IInstanceEmailForm> = (props) => {
export const InstanceEmailForm: React.FC<IInstanceEmailForm> = (props) => {
const { config } = props;
// states
const [isSendTestEmailModalOpen, setIsSendTestEmailModalOpen] = useState(false);
Expand Down
11 changes: 5 additions & 6 deletions apps/admin/app/(all)/(dashboard)/email/test-email-modal.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import type { FC } from "react";
import React, { useEffect, useState } from "react";
import { useEffect, useState, Fragment } from "react";
import { Dialog, Transition } from "@headlessui/react";
// plane imports
import { Button } from "@plane/propel/button";
Expand All @@ -20,7 +19,7 @@ enum ESendEmailSteps {

const instanceService = new InstanceService();

export const SendTestEmailModal: FC<Props> = (props) => {
export const SendTestEmailModal: React.FC<Props> = (props) => {
const { isOpen, handleClose } = props;

// state
Expand Down Expand Up @@ -62,10 +61,10 @@ export const SendTestEmailModal: FC<Props> = (props) => {
};

return (
<Transition.Root show={isOpen} as={React.Fragment}>
<Transition.Root show={isOpen} as={Fragment}>
<Dialog as="div" className="relative z-20" onClose={handleClose}>
<Transition.Child
as={React.Fragment}
as={Fragment}
enter="ease-out duration-300"
enterFrom="opacity-0"
enterTo="opacity-100"
Expand All @@ -78,7 +77,7 @@ export const SendTestEmailModal: FC<Props> = (props) => {
<div className="fixed inset-0 z-20 overflow-y-auto">
<div className="my-10 flex justify-center p-4 text-center sm:p-0 md:my-20">
<Transition.Child
as={React.Fragment}
as={Fragment}
enter="ease-out duration-300"
enterFrom="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
enterTo="opacity-100 translate-y-0 sm:scale-100"
Expand Down
3 changes: 1 addition & 2 deletions apps/admin/app/(all)/(dashboard)/general/form.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
"use client";
import type { FC } from "react";
import { observer } from "mobx-react";
import { Controller, useForm } from "react-hook-form";
import { Telescope } from "lucide-react";
Expand All @@ -20,7 +19,7 @@ export interface IGeneralConfigurationForm {
instanceAdmins: IInstanceAdmin[];
}

export const GeneralConfigurationForm: FC<IGeneralConfigurationForm> = observer((props) => {
export const GeneralConfigurationForm: React.FC<IGeneralConfigurationForm> = observer((props) => {
const { instance, instanceAdmins } = props;
// hooks
const { instanceConfigurations, updateInstanceInfo, updateInstanceConfigurations } = useInstance();
Expand Down
3 changes: 1 addition & 2 deletions apps/admin/app/(all)/(dashboard)/general/intercom.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
"use client";

import type { FC } from "react";
import { useState } from "react";
import { observer } from "mobx-react";
import useSWR from "swr";
Expand All @@ -14,7 +13,7 @@ type TIntercomConfig = {
isTelemetryEnabled: boolean;
};

export const IntercomConfig: FC<TIntercomConfig> = observer((props) => {
export const IntercomConfig: React.FC<TIntercomConfig> = observer((props) => {
const { isTelemetryEnabled } = props;
// hooks
const { instanceConfigurations, updateInstanceConfigurations, fetchInstanceConfigurations } = useInstance();
Expand Down
5 changes: 2 additions & 3 deletions apps/admin/app/(all)/(dashboard)/header.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
"use client";

import type { FC } from "react";
import { observer } from "mobx-react";
import { usePathname } from "next/navigation";
import { Menu, Settings } from "lucide-react";
Expand All @@ -11,7 +10,7 @@ import { BreadcrumbLink } from "@/components/common/breadcrumb-link";
// hooks
import { useTheme } from "@/hooks/store";

export const HamburgerToggle: FC = observer(() => {
export const HamburgerToggle = observer(() => {
const { isSidebarCollapsed, toggleSidebar } = useTheme();
return (
<div
Expand All @@ -23,7 +22,7 @@ export const HamburgerToggle: FC = observer(() => {
);
});

export const AdminHeader: FC = observer(() => {
export const AdminHeader = observer(() => {
const pathName = usePathname();

const getHeaderTitle = (pathName: string) => {
Expand Down
3 changes: 1 addition & 2 deletions apps/admin/app/(all)/(dashboard)/image/form.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
"use client";
import type { FC } from "react";
import { useForm } from "react-hook-form";
import { Button } from "@plane/propel/button";
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
Expand All @@ -15,7 +14,7 @@ type IInstanceImageConfigForm = {

type ImageConfigFormValues = Record<TInstanceImageConfigurationKeys, string>;

export const InstanceImageConfigForm: FC<IInstanceImageConfigForm> = (props) => {
export const InstanceImageConfigForm: React.FC<IInstanceImageConfigForm> = (props) => {
const { config } = props;
// store hooks
const { updateInstanceConfigurations } = useInstance();
Expand Down
3 changes: 1 addition & 2 deletions apps/admin/app/(all)/(dashboard)/sidebar-help-section.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
"use client";

import type { FC } from "react";
import { useState, useRef } from "react";
import { observer } from "mobx-react";
import Link from "next/link";
Expand Down Expand Up @@ -35,7 +34,7 @@ const helpOptions = [
},
];

export const AdminSidebarHelpSection: FC = observer(() => {
export const AdminSidebarHelpSection: React.FC = observer(() => {
// states
const [isNeedHelpOpen, setIsNeedHelpOpen] = useState(false);
// store
Expand Down
3 changes: 1 addition & 2 deletions apps/admin/app/(all)/(dashboard)/sidebar.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
"use client";

import type { FC } from "react";
import { useEffect, useRef } from "react";
import { observer } from "mobx-react";
// plane helpers
Expand All @@ -12,7 +11,7 @@ import { AdminSidebarDropdown } from "./sidebar-dropdown";
import { AdminSidebarHelpSection } from "./sidebar-help-section";
import { AdminSidebarMenu } from "./sidebar-menu";

export const AdminSidebar: FC = observer(() => {
export const AdminSidebar = observer(() => {
// store
const { isSidebarCollapsed, toggleSidebar } = useTheme();

Expand Down
3 changes: 1 addition & 2 deletions apps/admin/app/(all)/(home)/auth-banner.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import type { FC } from "react";
import { Info } from "lucide-react";
// plane constants
import type { TAdminAuthErrorInfo } from "@plane/constants";
Expand All @@ -10,7 +9,7 @@ type TAuthBanner = {
handleBannerData?: (bannerData: TAdminAuthErrorInfo | undefined) => void;
};

export const AuthBanner: FC<TAuthBanner> = (props) => {
export const AuthBanner: React.FC<TAuthBanner> = (props) => {
const { bannerData, handleBannerData } = props;

if (!bannerData) return <></>;
Expand Down
3 changes: 1 addition & 2 deletions apps/admin/app/(all)/(home)/sign-in-form.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
"use client";

import type { FC } from "react";
import { useEffect, useMemo, useState } from "react";
import { useSearchParams } from "next/navigation";
import { Eye, EyeOff } from "lucide-react";
Expand Down Expand Up @@ -46,7 +45,7 @@ const defaultFromData: TFormData = {
password: "",
};

export const InstanceSignInForm: FC = () => {
export const InstanceSignInForm: React.FC = () => {
// search params
const searchParams = useSearchParams();
const emailParam = searchParams.get("email") || undefined;
Expand Down
7 changes: 1 addition & 6 deletions apps/admin/app/(all)/instance.provider.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
import type { FC, ReactNode } from "react";
import { observer } from "mobx-react";
import useSWR from "swr";
// hooks
import { useInstance } from "@/hooks/store";

type InstanceProviderProps = {
children: ReactNode;
};

export const InstanceProvider: FC<InstanceProviderProps> = observer((props) => {
export const InstanceProvider = observer<React.FC<React.PropsWithChildren>>((props) => {
const { children } = props;
// store hooks
const { fetchInstanceInfo } = useInstance();
Expand Down
3 changes: 1 addition & 2 deletions apps/admin/app/(all)/store.provider.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
"use client";

import type { ReactNode } from "react";
import { createContext } from "react";
// plane admin store
import { RootStore } from "@/plane-admin/store/root.store";
Expand All @@ -24,7 +23,7 @@ function initializeStore(initialData = {}) {
}

export type StoreProviderProps = {
children: ReactNode;
children: React.ReactNode;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
initialState?: any;
};
Expand Down
7 changes: 1 addition & 6 deletions apps/admin/app/(all)/user.provider.tsx
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
"use client";

import type { FC, ReactNode } from "react";
import { useEffect } from "react";
import { observer } from "mobx-react";
import useSWR from "swr";
// hooks
import { useInstance, useTheme, useUser } from "@/hooks/store";

interface IUserProvider {
children: ReactNode;
}

export const UserProvider: FC<IUserProvider> = observer(({ children }) => {
export const UserProvider = observer<React.FC<React.PropsWithChildren>>(({ children }) => {
// hooks
const { isSidebarCollapsed, toggleSidebar } = useTheme();
const { currentUser, fetchCurrentUser } = useUser();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
"use client";

import type { FC } from "react";
// helpers
import { cn } from "@plane/utils";

Expand All @@ -14,7 +13,7 @@ type Props = {
unavailable?: boolean;
};

export const AuthenticationMethodCard: FC<Props> = (props) => {
export const AuthenticationMethodCard: React.FC<Props> = (props) => {
const { name, description, icon, config, disabled = false, withBorder = true, unavailable = false } = props;

return (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
"use client";

import React from "react";
import { observer } from "mobx-react";
import Link from "next/link";
// icons
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
"use client";

import React from "react";
import { observer } from "mobx-react";
import Link from "next/link";
// icons
Expand Down
2 changes: 1 addition & 1 deletion apps/admin/core/components/common/empty-state.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { Button } from "@plane/propel/button";
type Props = {
title: string;
description?: React.ReactNode;
image?: any;
image?: string;
primaryButton?: {
icon?: any;
text: string;
Expand Down
3 changes: 1 addition & 2 deletions apps/admin/core/components/instance/setup-form.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
"use client";

import type { FC } from "react";
import { useEffect, useMemo, useState } from "react";
import { useSearchParams } from "next/navigation";
// icons
Expand Down Expand Up @@ -54,7 +53,7 @@ const defaultFromData: TFormData = {
is_telemetry_enabled: true,
};

export const InstanceSetupForm: FC = (props) => {
export const InstanceSetupForm: React.FC = (props) => {
const {} = props;
// search params
const searchParams = useSearchParams();
Expand Down
1 change: 1 addition & 0 deletions apps/admin/core/utils/public-asset.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export {};
9 changes: 8 additions & 1 deletion apps/space/.eslintrc.js → apps/space/.eslintrc.cjs
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
module.exports = {
root: true,
extends: ["@plane/eslint-config/next.js"],
ignorePatterns: [
"build/**",
"dist/**",
".vite/**",
],
rules: {
"no-duplicate-imports": "off",
"import/no-duplicates": ["error", { "prefer-inline": false }],
"import/no-duplicates": ["error", {"prefer-inline": false}],
"import/consistent-type-specifier-style": ["error", "prefer-top-level"],
"@typescript-eslint/no-import-type-side-effects": "error",
"@typescript-eslint/consistent-type-imports": [
Expand All @@ -16,3 +21,5 @@ module.exports = {
],
},
};


Loading
Loading