From 74bb379c1ad0ebafc098c3c4188428184fddd402 Mon Sep 17 00:00:00 2001 From: Takeshi Kimata <117462761+kimatata@users.noreply.github.com> Date: Sun, 21 Jul 2024 13:59:49 +0900 Subject: [PATCH] refactor: priority messages duplication --- frontend/config/selection.ts | 4 +++- frontend/messages/en.json | 18 +--------------- frontend/messages/ja.json | 18 +--------------- .../folders/[folderId]/cases/CasesPane.tsx | 5 ++++- .../[folderId]/cases/TestCaseTable.tsx | 12 +++++------ .../[folderId]/cases/[caseId]/CaseEditor.tsx | 8 ++++--- .../[folderId]/cases/[caseId]/page.tsx | 14 +++++++++---- .../folders/[folderId]/cases/page.tsx | 21 ++++++++++++++----- .../projects/[projectId]/home/ProjectHome.tsx | 6 ++++-- .../home/TestPriorityDonutChart.tsx | 8 +++---- .../projects/[projectId]/home/page.tsx | 20 ++++++++++-------- .../runs/[runId]/TestCaseDetailDialog.tsx | 2 +- .../runs/[runId]/TestCaseSelector.tsx | 13 ++++-------- .../[projectId]/runs/[runId]/page.tsx | 10 ++++----- frontend/types/priority.ts | 11 +++++++++- frontend/types/run.ts | 4 ---- 16 files changed, 84 insertions(+), 90 deletions(-) diff --git a/frontend/config/selection.ts b/frontend/config/selection.ts index a4cf6d7..d54055b 100644 --- a/frontend/config/selection.ts +++ b/frontend/config/selection.ts @@ -1,3 +1,5 @@ +import { PriorityType } from '@/types/priority'; + const roles = [{ uid: 'administrator' }, { uid: 'user' }]; const memberRoles = [{ uid: 'manager' }, { uid: 'developer' }, { uid: 'reporter' }]; @@ -9,7 +11,7 @@ const locales = [ { code: 'ja', name: '日本語' }, ]; -const priorities = [ +const priorities: PriorityType[] = [ { uid: 'critical', color: '#bb3e03', chartColor: '#bb3e03' }, { uid: 'high', color: '#ca6702', chartColor: '#ca6702' }, { uid: 'medium', color: '#ee9b00', chartColor: '#ee9b00' }, diff --git a/frontend/messages/en.json b/frontend/messages/en.json index 0f4ddfa..91034cc 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -133,11 +133,7 @@ "destructive": "Destructive", "regression": "Regression", "automated": "Automated", - "manual": "Manual", - "critical": "Critical", - "high": "High", - "medium": "Medium", - "low": "Low" + "manual": "Manual" }, "Folders": { "folder": "Folder", @@ -166,10 +162,6 @@ "are_you_sure": "Are you sure you want to delete test cases?", "new_test_case": "New Test Case", "status": "Status", - "critical": "Critical", - "high": "High", - "medium": "Medium", - "low": "Low", "no_cases_found": "No test cases found", "case_title": "Test Case Title", "case_description": "Test Case Description", @@ -186,10 +178,6 @@ "description": "Description", "test_case_description": "Test case description", "priority": "Priority", - "critical": "Critical", - "high": "High", - "medium": "Medium", - "low": "Low", "type": "Type", "other": "Other", "security": "Security", @@ -264,10 +252,6 @@ "priority": "Priority", "status": "Status", "actions": "Actions", - "critical": "Critical", - "high": "High", - "medium": "Medium", - "low": "Low", "untested": "Untested", "passed": "Passed", "failed": "Failed", diff --git a/frontend/messages/ja.json b/frontend/messages/ja.json index 559f8ff..3fd7cb3 100644 --- a/frontend/messages/ja.json +++ b/frontend/messages/ja.json @@ -134,11 +134,7 @@ "destructive": "破壊", "regression": "回帰", "automated": "自動", - "manual": "手動", - "critical": "致", - "high": "高", - "medium": "中", - "low": "低" + "manual": "手動" }, "Folders": { "folder": "フォルダー", @@ -167,10 +163,6 @@ "are_you_sure": "テストケースを削除してもよろしいですか?", "new_test_case": "新規テストケース", "status": "ステータス", - "critical": "致", - "high": "高", - "medium": "中", - "low": "低", "no_cases_found": "テストケースがありません", "case_title": "テストケースタイトル", "case_description": "テストケース詳細", @@ -187,10 +179,6 @@ "description": "詳細", "test_case_description": "テストケース詳細", "priority": "優先度", - "critical": "致", - "high": "高", - "medium": "中", - "low": "低", "type": "タイプ", "other": "その他", "security": "セキュリティ", @@ -265,10 +253,6 @@ "priority": "優先度", "status": "ステータス", "actions": "アクション", - "critical": "致", - "high": "高", - "medium": "中", - "low": "低", "untested": "未実行", "passed": "成功", "failed": "失敗", diff --git a/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/CasesPane.tsx b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/CasesPane.tsx index bb8bf12..b689d95 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/CasesPane.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/CasesPane.tsx @@ -6,15 +6,17 @@ import { fetchCases, createCase, deleteCases } from '@/utils/caseControl'; import { CaseType, CasesMessages } from '@/types/case'; import DeleteConfirmDialog from '@/components/DeleteConfirmDialog'; import CaseDialog from './CaseDialog'; +import { PriorityMessages } from '@/types/priority'; type Props = { projectId: string; folderId: string; messages: CasesMessages; + priorityMessages: PriorityMessages; locale: string; }; -export default function CasesPane({ projectId, folderId, messages, locale }: Props) { +export default function CasesPane({ projectId, folderId, messages, priorityMessages, locale }: Props) { const [cases, setCases] = useState([]); const context = useContext(TokenContext); const [isCaseDialogOpen, setIsCaseDialogOpen] = useState(false); @@ -81,6 +83,7 @@ export default function CasesPane({ projectId, folderId, messages, locale }: Pro onDeleteCase={onDeleteCase} onDeleteCases={onDeleteCases} messages={messages} + priorityMessages={priorityMessages} locale={locale} /> diff --git a/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/TestCaseTable.tsx b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/TestCaseTable.tsx index 6de21ac..e4110a1 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/TestCaseTable.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/TestCaseTable.tsx @@ -17,7 +17,8 @@ import { import { Link, NextUiLinkClasses } from '@/src/navigation'; import { Plus, MoreVertical, Trash, Circle } from 'lucide-react'; import { CaseType, CasesMessages } from '@/types/case'; -import { priorities } from '@/config/selection'; +import { PriorityMessages } from '@/types/priority'; +import TestCasePriority from '@/components/TestCasePriority'; type Props = { projectId: string; @@ -27,6 +28,7 @@ type Props = { onDeleteCase: (caseId: number) => void; onDeleteCases: (caseIds: number[]) => void; messages: CasesMessages; + priorityMessages: PriorityMessages; locale: string; }; @@ -38,6 +40,7 @@ export default function TestCaseTable({ onDeleteCase, onDeleteCases, messages, + priorityMessages, locale, }: Props) { const headerColumns = [ @@ -89,12 +92,7 @@ export default function TestCaseTable({ ); case 'priority': - return ( -
- -
{messages[priorities[cellValue].uid]}
-
- ); + return ; case 'actions': return ( diff --git a/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseEditor.tsx b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseEditor.tsx index d9728ef..cb7f5c7 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseEditor.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/CaseEditor.tsx @@ -6,12 +6,13 @@ import { Save, Plus, ArrowLeft, Circle } from 'lucide-react'; import { priorities, testTypes, templates } from '@/config/selection'; import CaseStepsEditor from './CaseStepsEditor'; import CaseAttachmentsEditor from './CaseAttachmentsEditor'; -import { CaseType, AttachmentType, CaseMessages, StepType } from '@/types/case'; import { fetchCase, updateCase } from '@/utils/caseControl'; import { updateSteps } from './stepControl'; import { fetchCreateAttachments, fetchDownloadAttachment, fetchDeleteAttachment } from './attachmentControl'; import { TokenContext } from '@/utils/TokenProvider'; import { useFormGuard } from '@/utils/formGuard'; +import { CaseType, AttachmentType, CaseMessages, StepType } from '@/types/case'; +import { PriorityMessages } from '@/types/priority'; const defaultTestCase = { id: 0, @@ -36,10 +37,11 @@ type Props = { folderId: string; caseId: string; messages: CaseMessages; + priorityMessages: PriorityMessages; locale: string; }; -export default function CaseEditor({ projectId, folderId, caseId, messages, locale }: Props) { +export default function CaseEditor({ projectId, folderId, caseId, messages, priorityMessages, locale }: Props) { const context = useContext(TokenContext); const [testCase, setTestCase] = useState(defaultTestCase); const [isTitleInvalid, setIsTitleInvalid] = useState(false); @@ -262,7 +264,7 @@ export default function CaseEditor({ projectId, folderId, caseId, messages, loca > {priorities.map((priority, index) => ( - {messages[priority.uid]} + {priorityMessages[priority.uid]} ))} diff --git a/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/page.tsx b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/page.tsx index cbb9569..ceb5ab2 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/page.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/[caseId]/page.tsx @@ -1,3 +1,4 @@ +import { PriorityMessages } from '@/types/priority'; import CaseEditor from './CaseEditor'; import { useTranslations } from 'next-intl'; @@ -22,10 +23,6 @@ export default function Page({ description: t('description'), testCaseDescription: t('test_case_description'), priority: t('priority'), - critical: t('critical'), - high: t('high'), - medium: t('medium'), - low: t('low'), type: t('type'), other: t('other'), security: t('security'), @@ -61,12 +58,21 @@ export default function Page({ areYouSureLeave: t('are_you_sure_leave'), }; + const priorityTranslation = useTranslations('Priority'); + const priorityMessages: PriorityMessages = { + critical: priorityTranslation('critical'), + high: priorityTranslation('high'), + medium: priorityTranslation('medium'), + low: priorityTranslation('low'), + }; + return ( ); diff --git a/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/page.tsx b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/page.tsx index ce43a1c..1ce606c 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/page.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/folders/[folderId]/cases/page.tsx @@ -1,3 +1,4 @@ +import { PriorityMessages } from '@/types/priority'; import CasesPane from './CasesPane'; import { useTranslations } from 'next-intl'; @@ -15,10 +16,6 @@ export default function Page({ params }: { params: { projectId: string; folderId areYouSure: t('are_you_sure'), newTestCase: t('new_test_case'), status: t('status'), - critical: t('critical'), - high: t('high'), - medium: t('medium'), - low: t('low'), noCasesFound: t('no_cases_found'), caseTitle: t('case_title'), caseDescription: t('case_description'), @@ -26,9 +23,23 @@ export default function Page({ params }: { params: { projectId: string; folderId pleaseEnter: t('please_enter'), }; + const priorityTranslation = useTranslations('Priority'); + const priorityMessages: PriorityMessages = { + critical: priorityTranslation('critical'), + high: priorityTranslation('high'), + medium: priorityTranslation('medium'), + low: priorityTranslation('low'), + }; + return ( <> - + ); } diff --git a/frontend/src/app/[locale]/projects/[projectId]/home/ProjectHome.tsx b/frontend/src/app/[locale]/projects/[projectId]/home/ProjectHome.tsx index 06f00b5..a0c8bbe 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/home/ProjectHome.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/home/ProjectHome.tsx @@ -13,6 +13,7 @@ import TestPriorityChart from './TestPriorityDonutChart'; import TestProgressBarChart from './TestProgressColumnChart'; import Config from '@/config/config'; import { useTheme } from 'next-themes'; +import { PriorityMessages } from '@/types/priority'; const apiServer = Config.apiServer; async function fetchProject(jwt: string, projectId: number) { @@ -41,9 +42,10 @@ async function fetchProject(jwt: string, projectId: number) { type Props = { projectId: string; messages: HomeMessages; + priorityMessages: PriorityMessages; }; -export function ProjectHome({ projectId, messages }: Props) { +export function ProjectHome({ projectId, messages, priorityMessages }: Props) { const context = useContext(TokenContext); const { theme, setTheme } = useTheme(); const [project, setProject] = useState({ @@ -134,7 +136,7 @@ export function ProjectHome({ projectId, messages }: Props) {

{messages.byPriority}

- +
diff --git a/frontend/src/app/[locale]/projects/[projectId]/home/TestPriorityDonutChart.tsx b/frontend/src/app/[locale]/projects/[projectId]/home/TestPriorityDonutChart.tsx index 67330e1..757647e 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/home/TestPriorityDonutChart.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/home/TestPriorityDonutChart.tsx @@ -3,16 +3,16 @@ import { useState, useEffect } from 'react'; import dynamic from 'next/dynamic'; import { priorities } from '@/config/selection'; import { CasePriorityCountType } from '@/types/case'; -import { HomeMessages } from './page'; +import { PriorityMessages } from '@/types/priority'; const Chart = dynamic(() => import('react-apexcharts'), { ssr: false }); type Props = { priorityCounts: CasePriorityCountType[]; - messages: HomeMessages; + priorityMessages: PriorityMessages; theme: string; }; -export default function TestPriorityDonutChart({ priorityCounts, messages, theme }: Props) { +export default function TestPriorityDonutChart({ priorityCounts, priorityMessages, theme }: Props) { const [chartData, setChartData] = useState({ series: [], options: { @@ -29,7 +29,7 @@ export default function TestPriorityDonutChart({ priorityCounts, messages, theme return found ? found.count : 0; }); - const labels = priorities.map((entry) => messages[entry.uid]); + const labels = priorities.map((entry) => priorityMessages[entry.uid]); const colors = priorities.map((entry) => entry.chartColor); const legend = { labels: { diff --git a/frontend/src/app/[locale]/projects/[projectId]/home/page.tsx b/frontend/src/app/[locale]/projects/[projectId]/home/page.tsx index 73b4c57..385b666 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/home/page.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/home/page.tsx @@ -1,5 +1,6 @@ import { ProjectHome } from './ProjectHome'; import { useTranslations } from 'next-intl'; +import { PriorityMessages } from '@/types/priority'; export type HomeMessages = { folders: string; @@ -28,10 +29,6 @@ export type HomeMessages = { regression: string; automated: string; manual: string; - critical: string; - high: string; - medium: string; - low: string; }; export default function Page({ params }: { params: { projectId: string } }) { @@ -62,14 +59,19 @@ export default function Page({ params }: { params: { projectId: string } }) { regression: t('regression'), automated: t('automated'), manual: t('manual'), - critical: t('critical'), - high: t('high'), - medium: t('medium'), - low: t('low'), }; + + const pt = useTranslations('Priority'); + const priorityMessages: PriorityMessages = { + critical: pt('critical'), + high: pt('high'), + medium: pt('medium'), + low: pt('low'), + }; + return ( <> - + ); } diff --git a/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/TestCaseDetailDialog.tsx b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/TestCaseDetailDialog.tsx index 9d1c939..e84553a 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/TestCaseDetailDialog.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/TestCaseDetailDialog.tsx @@ -1,9 +1,9 @@ import { Button, Modal, ModalContent, ModalHeader, ModalBody, ModalFooter } from '@nextui-org/react'; import { testTypes, templates } from '@/config/selection'; -import TestCasePriority from '@/components/TestCasePriority'; import { RunMessages } from '@/types/run'; import { CaseType } from '@/types/case'; import { PriorityMessages } from '@/types/priority'; +import TestCasePriority from '@/components/TestCasePriority'; type Props = { isOpen: boolean; diff --git a/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/TestCaseSelector.tsx b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/TestCaseSelector.tsx index 4202fda..3f713a8 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/TestCaseSelector.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/TestCaseSelector.tsx @@ -26,11 +26,12 @@ import { CircleSlash2, } from 'lucide-react'; import { NextUiLinkClasses } from '@/src/navigation'; -import { priorities, testRunCaseStatus } from '@/config/selection'; +import { testRunCaseStatus } from '@/config/selection'; import { CaseType } from '@/types/case'; import { RunMessages } from '@/types/run'; import TestCaseDetailDialog from './TestCaseDetailDialog'; import { PriorityMessages } from '@/types/priority'; +import TestCasePriority from '@/components/TestCasePriority'; type Props = { cases: CaseType[]; @@ -95,7 +96,6 @@ export default function TestCaseSelector({ }, [sortDescriptor, cases]); const notIncludedCaseClass = 'text-neutral-200 dark:text-neutral-600'; - const chipBaseClass = 'flex items-center text-default-600'; const renderStatusIcon = (uid: string) => { if (uid === 'untested') { @@ -142,13 +142,8 @@ export default function TestCaseSelector({ ); case 'priority': return ( -
- -
{messages[priorities[cellValue].uid]}
+
+
); case 'runStatus': diff --git a/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/page.tsx b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/page.tsx index bc8db9b..59a460c 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/page.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/page.tsx @@ -55,12 +55,12 @@ export default function Page({ params }: { params: { projectId: string; runId: s close: t('close'), }; - const priorityTranslation = useTranslations('Priority'); + const pt = useTranslations('Priority'); const priorityMessages: PriorityMessages = { - critical: priorityTranslation('critical'), - high: priorityTranslation('high'), - medium: priorityTranslation('medium'), - low: priorityTranslation('low'), + critical: pt('critical'), + high: pt('high'), + medium: pt('medium'), + low: pt('low'), }; return ( diff --git a/frontend/types/priority.ts b/frontend/types/priority.ts index b3779e0..eabc86a 100644 --- a/frontend/types/priority.ts +++ b/frontend/types/priority.ts @@ -1,7 +1,16 @@ +type PriorityUidType = 'critical' | 'high' | 'medium' | 'low'; + +type PriorityType = { + uid: PriorityUidType; + color: string; + chartColor: string; +}; + type PriorityMessages = { critical: string; high: string; medium: string; low: string; }; -export type { PriorityMessages }; + +export type { PriorityUidType, PriorityType, PriorityMessages }; diff --git a/frontend/types/run.ts b/frontend/types/run.ts index 93b72bf..0f060bb 100644 --- a/frontend/types/run.ts +++ b/frontend/types/run.ts @@ -68,10 +68,6 @@ type RunMessages = { priority: string; status: string; actions: string; - critical: string; - high: string; - medium: string; - low: string; untested: string; passed: string; failed: string;