{"version":3,"file":"isClipboardDataValid.js","names":["fieldAffectsData","fieldHasSubFields","isClipboardDataValid","data","path","args","type","isClipboardBlocksValid","blocksFromClipboard","blocks","blocksFromConfig","schemaBlocks","isClipboardFieldsValid","fieldsFromClipboard","fields","fieldsFromConfig","schemaFields","length","every","clipboardField","i","configField","affectsData","name","hasNestedFieldsConfig","hasNestedFieldsClipboard","configBlockMap","Map","map","block","slug","size","checkedSlugs","Set","currBlock","currSlug","has","configBlock","get","add"],"sources":["../../../src/elements/ClipboardAction/isClipboardDataValid.ts"],"sourcesContent":["import type { ClientBlock, ClientField } from 'payload'\n\nimport { fieldAffectsData, fieldHasSubFields } from 'payload/shared'\n\nimport type { ClipboardPasteActionValidateArgs } from './types.js'\n\n/**\n * Validates whether clipboard data is compatible with the target schema.\n * For this to be true, the copied field and the target to be pasted must\n * be structurally equivalent (same schema)\n *\n * @returns True if the clipboard data is valid and can be pasted, false otherwise\n */\nexport function isClipboardDataValid({ data, path, ...args }: ClipboardPasteActionValidateArgs) {\n if (typeof data === 'undefined' || !path || !args.type) {\n return false\n }\n\n if (args.type === 'blocks') {\n return isClipboardBlocksValid({\n blocksFromClipboard: args.blocks,\n blocksFromConfig: args.schemaBlocks,\n })\n } else {\n return isClipboardFieldsValid({\n fieldsFromClipboard: args.fields,\n fieldsFromConfig: args.schemaFields,\n })\n }\n}\n\nfunction isClipboardFieldsValid({\n fieldsFromClipboard,\n fieldsFromConfig,\n}: {\n fieldsFromClipboard: ClientField[]\n fieldsFromConfig?: ClientField[]\n}): boolean {\n if (!fieldsFromConfig || fieldsFromClipboard.length !== fieldsFromConfig?.length) {\n return false\n }\n\n return fieldsFromClipboard.every((clipboardField, i) => {\n const configField = fieldsFromConfig[i]\n\n if (clipboardField.type !== configField.type) {\n return false\n }\n\n const affectsData = fieldAffectsData(clipboardField) && fieldAffectsData(configField)\n if (affectsData && clipboardField.name !== configField.name) {\n return false\n }\n\n const hasNestedFieldsConfig = fieldHasSubFields(configField)\n const hasNestedFieldsClipboard = fieldHasSubFields(clipboardField)\n if (hasNestedFieldsClipboard !== hasNestedFieldsConfig) {\n return false\n }\n\n if (hasNestedFieldsClipboard && hasNestedFieldsConfig) {\n return isClipboardFieldsValid({\n fieldsFromClipboard: clipboardField.fields,\n fieldsFromConfig: configField.fields,\n })\n }\n\n return true\n })\n}\n\nfunction isClipboardBlocksValid({\n blocksFromClipboard,\n blocksFromConfig,\n}: {\n blocksFromClipboard: ClientBlock[]\n blocksFromConfig?: ClientBlock[]\n}) {\n const configBlockMap = new Map(blocksFromConfig?.map((block) => [block.slug, block]))\n\n if (!configBlockMap.size) {\n return false\n }\n\n const checkedSlugs = new Set()\n\n for (const currBlock of blocksFromClipboard) {\n const currSlug = currBlock.slug\n\n if (!checkedSlugs.has(currSlug)) {\n const configBlock = configBlockMap.get(currSlug)\n if (!configBlock) {\n return false\n }\n\n if (\n !isClipboardFieldsValid({\n fieldsFromClipboard: currBlock.fields,\n fieldsFromConfig: configBlock.fields,\n })\n ) {\n return false\n }\n\n checkedSlugs.add(currSlug)\n }\n }\n return true\n}\n"],"mappings":"AAEA,SAASA,gBAAgB,EAAEC,iBAAiB,QAAQ;AAIpD;;;;;;;AAOA,OAAO,SAASC,qBAAqB;EAAEC,IAAI;EAAEC,IAAI;EAAE,GAAGC;AAAA,CAAwC;EAC5F,IAAI,OAAOF,IAAA,KAAS,eAAe,CAACC,IAAA,IAAQ,CAACC,IAAA,CAAKC,IAAI,EAAE;IACtD,OAAO;EACT;EAEA,IAAID,IAAA,CAAKC,IAAI,KAAK,UAAU;IAC1B,OAAOC,sBAAA,CAAuB;MAC5BC,mBAAA,EAAqBH,IAAA,CAAKI,MAAM;MAChCC,gBAAA,EAAkBL,IAAA,CAAKM;IACzB;EACF,OAAO;IACL,OAAOC,sBAAA,CAAuB;MAC5BC,mBAAA,EAAqBR,IAAA,CAAKS,MAAM;MAChCC,gBAAA,EAAkBV,IAAA,CAAKW;IACzB;EACF;AACF;AAEA,SAASJ,uBAAuB;EAC9BC,mBAAmB;EACnBE;AAAgB,CAIjB;EACC,IAAI,CAACA,gBAAA,IAAoBF,mBAAA,CAAoBI,MAAM,KAAKF,gBAAA,EAAkBE,MAAA,EAAQ;IAChF,OAAO;EACT;EAEA,OAAOJ,mBAAA,CAAoBK,KAAK,CAAC,CAACC,cAAA,EAAgBC,CAAA;IAChD,MAAMC,WAAA,GAAcN,gBAAgB,CAACK,CAAA,CAAE;IAEvC,IAAID,cAAA,CAAeb,IAAI,KAAKe,WAAA,CAAYf,IAAI,EAAE;MAC5C,OAAO;IACT;IAEA,MAAMgB,WAAA,GAActB,gBAAA,CAAiBmB,cAAA,KAAmBnB,gBAAA,CAAiBqB,WAAA;IACzE,IAAIC,WAAA,IAAeH,cAAA,CAAeI,IAAI,KAAKF,WAAA,CAAYE,IAAI,EAAE;MAC3D,OAAO;IACT;IAEA,MAAMC,qBAAA,GAAwBvB,iBAAA,CAAkBoB,WAAA;IAChD,MAAMI,wBAAA,GAA2BxB,iBAAA,CAAkBkB,cAAA;IACnD,IAAIM,wBAAA,KAA6BD,qBAAA,EAAuB;MACtD,OAAO;IACT;IAEA,IAAIC,wBAAA,IAA4BD,qBAAA,EAAuB;MACrD,OAAOZ,sBAAA,CAAuB;QAC5BC,mBAAA,EAAqBM,cAAA,CAAeL,MAAM;QAC1CC,gBAAA,EAAkBM,WAAA,CAAYP;MAChC;IACF;IAEA,OAAO;EACT;AACF;AAEA,SAASP,uBAAuB;EAC9BC,mBAAmB;EACnBE;AAAgB,CAIjB;EACC,MAAMgB,cAAA,GAAiB,IAAIC,GAAA,CAAIjB,gBAAA,EAAkBkB,GAAA,CAAKC,KAAA,IAAU,CAACA,KAAA,CAAMC,IAAI,EAAED,KAAA,CAAM;EAEnF,IAAI,CAACH,cAAA,CAAeK,IAAI,EAAE;IACxB,OAAO;EACT;EAEA,MAAMC,YAAA,GAAe,IAAIC,GAAA;EAEzB,KAAK,MAAMC,SAAA,IAAa1B,mBAAA,EAAqB;IAC3C,MAAM2B,QAAA,GAAWD,SAAA,CAAUJ,IAAI;IAE/B,IAAI,CAACE,YAAA,CAAaI,GAAG,CAACD,QAAA,GAAW;MAC/B,MAAME,WAAA,GAAcX,cAAA,CAAeY,GAAG,CAACH,QAAA;MACvC,IAAI,CAACE,WAAA,EAAa;QAChB,OAAO;MACT;MAEA,IACE,CAACzB,sBAAA,CAAuB;QACtBC,mBAAA,EAAqBqB,SAAA,CAAUpB,MAAM;QACrCC,gBAAA,EAAkBsB,WAAA,CAAYvB;MAChC,IACA;QACA,OAAO;MACT;MAEAkB,YAAA,CAAaO,GAAG,CAACJ,QAAA;IACnB;EACF;EACA,OAAO;AACT","ignoreList":[]}