From 37f97f97b5062068cadf50fb16cb74358eb1819f Mon Sep 17 00:00:00 2001 From: Takeshi Kimata <117462761+kimatata@users.noreply.github.com> Date: Sat, 8 Jun 2024 11:10:36 +0900 Subject: [PATCH] feat: view customize on run and runCases pane --- backend/middleware/verifyEditable.js | 4 +- .../projects/[projectId]/runs/RunsTable.tsx | 19 +++++--- .../[projectId]/runs/[runId]/RunEditor.tsx | 9 +++- .../runs/[runId]/TestCaseSelector.tsx | 44 +++++++++++++++---- 4 files changed, 60 insertions(+), 16 deletions(-) diff --git a/backend/middleware/verifyEditable.js b/backend/middleware/verifyEditable.js index 6a96493..9e79921 100644 --- a/backend/middleware/verifyEditable.js +++ b/backend/middleware/verifyEditable.js @@ -105,7 +105,7 @@ function verifyEditableMiddleware(sequelize) { // find project id from folderId const folder = await Folder.findByPk(folderId); - const projectId = folder && folder.id; + const projectId = folder && folder.projectId; if (!projectId) { return res.status(404).send('failed to find projectId'); } @@ -229,7 +229,7 @@ function verifyEditableMiddleware(sequelize) { // find project id from runId const run = await Run.findByPk(runId); - const projectId = run && run.id; + const projectId = run && run.projectId; if (!projectId) { return res.status(404).send('failed to find projectId'); } diff --git a/frontend/src/app/[locale]/projects/[projectId]/runs/RunsTable.tsx b/frontend/src/app/[locale]/projects/[projectId]/runs/RunsTable.tsx index e03279d..7266bdb 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/runs/RunsTable.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/runs/RunsTable.tsx @@ -1,4 +1,4 @@ -import { useState, useMemo, useCallback } from 'react'; +import { useState, useEffect, useMemo } from 'react'; import { Table, TableHeader, @@ -28,6 +28,15 @@ type Props = { }; export default function RunsTable({ projectId, isDisabled, runs, onDeleteRun, messages, locale }: Props) { + const [disabledKeys, setDisabledKeys] = useState([]); + useEffect(() => { + if (isDisabled) { + setDisabledKeys(['delete']); + } else { + setDisabledKeys([]); + } + }, [isDisabled]); + const headerColumns = [ { name: messages.id, uid: 'id', sortable: true }, { name: messages.name, uid: 'name', sortable: true }, @@ -54,7 +63,7 @@ export default function RunsTable({ projectId, isDisabled, runs, onDeleteRun, me return text.length > maxLength ? text.slice(0, maxLength) + '...' : text; }; - const renderCell = useCallback((run: RunType, columnKey: Key) => { + const renderCell = (run: RunType, columnKey: Key) => { const cellValue = run[columnKey as keyof RunType]; switch (columnKey) { @@ -83,8 +92,8 @@ export default function RunsTable({ projectId, isDisabled, runs, onDeleteRun, me - - onDeleteRun(run.id)}> + + onDeleteRun(run.id)}> {messages.deleteRun} @@ -93,7 +102,7 @@ export default function RunsTable({ projectId, isDisabled, runs, onDeleteRun, me default: return cellValue; } - }, []); + }; const classNames = useMemo( () => ({ diff --git a/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/RunEditor.tsx b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/RunEditor.tsx index d4967e9..7e4ed60 100644 --- a/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/RunEditor.tsx +++ b/frontend/src/app/[locale]/projects/[projectId]/runs/[runId]/RunEditor.tsx @@ -221,6 +221,7 @@ export default function RunEditor({ projectId, runId, messages, locale }: Props) @@ -351,6 +357,7 @@ export default function RunEditor({ projectId, runId, messages, locale }: Props)
>; onStatusChange: (changeCaseId: number, status: number) => {}; @@ -41,6 +42,7 @@ type Props = { export default function TestCaseSelector({ cases, + isDisabled, selectedKeys, onSelectionChange, onStatusChange, @@ -56,6 +58,22 @@ export default function TestCaseSelector({ { name: messages.actions, uid: 'actions' }, ]; + const [disabledStatusKeys, setDisabledStatusKeys] = useState([]); + const [disabledIncludeExcludeKeys, setDisabledIncludeExcludeKeys] = useState([]); + useEffect(() => { + if (isDisabled) { + setDisabledStatusKeys( + testRunCaseStatus.map((entry) => { + return entry.uid; + }) + ); + setDisabledIncludeExcludeKeys(['include', 'exclude']); + } else { + setDisabledStatusKeys([]); + setDisabledIncludeExcludeKeys([]); + } + }, [isDisabled]); + const [sortDescriptor, setSortDescriptor] = useState({ column: 'id', direction: 'ascending', @@ -118,10 +136,10 @@ export default function TestCaseSelector({ {isIncluded && messages[testRunCaseStatus[cellValue].uid]} - + {testRunCaseStatus.map((runCaseStatus, index) => ( onStatusChange(testCase.id, index)} > @@ -139,18 +157,28 @@ export default function TestCaseSelector({ - + } - isDisabled={testCase.isIncluded} - onPress={() => onIncludeCase(testCase.id)} + onPress={() => { + if (testCase.isIncluded) { + return; + } + onIncludeCase(testCase.id); + }} > {messages.includeInRun} } - isDisabled={!testCase.isIncluded} - onPress={() => onExcludeCase(testCase.id)} + onPress={() => { + if (!testCase.isIncluded) { + return; + } + onExcludeCase(testCase.id); + }} > {messages.excludeFromRun}