From 5d728234fa239166c92d670ec4f6b9ca31e46aa9 Mon Sep 17 00:00:00 2001 From: NarayanBavisetti Date: Tue, 5 Mar 2024 12:26:38 +0530 Subject: [PATCH 1/4] chore: target date none filter --- apiserver/plane/app/views/search.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apiserver/plane/app/views/search.py b/apiserver/plane/app/views/search.py index a2ed1c015ad..ba8e2e0c385 100644 --- a/apiserver/plane/app/views/search.py +++ b/apiserver/plane/app/views/search.py @@ -235,6 +235,7 @@ def get(self, request, slug, project_id): cycle = request.query_params.get("cycle", "false") module = request.query_params.get("module", False) sub_issue = request.query_params.get("sub_issue", "false") + target_date = request.query_params.get("target_date", True) issue_id = request.query_params.get("issue_id", False) @@ -273,6 +274,9 @@ def get(self, request, slug, project_id): if module: issues = issues.exclude(issue_module__module=module) + if target_date == "none": + issues = issues.filter(target_date__isnull=True) + return Response( issues.values( "name", From b5f62ef80ae94779e28c4418941f672958845fcc Mon Sep 17 00:00:00 2001 From: Anmol Singh Bhatia Date: Tue, 5 Mar 2024 19:13:47 +0530 Subject: [PATCH 2/4] chore: calendar layout add existing issue functionality added for cycle and module --- packages/types/src/projects.d.ts | 1 + .../calendar/base-calendar-root.tsx | 12 ++- .../issue-layouts/calendar/calendar.tsx | 4 + .../issue-layouts/calendar/day-tile.tsx | 4 + .../calendar/quick-add-issue-form.tsx | 101 +++++++++++++++--- .../calendar/roots/cycle-root.tsx | 14 ++- .../calendar/roots/module-root.tsx | 18 +++- .../issue-layouts/calendar/week-days.tsx | 3 + 8 files changed, 135 insertions(+), 22 deletions(-) diff --git a/packages/types/src/projects.d.ts b/packages/types/src/projects.d.ts index 86b35248289..6a8ccbf4cb6 100644 --- a/packages/types/src/projects.d.ts +++ b/packages/types/src/projects.d.ts @@ -127,6 +127,7 @@ export type TProjectIssuesSearchParams = { sub_issue?: boolean; issue_id?: string; workspace_search: boolean; + target_date?: string; }; export interface ISearchIssueResponse { diff --git a/web/components/issues/issue-layouts/calendar/base-calendar-root.tsx b/web/components/issues/issue-layouts/calendar/base-calendar-root.tsx index 43f62e5bee4..f5a933377a3 100644 --- a/web/components/issues/issue-layouts/calendar/base-calendar-root.tsx +++ b/web/components/issues/issue-layouts/calendar/base-calendar-root.tsx @@ -29,12 +29,21 @@ interface IBaseCalendarRoot { [EIssueActions.ARCHIVE]?: (issue: TIssue) => Promise; [EIssueActions.RESTORE]?: (issue: TIssue) => Promise; }; + addIssuesToView?: (issueIds: string[]) => Promise; viewId?: string; isCompletedCycle?: boolean; } export const BaseCalendarRoot = observer((props: IBaseCalendarRoot) => { - const { issueStore, issuesFilterStore, QuickActions, issueActions, viewId, isCompletedCycle = false } = props; + const { + issueStore, + issuesFilterStore, + QuickActions, + issueActions, + addIssuesToView, + viewId, + isCompletedCycle = false, + } = props; // router const router = useRouter(); @@ -129,6 +138,7 @@ export const BaseCalendarRoot = observer((props: IBaseCalendarRoot) => { readOnly={!isEditingAllowed || isCompletedCycle} /> )} + addIssuesToView={addIssuesToView} quickAddCallback={issueStore.quickAddIssue} viewId={viewId} readOnly={!isEditingAllowed || isCompletedCycle} diff --git a/web/components/issues/issue-layouts/calendar/calendar.tsx b/web/components/issues/issue-layouts/calendar/calendar.tsx index badb849fb87..437c5c3a3da 100644 --- a/web/components/issues/issue-layouts/calendar/calendar.tsx +++ b/web/components/issues/issue-layouts/calendar/calendar.tsx @@ -30,6 +30,7 @@ type Props = { data: TIssue, viewId?: string ) => Promise; + addIssuesToView?: (issueIds: string[]) => Promise; viewId?: string; readOnly?: boolean; }; @@ -43,6 +44,7 @@ export const CalendarChart: React.FC = observer((props) => { showWeekends, quickActions, quickAddCallback, + addIssuesToView, viewId, readOnly = false, } = props; @@ -90,6 +92,7 @@ export const CalendarChart: React.FC = observer((props) => { disableIssueCreation={!enableIssueCreation || !isEditingAllowed} quickActions={quickActions} quickAddCallback={quickAddCallback} + addIssuesToView={addIssuesToView} viewId={viewId} readOnly={readOnly} /> @@ -106,6 +109,7 @@ export const CalendarChart: React.FC = observer((props) => { disableIssueCreation={!enableIssueCreation || !isEditingAllowed} quickActions={quickActions} quickAddCallback={quickAddCallback} + addIssuesToView={addIssuesToView} viewId={viewId} readOnly={readOnly} /> diff --git a/web/components/issues/issue-layouts/calendar/day-tile.tsx b/web/components/issues/issue-layouts/calendar/day-tile.tsx index f92365a58a7..5596426c6a8 100644 --- a/web/components/issues/issue-layouts/calendar/day-tile.tsx +++ b/web/components/issues/issue-layouts/calendar/day-tile.tsx @@ -7,6 +7,7 @@ import { CalendarIssueBlocks, ICalendarDate, CalendarQuickAddIssueForm } from "c import { renderFormattedPayloadDate } from "helpers/date-time.helper"; // constants import { MONTHS_LIST } from "constants/calendar"; +// types import { TGroupedIssues, TIssue, TIssueMap } from "@plane/types"; import { ICycleIssuesFilter } from "store/issue/cycle"; import { IModuleIssuesFilter } from "store/issue/module"; @@ -27,6 +28,7 @@ type Props = { data: TIssue, viewId?: string ) => Promise; + addIssuesToView?: (issueIds: string[]) => Promise; viewId?: string; readOnly?: boolean; }; @@ -41,6 +43,7 @@ export const CalendarDayTile: React.FC = observer((props) => { enableQuickIssueCreate, disableIssueCreation, quickAddCallback, + addIssuesToView, viewId, readOnly = false, } = props; @@ -112,6 +115,7 @@ export const CalendarDayTile: React.FC = observer((props) => { target_date: renderFormattedPayloadDate(date.date) ?? undefined, }} quickAddCallback={quickAddCallback} + addIssuesToView={addIssuesToView} viewId={viewId} onOpen={() => setShowAllIssues(true)} /> diff --git a/web/components/issues/issue-layouts/calendar/quick-add-issue-form.tsx b/web/components/issues/issue-layouts/calendar/quick-add-issue-form.tsx index 6db9323facc..342b9e1e6ef 100644 --- a/web/components/issues/issue-layouts/calendar/quick-add-issue-form.tsx +++ b/web/components/issues/issue-layouts/calendar/quick-add-issue-form.tsx @@ -2,8 +2,11 @@ import { useEffect, useRef, useState } from "react"; import { useRouter } from "next/router"; import { useForm } from "react-hook-form"; import { observer } from "mobx-react-lite"; +// components +import { ExistingIssuesListModal } from "components/core"; +import { CustomMenu } from "@plane/ui"; // hooks -import { useEventTracker, useProject } from "hooks/store"; +import { useEventTracker, useIssueDetail, useProject } from "hooks/store"; import useToast from "hooks/use-toast"; import useKeypress from "hooks/use-keypress"; import useOutsideClickDetector from "hooks/use-outside-click-detector"; @@ -12,9 +15,11 @@ import { createIssuePayload } from "helpers/issue.helper"; // icons import { PlusIcon } from "lucide-react"; // types -import { TIssue } from "@plane/types"; +import { ISearchIssueResponse, TIssue } from "@plane/types"; // constants import { ISSUE_CREATED } from "constants/event-tracker"; +// helper +import { cn } from "helpers/common.helper"; type Props = { formKey: keyof TIssue; @@ -27,6 +32,7 @@ type Props = { data: TIssue, viewId?: string ) => Promise; + addIssuesToView?: (issueIds: string[]) => Promise; viewId?: string; onOpen?: () => void; }; @@ -59,23 +65,28 @@ const Inputs = (props: any) => { }; export const CalendarQuickAddIssueForm: React.FC = observer((props) => { - const { formKey, prePopulatedData, quickAddCallback, viewId, onOpen } = props; + const { formKey, prePopulatedData, quickAddCallback, addIssuesToView, viewId, onOpen } = props; // router const router = useRouter(); - const { workspaceSlug, projectId } = router.query; + const { workspaceSlug, projectId, moduleId } = router.query; // store hooks const { getProjectById } = useProject(); const { captureIssueEvent } = useEventTracker(); + const { updateIssue } = useIssueDetail(); // refs const ref = useRef(null); // states const [isOpen, setIsOpen] = useState(false); + const [isMenuOpen, setIsMenuOpen] = useState(false); + const [isExistingIssueModalOpen, setIsExistingIssueModalOpen] = useState(false); // toast alert const { setToastAlert } = useToast(); - // derived values const projectDetail = projectId ? getProjectById(projectId.toString()) : null; + const ExistingIssuesListModalPayload = moduleId + ? { module: moduleId.toString(), target_date: "none" } + : { cycle: true, target_date: "none" }; const { reset, @@ -156,13 +167,50 @@ export const CalendarQuickAddIssueForm: React.FC = observer((props) => { } }; - const handleOpen = () => { + const handleAddIssuesToView = async (data: ISearchIssueResponse[]) => { + if (!workspaceSlug || !projectId) return; + + const issueIds = data.map((i) => i.id); + + try { + // To handle all updates in parallel + await Promise.all( + data.map((issue) => + updateIssue(workspaceSlug.toString(), projectId.toString(), issue.id, prePopulatedData ?? {}) + ) + ); + if (addIssuesToView) { + await addIssuesToView(issueIds); + } + } catch (error) { + setToastAlert({ + type: "error", + title: "Error!", + message: "Something went wrong. Please try again.", + }); + } + }; + + const handleNewIssue = () => { setIsOpen(true); if (onOpen) onOpen(); }; + const handleExistingIssue = () => { + setIsExistingIssueModalOpen(true); + }; return ( <> + {workspaceSlug && projectId && ( + setIsExistingIssueModalOpen(false)} + searchParams={ExistingIssuesListModalPayload} + handleOnSubmit={handleAddIssuesToView} + /> + )} {isOpen && (
= observer((props) => { )} {!isOpen && ( -
- +
+ {addIssuesToView ? ( + setIsMenuOpen(true)} + onMenuClose={() => setIsMenuOpen(false)} + className="w-full" + customButtonClassName="w-full" + customButton={ +
+ + New Issue +
+ } + > + New Issue + Add existing issue +
+ ) : ( + + )}
)} diff --git a/web/components/issues/issue-layouts/calendar/roots/cycle-root.tsx b/web/components/issues/issue-layouts/calendar/roots/cycle-root.tsx index 4daf68b9f5f..a1f9f2e3cdf 100644 --- a/web/components/issues/issue-layouts/calendar/roots/cycle-root.tsx +++ b/web/components/issues/issue-layouts/calendar/roots/cycle-root.tsx @@ -1,15 +1,16 @@ +import { useCallback, useMemo } from "react"; import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; //hooks import { useCycle, useIssues } from "hooks/store"; // components +import { BaseCalendarRoot } from "../base-calendar-root"; import { CycleIssueQuickActions } from "components/issues"; // types import { TIssue } from "@plane/types"; import { EIssueActions } from "../../types"; -import { BaseCalendarRoot } from "../base-calendar-root"; +// constants import { EIssuesStoreType } from "constants/issue"; -import { useMemo } from "react"; export const CycleCalendarLayout: React.FC = observer(() => { const { issues, issuesFilter } = useIssues(EIssuesStoreType.CYCLE); @@ -46,11 +47,20 @@ export const CycleCalendarLayout: React.FC = observer(() => { const isCompletedCycle = cycleId && currentProjectCompletedCycleIds ? currentProjectCompletedCycleIds.includes(cycleId.toString()) : false; + const addIssuesToView = useCallback( + (issueIds: string[]) => { + if (!workspaceSlug || !projectId || !cycleId) throw new Error(); + return issues.addIssueToCycle(workspaceSlug.toString(), projectId.toString(), cycleId.toString(), issueIds); + }, + [issues?.addIssueToCycle, workspaceSlug, projectId, cycleId] + ); + return ( { const { issues, issuesFilter } = useIssues(EIssuesStoreType.MODULE); const router = useRouter(); - const { workspaceSlug, moduleId } = router.query as { + const { workspaceSlug, projectId, moduleId } = router.query as { workspaceSlug: string; projectId: string; moduleId: string; @@ -42,12 +43,21 @@ export const ModuleCalendarLayout: React.FC = observer(() => { [issues, workspaceSlug, moduleId] ); + const addIssuesToView = useCallback( + (issueIds: string[]) => { + if (!workspaceSlug || !projectId || !moduleId) throw new Error(); + return issues.addIssuesToModule(workspaceSlug.toString(), projectId.toString(), moduleId.toString(), issueIds); + }, + [issues?.addIssuesToModule, workspaceSlug, projectId, moduleId] + ); + return ( ); diff --git a/web/components/issues/issue-layouts/calendar/week-days.tsx b/web/components/issues/issue-layouts/calendar/week-days.tsx index 5a640a56695..96b40181ccb 100644 --- a/web/components/issues/issue-layouts/calendar/week-days.tsx +++ b/web/components/issues/issue-layouts/calendar/week-days.tsx @@ -25,6 +25,7 @@ type Props = { data: TIssue, viewId?: string ) => Promise; + addIssuesToView?: (issueIds: string[]) => Promise; viewId?: string; readOnly?: boolean; }; @@ -39,6 +40,7 @@ export const CalendarWeekDays: React.FC = observer((props) => { enableQuickIssueCreate, disableIssueCreation, quickAddCallback, + addIssuesToView, viewId, readOnly = false, } = props; @@ -68,6 +70,7 @@ export const CalendarWeekDays: React.FC = observer((props) => { enableQuickIssueCreate={enableQuickIssueCreate} disableIssueCreation={disableIssueCreation} quickAddCallback={quickAddCallback} + addIssuesToView={addIssuesToView} viewId={viewId} readOnly={readOnly} /> From addbf18c0003323625fd8abfaf7876003a5fda4f Mon Sep 17 00:00:00 2001 From: Aaryan Khandelwal Date: Wed, 6 Mar 2024 15:08:25 +0530 Subject: [PATCH 3/4] fix: enums export in the types package --- .../{dashboard/dashboard.d.ts => dashboard.ts} | 18 +++++++++++++----- packages/types/src/dashboard/enums.ts | 8 -------- packages/types/src/dashboard/index.ts | 2 -- packages/types/src/index.d.ts | 16 +++++++--------- .../dashboard/widgets/assigned-issues.tsx | 4 ++-- .../dashboard/widgets/created-issues.tsx | 4 ++-- .../widgets/dropdowns/duration-filter.tsx | 4 +--- .../widgets/issue-panels/tabs-list.tsx | 4 ++-- .../dashboard/widgets/issues-by-priority.tsx | 3 ++- .../widgets/issues-by-state-group.tsx | 9 ++------- web/constants/dashboard.ts | 11 ++++++++++- web/helpers/dashboard.helper.ts | 4 ++-- 12 files changed, 43 insertions(+), 44 deletions(-) rename packages/types/src/{dashboard/dashboard.d.ts => dashboard.ts} (91%) delete mode 100644 packages/types/src/dashboard/enums.ts delete mode 100644 packages/types/src/dashboard/index.ts diff --git a/packages/types/src/dashboard/dashboard.d.ts b/packages/types/src/dashboard.ts similarity index 91% rename from packages/types/src/dashboard/dashboard.d.ts rename to packages/types/src/dashboard.ts index d565f668867..be7d7b3be70 100644 --- a/packages/types/src/dashboard/dashboard.d.ts +++ b/packages/types/src/dashboard.ts @@ -1,8 +1,16 @@ -import { IIssueActivity, TIssuePriorities } from "../issues"; -import { TIssue } from "../issues/issue"; -import { TIssueRelationTypes } from "../issues/issue_relation"; -import { TStateGroups } from "../state"; -import { EDurationFilters } from "./enums"; +import { IIssueActivity, TIssuePriorities } from "./issues"; +import { TIssue } from "./issues/issue"; +import { TIssueRelationTypes } from "./issues/issue_relation"; +import { TStateGroups } from "./state"; + +enum EDurationFilters { + NONE = "none", + TODAY = "today", + THIS_WEEK = "this_week", + THIS_MONTH = "this_month", + THIS_YEAR = "this_year", + CUSTOM = "custom", +} export type TWidgetKeys = | "overview_stats" diff --git a/packages/types/src/dashboard/enums.ts b/packages/types/src/dashboard/enums.ts deleted file mode 100644 index 2c9efd5c35d..00000000000 --- a/packages/types/src/dashboard/enums.ts +++ /dev/null @@ -1,8 +0,0 @@ -export enum EDurationFilters { - NONE = "none", - TODAY = "today", - THIS_WEEK = "this_week", - THIS_MONTH = "this_month", - THIS_YEAR = "this_year", - CUSTOM = "custom", -} diff --git a/packages/types/src/dashboard/index.ts b/packages/types/src/dashboard/index.ts deleted file mode 100644 index dec14aea6a9..00000000000 --- a/packages/types/src/dashboard/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./dashboard"; -export * from "./enums"; diff --git a/packages/types/src/index.d.ts b/packages/types/src/index.d.ts index b1eb38a567f..8a0aee6a6d1 100644 --- a/packages/types/src/index.d.ts +++ b/packages/types/src/index.d.ts @@ -30,12 +30,10 @@ export * from "./api_token"; export * from "./instance"; export * from "./app"; -export * from "./enums"; - -export type NestedKeyOf = { - [Key in keyof ObjectType & (string | number)]: ObjectType[Key] extends object - ? ObjectType[Key] extends { pop: any; push: any } - ? `${Key}` - : `${Key}` | `${Key}.${NestedKeyOf}` - : `${Key}`; -}[keyof ObjectType & (string | number)]; +// export type NestedKeyOf = { +// [Key in keyof ObjectType & (string | number)]: ObjectType[Key] extends object +// ? ObjectType[Key] extends { pop: any; push: any } +// ? `${Key}` +// : `${Key}` | `${Key}.${NestedKeyOf}` +// : `${Key}`; +// }[keyof ObjectType & (string | number)]; diff --git a/web/components/dashboard/widgets/assigned-issues.tsx b/web/components/dashboard/widgets/assigned-issues.tsx index 407ac9ddf24..6f7a17e02f9 100644 --- a/web/components/dashboard/widgets/assigned-issues.tsx +++ b/web/components/dashboard/widgets/assigned-issues.tsx @@ -15,9 +15,9 @@ import { // helpers import { getCustomDates, getRedirectionFilters, getTabKey } from "helpers/dashboard.helper"; // types -import { EDurationFilters, TAssignedIssuesWidgetFilters, TAssignedIssuesWidgetResponse } from "@plane/types"; +import { TAssignedIssuesWidgetFilters, TAssignedIssuesWidgetResponse } from "@plane/types"; // constants -import { FILTERED_ISSUES_TABS_LIST, UNFILTERED_ISSUES_TABS_LIST } from "constants/dashboard"; +import { EDurationFilters, FILTERED_ISSUES_TABS_LIST, UNFILTERED_ISSUES_TABS_LIST } from "constants/dashboard"; const WIDGET_KEY = "assigned_issues"; diff --git a/web/components/dashboard/widgets/created-issues.tsx b/web/components/dashboard/widgets/created-issues.tsx index 23e7bee2771..5726d783708 100644 --- a/web/components/dashboard/widgets/created-issues.tsx +++ b/web/components/dashboard/widgets/created-issues.tsx @@ -15,9 +15,9 @@ import { // helpers import { getCustomDates, getRedirectionFilters, getTabKey } from "helpers/dashboard.helper"; // types -import { EDurationFilters, TCreatedIssuesWidgetFilters, TCreatedIssuesWidgetResponse } from "@plane/types"; +import { TCreatedIssuesWidgetFilters, TCreatedIssuesWidgetResponse } from "@plane/types"; // constants -import { FILTERED_ISSUES_TABS_LIST, UNFILTERED_ISSUES_TABS_LIST } from "constants/dashboard"; +import { EDurationFilters, FILTERED_ISSUES_TABS_LIST, UNFILTERED_ISSUES_TABS_LIST } from "constants/dashboard"; const WIDGET_KEY = "created_issues"; diff --git a/web/components/dashboard/widgets/dropdowns/duration-filter.tsx b/web/components/dashboard/widgets/dropdowns/duration-filter.tsx index fbdac4f00e0..a2b276c700a 100644 --- a/web/components/dashboard/widgets/dropdowns/duration-filter.tsx +++ b/web/components/dashboard/widgets/dropdowns/duration-filter.tsx @@ -6,10 +6,8 @@ import { DateFilterModal } from "components/core"; import { CustomMenu } from "@plane/ui"; // helpers import { getDurationFilterDropdownLabel } from "helpers/dashboard.helper"; -// types -import { EDurationFilters } from "@plane/types"; // constants -import { DURATION_FILTER_OPTIONS } from "constants/dashboard"; +import { DURATION_FILTER_OPTIONS, EDurationFilters } from "constants/dashboard"; type Props = { customDates?: string[]; diff --git a/web/components/dashboard/widgets/issue-panels/tabs-list.tsx b/web/components/dashboard/widgets/issue-panels/tabs-list.tsx index d18f08f2755..257f73851ae 100644 --- a/web/components/dashboard/widgets/issue-panels/tabs-list.tsx +++ b/web/components/dashboard/widgets/issue-panels/tabs-list.tsx @@ -3,9 +3,9 @@ import { Tab } from "@headlessui/react"; // helpers import { cn } from "helpers/common.helper"; // types -import { EDurationFilters, TIssuesListTypes } from "@plane/types"; +import { TIssuesListTypes } from "@plane/types"; // constants -import { FILTERED_ISSUES_TABS_LIST, UNFILTERED_ISSUES_TABS_LIST } from "constants/dashboard"; +import { EDurationFilters, FILTERED_ISSUES_TABS_LIST, UNFILTERED_ISSUES_TABS_LIST } from "constants/dashboard"; type Props = { durationFilter: EDurationFilters; diff --git a/web/components/dashboard/widgets/issues-by-priority.tsx b/web/components/dashboard/widgets/issues-by-priority.tsx index 3e9823fe4e9..a8145df735f 100644 --- a/web/components/dashboard/widgets/issues-by-priority.tsx +++ b/web/components/dashboard/widgets/issues-by-priority.tsx @@ -14,9 +14,10 @@ import { // helpers import { getCustomDates } from "helpers/dashboard.helper"; // types -import { EDurationFilters, TIssuesByPriorityWidgetFilters, TIssuesByPriorityWidgetResponse } from "@plane/types"; +import { TIssuesByPriorityWidgetFilters, TIssuesByPriorityWidgetResponse } from "@plane/types"; // constants import { IssuesByPriorityGraph } from "components/graphs"; +import { EDurationFilters } from "constants/dashboard"; const WIDGET_KEY = "issues_by_priority"; diff --git a/web/components/dashboard/widgets/issues-by-state-group.tsx b/web/components/dashboard/widgets/issues-by-state-group.tsx index b301d30f3fe..b3e5b9c4934 100644 --- a/web/components/dashboard/widgets/issues-by-state-group.tsx +++ b/web/components/dashboard/widgets/issues-by-state-group.tsx @@ -15,14 +15,9 @@ import { // helpers import { getCustomDates } from "helpers/dashboard.helper"; // types -import { - EDurationFilters, - TIssuesByStateGroupsWidgetFilters, - TIssuesByStateGroupsWidgetResponse, - TStateGroups, -} from "@plane/types"; +import { TIssuesByStateGroupsWidgetFilters, TIssuesByStateGroupsWidgetResponse, TStateGroups } from "@plane/types"; // constants -import { STATE_GROUP_GRAPH_COLORS, STATE_GROUP_GRAPH_GRADIENTS } from "constants/dashboard"; +import { EDurationFilters, STATE_GROUP_GRAPH_COLORS, STATE_GROUP_GRAPH_GRADIENTS } from "constants/dashboard"; import { STATE_GROUPS } from "constants/state"; const WIDGET_KEY = "issues_by_state_groups"; diff --git a/web/constants/dashboard.ts b/web/constants/dashboard.ts index 6ac4e78174c..4668754f239 100644 --- a/web/constants/dashboard.ts +++ b/web/constants/dashboard.ts @@ -7,7 +7,7 @@ import OverdueIssuesLight from "public/empty-state/dashboard/light/overdue-issue import CompletedIssuesDark from "public/empty-state/dashboard/dark/completed-issues.svg"; import CompletedIssuesLight from "public/empty-state/dashboard/light/completed-issues.svg"; // types -import { EDurationFilters, TIssuesListTypes, TStateGroups } from "@plane/types"; +import { TIssuesListTypes, TStateGroups } from "@plane/types"; import { Props } from "components/icons/types"; // constants import { EUserWorkspaceRoles } from "./workspace"; @@ -116,6 +116,15 @@ export const STATE_GROUP_GRAPH_COLORS: Record = { cancelled: "#E5484D", }; +export enum EDurationFilters { + NONE = "none", + TODAY = "today", + THIS_WEEK = "this_week", + THIS_MONTH = "this_month", + THIS_YEAR = "this_year", + CUSTOM = "custom", +} + // filter duration options export const DURATION_FILTER_OPTIONS: { key: EDurationFilters; diff --git a/web/helpers/dashboard.helper.ts b/web/helpers/dashboard.helper.ts index a61ec7f782a..c8c2e7746e7 100644 --- a/web/helpers/dashboard.helper.ts +++ b/web/helpers/dashboard.helper.ts @@ -2,9 +2,9 @@ import { endOfMonth, endOfWeek, endOfYear, startOfMonth, startOfWeek, startOfYea // helpers import { renderFormattedDate, renderFormattedPayloadDate } from "./date-time.helper"; // types -import { EDurationFilters, TIssuesListTypes } from "@plane/types"; +import { TIssuesListTypes } from "@plane/types"; // constants -import { DURATION_FILTER_OPTIONS } from "constants/dashboard"; +import { DURATION_FILTER_OPTIONS, EDurationFilters } from "constants/dashboard"; /** * @description returns date range based on the duration filter From 0b7614579249d4989a9637d3d83196d824a1ba7b Mon Sep 17 00:00:00 2001 From: Aaryan Khandelwal Date: Wed, 6 Mar 2024 15:14:16 +0530 Subject: [PATCH 4/4] chore: remove NestedKeyOf type --- packages/types/src/index.d.ts | 8 -------- 1 file changed, 8 deletions(-) diff --git a/packages/types/src/index.d.ts b/packages/types/src/index.d.ts index 8a0aee6a6d1..bfebd92d044 100644 --- a/packages/types/src/index.d.ts +++ b/packages/types/src/index.d.ts @@ -29,11 +29,3 @@ export * from "./auth"; export * from "./api_token"; export * from "./instance"; export * from "./app"; - -// export type NestedKeyOf = { -// [Key in keyof ObjectType & (string | number)]: ObjectType[Key] extends object -// ? ObjectType[Key] extends { pop: any; push: any } -// ? `${Key}` -// : `${Key}` | `${Key}.${NestedKeyOf}` -// : `${Key}`; -// }[keyof ObjectType & (string | number)];