From c16a5f417920a0b77b3f44a33e1281eda3b64838 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rge=20N=C3=A6ss?= Date: Mon, 8 Apr 2024 16:31:37 +0200 Subject: [PATCH] feat(sanity): use actions API when deleting documents (#6115) * feat(sanity): use actions API when deleting documents * fix(sanity): add skipCrossDatasetReferenceValidation to delete action --- .../document/document-pair/operationEvents.ts | 3 ++ .../document-pair/operations/helpers.ts | 3 ++ .../document-pair/serverOperations/delete.ts | 29 +++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 packages/sanity/src/core/store/_legacy/document/document-pair/serverOperations/delete.ts diff --git a/packages/sanity/src/core/store/_legacy/document/document-pair/operationEvents.ts b/packages/sanity/src/core/store/_legacy/document/document-pair/operationEvents.ts index 5e5b19b0757..4cd9797fdc1 100644 --- a/packages/sanity/src/core/store/_legacy/document/document-pair/operationEvents.ts +++ b/packages/sanity/src/core/store/_legacy/document/document-pair/operationEvents.ts @@ -32,6 +32,7 @@ import {patch} from './operations/patch' import {publish} from './operations/publish' import {restore} from './operations/restore' import {unpublish} from './operations/unpublish' +import {del as serverDel} from './serverOperations/delete' import {patch as serverPatch} from './serverOperations/patch' import {publish as serverPublish} from './serverOperations/publish' import {unpublish as serverUnpublish} from './serverOperations/unpublish' @@ -62,6 +63,8 @@ const operationImpls = { //as we add server operations one by one, we can add them here const serverOperationImpls = { ...operationImpls, + del: serverDel, + delete: serverDel, patch: serverPatch, publish: serverPublish, unpublish: serverUnpublish, diff --git a/packages/sanity/src/core/store/_legacy/document/document-pair/operations/helpers.ts b/packages/sanity/src/core/store/_legacy/document/document-pair/operations/helpers.ts index c9b5aeb2238..192e8a6dbaf 100644 --- a/packages/sanity/src/core/store/_legacy/document/document-pair/operations/helpers.ts +++ b/packages/sanity/src/core/store/_legacy/document/document-pair/operations/helpers.ts @@ -1,6 +1,7 @@ import {type IdPair} from '../../types' import {emitOperation} from '../operationEvents' import {publish} from '../operations/publish' +import {del as serverDel} from '../serverOperations/delete' import {patch as serverPatch} from '../serverOperations/patch' import {publish as serverPublish} from '../serverOperations/publish' import {unpublish as serverUnpublish} from '../serverOperations/unpublish' @@ -70,6 +71,8 @@ export function createOperationsAPI(args: OperationArgs): OperationsAPI { if (args.serverActionsEnabled) { return { ...operationsAPI, + delete: wrap('delete', serverDel, args), + del: wrap('delete', serverDel, args), patch: wrap('patch', serverPatch, args), publish: wrap('publish', serverPublish, args), unpublish: wrap('unpublish', serverUnpublish, args), diff --git a/packages/sanity/src/core/store/_legacy/document/document-pair/serverOperations/delete.ts b/packages/sanity/src/core/store/_legacy/document/document-pair/serverOperations/delete.ts new file mode 100644 index 00000000000..fdcbe50cf9b --- /dev/null +++ b/packages/sanity/src/core/store/_legacy/document/document-pair/serverOperations/delete.ts @@ -0,0 +1,29 @@ +import {type OperationImpl} from '../operations/types' + +export const del: OperationImpl<[], 'NOTHING_TO_DELETE'> = { + disabled: ({snapshots}) => (snapshots.draft || snapshots.published ? false : 'NOTHING_TO_DELETE'), + execute: ({client: globalClient, schema, idPair, typeName}) => { + const vXClient = globalClient.withConfig({apiVersion: 'X'}) + + const {dataset} = globalClient.config() + + return vXClient.observable.request({ + url: `/data/actions/${dataset}`, + method: 'post', + tag: 'document.delete', + // this disables referential integrity for cross-dataset references. we + // have this set because we warn against deletes in the `ConfirmDeleteDialog` + // UI. This operation is run when "delete anyway" is clicked + query: {skipCrossDatasetReferenceValidation: 'true'}, + body: { + actions: [ + { + actionType: 'sanity.action.document.delete', + draftId: idPair.draftId, + publishedId: idPair.publishedId, + }, + ], + }, + }) + }, +}