From 9ea6cb90a8bae066aa811143737616959aa60a26 Mon Sep 17 00:00:00 2001 From: gearnode Date: Tue, 11 Mar 2025 09:09:39 +0100 Subject: [PATCH] Fix update task Signed-off-by: gearnode --- .../console/src/pages/ControlOverviewPage.tsx | 29 ++++---- .../ControlOverviewPageQuery.graphql.ts | 68 +++++++++++-------- ...viewPageUpdateTaskStateMutation.graphql.ts | 31 ++++++--- 3 files changed, 74 insertions(+), 54 deletions(-) diff --git a/apps/console/src/pages/ControlOverviewPage.tsx b/apps/console/src/pages/ControlOverviewPage.tsx index 1cf978ea0..cd96e471a 100644 --- a/apps/console/src/pages/ControlOverviewPage.tsx +++ b/apps/console/src/pages/ControlOverviewPage.tsx @@ -72,6 +72,7 @@ const controlOverviewPageQuery = graphql` name description state + version evidences(first: 50) @connection(key: "ControlOverviewPage_evidences") { __id @@ -96,12 +97,13 @@ const controlOverviewPageQuery = graphql` const updateTaskStateMutation = graphql` mutation ControlOverviewPageUpdateTaskStateMutation( - $input: UpdateTaskStateInput! + $input: UpdateTaskInput! ) { - updateTaskState(input: $input) { + updateTask(input: $input) { task { id state + version } } } @@ -192,7 +194,7 @@ function ControlOverviewPageContent({ const { organizationId, frameworkId, controlId } = useParams(); const navigate = useNavigate(); const environment = useRelayEnvironment(); - const [updateTaskState] = + const [updateTask] = useMutation( updateTaskStateMutation ); @@ -306,22 +308,19 @@ function ControlOverviewPageContent({ }; }, []); - const handleTaskClick = (taskId: string, currentState: string) => { + const handleTaskClick = ( + taskId: string, + currentState: string, + version: number + ) => { const newState = currentState === "DONE" ? "TODO" : "DONE"; - updateTaskState({ + updateTask({ variables: { input: { taskId, state: newState, - }, - }, - optimisticResponse: { - updateTaskState: { - task: { - id: taskId, - state: newState, - }, + expectedVersion: version, }, }, onCompleted: () => { @@ -842,7 +841,7 @@ function ControlOverviewPageContent({ onClick={() => task?.id && task?.state && - handleTaskClick(task.id, task.state) + handleTaskClick(task.id, task.state, task.version) } > {task?.state === "DONE" && ( @@ -856,7 +855,7 @@ function ControlOverviewPageContent({ onClick={() => task?.id && task?.state && - handleTaskClick(task.id, task.state) + handleTaskClick(task.id, task.state, task.version) } >
diff --git a/apps/console/src/pages/__generated__/ControlOverviewPageQuery.graphql.ts b/apps/console/src/pages/__generated__/ControlOverviewPageQuery.graphql.ts index 86b70fb85..e7f53eaee 100644 --- a/apps/console/src/pages/__generated__/ControlOverviewPageQuery.graphql.ts +++ b/apps/console/src/pages/__generated__/ControlOverviewPageQuery.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<> + * @generated SignedSource<> * @lightSyntaxTransform * @nogrep */ @@ -43,6 +43,7 @@ export type ControlOverviewPageQuery$data = { readonly id: string; readonly name: string; readonly state: TaskState; + readonly version: number; }; }>; }; @@ -107,17 +108,24 @@ v7 = { "alias": null, "args": null, "kind": "ScalarField", - "name": "__typename", + "name": "version", "storageKey": null }, v8 = { "alias": null, "args": null, "kind": "ScalarField", - "name": "cursor", + "name": "__typename", "storageKey": null }, v9 = { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "cursor", + "storageKey": null +}, +v10 = { "alias": null, "args": null, "concreteType": "PageInfo", @@ -142,7 +150,7 @@ v9 = { ], "storageKey": null }, -v10 = { +v11 = { "kind": "ClientExtension", "selections": [ { @@ -154,7 +162,7 @@ v10 = { } ] }, -v11 = [ +v12 = [ { "alias": null, "args": null, @@ -201,25 +209,25 @@ v11 = [ "name": "createdAt", "storageKey": null }, - (v7/*: any*/) + (v8/*: any*/) ], "storageKey": null }, - (v8/*: any*/) + (v9/*: any*/) ], "storageKey": null }, - (v9/*: any*/), - (v10/*: any*/) + (v10/*: any*/), + (v11/*: any*/) ], -v12 = [ +v13 = [ { "kind": "Literal", "name": "first", "value": 100 } ], -v13 = [ +v14 = [ { "kind": "Literal", "name": "first", @@ -277,6 +285,7 @@ return { (v3/*: any*/), (v4/*: any*/), (v5/*: any*/), + (v7/*: any*/), { "alias": "evidences", "args": null, @@ -284,19 +293,19 @@ return { "kind": "LinkedField", "name": "__ControlOverviewPage_evidences_connection", "plural": false, - "selections": (v11/*: any*/), + "selections": (v12/*: any*/), "storageKey": null }, - (v7/*: any*/) + (v8/*: any*/) ], "storageKey": null }, - (v8/*: any*/) + (v9/*: any*/) ], "storageKey": null }, - (v9/*: any*/), - (v10/*: any*/) + (v10/*: any*/), + (v11/*: any*/) ], "storageKey": null } @@ -325,7 +334,7 @@ return { "name": "node", "plural": false, "selections": [ - (v7/*: any*/), + (v8/*: any*/), (v2/*: any*/), { "kind": "InlineFragment", @@ -336,7 +345,7 @@ return { (v6/*: any*/), { "alias": null, - "args": (v12/*: any*/), + "args": (v13/*: any*/), "concreteType": "TaskConnection", "kind": "LinkedField", "name": "tasks", @@ -362,41 +371,42 @@ return { (v3/*: any*/), (v4/*: any*/), (v5/*: any*/), + (v7/*: any*/), { "alias": null, - "args": (v13/*: any*/), + "args": (v14/*: any*/), "concreteType": "EvidenceConnection", "kind": "LinkedField", "name": "evidences", "plural": false, - "selections": (v11/*: any*/), + "selections": (v12/*: any*/), "storageKey": "evidences(first:50)" }, { "alias": null, - "args": (v13/*: any*/), + "args": (v14/*: any*/), "filters": null, "handle": "connection", "key": "ControlOverviewPage_evidences", "kind": "LinkedHandle", "name": "evidences" }, - (v7/*: any*/) + (v8/*: any*/) ], "storageKey": null }, - (v8/*: any*/) + (v9/*: any*/) ], "storageKey": null }, - (v9/*: any*/), - (v10/*: any*/) + (v10/*: any*/), + (v11/*: any*/) ], "storageKey": "tasks(first:100)" }, { "alias": null, - "args": (v12/*: any*/), + "args": (v13/*: any*/), "filters": null, "handle": "connection", "key": "ControlOverviewPage_tasks", @@ -413,7 +423,7 @@ return { ] }, "params": { - "cacheID": "4364cf9b985fb746dde62c1e94063390", + "cacheID": "c8fb4975f792904f5106fb8518406063", "id": null, "metadata": { "connection": [ @@ -436,11 +446,11 @@ return { }, "name": "ControlOverviewPageQuery", "operationKind": "query", - "text": "query ControlOverviewPageQuery(\n $controlId: ID!\n) {\n control: node(id: $controlId) {\n __typename\n id\n ... on Control {\n name\n description\n state\n category\n tasks(first: 100) {\n edges {\n node {\n id\n name\n description\n state\n evidences(first: 50) {\n edges {\n node {\n id\n mimeType\n filename\n size\n state\n createdAt\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n" + "text": "query ControlOverviewPageQuery(\n $controlId: ID!\n) {\n control: node(id: $controlId) {\n __typename\n id\n ... on Control {\n name\n description\n state\n category\n tasks(first: 100) {\n edges {\n node {\n id\n name\n description\n state\n version\n evidences(first: 50) {\n edges {\n node {\n id\n mimeType\n filename\n size\n state\n createdAt\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n" } }; })(); -(node as any).hash = "b91e90b278ccedc6b44d3a3c53593e73"; +(node as any).hash = "bd552dffe1a33e64e693a9170074989f"; export default node; diff --git a/apps/console/src/pages/__generated__/ControlOverviewPageUpdateTaskStateMutation.graphql.ts b/apps/console/src/pages/__generated__/ControlOverviewPageUpdateTaskStateMutation.graphql.ts index 00b345150..16775aee3 100644 --- a/apps/console/src/pages/__generated__/ControlOverviewPageUpdateTaskStateMutation.graphql.ts +++ b/apps/console/src/pages/__generated__/ControlOverviewPageUpdateTaskStateMutation.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<<168d543d518d84054b1f194ee13feeaa>> + * @generated SignedSource<> * @lightSyntaxTransform * @nogrep */ @@ -10,18 +10,22 @@ import { ConcreteRequest } from 'relay-runtime'; export type TaskState = "DONE" | "TODO"; -export type UpdateTaskStateInput = { - state: TaskState; +export type UpdateTaskInput = { + description?: string | null | undefined; + expectedVersion: number; + name?: string | null | undefined; + state?: TaskState | null | undefined; taskId: string; }; export type ControlOverviewPageUpdateTaskStateMutation$variables = { - input: UpdateTaskStateInput; + input: UpdateTaskInput; }; export type ControlOverviewPageUpdateTaskStateMutation$data = { - readonly updateTaskState: { + readonly updateTask: { readonly task: { readonly id: string; readonly state: TaskState; + readonly version: number; }; }; }; @@ -48,9 +52,9 @@ v1 = [ "variableName": "input" } ], - "concreteType": "UpdateTaskStatePayload", + "concreteType": "UpdateTaskPayload", "kind": "LinkedField", - "name": "updateTaskState", + "name": "updateTask", "plural": false, "selections": [ { @@ -74,6 +78,13 @@ v1 = [ "kind": "ScalarField", "name": "state", "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "version", + "storageKey": null } ], "storageKey": null @@ -100,16 +111,16 @@ return { "selections": (v1/*: any*/) }, "params": { - "cacheID": "7099089b96d6ca450d88f0a3597b2203", + "cacheID": "4ebc7b830cc1c2129ec26429ab681c44", "id": null, "metadata": {}, "name": "ControlOverviewPageUpdateTaskStateMutation", "operationKind": "mutation", - "text": "mutation ControlOverviewPageUpdateTaskStateMutation(\n $input: UpdateTaskStateInput!\n) {\n updateTaskState(input: $input) {\n task {\n id\n state\n }\n }\n}\n" + "text": "mutation ControlOverviewPageUpdateTaskStateMutation(\n $input: UpdateTaskInput!\n) {\n updateTask(input: $input) {\n task {\n id\n state\n version\n }\n }\n}\n" } }; })(); -(node as any).hash = "a81e1f58fa9931a70b85633b6ad0bd7a"; +(node as any).hash = "9a076b4306fee5793009ea3082e5cde2"; export default node;