From 7e8a5882300a92c111cbf6abd1e89660d152cf0d Mon Sep 17 00:00:00 2001 From: Anmol Singh Bhatia Date: Tue, 28 Jan 2025 15:42:55 +0530 Subject: [PATCH 1/2] chore: workspace drafts language support --- packages/i18n/src/locales/en/translations.json | 8 ++++++++ web/app/[workspaceSlug]/(projects)/drafts/header.tsx | 9 +++++++-- .../issue-layouts/quick-action-dropdowns/draft-issue.tsx | 9 ++++++--- web/core/components/issues/issue-modal/form.tsx | 4 ++-- .../components/issues/workspace-draft/delete-modal.tsx | 9 +++++++-- .../issues/workspace-draft/draft-issue-block.tsx | 8 ++++---- .../components/issues/workspace-draft/quick-action.tsx | 5 ++++- 7 files changed, 38 insertions(+), 14 deletions(-) diff --git a/packages/i18n/src/locales/en/translations.json b/packages/i18n/src/locales/en/translations.json index ae8a7bc9273..0bfcb8cd205 100644 --- a/packages/i18n/src/locales/en/translations.json +++ b/packages/i18n/src/locales/en/translations.json @@ -277,6 +277,7 @@ "issue_updated_successfully": "Issue updated successfully", "issue_could_not_be_updated": "Issue could not be updated", "create_a_draft": "Create a draft", + "draft_an_issue": "Draft an issue", "save_to_drafts": "Save to Drafts", "save": "Save", "update": "Update", @@ -320,6 +321,9 @@ "edit": "Edit", "open_in_new_tab": "Open in new tab", "delete": "Delete", + "deleting": "Deleting", + "make_a_copy": "Make a copy", + "move_to_project": "Move to project", "good": "Good", "morning": "morning", "afternoon": "afternoon", @@ -1184,6 +1188,10 @@ "primary_button": { "text": "Create your first draft" } + }, + "delete_modal": { + "title": "Delete draft", + "description": "Are you sure you want to delete this draft? This can't be undone." } }, diff --git a/web/app/[workspaceSlug]/(projects)/drafts/header.tsx b/web/app/[workspaceSlug]/(projects)/drafts/header.tsx index 68597b509a0..e092b5f2bff 100644 --- a/web/app/[workspaceSlug]/(projects)/drafts/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/drafts/header.tsx @@ -4,6 +4,7 @@ import { useState } from "react"; import { observer } from "mobx-react"; import { PenSquare } from "lucide-react"; import { EIssuesStoreType } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; // ui import { Breadcrumbs, Button, Header } from "@plane/ui"; // components @@ -22,6 +23,8 @@ export const WorkspaceDraftHeader = observer(() => { const { allowPermissions } = useUserPermissions(); const { paginationInfo } = useWorkspaceDraftIssues(); const { joinedProjectIds } = useProject(); + + const { t } = useTranslation(); // check if user is authorized to create draft issue const isAuthorizedUser = allowPermissions( [EUserPermissions.ADMIN, EUserPermissions.MEMBER], @@ -42,7 +45,9 @@ export const WorkspaceDraftHeader = observer(() => { } />} + link={ + } /> + } /> {paginationInfo?.total_count && paginationInfo?.total_count > 0 ? ( @@ -62,7 +67,7 @@ export const WorkspaceDraftHeader = observer(() => { onClick={() => setIsDraftIssueModalOpen(true)} disabled={!isAuthorizedUser} > - Draft an issue + {t("draft_an_issue")} )} diff --git a/web/core/components/issues/issue-layouts/quick-action-dropdowns/draft-issue.tsx b/web/core/components/issues/issue-layouts/quick-action-dropdowns/draft-issue.tsx index f9fd1ab1c52..c38c27b6729 100644 --- a/web/core/components/issues/issue-layouts/quick-action-dropdowns/draft-issue.tsx +++ b/web/core/components/issues/issue-layouts/quick-action-dropdowns/draft-issue.tsx @@ -7,6 +7,7 @@ import { observer } from "mobx-react"; import { Pencil, Trash2 } from "lucide-react"; // types import { EIssuesStoreType } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { TIssue } from "@plane/types"; // ui import { ContextMenu, CustomMenu, TContextMenuItem } from "@plane/ui"; @@ -40,6 +41,8 @@ export const DraftIssueQuickActions: React.FC = observer((pro const { allowPermissions } = useUserPermissions(); const { setTrackElement } = useEventTracker(); const { issuesFilter } = useIssues(EIssuesStoreType.PROJECT); + + const { t } = useTranslation(); // derived values const activeLayout = `${issuesFilter.issueFilters?.displayFilters?.layout} layout`; // auth @@ -59,7 +62,7 @@ export const DraftIssueQuickActions: React.FC = observer((pro const MENU_ITEMS: TContextMenuItem[] = [ { key: "edit", - title: "Edit", + title: "edit", icon: Pencil, action: () => { setTrackElement(activeLayout); @@ -70,7 +73,7 @@ export const DraftIssueQuickActions: React.FC = observer((pro }, { key: "delete", - title: "Delete", + title: "delete", icon: Trash2, action: () => { setTrackElement(activeLayout); @@ -138,7 +141,7 @@ export const DraftIssueQuickActions: React.FC = observer((pro > {item.icon && }
-
{item.title}
+
{t(item.title ?? "")}
{item.description && (

= observer((props) => { onClick={handleMoveToProjects} disabled={isMoving} > - Add to project + {t("add_to_project")} )}

diff --git a/web/core/components/issues/workspace-draft/delete-modal.tsx b/web/core/components/issues/workspace-draft/delete-modal.tsx index c76f4f7ff5a..7fcc17b3520 100644 --- a/web/core/components/issues/workspace-draft/delete-modal.tsx +++ b/web/core/components/issues/workspace-draft/delete-modal.tsx @@ -92,8 +92,13 @@ export const WorkspaceDraftIssueDeleteIssueModal: React.FC = (props) => { handleSubmit={handleIssueDelete} isSubmitting={isDeleting} isOpen={isOpen} - title="Delete draft" - content={<>Are you sure you want to delete this draft? This can't be undone.} + title={t("delete_modal.title")} + content={<>{t("delete_modal.description")}} + primaryButtonText={{ + loading: t("deleting"), + default: t("delete"), + }} + secondaryButtonText={t("cancel")} /> ); }; diff --git a/web/core/components/issues/workspace-draft/draft-issue-block.tsx b/web/core/components/issues/workspace-draft/draft-issue-block.tsx index 9e9ee107eed..ab2639858fa 100644 --- a/web/core/components/issues/workspace-draft/draft-issue-block.tsx +++ b/web/core/components/issues/workspace-draft/draft-issue-block.tsx @@ -57,7 +57,7 @@ export const DraftIssueBlock: FC = observer((props) => { const MENU_ITEMS: TContextMenuItem[] = [ { key: "edit", - title: "Edit", + title: "edit", icon: Pencil, action: () => { setIssueToEdit(issue); @@ -66,7 +66,7 @@ export const DraftIssueBlock: FC = observer((props) => { }, { key: "make-a-copy", - title: "Make a copy", + title: "make_a_copy", icon: Copy, action: () => { setCreateUpdateIssueModal(true); @@ -74,7 +74,7 @@ export const DraftIssueBlock: FC = observer((props) => { }, { key: "move-to-issues", - title: "Move to project", + title: "move_to_project", icon: SquareStackIcon, action: () => { setMoveToIssue(true); @@ -84,7 +84,7 @@ export const DraftIssueBlock: FC = observer((props) => { }, { key: "delete", - title: "Delete", + title: "delete", icon: Trash2, action: () => { setDeleteIssueModal(true); diff --git a/web/core/components/issues/workspace-draft/quick-action.tsx b/web/core/components/issues/workspace-draft/quick-action.tsx index 884e81a9127..676c79ba680 100644 --- a/web/core/components/issues/workspace-draft/quick-action.tsx +++ b/web/core/components/issues/workspace-draft/quick-action.tsx @@ -1,6 +1,7 @@ "use client"; import { observer } from "mobx-react"; +import { useTranslation } from "@plane/i18n"; // ui import { ContextMenu, CustomMenu, TContextMenuItem } from "@plane/ui"; // helpers @@ -14,6 +15,8 @@ export interface Props { export const WorkspaceDraftIssueQuickActions: React.FC = observer((props) => { const { parentRef, MENU_ITEMS } = props; + const { t } = useTranslation(); + return ( <> @@ -44,7 +47,7 @@ export const WorkspaceDraftIssueQuickActions: React.FC = observer((props) > {item.icon && }
-
{item.title}
+
{t(item.title || "")}
{item.description && (

Date: Tue, 28 Jan 2025 16:00:29 +0530 Subject: [PATCH 2/2] chore: code refactor --- packages/i18n/src/locales/en/translations.json | 2 +- web/app/[workspaceSlug]/(projects)/drafts/header.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/i18n/src/locales/en/translations.json b/packages/i18n/src/locales/en/translations.json index 0bfcb8cd205..53502a85232 100644 --- a/packages/i18n/src/locales/en/translations.json +++ b/packages/i18n/src/locales/en/translations.json @@ -277,7 +277,6 @@ "issue_updated_successfully": "Issue updated successfully", "issue_could_not_be_updated": "Issue could not be updated", "create_a_draft": "Create a draft", - "draft_an_issue": "Draft an issue", "save_to_drafts": "Save to Drafts", "save": "Save", "update": "Update", @@ -1182,6 +1181,7 @@ }, "workspace_draft_issues": { + "draft_an_issue": "Draft an issue", "empty_state": { "title": "Half-written issues, and soon, comments will show up here.", "description": "To try this out, start adding an issue and leave it mid-way or create your first draft below. 😉", diff --git a/web/app/[workspaceSlug]/(projects)/drafts/header.tsx b/web/app/[workspaceSlug]/(projects)/drafts/header.tsx index e092b5f2bff..12bf509f4f8 100644 --- a/web/app/[workspaceSlug]/(projects)/drafts/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/drafts/header.tsx @@ -67,7 +67,7 @@ export const WorkspaceDraftHeader = observer(() => { onClick={() => setIsDraftIssueModalOpen(true)} disabled={!isAuthorizedUser} > - {t("draft_an_issue")} + {t("workspace_draft_issues.draft_an_issue")} )}