diff --git a/packages/constants/src/inbox.ts b/packages/constants/src/inbox.ts new file mode 100644 index 00000000000..94069b7482f --- /dev/null +++ b/packages/constants/src/inbox.ts @@ -0,0 +1,113 @@ +import { TInboxDuplicateIssueDetails, TIssue } from "@plane/types"; + +export enum EInboxIssueCurrentTab { + OPEN = "open", + CLOSED = "closed", +} + +export enum EInboxIssueStatus { + PENDING = -2, + DECLINED = -1, + SNOOZED = 0, + ACCEPTED = 1, + DUPLICATE = 2, +} + +export type TInboxIssueCurrentTab = EInboxIssueCurrentTab; +export type TInboxIssueStatus = EInboxIssueStatus; +export type TInboxIssue = { + id: string; + status: TInboxIssueStatus; + snoozed_till: Date | null; + duplicate_to: string | undefined; + source: string; + issue: TIssue; + created_by: string; + duplicate_issue_detail: TInboxDuplicateIssueDetails | undefined; +}; + +export const INBOX_STATUS: { + key: string; + status: TInboxIssueStatus; + i18n_title: string; + i18n_description: () => string; + textColor: (snoozeDatePassed: boolean) => string; + bgColor: (snoozeDatePassed: boolean) => string; +}[] = [ + { + key: "pending", + i18n_title: "inbox_issue.status.pending.title", + status: EInboxIssueStatus.PENDING, + i18n_description: () => `inbox_issue.status.pending.description`, + textColor: (snoozeDatePassed: boolean = false) => + snoozeDatePassed ? "" : "text-[#AB6400]", + bgColor: (snoozeDatePassed: boolean = false) => + snoozeDatePassed ? "" : "bg-[#FFF7C2]", + }, + { + key: "declined", + i18n_title: "inbox_issue.status.declined.title", + status: EInboxIssueStatus.DECLINED, + i18n_description: () => `inbox_issue.status.declined.description`, + textColor: (snoozeDatePassed: boolean = false) => + snoozeDatePassed ? "" : "text-[#CE2C31]", + bgColor: (snoozeDatePassed: boolean = false) => + snoozeDatePassed ? "" : "bg-[#FEEBEC]", + }, + { + key: "snoozed", + i18n_title: "inbox_issue.status.snoozed.title", + status: EInboxIssueStatus.SNOOZED, + i18n_description: () => `inbox_issue.status.snoozed.description`, + textColor: (snoozeDatePassed: boolean = false) => + snoozeDatePassed ? "text-red-500" : "text-custom-text-400", + bgColor: (snoozeDatePassed: boolean = false) => + snoozeDatePassed ? "bg-red-500/10" : "bg-[#E0E1E6]", + }, + { + key: "accepted", + i18n_title: "inbox_issue.status.accepted.title", + status: EInboxIssueStatus.ACCEPTED, + i18n_description: () => `inbox_issue.status.accepted.description`, + textColor: (snoozeDatePassed: boolean = false) => + snoozeDatePassed ? "" : "text-[#3E9B4F]", + bgColor: (snoozeDatePassed: boolean = false) => + snoozeDatePassed ? "" : "bg-[#E9F6E9]", + }, + { + key: "duplicate", + i18n_title: "inbox_issue.status.duplicate.title", + status: EInboxIssueStatus.DUPLICATE, + i18n_description: () => `inbox_issue.status.duplicate.description`, + textColor: (snoozeDatePassed: boolean = false) => + snoozeDatePassed ? "" : "text-custom-text-200", + bgColor: (snoozeDatePassed: boolean = false) => + snoozeDatePassed ? "" : "bg-gray-500/10", + }, +]; + +export const INBOX_ISSUE_ORDER_BY_OPTIONS = [ + { + key: "issue__created_at", + i18n_label: "inbox_issue.order_by.created_at", + }, + { + key: "issue__updated_at", + i18n_label: "inbox_issue.order_by.updated_at", + }, + { + key: "issue__sequence_id", + i18n_label: "inbox_issue.order_by.id", + }, +]; + +export const INBOX_ISSUE_SORT_BY_OPTIONS = [ + { + key: "asc", + i18n_label: "common.sort.asc", + }, + { + key: "desc", + i18n_label: "common.sort.desc", + }, +]; diff --git a/packages/constants/src/index.ts b/packages/constants/src/index.ts index 2b3964ae9fd..dff90ad2158 100644 --- a/packages/constants/src/index.ts +++ b/packages/constants/src/index.ts @@ -14,3 +14,4 @@ export * from "./swr"; export * from "./user"; export * from "./workspace"; export * from "./stickies"; +export * from "./inbox"; diff --git a/packages/i18n/src/locales/en/translations.json b/packages/i18n/src/locales/en/translations.json index 596c3093fa9..b612e445f7e 100644 --- a/packages/i18n/src/locales/en/translations.json +++ b/packages/i18n/src/locales/en/translations.json @@ -316,5 +316,43 @@ "change_parent_issue": "Change parent issue", "remove_parent_issue": "Remove parent issue", "add_parent": "Add parent", - "loading_members": "Loading members..." + "loading_members": "Loading members...", + "inbox_issue": { + "status": { + "pending": { + "title": "Pending", + "description": "Pending" + }, + "declined": { + "title": "Declined", + "description": "Declined" + }, + "snoozed": { + "title": "Snoozed", + "description": "{days, plural, one{# day} other{# days}} to go" + }, + "accepted": { + "title": "Accepted", + "description": "Accepted" + }, + "duplicate": { + "title": "Duplicate", + "description": "Duplicate" + } + }, + "source": { + "in-app": "in-app" + }, + "order_by": { + "created_at": "Created at", + "updated_at": "Updated at", + "id": "ID" + } + }, + "common": { + "sort": { + "asc": "Ascending", + "desc": "Descending" + } + } } diff --git a/packages/i18n/src/locales/es/translations.json b/packages/i18n/src/locales/es/translations.json index 9f2b98792c2..3872842b8dc 100644 --- a/packages/i18n/src/locales/es/translations.json +++ b/packages/i18n/src/locales/es/translations.json @@ -316,5 +316,43 @@ "remove_parent_issue": "Eliminar problema padre", "add_parent": "Agregar padre", "loading_members": "Cargando miembros...", - "inbox": "bandeja de entrada" + "inbox": "bandeja de entrada", + "inbox_issue": { + "status": { + "pending": { + "title": "Pendiente", + "description": "Pendiente" + }, + "declined": { + "title": "Rechazado", + "description": "Rechazado" + }, + "snoozed": { + "title": "Pospuesto", + "description": "{days, plural, one{# día} other{# días}} restantes" + }, + "accepted": { + "title": "Aceptado", + "description": "Aceptado" + }, + "duplicate": { + "title": "Duplicado", + "description": "Duplicado" + } + }, + "source": { + "in-app": "en la aplicación" + }, + "order_by": { + "created_at": "Creado el", + "updated_at": "Actualizado el", + "id": "Identificador" + } + }, + "common": { + "sort": { + "asc": "Ascendente", + "desc": "Descendente" + } + } } diff --git a/packages/i18n/src/locales/fr/translations.json b/packages/i18n/src/locales/fr/translations.json index 0eee868e174..b48fa0cfc8b 100644 --- a/packages/i18n/src/locales/fr/translations.json +++ b/packages/i18n/src/locales/fr/translations.json @@ -316,5 +316,43 @@ "remove_parent_issue": "Supprimer le problème parent", "add_parent": "Ajouter un parent", "loading_members": "Chargement des membres...", - "inbox": "Boîte de réception" + "inbox": "Boîte de réception", + "inbox_issue": { + "status": { + "pending": { + "title": "En attente", + "description": "En attente" + }, + "declined": { + "title": "Refusé", + "description": "Refusé" + }, + "snoozed": { + "title": "Reporté", + "description": "{days, plural, one{# jour} other{# jours}} restants" + }, + "accepted": { + "title": "Accepté", + "description": "Accepté" + }, + "duplicate": { + "title": "Doublon", + "description": "Doublon" + } + }, + "source": { + "in-app": "dans l'application" + }, + "order_by": { + "created_at": "Créé le", + "updated_at": "Mis à jour le", + "id": "Identifiant" + } + }, + "common": { + "sort": { + "asc": "Croissant", + "desc": "Décroissant" + } + } } diff --git a/packages/i18n/src/locales/ja/translations.json b/packages/i18n/src/locales/ja/translations.json index fa2b244cc5e..ec848c917db 100644 --- a/packages/i18n/src/locales/ja/translations.json +++ b/packages/i18n/src/locales/ja/translations.json @@ -316,5 +316,43 @@ "remove_parent_issue": "親問題を削除", "add_parent": "親問題を追加", "loading_members": "メンバーを読み込んでいます...", - "inbox": "受信箱" + "inbox": "受信箱", + "inbox_issue": { + "status": { + "pending": { + "title": "保留中", + "description": "保留中" + }, + "declined": { + "title": "却下", + "description": "却下" + }, + "snoozed": { + "title": "スヌーズ中", + "description": "残り{days}日" + }, + "accepted": { + "title": "承認済み", + "description": "承認済み" + }, + "duplicate": { + "title": "重複", + "description": "重複" + } + }, + "source": { + "in-app": "アプリ内" + }, + "order_by": { + "created_at": "作成日時", + "updated_at": "更新日時", + "id": "識別番号" + } + }, + "common": { + "sort": { + "asc": "昇順", + "desc": "降順" + } + } } diff --git a/packages/i18n/src/locales/zh-CN/translations.json b/packages/i18n/src/locales/zh-CN/translations.json index 093027c16b1..5fefacd1f57 100644 --- a/packages/i18n/src/locales/zh-CN/translations.json +++ b/packages/i18n/src/locales/zh-CN/translations.json @@ -315,5 +315,43 @@ "remove_parent_issue": "移除父问题", "add_parent": "添加父问题", "loading_members": "正在加载成员...", - "inbox": "收件箱" + "inbox": "收件箱", + "inbox_issue": { + "status": { + "pending": { + "title": "待处理", + "description": "待处理" + }, + "declined": { + "title": "已拒绝", + "description": "已拒绝" + }, + "snoozed": { + "title": "已暂停", + "description": "还剩{days}天" + }, + "accepted": { + "title": "已接受", + "description": "已接受" + }, + "duplicate": { + "title": "重复", + "description": "重复" + } + }, + "source": { + "in-app": "应用内" + }, + "order_by": { + "created_at": "创建时间", + "updated_at": "更新时间", + "id": "编号" + } + }, + "common": { + "sort": { + "asc": "升序", + "desc": "降序" + } + } } diff --git a/packages/types/src/inbox.d.ts b/packages/types/src/inbox.d.ts index 5ae6c160e80..30ad0120c81 100644 --- a/packages/types/src/inbox.d.ts +++ b/packages/types/src/inbox.d.ts @@ -2,23 +2,6 @@ import { TPaginationInfo } from "./common"; import { TIssuePriorities } from "./issues"; import { TIssue } from "./issues/base"; -enum EInboxIssueCurrentTab { - OPEN = "open", - CLOSED = "closed", -} - -enum EInboxIssueStatus { - PENDING = -2, - DECLINED = -1, - SNOOZED = 0, - ACCEPTED = 1, - DUPLICATE = 2, -} - -export type TInboxIssueCurrentTab = EInboxIssueCurrentTab; - -export type TInboxIssueStatus = EInboxIssueStatus; - // filters export type TInboxIssueFilterMemberKeys = "assignees" | "created_by"; @@ -38,10 +21,7 @@ export type TInboxIssueFilter = { // sorting filters export type TInboxIssueSortingKeys = "order_by" | "sort_by"; -export type TInboxIssueSortingOrderByKeys = - | "issue__created_at" - | "issue__updated_at" - | "issue__sequence_id"; +export type TInboxIssueSortingOrderByKeys = "issue__created_at" | "issue__updated_at" | "issue__sequence_id"; export type TInboxIssueSortingSortByKeys = "asc" | "desc"; @@ -78,17 +58,6 @@ export type TInboxDuplicateIssueDetails = { name: string; }; -export type TInboxIssue = { - id: string; - status: TInboxIssueStatus; - snoozed_till: Date | null; - duplicate_to: string | undefined; - source: string; - issue: TIssue; - created_by: string; - duplicate_issue_detail: TInboxDuplicateIssueDetails | undefined; -}; - export type TInboxIssuePaginationInfo = TPaginationInfo & { total_results: number; }; diff --git a/web/core/components/inbox/inbox-filter/applied-filters/status.tsx b/web/core/components/inbox/inbox-filter/applied-filters/status.tsx index 3232e4a5a21..257667e03df 100644 --- a/web/core/components/inbox/inbox-filter/applied-filters/status.tsx +++ b/web/core/components/inbox/inbox-filter/applied-filters/status.tsx @@ -1,16 +1,18 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { X } from "lucide-react"; -import { TInboxIssueStatus } from "@plane/types"; +import { INBOX_STATUS, TInboxIssueStatus } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; // constants import { Tag } from "@plane/ui"; -import { INBOX_STATUS } from "@/constants/inbox"; // hooks import { useProjectInbox } from "@/hooks/store"; +import { InboxStatusIcon } from "../../inbox-status-icon"; export const InboxIssueAppliedFiltersStatus: FC = observer(() => { // hooks const { inboxFilters, handleInboxIssueFilters } = useProjectInbox(); + const { t } = useTranslation(); // derived values const filteredValues = inboxFilters?.status || []; const currentOptionDetail = (status: TInboxIssueStatus) => INBOX_STATUS.find((s) => s.status === status) || undefined; @@ -28,9 +30,9 @@ export const InboxIssueAppliedFiltersStatus: FC = observer(() => { return (
- +
-
{optionDetail?.title}
+
{t(optionDetail?.i18n_title)}
{handleFilterValue(optionDetail?.status).length >= 1 && (
= observer((props) => { const { searchQuery } = props; // hooks const { currentTab, inboxFilters, handleInboxIssueFilters } = useProjectInbox(); + const { t } = useTranslation(); // states const [previewEnabled, setPreviewEnabled] = useState(true); // derived values @@ -52,8 +54,8 @@ export const FilterStatus: FC = observer((props) => { key={status.key} isChecked={filterValue?.includes(status.status) ? true : false} onClick={() => handleStatusFilterSelect(status.status)} - icon={} - title={status.title} + icon={} + title={t(status.i18n_title)} /> )) ) : ( diff --git a/web/core/components/inbox/inbox-filter/sorting/order-by.tsx b/web/core/components/inbox/inbox-filter/sorting/order-by.tsx index f1282c3c1ad..d3dabbf8633 100644 --- a/web/core/components/inbox/inbox-filter/sorting/order-by.tsx +++ b/web/core/components/inbox/inbox-filter/sorting/order-by.tsx @@ -3,9 +3,11 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { ArrowDownWideNarrow, ArrowUpWideNarrow, Check, ChevronDown } from "lucide-react"; +import { INBOX_ISSUE_ORDER_BY_OPTIONS, INBOX_ISSUE_SORT_BY_OPTIONS } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; +import { TInboxIssueSortingOrderByKeys, TInboxIssueSortingSortByKeys } from "@plane/types"; import { CustomMenu, getButtonStyling } from "@plane/ui"; // constants -import { INBOX_ISSUE_ORDER_BY_OPTIONS, INBOX_ISSUE_SORT_BY_OPTIONS } from "@/constants/inbox"; // helpers import { cn } from "@/helpers/common.helper"; // hooks @@ -14,6 +16,7 @@ import useSize from "@/hooks/use-window-size"; export const InboxIssueOrderByDropdown: FC = observer(() => { // hooks + const { t } = useTranslation(); const windowSize = useSize(); const { inboxSorting, handleInboxIssueSorting } = useProjectInbox(); const orderByDetails = @@ -31,8 +34,7 @@ export const InboxIssueOrderByDropdown: FC = observer(() => { ) : ( )} - {orderByDetails?.label || "Order By"} - + {t(orderByDetails?.i18n_label || "inbox_issue.order_by.created_at")}
); @@ -47,9 +49,9 @@ export const InboxIssueOrderByDropdown: FC = observer(() => { handleInboxIssueSorting("order_by", option.key)} + onClick={() => handleInboxIssueSorting("order_by", option.key as TInboxIssueSortingOrderByKeys)} > - {option.label} + {t(option.i18n_label)} {inboxSorting?.order_by?.includes(option.key) && } ))} @@ -58,9 +60,9 @@ export const InboxIssueOrderByDropdown: FC = observer(() => { handleInboxIssueSorting("sort_by", option.key)} + onClick={() => handleInboxIssueSorting("sort_by", option.key as TInboxIssueSortingSortByKeys)} > - {option.label} + {t(option.i18n_label)} {inboxSorting?.sort_by?.includes(option.key) && } ))} diff --git a/web/core/components/inbox/inbox-issue-status.tsx b/web/core/components/inbox/inbox-issue-status.tsx index f74693f7688..bb166a8c949 100644 --- a/web/core/components/inbox/inbox-issue-status.tsx +++ b/web/core/components/inbox/inbox-issue-status.tsx @@ -1,11 +1,14 @@ import React from "react"; import { observer } from "mobx-react"; // constants -import { INBOX_STATUS } from "@/constants/inbox"; // helpers +import { INBOX_STATUS } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { cn } from "@/helpers/common.helper"; +import { findHowManyDaysLeft } from "@/helpers/date-time.helper"; // store import { IInboxIssueStore } from "@/store/inbox/inbox-issue.store"; +import { InboxStatusIcon } from "./inbox-status-icon"; type Props = { inboxIssue: IInboxIssueStore; @@ -15,13 +18,17 @@ type Props = { export const InboxIssueStatus: React.FC = observer((props) => { const { inboxIssue, iconSize = 16, showDescription = false } = props; + //hooks + const { t } = useTranslation(); // derived values const inboxIssueStatusDetail = INBOX_STATUS.find((s) => s.status === inboxIssue.status); const isSnoozedDatePassed = inboxIssue.status === 0 && new Date(inboxIssue.snoozed_till ?? "") < new Date(); if (!inboxIssueStatusDetail || isSnoozedDatePassed) return <>; - const description = inboxIssueStatusDetail.description(new Date(inboxIssue.snoozed_till ?? "")); + const description = t(inboxIssueStatusDetail.i18n_description(), { + days: findHowManyDaysLeft(new Date(inboxIssue.snoozed_till ?? "")), + }); return (
= observer((props) => { )} >
- +
- {inboxIssue?.status === 0 && inboxIssue?.snoozed_till - ? inboxIssueStatusDetail.description(inboxIssue?.snoozed_till) - : inboxIssueStatusDetail.title} + {inboxIssue?.status === 0 && inboxIssue?.snoozed_till ? description : t(inboxIssueStatusDetail.i18n_title)}
{showDescription &&
{description}
} diff --git a/web/core/components/inbox/inbox-status-icon.tsx b/web/core/components/inbox/inbox-status-icon.tsx new file mode 100644 index 00000000000..d1f7b93f8ee --- /dev/null +++ b/web/core/components/inbox/inbox-status-icon.tsx @@ -0,0 +1,24 @@ +import { AlertTriangle, CheckCircle2, Clock, Copy, XCircle } from "lucide-react"; +import { TInboxIssueStatus, EInboxIssueStatus } from "@plane/constants"; + +export const InboxStatusIcon = ({ + type, + size, + className, +}: { + type: TInboxIssueStatus; + size?: number; + className?: string; +}) => { + const icons = { + [EInboxIssueStatus.PENDING]: AlertTriangle, + [EInboxIssueStatus.DECLINED]: XCircle, + [EInboxIssueStatus.SNOOZED]: Clock, + [EInboxIssueStatus.ACCEPTED]: CheckCircle2, + [EInboxIssueStatus.DUPLICATE]: Copy, + }; + + if (type === undefined) return null; + const Icon = icons[type]; + return ; +}; diff --git a/web/core/components/inbox/sidebar/root.tsx b/web/core/components/inbox/sidebar/root.tsx index b8c86e0dee5..060c845b8c8 100644 --- a/web/core/components/inbox/sidebar/root.tsx +++ b/web/core/components/inbox/sidebar/root.tsx @@ -2,7 +2,7 @@ import { FC, useCallback, useEffect, useRef, useState } from "react"; import { observer } from "mobx-react"; -import { TInboxIssueCurrentTab } from "@plane/types"; +import { TInboxIssueCurrentTab } from "@plane/constants"; import { Header, Loader, EHeaderVariant } from "@plane/ui"; // components import { EmptyState } from "@/components/empty-state"; diff --git a/web/core/components/stickies/layout/stickies-list.tsx b/web/core/components/stickies/layout/stickies-list.tsx index 4da6efe7b03..2a743d0cc02 100644 --- a/web/core/components/stickies/layout/stickies-list.tsx +++ b/web/core/components/stickies/layout/stickies-list.tsx @@ -12,13 +12,13 @@ import { Loader } from "@plane/ui"; // components import { EmptyState } from "@/components/empty-state"; // constants +import { StickiesEmptyState } from "@/components/home/widgets/empty-states/stickies"; import { EmptyStateType } from "@/constants/empty-state"; // hooks import { useSticky } from "@/hooks/use-stickies"; import { useStickyOperations } from "../sticky/use-operations"; import { StickyDNDWrapper } from "./sticky-dnd-wrapper"; import { getInstructionFromPayload } from "./sticky.helpers"; -import { StickiesEmptyState } from "@/components/home/widgets/empty-states/stickies"; type TStickiesLayout = { workspaceSlug: string; diff --git a/web/core/constants/empty-state.tsx b/web/core/constants/empty-state.tsx index ef1b9e91829..c2ae08784d7 100644 --- a/web/core/constants/empty-state.tsx +++ b/web/core/constants/empty-state.tsx @@ -1,5 +1,5 @@ -import { EUserPermissions } from "ee/constants/user-permissions"; import { Plus, Shapes } from "lucide-react"; +import { EUserPermissions } from "ee/constants/user-permissions"; export interface EmptyStateDetails { key: EmptyStateType; diff --git a/web/core/constants/inbox.tsx b/web/core/constants/inbox.tsx deleted file mode 100644 index fb0f4ec636e..00000000000 --- a/web/core/constants/inbox.tsx +++ /dev/null @@ -1,91 +0,0 @@ -// icons -import { AlertTriangle, CheckCircle2, Clock, Copy, LucideIcon, XCircle } from "lucide-react"; -// types -import { TInboxIssueSortingOrderByKeys, TInboxIssueSortingSortByKeys, TInboxIssueStatus } from "@plane/types"; -// helpers -import { findHowManyDaysLeft } from "@/helpers/date-time.helper"; -import { EInboxIssueStatus } from "@/helpers/inbox.helper"; - -export const INBOX_STATUS: { - key: string; - status: TInboxIssueStatus; - icon: LucideIcon; - title: string; - description: (snoozedTillDate: Date) => string; - textColor: (snoozeDatePassed: boolean) => string; - bgColor: (snoozeDatePassed: boolean) => string; -}[] = [ - { - key: "pending", - status: EInboxIssueStatus.PENDING, - icon: AlertTriangle, - title: "Pending", - description: () => `Pending`, - textColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "text-[#AB6400]"), - bgColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "bg-[#FFF7C2]"), - }, - { - key: "declined", - status: EInboxIssueStatus.DECLINED, - icon: XCircle, - title: "Declined", - description: () => `Declined`, - textColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "text-[#CE2C31]"), - bgColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "bg-[#FEEBEC]"), - }, - { - key: "snoozed", - status: EInboxIssueStatus.SNOOZED, - icon: Clock, - title: "Snoozed", - description: (snoozedTillDate: Date = new Date()) => `${findHowManyDaysLeft(snoozedTillDate)} days to go`, - textColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "text-red-500" : "text-custom-text-400"), - bgColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "bg-red-500/10" : "bg-[#E0E1E6]"), - }, - { - key: "accepted", - status: EInboxIssueStatus.ACCEPTED, - icon: CheckCircle2, - title: "Accepted", - description: () => `Accepted`, - textColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "text-[#3E9B4F]"), - bgColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "bg-[#E9F6E9]"), - }, - { - key: "duplicate", - status: EInboxIssueStatus.DUPLICATE, - icon: Copy, - title: "Duplicate", - description: () => `Duplicate`, - textColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "text-custom-text-200"), - bgColor: (snoozeDatePassed: boolean = false) => (snoozeDatePassed ? "" : "bg-gray-500/10"), - }, -]; - -export const INBOX_ISSUE_SOURCE = "in-app"; - -export const INBOX_ISSUE_ORDER_BY_OPTIONS: { key: TInboxIssueSortingOrderByKeys; label: string }[] = [ - { - key: "issue__created_at", - label: "Created at", - }, - { - key: "issue__updated_at", - label: "Updated at", - }, - { - key: "issue__sequence_id", - label: "ID", - }, -]; - -export const INBOX_ISSUE_SORT_BY_OPTIONS: { key: TInboxIssueSortingSortByKeys; label: string }[] = [ - { - key: "asc", - label: "Ascending", - }, - { - key: "desc", - label: "Descending", - }, -]; diff --git a/web/core/services/inbox/inbox-issue.service.ts b/web/core/services/inbox/inbox-issue.service.ts index 8837b6e74a3..737065d7003 100644 --- a/web/core/services/inbox/inbox-issue.service.ts +++ b/web/core/services/inbox/inbox-issue.service.ts @@ -1,5 +1,6 @@ // types -import type { TInboxIssue, TIssue, TInboxIssueWithPagination, TInboxForm } from "@plane/types"; +import { TInboxIssue } from "@plane/constants"; +import type { TIssue, TInboxIssueWithPagination, TInboxForm } from "@plane/types"; import { API_BASE_URL } from "@/helpers/common.helper"; import { APIService } from "@/services/api.service"; // helpers diff --git a/web/core/store/inbox/inbox-issue.store.ts b/web/core/store/inbox/inbox-issue.store.ts index 31bb5f591a4..2f72575b142 100644 --- a/web/core/store/inbox/inbox-issue.store.ts +++ b/web/core/store/inbox/inbox-issue.store.ts @@ -1,7 +1,8 @@ import clone from "lodash/clone"; import set from "lodash/set"; import { makeObservable, observable, runInAction, action } from "mobx"; -import { TIssue, TInboxIssue, TInboxIssueStatus, TInboxDuplicateIssueDetails } from "@plane/types"; +import { TInboxIssue, TInboxIssueStatus } from "@plane/constants"; +import { TIssue, TInboxDuplicateIssueDetails } from "@plane/types"; // helpers import { EInboxIssueStatus } from "@/helpers/inbox.helper"; // local db diff --git a/web/core/store/inbox/project-inbox.store.ts b/web/core/store/inbox/project-inbox.store.ts index 4dcb7297734..6ca0f31ba29 100644 --- a/web/core/store/inbox/project-inbox.store.ts +++ b/web/core/store/inbox/project-inbox.store.ts @@ -5,9 +5,8 @@ import set from "lodash/set"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; import { computedFn } from "mobx-utils"; // types +import { TInboxIssue, TInboxIssueCurrentTab } from "@plane/constants"; import { - TInboxIssue, - TInboxIssueCurrentTab, TInboxIssueFilter, TInboxIssueSorting, TInboxIssuePaginationInfo,