diff --git a/packages/constants/src/index.ts b/packages/constants/src/index.ts index 7fedff05d78..4905055c09e 100644 --- a/packages/constants/src/index.ts +++ b/packages/constants/src/index.ts @@ -29,3 +29,4 @@ export * from "./event-tracker"; export * from "./spreadsheet"; export * from "./dashboard"; export * from "./page"; +export * from "./swr-keys"; diff --git a/packages/constants/src/swr-keys.ts b/packages/constants/src/swr-keys.ts new file mode 100644 index 00000000000..c4608ee5772 --- /dev/null +++ b/packages/constants/src/swr-keys.ts @@ -0,0 +1,7 @@ +export enum SWR_KEYS_CORE {} + +export const SWR_KEYS = { + ...SWR_KEYS_CORE, +} as const; + +export type TSWRKey = SWR_KEYS_CORE; diff --git a/packages/utils/src/common.ts b/packages/utils/src/common.ts index fff5d9d8ef9..f5c64163bde 100644 --- a/packages/utils/src/common.ts +++ b/packages/utils/src/common.ts @@ -1,6 +1,6 @@ import { clsx, type ClassValue } from "clsx"; import { twMerge } from "tailwind-merge"; - +import { TSWRKey } from "@plane/constants"; // Support email can be configured by the application export const getSupportEmail = (defaultEmail: string = ""): string => defaultEmail; @@ -39,3 +39,16 @@ export const partitionValidIds = (ids: string[], validIds: string[]): { valid: s return { valid, invalid }; }; + +/** + * Generates a unique key for SWR cache + * @param workspaceSlug - The slug of the workspace + * @param label - The label for the cache key + * @param params - The parameters for the cache key + * @returns The unique key in array format + */ +export const getSwrKey = (workspaceSlug: string, label: TSWRKey, params: string[] = []) => [ + label, + workspaceSlug, + ...params, +]; diff --git a/web/ce/components/issues/issue-detail-widgets/additional-widgets.tsx b/web/ce/components/issues/issue-detail-widgets/additional-widgets.tsx new file mode 100644 index 00000000000..04288603abc --- /dev/null +++ b/web/ce/components/issues/issue-detail-widgets/additional-widgets.tsx @@ -0,0 +1,10 @@ +import { FC } from "react"; + +export type TWorkItemAdditionalWidgets = { + workspaceSlug: string; + projectId: string; + workItemId: string; + disabled: boolean; +}; + +export const WorkItemAdditionalWidgets: FC = (props) => <>; diff --git a/web/ce/components/issues/issue-detail-widgets/index.ts b/web/ce/components/issues/issue-detail-widgets/index.ts new file mode 100644 index 00000000000..a972c50538f --- /dev/null +++ b/web/ce/components/issues/issue-detail-widgets/index.ts @@ -0,0 +1 @@ +export * from "./additional-widgets"; diff --git a/web/ce/store/issue/helpers/base-issue-store.ts b/web/ce/store/issue/helpers/base-issue-store.ts new file mode 100644 index 00000000000..b75a4916a1e --- /dev/null +++ b/web/ce/store/issue/helpers/base-issue-store.ts @@ -0,0 +1,4 @@ +import { TIssue } from "@plane/types"; +import { getIssueIds } from "@/store/issue/helpers/base-issues-utils"; + +export const workItemSortWithOrderByExtended = (array: TIssue[], key?: string) => getIssueIds(array); diff --git a/web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx b/web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx index 26ec7b6bfa7..1f3d148dc58 100644 --- a/web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx +++ b/web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx @@ -11,6 +11,7 @@ import { // hooks import { useIssueDetail } from "@/hooks/store"; // Plane-web +import { WorkItemAdditionalWidgets } from "@/plane-web/components/issues/issue-detail-widgets"; import { useTimeLineRelationOptions } from "@/plane-web/components/relations"; type Props = { @@ -68,6 +69,13 @@ export const IssueDetailWidgetCollapsibles: FC = observer((props) => { disabled={disabled} /> )} + + ); }); diff --git a/web/core/components/issues/issue-detail/sidebar.tsx b/web/core/components/issues/issue-detail/sidebar.tsx index d132b4e77ab..8e7bf151bfb 100644 --- a/web/core/components/issues/issue-detail/sidebar.tsx +++ b/web/core/components/issues/issue-detail/sidebar.tsx @@ -299,7 +299,6 @@ export const IssueDetailsSidebar: React.FC = observer((props) => { projectId={projectId} workspaceSlug={workspaceSlug} isEditable={isEditable} - isPeekView />