From 2b6e24d5268300eba6a29e2e21f2b41463dc1759 Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Tue, 10 Feb 2026 22:04:07 +0530 Subject: [PATCH] chore: merge helpers and layouts (#8624) * fix: remove constants and services * fix: formatting * chore: merge helpers and layouts * fix: workspace disbale flag handling --- .../(projects)/browse/[workItem]/page.tsx | 3 +- .../projects/(detail)/[projectId]/layout.tsx | 3 +- .../settings/projects/[projectId]/layout.tsx | 4 +- .../projects/[projectId]/members/page.tsx | 3 +- apps/web/app/(all)/[workspaceSlug]/layout.tsx | 2 +- apps/web/app/(all)/create-workspace/page.tsx | 6 +- apps/web/ce/helpers/command-palette.ts | 112 ------------------ apps/web/ce/helpers/epic-analytics.ts | 21 ---- apps/web/ce/helpers/instance.helper.ts | 13 -- apps/web/ce/helpers/issue-action-helper.ts | 28 ----- apps/web/ce/helpers/pi-chat.helper.ts | 9 -- apps/web/ce/helpers/project-settings.ts | 13 -- .../work-item-filters/project-level.ts | 26 ---- apps/web/ce/helpers/workspace.helper.ts | 8 -- apps/web/ce/layouts/project-wrapper.tsx | 26 ---- apps/web/ce/layouts/workspace-wrapper.tsx | 21 ---- .../issue-detail-widgets/sub-issues/helper.ts | 57 +-------- .../display-filters/display-properties.tsx | 9 +- .../spreadsheet/issue-column.tsx | 2 +- .../spreadsheet/spreadsheet-header-column.tsx | 2 +- .../onboarding/create-or-join-workspaces.tsx | 12 +- .../onboarding/steps/workspace/create.tsx | 9 +- .../power-k/config/creation/command.ts | 6 +- .../open-entity/workspace-settings-menu.tsx | 3 - .../filters-hoc/project-level.tsx | 8 +- .../workspace/sidebar/workspace-menu-root.tsx | 10 +- apps/web/core/hooks/use-issues-actions.tsx | 14 --- .../{ce => }/helpers/issue-filter.helper.ts | 16 --- apps/web/helpers/views.helper.ts | 1 + packages/constants/src/issue/common.ts | 4 - 30 files changed, 37 insertions(+), 414 deletions(-) delete mode 100644 apps/web/ce/helpers/command-palette.ts delete mode 100644 apps/web/ce/helpers/epic-analytics.ts delete mode 100644 apps/web/ce/helpers/instance.helper.ts delete mode 100644 apps/web/ce/helpers/issue-action-helper.ts delete mode 100644 apps/web/ce/helpers/pi-chat.helper.ts delete mode 100644 apps/web/ce/helpers/project-settings.ts delete mode 100644 apps/web/ce/helpers/work-item-filters/project-level.ts delete mode 100644 apps/web/ce/helpers/workspace.helper.ts delete mode 100644 apps/web/ce/layouts/project-wrapper.tsx delete mode 100644 apps/web/ce/layouts/workspace-wrapper.tsx rename apps/web/{ce => }/helpers/issue-filter.helper.ts (61%) diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx index 25d431d350..f2c5aea1aa 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx @@ -24,9 +24,10 @@ import { useAppTheme } from "@/hooks/store/use-app-theme"; import { useIssueDetail } from "@/hooks/store/use-issue-detail"; import { useProject } from "@/hooks/store/use-project"; import { useAppRouter } from "@/hooks/use-app-router"; +// layouts +import { ProjectAuthWrapper } from "@/layouts/auth-layout/project-wrapper"; // plane web imports import { useWorkItemProperties } from "@/plane-web/hooks/use-issue-properties"; -import { ProjectAuthWrapper } from "@/plane-web/layouts/project-wrapper"; import { WorkItemDetailRoot } from "@/plane-web/components/browse/workItem-detail"; import type { Route } from "./+types/page"; diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/layout.tsx index 2e7cc3f0eb..b6706190cd 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/layout.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/layout.tsx @@ -15,7 +15,8 @@ import { AppSidebarToggleButton } from "@/components/sidebar/sidebar-toggle-butt // hooks import { useAppTheme } from "@/hooks/store/use-app-theme"; import { useProjectNavigationPreferences } from "@/hooks/use-navigation-preferences"; -import { ProjectAuthWrapper } from "@/plane-web/layouts/project-wrapper"; +// layouts +import { ProjectAuthWrapper } from "@/layouts/auth-layout/project-wrapper"; // local imports import type { Route } from "./+types/layout"; diff --git a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/layout.tsx index 1182c4d33b..c3a6a29e67 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/layout.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/layout.tsx @@ -10,8 +10,8 @@ import { Outlet } from "react-router"; // components import { getProjectActivePath } from "@/components/settings/helper"; import { SettingsMobileNav } from "@/components/settings/mobile/nav"; -// plane web imports -import { ProjectAuthWrapper } from "@/plane-web/layouts/project-wrapper"; +// layouts +import { ProjectAuthWrapper } from "@/layouts/auth-layout/project-wrapper"; // types import type { Route } from "./+types/layout"; import { ProjectSettingsSidebarRoot } from "@/components/settings/project/sidebar"; diff --git a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/members/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/members/page.tsx index 5b2cc065af..61abee5ff2 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/members/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/members/page.tsx @@ -20,7 +20,6 @@ import { useProject } from "@/hooks/store/use-project"; import { useUserPermissions } from "@/hooks/store/user"; // plane web imports import { ProjectTeamspaceList } from "@/plane-web/components/projects/teamspaces/teamspace-list"; -import { getProjectSettingsPageLabelI18nKey } from "@/plane-web/helpers/project-settings"; // local imports import type { Route } from "./+types/page"; import { MembersProjectSettingsHeader } from "./header"; @@ -49,7 +48,7 @@ function MembersSettingsPage({ params }: Route.ComponentProps) { return ( } hugging> - + diff --git a/apps/web/app/(all)/[workspaceSlug]/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/layout.tsx index 17bb8dcbee..293688673a 100644 --- a/apps/web/app/(all)/[workspaceSlug]/layout.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/layout.tsx @@ -9,7 +9,7 @@ import { AuthenticationWrapper } from "@/lib/wrappers/authentication-wrapper"; import { WorkspaceContentWrapper } from "@/plane-web/components/workspace/content-wrapper"; import { AppRailVisibilityProvider } from "@/plane-web/hooks/app-rail"; import { GlobalModals } from "@/plane-web/components/common/modal/global"; -import { WorkspaceAuthWrapper } from "@/plane-web/layouts/workspace-wrapper"; +import { WorkspaceAuthWrapper } from "@/layouts/auth-layout/workspace-wrapper"; import type { Route } from "./+types/layout"; export default function WorkspaceLayout(props: Route.ComponentProps) { diff --git a/apps/web/app/(all)/create-workspace/page.tsx b/apps/web/app/(all)/create-workspace/page.tsx index 23b8b16fc9..cee5209c11 100644 --- a/apps/web/app/(all)/create-workspace/page.tsx +++ b/apps/web/app/(all)/create-workspace/page.tsx @@ -18,17 +18,17 @@ import WorkspaceCreationDisabled from "@/app/assets/workspace/workspace-creation import { CreateWorkspaceForm } from "@/components/workspace/create-workspace-form"; // hooks import { useUser, useUserProfile } from "@/hooks/store/user"; +import { useInstance } from "@/hooks/store/use-instance"; import { useAppRouter } from "@/hooks/use-app-router"; // wrappers import { AuthenticationWrapper } from "@/lib/wrappers/authentication-wrapper"; -// plane web helpers -import { getIsWorkspaceCreationDisabled } from "@/plane-web/helpers/instance.helper"; const CreateWorkspacePage = observer(function CreateWorkspacePage() { const { t } = useTranslation(); // router const router = useAppRouter(); // store hooks + const { config } = useInstance(); const { data: currentUser } = useUser(); const { updateUserProfile } = useUserProfile(); // states @@ -38,7 +38,7 @@ const CreateWorkspacePage = observer(function CreateWorkspacePage() { organization_size: "", }); // derived values - const isWorkspaceCreationDisabled = getIsWorkspaceCreationDisabled(); + const isWorkspaceCreationDisabled = config?.is_workspace_creation_disabled ?? false; // methods const getMailtoHref = () => { diff --git a/apps/web/ce/helpers/command-palette.ts b/apps/web/ce/helpers/command-palette.ts deleted file mode 100644 index 2d99c141e2..0000000000 --- a/apps/web/ce/helpers/command-palette.ts +++ /dev/null @@ -1,112 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -import type { TCommandPaletteActionList, TCommandPaletteShortcut, TCommandPaletteShortcutList } from "@plane/types"; -// store -import { store } from "@/lib/store-context"; - -export const getGlobalShortcutsList: () => TCommandPaletteActionList = () => { - const { toggleCreateIssueModal } = store.commandPalette; - - return { - c: { - title: "Create a new work item", - description: "Create a new work item in the current project", - action: () => { - toggleCreateIssueModal(true); - }, - }, - }; -}; - -export const getWorkspaceShortcutsList: () => TCommandPaletteActionList = () => { - const { toggleCreateProjectModal } = store.commandPalette; - - return { - p: { - title: "Create a new project", - description: "Create a new project in the current workspace", - action: () => { - toggleCreateProjectModal(true); - }, - }, - }; -}; - -export const getProjectShortcutsList: () => TCommandPaletteActionList = () => { - const { - toggleCreatePageModal, - toggleCreateModuleModal, - toggleCreateCycleModal, - toggleCreateViewModal, - toggleBulkDeleteIssueModal, - } = store.commandPalette; - - return { - d: { - title: "Create a new page", - description: "Create a new page in the current project", - action: () => { - toggleCreatePageModal({ isOpen: true }); - }, - }, - m: { - title: "Create a new module", - description: "Create a new module in the current project", - action: () => { - toggleCreateModuleModal(true); - }, - }, - q: { - title: "Create a new cycle", - description: "Create a new cycle in the current project", - action: () => { - toggleCreateCycleModal(true); - }, - }, - v: { - title: "Create a new view", - description: "Create a new view in the current project", - action: () => { - toggleCreateViewModal(true); - }, - }, - backspace: { - title: "Bulk delete work items", - description: "Bulk delete work items in the current project", - action: () => toggleBulkDeleteIssueModal(true), - }, - delete: { - title: "Bulk delete work items", - description: "Bulk delete work items in the current project", - action: () => toggleBulkDeleteIssueModal(true), - }, - }; -}; - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export const handleAdditionalKeyDownEvents = (e: KeyboardEvent) => null; - -export const getNavigationShortcutsList = (): TCommandPaletteShortcut[] => [ - { keys: "Ctrl,K", description: "Open command menu" }, -]; - -export const getCommonShortcutsList = (platform: string): TCommandPaletteShortcut[] => [ - { keys: "P", description: "Create project" }, - { keys: "C", description: "Create work item" }, - { keys: "Q", description: "Create cycle" }, - { keys: "M", description: "Create module" }, - { keys: "V", description: "Create view" }, - { keys: "D", description: "Create page" }, - { keys: "Delete", description: "Bulk delete work items" }, - { keys: "Shift,/", description: "Open shortcuts guide" }, - { - keys: platform === "MacOS" ? "Ctrl,control,C" : "Ctrl,Alt,C", - description: "Copy work item URL from the work item details page", - }, -]; - -export const getAdditionalShortcutsList = (): TCommandPaletteShortcutList[] => []; diff --git a/apps/web/ce/helpers/epic-analytics.ts b/apps/web/ce/helpers/epic-analytics.ts deleted file mode 100644 index eaf62a9e5f..0000000000 --- a/apps/web/ce/helpers/epic-analytics.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -import type { TEpicAnalyticsGroup } from "@plane/types"; - -export const updateEpicAnalytics = () => { - const updateAnalytics = ( - workspaceSlug: string, - projectId: string, - epicId: string, - data: { - incrementStateGroupCount?: TEpicAnalyticsGroup; - decrementStateGroupCount?: TEpicAnalyticsGroup; - } - ) => {}; - - return { updateAnalytics }; -}; diff --git a/apps/web/ce/helpers/instance.helper.ts b/apps/web/ce/helpers/instance.helper.ts deleted file mode 100644 index 983ff2a474..0000000000 --- a/apps/web/ce/helpers/instance.helper.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -import { store } from "@/lib/store-context"; - -export const getIsWorkspaceCreationDisabled = () => { - const instanceConfig = store.instance.config; - - return instanceConfig?.is_workspace_creation_disabled; -}; diff --git a/apps/web/ce/helpers/issue-action-helper.ts b/apps/web/ce/helpers/issue-action-helper.ts deleted file mode 100644 index 8cf56fc82e..0000000000 --- a/apps/web/ce/helpers/issue-action-helper.ts +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -import type { IssueActions } from "@/hooks/use-issues-actions"; - -export const useTeamIssueActions: () => IssueActions = () => ({ - fetchIssues: () => Promise.resolve(undefined), - fetchNextIssues: () => Promise.resolve(undefined), - removeIssue: () => Promise.resolve(undefined), - updateFilters: () => Promise.resolve(undefined), -}); - -export const useTeamViewIssueActions: () => IssueActions = () => ({ - fetchIssues: () => Promise.resolve(undefined), - fetchNextIssues: () => Promise.resolve(undefined), - removeIssue: () => Promise.resolve(undefined), - updateFilters: () => Promise.resolve(undefined), -}); - -export const useTeamProjectWorkItemsActions: () => IssueActions = () => ({ - fetchIssues: () => Promise.resolve(undefined), - fetchNextIssues: () => Promise.resolve(undefined), - removeIssue: () => Promise.resolve(undefined), - updateFilters: () => Promise.resolve(undefined), -}); diff --git a/apps/web/ce/helpers/pi-chat.helper.ts b/apps/web/ce/helpers/pi-chat.helper.ts deleted file mode 100644 index d06cc1f3bf..0000000000 --- a/apps/web/ce/helpers/pi-chat.helper.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -export const hideFloatingBot = () => {}; - -export const showFloatingBot = () => {}; diff --git a/apps/web/ce/helpers/project-settings.ts b/apps/web/ce/helpers/project-settings.ts deleted file mode 100644 index 05a3971978..0000000000 --- a/apps/web/ce/helpers/project-settings.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -/** - * @description Get the i18n key for the project settings page label - * @param _settingsKey - The key of the project settings page - * @param defaultLabelKey - The default i18n key for the project settings page label - * @returns The i18n key for the project settings page label - */ -export const getProjectSettingsPageLabelI18nKey = (_settingsKey: string, defaultLabelKey: string) => defaultLabelKey; diff --git a/apps/web/ce/helpers/work-item-filters/project-level.ts b/apps/web/ce/helpers/work-item-filters/project-level.ts deleted file mode 100644 index ffa5052fdd..0000000000 --- a/apps/web/ce/helpers/work-item-filters/project-level.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -// plane imports -import type { EIssuesStoreType } from "@plane/types"; -// plane web imports -import type { TWorkItemFiltersEntityProps } from "@/plane-web/hooks/work-item-filters/use-work-item-filters-config"; - -export type TGetAdditionalPropsForProjectLevelFiltersHOCParams = { - entityType: EIssuesStoreType; - workspaceSlug: string; - projectId: string; -}; - -export type TGetAdditionalPropsForProjectLevelFiltersHOC = ( - params: TGetAdditionalPropsForProjectLevelFiltersHOCParams -) => TWorkItemFiltersEntityProps; - -export const getAdditionalProjectLevelFiltersHOCProps: TGetAdditionalPropsForProjectLevelFiltersHOC = ({ - workspaceSlug, -}) => ({ - workspaceSlug, -}); diff --git a/apps/web/ce/helpers/workspace.helper.ts b/apps/web/ce/helpers/workspace.helper.ts deleted file mode 100644 index 6093c483d6..0000000000 --- a/apps/web/ce/helpers/workspace.helper.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -export type TRenderSettingsLink = (workspaceSlug: string, settingKey: string) => boolean; -export const shouldRenderSettingLink: TRenderSettingsLink = (workspaceSlug, settingKey) => true; diff --git a/apps/web/ce/layouts/project-wrapper.tsx b/apps/web/ce/layouts/project-wrapper.tsx deleted file mode 100644 index 0a15f6c6a5..0000000000 --- a/apps/web/ce/layouts/project-wrapper.tsx +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -import { observer } from "mobx-react"; -// layouts -import { ProjectAuthWrapper as CoreProjectAuthWrapper } from "@/layouts/auth-layout/project-wrapper"; - -export type IProjectAuthWrapper = { - workspaceSlug: string; - projectId: string; - children: React.ReactNode; -}; - -export const ProjectAuthWrapper = observer(function ProjectAuthWrapper(props: IProjectAuthWrapper) { - // props - const { workspaceSlug, projectId, children } = props; - - return ( - - {children} - - ); -}); diff --git a/apps/web/ce/layouts/workspace-wrapper.tsx b/apps/web/ce/layouts/workspace-wrapper.tsx deleted file mode 100644 index 239551949c..0000000000 --- a/apps/web/ce/layouts/workspace-wrapper.tsx +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright (c) 2023-present Plane Software, Inc. and contributors - * SPDX-License-Identifier: AGPL-3.0-only - * See the LICENSE file for details. - */ - -import type { FC } from "react"; -import { observer } from "mobx-react"; -// layouts -import { WorkspaceAuthWrapper as CoreWorkspaceAuthWrapper } from "@/layouts/auth-layout/workspace-wrapper"; - -export type IWorkspaceAuthWrapper = { - children: React.ReactNode; -}; - -export const WorkspaceAuthWrapper = observer(function WorkspaceAuthWrapper(props: IWorkspaceAuthWrapper) { - // props - const { children } = props; - - return {children}; -}); diff --git a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/helper.ts b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/helper.ts index 35f941e89a..8cf524ed9a 100644 --- a/apps/web/core/components/issues/issue-detail-widgets/sub-issues/helper.ts +++ b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/helper.ts @@ -5,7 +5,6 @@ */ import { useMemo } from "react"; -import { useParams } from "next/navigation"; // plane imports import { useTranslation } from "@plane/i18n"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; @@ -14,18 +13,12 @@ import { EIssueServiceType } from "@plane/types"; import { copyUrlToClipboard } from "@plane/utils"; // hooks import { useIssueDetail } from "@/hooks/store/use-issue-detail"; -import { useProjectState } from "@/hooks/store/use-project-state"; -// plane web helpers -import { updateEpicAnalytics } from "@/plane-web/helpers/epic-analytics"; export const useSubIssueOperations = (issueServiceType: TIssueServiceType): TSubIssueOperations => { - // router - const { epicId: epicIdParam } = useParams(); // translation const { t } = useTranslation(); // store hooks const { - issue: { getIssueById }, subIssues: { setSubIssueHelpers }, createSubIssues, fetchSubIssues, @@ -33,13 +26,6 @@ export const useSubIssueOperations = (issueServiceType: TIssueServiceType): TSub deleteSubIssue, removeSubIssue, } = useIssueDetail(issueServiceType); - const { getStateById } = useProjectState(); - const { peekIssue: epicPeekIssue } = useIssueDetail(EIssueServiceType.EPICS); - // const { updateEpicAnalytics } = useIssueTypes(); - const { updateAnalytics } = updateEpicAnalytics(); - - // derived values - const epicId = epicIdParam || epicPeekIssue?.issueId; const subIssueOperations: TSubIssueOperations = useMemo( () => ({ @@ -110,30 +96,6 @@ export const useSubIssueOperations = (issueServiceType: TIssueServiceType): TSub try { setSubIssueHelpers(parentIssueId, "issue_loader", issueId); await updateSubIssue(workspaceSlug, projectId, parentIssueId, issueId, issueData, oldIssue, fromModal); - - if (issueServiceType === EIssueServiceType.EPICS) { - const oldState = getStateById(oldIssue?.state_id)?.group; - - if (oldState && oldIssue && issueData && epicId) { - // Check if parent_id is changed if yes then decrement the epic analytics count - if (issueData.parent_id && oldIssue?.parent_id && issueData.parent_id !== oldIssue?.parent_id) { - updateAnalytics(workspaceSlug, projectId, epicId.toString(), { - decrementStateGroupCount: `${oldState}_issues`, - }); - } - - // Check if state_id is changed if yes then decrement the old state group count and increment the new state group count - if (issueData.state_id) { - const newState = getStateById(issueData.state_id)?.group; - if (oldState && newState && oldState !== newState) { - updateAnalytics(workspaceSlug, projectId, epicId.toString(), { - decrementStateGroupCount: `${oldState}_issues`, - incrementStateGroupCount: `${newState}_issues`, - }); - } - } - } - } setToast({ type: TOAST_TYPE.SUCCESS, title: t("toast.success"), @@ -152,16 +114,6 @@ export const useSubIssueOperations = (issueServiceType: TIssueServiceType): TSub try { setSubIssueHelpers(parentIssueId, "issue_loader", issueId); await removeSubIssue(workspaceSlug, projectId, parentIssueId, issueId); - if (issueServiceType === EIssueServiceType.EPICS) { - const issueBeforeRemoval = getIssueById(issueId); - const oldState = getStateById(issueBeforeRemoval?.state_id)?.group; - - if (epicId && oldState) { - updateAnalytics(workspaceSlug, projectId, epicId.toString(), { - decrementStateGroupCount: `${oldState}_issues`, - }); - } - } setToast({ type: TOAST_TYPE.SUCCESS, title: t("toast.success"), @@ -189,9 +141,8 @@ export const useSubIssueOperations = (issueServiceType: TIssueServiceType): TSub deleteSubIssue: async (workspaceSlug, projectId, parentIssueId, issueId) => { try { setSubIssueHelpers(parentIssueId, "issue_loader", issueId); - return deleteSubIssue(workspaceSlug, projectId, parentIssueId, issueId).then(() => { - setSubIssueHelpers(parentIssueId, "issue_loader", issueId); - }); + await deleteSubIssue(workspaceSlug, projectId, parentIssueId, issueId); + setSubIssueHelpers(parentIssueId, "issue_loader", issueId); } catch (_error) { setToast({ type: TOAST_TYPE.ERROR, @@ -209,15 +160,11 @@ export const useSubIssueOperations = (issueServiceType: TIssueServiceType): TSub [ createSubIssues, deleteSubIssue, - epicId, fetchSubIssues, - getIssueById, - getStateById, issueServiceType, removeSubIssue, setSubIssueHelpers, t, - updateAnalytics, updateSubIssue, ] ); diff --git a/apps/web/core/components/issues/issue-layouts/filters/header/display-filters/display-properties.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/display-filters/display-properties.tsx index 31c3635ee8..3eeccb58be 100644 --- a/apps/web/core/components/issues/issue-layouts/filters/header/display-filters/display-properties.tsx +++ b/apps/web/core/components/issues/issue-layouts/filters/header/display-filters/display-properties.tsx @@ -6,15 +6,12 @@ import React from "react"; import { observer } from "mobx-react"; -import { useParams } from "next/navigation"; // plane constants import { ISSUE_DISPLAY_PROPERTIES } from "@plane/constants"; // plane i18n import { useTranslation } from "@plane/i18n"; // types import type { IIssueDisplayProperties } from "@plane/types"; -// plane web helpers -import { shouldRenderDisplayProperty } from "@/plane-web/helpers/issue-filter.helper"; // components import { FilterHeader } from "../helpers/filter-header"; @@ -38,12 +35,8 @@ export const FilterDisplayProperties = observer(function FilterDisplayProperties } = props; // hooks const { t } = useTranslation(); - // router - const { workspaceSlug, projectId: routerProjectId } = useParams(); // states const [previewEnabled, setPreviewEnabled] = React.useState(true); - // derived values - const projectId = routerProjectId ? routerProjectId?.toString() : undefined; // Filter out "cycle" and "module" keys if cycleViewDisabled or moduleViewDisabled is true // Also filter out display properties that should not be rendered @@ -55,7 +48,7 @@ export const FilterDisplayProperties = observer(function FilterDisplayProperties case "modules": return !moduleViewDisabled; default: - return shouldRenderDisplayProperty({ workspaceSlug: workspaceSlug?.toString(), projectId, key: property.key }); + return true; } }).map((property) => { if (isEpic && property.key === "sub_issue_count") { diff --git a/apps/web/core/components/issues/issue-layouts/spreadsheet/issue-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/issue-column.tsx index c639103967..ad0adf91be 100644 --- a/apps/web/core/components/issues/issue-layouts/spreadsheet/issue-column.tsx +++ b/apps/web/core/components/issues/issue-layouts/spreadsheet/issue-column.tsx @@ -10,7 +10,7 @@ import { observer } from "mobx-react"; import type { IIssueDisplayProperties, TIssue } from "@plane/types"; // components import { SPREADSHEET_COLUMNS } from "@/plane-web/components/issues/issue-layouts/utils"; -import { shouldRenderColumn } from "@/plane-web/helpers/issue-filter.helper"; +import { shouldRenderColumn } from "@/helpers/issue-filter.helper"; import { WithDisplayPropertiesHOC } from "../properties/with-display-properties-HOC"; type Props = { diff --git a/apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header-column.tsx index be12503cfc..5d174a61d1 100644 --- a/apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header-column.tsx +++ b/apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header-column.tsx @@ -9,7 +9,7 @@ import { useRef } from "react"; import { observer } from "mobx-react"; import type { IIssueDisplayFilterOptions, IIssueDisplayProperties } from "@plane/types"; //components -import { shouldRenderColumn } from "@/plane-web/helpers/issue-filter.helper"; +import { shouldRenderColumn } from "@/helpers/issue-filter.helper"; import { WithDisplayPropertiesHOC } from "../properties/with-display-properties-HOC"; import { HeaderColumn } from "./columns/header-column"; diff --git a/apps/web/core/components/onboarding/create-or-join-workspaces.tsx b/apps/web/core/components/onboarding/create-or-join-workspaces.tsx index 0c94f9fd80..7a5728a3c5 100644 --- a/apps/web/core/components/onboarding/create-or-join-workspaces.tsx +++ b/apps/web/core/components/onboarding/create-or-join-workspaces.tsx @@ -4,7 +4,7 @@ * See the LICENSE file for details. */ -import React, { useEffect, useState } from "react"; +import { useEffect, useState } from "react"; import { observer } from "mobx-react"; import { OctagonAlert } from "lucide-react"; // plane imports @@ -13,8 +13,7 @@ import type { IWorkspaceMemberInvitation, TOnboardingSteps } from "@plane/types" import { LogoSpinner } from "@/components/common/logo-spinner"; // hooks import { useUser } from "@/hooks/store/user"; -// plane web helpers -import { getIsWorkspaceCreationDisabled } from "@/plane-web/helpers/instance.helper"; +import { useInstance } from "@/hooks/store/use-instance"; // local imports import { CreateWorkspace } from "./create-workspace"; import { Invitations } from "./invitations"; @@ -33,13 +32,14 @@ type Props = { }; export const CreateOrJoinWorkspaces = observer(function CreateOrJoinWorkspaces(props: Props) { - const { invitations, totalSteps, stepChange, finishOnboarding } = props; + const { invitations, stepChange, finishOnboarding } = props; // states const [currentView, setCurrentView] = useState(null); // store hooks const { data: user } = useUser(); + const { config } = useInstance(); // derived values - const isWorkspaceCreationEnabled = getIsWorkspaceCreationDisabled() === false; + const isWorkspaceCreationDisabled = config?.is_workspace_creation_disabled ?? false; useEffect(() => { if (invitations.length > 0) { @@ -66,7 +66,7 @@ export const CreateOrJoinWorkspaces = observer(function CreateOrJoinWorkspaces(p handleCurrentViewChange={() => setCurrentView(ECreateOrJoinWorkspaceViews.WORKSPACE_CREATE)} /> ) : currentView === ECreateOrJoinWorkspaceViews.WORKSPACE_CREATE ? ( - isWorkspaceCreationEnabled ? ( + !isWorkspaceCreationDisabled ? ( diff --git a/apps/web/core/components/power-k/config/creation/command.ts b/apps/web/core/components/power-k/config/creation/command.ts index fb1ff07d93..f63baa929a 100644 --- a/apps/web/core/components/power-k/config/creation/command.ts +++ b/apps/web/core/components/power-k/config/creation/command.ts @@ -15,8 +15,7 @@ import type { TPowerKCommandConfig, TPowerKContext } from "@/components/power-k/ import { useCommandPalette } from "@/hooks/store/use-command-palette"; import { useProject } from "@/hooks/store/use-project"; import { useUser } from "@/hooks/store/user"; -// plane web imports -import { getIsWorkspaceCreationDisabled } from "@/plane-web/helpers/instance.helper"; +import { useInstance } from "@/hooks/store/use-instance"; export type TPowerKCreationCommandKeys = | "create_work_item" @@ -32,6 +31,7 @@ export type TPowerKCreationCommandKeys = */ export const usePowerKCreationCommandsRecord = (): Record => { // store + const { config } = useInstance(); const { canPerformAnyCreateAction, permission: { allowPermissions }, @@ -58,7 +58,7 @@ export const usePowerKCreationCommandsRecord = (): Record ctx.params.projectId ? getPartialProjectById(ctx.params.projectId.toString()) : undefined; diff --git a/apps/web/core/components/power-k/ui/pages/open-entity/workspace-settings-menu.tsx b/apps/web/core/components/power-k/ui/pages/open-entity/workspace-settings-menu.tsx index 6520ed2f80..7dc8805b95 100644 --- a/apps/web/core/components/power-k/ui/pages/open-entity/workspace-settings-menu.tsx +++ b/apps/web/core/components/power-k/ui/pages/open-entity/workspace-settings-menu.tsx @@ -14,8 +14,6 @@ import { PowerKSettingsMenu } from "@/components/power-k/menus/settings"; import { WORKSPACE_SETTINGS_ICONS } from "@/components/settings/workspace/sidebar/item-icon"; // hooks import { useUserPermissions } from "@/hooks/store/user"; -// plane web imports -import { shouldRenderSettingLink } from "@/plane-web/helpers/workspace.helper"; type Props = { context: TPowerKContext; @@ -32,7 +30,6 @@ export const PowerKOpenWorkspaceSettingsMenu = observer(function PowerKOpenWorks const settingsList = Object.values(WORKSPACE_SETTINGS).filter( (setting) => context.params.workspaceSlug && - shouldRenderSettingLink(context.params.workspaceSlug?.toString(), setting.key) && allowPermissions(setting.access, EUserPermissionsLevel.WORKSPACE, context.params.workspaceSlug?.toString()) ); const settingsListWithIcons = settingsList.map((setting) => ({ diff --git a/apps/web/core/components/work-item-filters/filters-hoc/project-level.tsx b/apps/web/core/components/work-item-filters/filters-hoc/project-level.tsx index 9e9b7c226c..5e583aaee7 100644 --- a/apps/web/core/components/work-item-filters/filters-hoc/project-level.tsx +++ b/apps/web/core/components/work-item-filters/filters-hoc/project-level.tsx @@ -24,8 +24,6 @@ import { useProject } from "@/hooks/store/use-project"; import { useProjectState } from "@/hooks/store/use-project-state"; import { useProjectView } from "@/hooks/store/use-project-view"; import { useUser, useUserPermissions } from "@/hooks/store/user"; -// plane web imports -import { getAdditionalProjectLevelFiltersHOCProps } from "@/plane-web/helpers/work-item-filters/project-level"; // local imports import { WorkItemFiltersHOC } from "./base"; import type { TEnableSaveViewProps, TEnableUpdateViewProps, TSharedWorkItemFiltersHOCProps } from "./shared"; @@ -203,11 +201,7 @@ export const ProjectLevelWorkItemFiltersHOC = observer(function ProjectLevelWork />
- {isWorkspaceCreationEnabled && ( + {!isWorkspaceCreationDisabled && ( { - const teamIssueActions = useTeamIssueActions(); const projectIssueActions = useProjectIssueActions(); const projectEpicsActions = useProjectEpicsActions(); const cycleIssueActions = useCycleIssueActions(); const moduleIssueActions = useModuleIssueActions(); - const teamViewIssueActions = useTeamViewIssueActions(); const projectViewIssueActions = useProjectViewIssueActions(); const globalIssueActions = useGlobalIssueActions(); const profileIssueActions = useProfileIssueActions(); const archivedIssueActions = useArchivedIssueActions(); const workspaceDraftIssueActions = useWorkspaceDraftIssueActions(); - const teamProjectWorkItemsActions = useTeamProjectWorkItemsActions(); switch (storeType) { - case EIssuesStoreType.TEAM_VIEW: - return teamViewIssueActions; case EIssuesStoreType.PROJECT_VIEW: return projectViewIssueActions; case EIssuesStoreType.PROFILE: return profileIssueActions; - case EIssuesStoreType.TEAM: - return teamIssueActions; case EIssuesStoreType.ARCHIVED: return archivedIssueActions; case EIssuesStoreType.CYCLE: @@ -85,8 +73,6 @@ export const useIssuesActions = (storeType: EIssuesStoreType): IssueActions => { return workspaceDraftIssueActions; case EIssuesStoreType.EPIC: return projectEpicsActions; - case EIssuesStoreType.TEAM_PROJECT_WORK_ITEMS: - return teamProjectWorkItemsActions; case EIssuesStoreType.PROJECT: default: return projectIssueActions; diff --git a/apps/web/ce/helpers/issue-filter.helper.ts b/apps/web/helpers/issue-filter.helper.ts similarity index 61% rename from apps/web/ce/helpers/issue-filter.helper.ts rename to apps/web/helpers/issue-filter.helper.ts index 5ca0d75b61..7e2fff4f7a 100644 --- a/apps/web/ce/helpers/issue-filter.helper.ts +++ b/apps/web/helpers/issue-filter.helper.ts @@ -9,22 +9,6 @@ import type { IIssueDisplayProperties } from "@plane/types"; // lib import { store } from "@/lib/store-context"; -export type TShouldRenderDisplayProperty = { - workspaceSlug: string; - projectId: string | undefined; - key: keyof IIssueDisplayProperties; -}; - -export const shouldRenderDisplayProperty = (props: TShouldRenderDisplayProperty) => { - const { key } = props; - switch (key) { - case "issue_type": - return false; - default: - return true; - } -}; - export const shouldRenderColumn = (key: keyof IIssueDisplayProperties): boolean => { const isEstimateEnabled: boolean = store.projectRoot.project.currentProjectDetails?.estimate !== null; switch (key) { diff --git a/apps/web/helpers/views.helper.ts b/apps/web/helpers/views.helper.ts index 3973472b95..5b91810c9b 100644 --- a/apps/web/helpers/views.helper.ts +++ b/apps/web/helpers/views.helper.ts @@ -15,6 +15,7 @@ const VIEW_ACCESS_ICONS = { [EViewAccess.PUBLIC]: GlobeIcon, [EViewAccess.PRIVATE]: LockIcon, }; + export const VIEW_ACCESS_SPECIFIERS: { key: EViewAccess; i18n_label: string; diff --git a/packages/constants/src/issue/common.ts b/packages/constants/src/issue/common.ts index 1edf582fd4..fe56c44f81 100644 --- a/packages/constants/src/issue/common.ts +++ b/packages/constants/src/issue/common.ts @@ -175,10 +175,6 @@ export const ISSUE_DISPLAY_PROPERTIES: { key: "key", titleTranslationKey: "issue.display.properties.id", }, - { - key: "issue_type", - titleTranslationKey: "issue.display.properties.issue_type", - }, { key: "assignee", titleTranslationKey: "common.assignee",