@payloadcms/ui 3.76.0-canary.4 → 3.76.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/elements/Button/index.js +1 -1
  2. package/dist/elements/Button/index.js.map +1 -1
  3. package/dist/elements/CopyLocaleData/index.d.ts.map +1 -1
  4. package/dist/elements/CopyLocaleData/index.js +38 -34
  5. package/dist/elements/CopyLocaleData/index.js.map +1 -1
  6. package/dist/elements/Link/index.d.ts.map +1 -1
  7. package/dist/elements/ReactSelect/index.js +1 -1
  8. package/dist/elements/ReactSelect/index.js.map +1 -1
  9. package/dist/elements/Thumbnail/createThumbnail.js +2 -2
  10. package/dist/elements/Thumbnail/createThumbnail.js.map +1 -1
  11. package/dist/elements/UnpublishButton/index.d.ts.map +1 -1
  12. package/dist/elements/UnpublishButton/index.js +41 -40
  13. package/dist/elements/UnpublishButton/index.js.map +1 -1
  14. package/dist/exports/client/{DatePicker-GT6CXMEH.js → DatePicker-YF5TBW3N.js} +2 -2
  15. package/dist/exports/client/chunk-ZPLD37T2.js +29 -0
  16. package/dist/exports/client/{chunk-USMS5YRL.js.map → chunk-ZPLD37T2.js.map} +4 -4
  17. package/dist/exports/client/index.js +12 -12
  18. package/dist/exports/client/index.js.map +3 -3
  19. package/dist/fields/Number/index.js +1 -1
  20. package/dist/fields/Number/index.js.map +1 -1
  21. package/dist/fields/Tabs/index.js +42 -41
  22. package/dist/fields/Tabs/index.js.map +1 -1
  23. package/dist/fields/Text/index.js +1 -1
  24. package/dist/fields/Text/index.js.map +1 -1
  25. package/dist/fields/shared/index.js +1 -1
  26. package/dist/fields/shared/index.js.map +1 -1
  27. package/dist/forms/Form/reduceToSerializableFields.js +1 -1
  28. package/dist/forms/Form/reduceToSerializableFields.js.map +1 -1
  29. package/dist/forms/WatchChildErrors/index.d.ts.map +1 -1
  30. package/dist/forms/WatchChildErrors/index.js +2 -1
  31. package/dist/forms/WatchChildErrors/index.js.map +1 -1
  32. package/dist/forms/fieldSchemasToFormState/isRowCollapsed.js +1 -1
  33. package/dist/forms/fieldSchemasToFormState/isRowCollapsed.js.map +1 -1
  34. package/dist/forms/fieldSchemasToFormState/renderField.js +1 -1
  35. package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
  36. package/dist/hooks/useQueue.js +1 -1
  37. package/dist/hooks/useQueue.js.map +1 -1
  38. package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
  39. package/dist/providers/ServerFunctions/index.js +8 -10
  40. package/dist/providers/ServerFunctions/index.js.map +1 -1
  41. package/dist/providers/TableColumns/buildColumnState/index.js +2 -2
  42. package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
  43. package/dist/providers/TableColumns/buildColumnState/renderCell.js +1 -1
  44. package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
  45. package/dist/utilities/buildFieldSchemaMap/traverseFields.js +1 -1
  46. package/dist/utilities/buildFieldSchemaMap/traverseFields.js.map +1 -1
  47. package/dist/utilities/copyDataFromLocale.d.ts.map +1 -1
  48. package/dist/utilities/copyDataFromLocale.js +3 -5
  49. package/dist/utilities/copyDataFromLocale.js.map +1 -1
  50. package/dist/utilities/getDisplayedFieldValue.js +3 -3
  51. package/dist/utilities/getDisplayedFieldValue.js.map +1 -1
  52. package/dist/utilities/isURLAllowed.js +2 -2
  53. package/dist/utilities/isURLAllowed.js.map +1 -1
  54. package/dist/views/Edit/index.js +2 -2
  55. package/dist/views/Edit/index.js.map +1 -1
  56. package/package.json +6 -6
  57. package/dist/exports/client/chunk-USMS5YRL.js +0 -29
  58. /package/dist/exports/client/{DatePicker-GT6CXMEH.js.map → DatePicker-YF5TBW3N.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"copyDataFromLocale.js","names":["ObjectIdImport","canAccessAdmin","formatErrors","traverseFields","fieldAffectsData","fieldShouldBeLocalized","tabHasName","ObjectId","default","iterateFields","fields","fromLocaleData","toLocaleData","req","parentIsLocalized","map","field","type","name","undefined","includes","item","index","id","toHexString","localized","Array","isArray","length","blockData","block","payload","blocks","blockType","blockReferences","find","slug","tabs","tab","mergeData","removeIdIfParentIsLocalized","data","callback","ref","fillEmpty","copyDataFromLocaleHandler","args","copyDataFromLocale","err","logger","error","msg","fromLocale","toLocale","message","collectionSlug","docID","globalSlug","overrideData","collections","globals","user","Promise","allSettled","findGlobal","depth","locale","overrideAccess","findByID","collection","joins","status","Error","config","fromLocaleDataWithoutID","value","toLocaleDataWithoutID","dataWithID","updateGlobal","update"],"sources":["../../src/utilities/copyDataFromLocale.ts"],"sourcesContent":["import ObjectIdImport from 'bson-objectid'\nimport {\n canAccessAdmin,\n type CollectionSlug,\n type Data,\n type Field,\n type FlattenedBlock,\n formatErrors,\n type PayloadRequest,\n type ServerFunction,\n traverseFields,\n} from 'payload'\nimport { fieldAffectsData, fieldShouldBeLocalized, tabHasName } from 'payload/shared'\n\nconst ObjectId = 'default' in ObjectIdImport ? ObjectIdImport.default : ObjectIdImport\n\nexport type CopyDataFromLocaleArgs = {\n collectionSlug?: CollectionSlug\n docID?: number | string\n fromLocale: string\n globalSlug?: string\n overrideData?: boolean\n req: PayloadRequest\n toLocale: string\n}\n\nfunction iterateFields(\n fields: Field[],\n fromLocaleData: Data,\n toLocaleData: Data,\n req: PayloadRequest,\n parentIsLocalized: boolean,\n): void {\n fields.map((field) => {\n if (fieldAffectsData(field)) {\n switch (field.type) {\n case 'array':\n // if the field has no value, take the source value\n if (\n field.name in toLocaleData &&\n // only replace if the target value is null or undefined\n [null, undefined].includes(toLocaleData[field.name]) &&\n field.name in fromLocaleData\n ) {\n toLocaleData[field.name] = fromLocaleData[field.name]\n break\n }\n\n // if the field has a value - loop over the data from target\n if (field.name in toLocaleData) {\n toLocaleData[field.name].map((item: Data, index: number) => {\n if (fromLocaleData[field.name]?.[index]) {\n // Generate new IDs if the field is localized to prevent errors with relational DBs.\n if (fieldShouldBeLocalized({ field, parentIsLocalized })) {\n toLocaleData[field.name][index].id = new ObjectId().toHexString()\n }\n\n iterateFields(\n field.fields,\n fromLocaleData[field.name][index],\n item,\n req,\n parentIsLocalized || field.localized,\n )\n }\n })\n }\n break\n\n case 'blocks':\n // if the field has no value, take the source value\n if (\n field.name in toLocaleData &&\n // only replace if the target value is null, undefined, or empty array\n ([null, undefined].includes(toLocaleData[field.name]) ||\n (Array.isArray(toLocaleData[field.name]) && toLocaleData[field.name].length === 0)) &&\n field.name in fromLocaleData\n ) {\n toLocaleData[field.name] = fromLocaleData[field.name]\n break\n }\n\n // if the field has a value - loop over the data from target\n if (field.name in toLocaleData) {\n toLocaleData[field.name].map((blockData: Data, index: number) => {\n const block =\n req.payload.blocks[blockData.blockType] ??\n ((field.blockReferences ?? field.blocks).find(\n (block) => typeof block !== 'string' && block.slug === blockData.blockType,\n ) as FlattenedBlock | undefined)\n\n // Generate new IDs if the field is localized to prevent errors with relational DBs.\n if (fieldShouldBeLocalized({ field, parentIsLocalized })) {\n toLocaleData[field.name][index].id = new ObjectId().toHexString()\n }\n\n if (block?.fields?.length) {\n iterateFields(\n block?.fields,\n fromLocaleData[field.name][index],\n blockData,\n req,\n parentIsLocalized || field.localized,\n )\n }\n })\n }\n\n break\n\n case 'checkbox':\n case 'code':\n case 'date':\n case 'email':\n case 'json':\n case 'number':\n case 'point':\n case 'radio':\n case 'relationship':\n case 'richText':\n case 'select':\n case 'text':\n case 'textarea':\n case 'upload':\n if (\n field.name in toLocaleData &&\n // only replace if the target value is null or undefined\n [null, undefined].includes(toLocaleData[field.name]) &&\n field.name in fromLocaleData\n ) {\n toLocaleData[field.name] = fromLocaleData[field.name]\n }\n break\n\n case 'group': {\n if (\n fieldAffectsData(field) &&\n field.name in toLocaleData &&\n fromLocaleData?.[field.name] !== undefined\n ) {\n iterateFields(\n field.fields,\n fromLocaleData[field.name],\n toLocaleData[field.name],\n req,\n parentIsLocalized || field.localized,\n )\n } else {\n iterateFields(field.fields, fromLocaleData, toLocaleData, req, parentIsLocalized)\n }\n break\n }\n }\n } else {\n switch (field.type) {\n case 'collapsible':\n case 'row':\n iterateFields(field.fields, fromLocaleData, toLocaleData, req, parentIsLocalized)\n break\n\n case 'tabs':\n field.tabs.map((tab) => {\n if (tabHasName(tab)) {\n if (tab.name in toLocaleData && fromLocaleData?.[tab.name] !== undefined) {\n iterateFields(\n tab.fields,\n fromLocaleData[tab.name],\n toLocaleData[tab.name],\n req,\n parentIsLocalized,\n )\n }\n } else {\n iterateFields(tab.fields, fromLocaleData, toLocaleData, req, parentIsLocalized)\n }\n })\n break\n }\n }\n })\n}\n\nfunction mergeData(\n fromLocaleData: Data,\n toLocaleData: Data,\n fields: Field[],\n req: PayloadRequest,\n parentIsLocalized: boolean,\n): Data {\n iterateFields(fields, fromLocaleData, toLocaleData, req, parentIsLocalized)\n\n return toLocaleData\n}\n\n/**\n * We don't have to recursively remove all ids,\n * just the ones from the fields inside a localized array or block.\n */\nfunction removeIdIfParentIsLocalized(data: Data, fields: Field[]): Data {\n traverseFields({\n callback: ({ parentIsLocalized, ref }) => {\n if (parentIsLocalized) {\n delete (ref as { id: unknown }).id\n }\n },\n fields,\n fillEmpty: false,\n ref: data,\n })\n\n return data\n}\n\nexport const copyDataFromLocaleHandler: ServerFunction<CopyDataFromLocaleArgs> = async (args) => {\n const { req } = args\n\n try {\n return await copyDataFromLocale(args)\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `There was an error copying data from \"${args.fromLocale}\" to \"${args.toLocale}\"`,\n })\n\n if (err.message === 'Unauthorized') {\n return null\n }\n\n return formatErrors(err)\n }\n}\n\nexport const copyDataFromLocale = async (args: CopyDataFromLocaleArgs) => {\n const {\n collectionSlug,\n docID,\n fromLocale,\n globalSlug,\n overrideData = false,\n req: {\n payload,\n payload: { collections, globals },\n user,\n },\n req,\n toLocale,\n } = args\n\n await canAccessAdmin({ req })\n\n const [fromLocaleData, toLocaleData] = await Promise.allSettled([\n globalSlug\n ? payload.findGlobal({\n slug: globalSlug,\n depth: 0,\n locale: fromLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n })\n : payload.findByID({\n id: docID,\n collection: collectionSlug,\n depth: 0,\n joins: false,\n locale: fromLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n }),\n globalSlug\n ? payload.findGlobal({\n slug: globalSlug,\n depth: 0,\n locale: toLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n })\n : payload.findByID({\n id: docID,\n collection: collectionSlug,\n depth: 0,\n joins: false,\n locale: toLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n }),\n ])\n\n if (fromLocaleData.status === 'rejected') {\n throw new Error(`Error fetching data from locale \"${fromLocale}\"`)\n }\n\n if (toLocaleData.status === 'rejected') {\n throw new Error(`Error fetching data from locale \"${toLocale}\"`)\n }\n\n const fields = globalSlug\n ? globals[globalSlug].config.fields\n : collections[collectionSlug].config.fields\n\n const fromLocaleDataWithoutID = fromLocaleData.value\n const toLocaleDataWithoutID = toLocaleData.value\n\n const dataWithID = overrideData\n ? fromLocaleDataWithoutID\n : mergeData(fromLocaleDataWithoutID, toLocaleDataWithoutID, fields, req, false)\n\n const data = removeIdIfParentIsLocalized(dataWithID, fields)\n\n return globalSlug\n ? await payload.updateGlobal({\n slug: globalSlug,\n data,\n locale: toLocale,\n overrideAccess: false,\n req,\n user,\n })\n : await payload.update({\n id: docID,\n collection: collectionSlug,\n data,\n locale: toLocale,\n overrideAccess: false,\n req,\n user,\n })\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"copyDataFromLocale.js","names":["ObjectIdImport","canAccessAdmin","traverseFields","fieldAffectsData","fieldShouldBeLocalized","tabHasName","ObjectId","default","iterateFields","fields","fromLocaleData","toLocaleData","req","parentIsLocalized","map","field","type","name","undefined","includes","item","index","id","toHexString","localized","Array","isArray","length","blockData","block","payload","blocks","blockType","blockReferences","find","slug","tabs","tab","mergeData","removeIdIfParentIsLocalized","data","callback","ref","fillEmpty","copyDataFromLocaleHandler","args","copyDataFromLocale","err","logger","error","msg","fromLocale","toLocale","collectionSlug","docID","globalSlug","overrideData","collections","globals","user","Promise","allSettled","findGlobal","depth","locale","overrideAccess","findByID","collection","joins","status","Error","config","fromLocaleDataWithoutID","value","toLocaleDataWithoutID","dataWithID","updateGlobal","update"],"sources":["../../src/utilities/copyDataFromLocale.ts"],"sourcesContent":["import ObjectIdImport from 'bson-objectid'\nimport {\n canAccessAdmin,\n type CollectionSlug,\n type Data,\n type Field,\n type FlattenedBlock,\n type PayloadRequest,\n type ServerFunction,\n traverseFields,\n} from 'payload'\nimport { fieldAffectsData, fieldShouldBeLocalized, tabHasName } from 'payload/shared'\n\nconst ObjectId = 'default' in ObjectIdImport ? ObjectIdImport.default : ObjectIdImport\n\nexport type CopyDataFromLocaleArgs = {\n collectionSlug?: CollectionSlug\n docID?: number | string\n fromLocale: string\n globalSlug?: string\n overrideData?: boolean\n req: PayloadRequest\n toLocale: string\n}\n\nfunction iterateFields(\n fields: Field[],\n fromLocaleData: Data,\n toLocaleData: Data,\n req: PayloadRequest,\n parentIsLocalized: boolean,\n): void {\n fields.map((field) => {\n if (fieldAffectsData(field)) {\n switch (field.type) {\n case 'array':\n // if the field has no value, take the source value\n if (\n field.name in toLocaleData &&\n // only replace if the target value is null or undefined\n [null, undefined].includes(toLocaleData[field.name]) &&\n field.name in fromLocaleData\n ) {\n toLocaleData[field.name] = fromLocaleData[field.name]\n break\n }\n\n // if the field has a value - loop over the data from target\n if (field.name in toLocaleData) {\n toLocaleData[field.name].map((item: Data, index: number) => {\n if (fromLocaleData[field.name]?.[index]) {\n // Generate new IDs if the field is localized to prevent errors with relational DBs.\n if (fieldShouldBeLocalized({ field, parentIsLocalized })) {\n toLocaleData[field.name][index].id = new ObjectId().toHexString()\n }\n\n iterateFields(\n field.fields,\n fromLocaleData[field.name][index],\n item,\n req,\n parentIsLocalized || field.localized,\n )\n }\n })\n }\n break\n\n case 'blocks':\n // if the field has no value, take the source value\n if (\n field.name in toLocaleData &&\n // only replace if the target value is null, undefined, or empty array\n ([null, undefined].includes(toLocaleData[field.name]) ||\n (Array.isArray(toLocaleData[field.name]) && toLocaleData[field.name].length === 0)) &&\n field.name in fromLocaleData\n ) {\n toLocaleData[field.name] = fromLocaleData[field.name]\n break\n }\n\n // if the field has a value - loop over the data from target\n if (field.name in toLocaleData) {\n toLocaleData[field.name].map((blockData: Data, index: number) => {\n const block =\n req.payload.blocks[blockData.blockType] ??\n ((field.blockReferences ?? field.blocks).find(\n (block) => typeof block !== 'string' && block.slug === blockData.blockType,\n ) as FlattenedBlock | undefined)\n\n // Generate new IDs if the field is localized to prevent errors with relational DBs.\n if (fieldShouldBeLocalized({ field, parentIsLocalized })) {\n toLocaleData[field.name][index].id = new ObjectId().toHexString()\n }\n\n if (block?.fields?.length) {\n iterateFields(\n block?.fields,\n fromLocaleData[field.name][index],\n blockData,\n req,\n parentIsLocalized || field.localized,\n )\n }\n })\n }\n\n break\n\n case 'checkbox':\n case 'code':\n case 'date':\n case 'email':\n case 'json':\n case 'number':\n case 'point':\n case 'radio':\n case 'relationship':\n case 'richText':\n case 'select':\n case 'text':\n case 'textarea':\n case 'upload':\n if (\n field.name in toLocaleData &&\n // only replace if the target value is null or undefined\n [null, undefined].includes(toLocaleData[field.name]) &&\n field.name in fromLocaleData\n ) {\n toLocaleData[field.name] = fromLocaleData[field.name]\n }\n break\n\n case 'group': {\n if (\n fieldAffectsData(field) &&\n field.name in toLocaleData &&\n fromLocaleData?.[field.name] !== undefined\n ) {\n iterateFields(\n field.fields,\n fromLocaleData[field.name],\n toLocaleData[field.name],\n req,\n parentIsLocalized || field.localized,\n )\n } else {\n iterateFields(field.fields, fromLocaleData, toLocaleData, req, parentIsLocalized)\n }\n break\n }\n }\n } else {\n switch (field.type) {\n case 'collapsible':\n case 'row':\n iterateFields(field.fields, fromLocaleData, toLocaleData, req, parentIsLocalized)\n break\n\n case 'tabs':\n field.tabs.map((tab) => {\n if (tabHasName(tab)) {\n if (tab.name in toLocaleData && fromLocaleData?.[tab.name] !== undefined) {\n iterateFields(\n tab.fields,\n fromLocaleData[tab.name],\n toLocaleData[tab.name],\n req,\n parentIsLocalized,\n )\n }\n } else {\n iterateFields(tab.fields, fromLocaleData, toLocaleData, req, parentIsLocalized)\n }\n })\n break\n }\n }\n })\n}\n\nfunction mergeData(\n fromLocaleData: Data,\n toLocaleData: Data,\n fields: Field[],\n req: PayloadRequest,\n parentIsLocalized: boolean,\n): Data {\n iterateFields(fields, fromLocaleData, toLocaleData, req, parentIsLocalized)\n\n return toLocaleData\n}\n\n/**\n * We don't have to recursively remove all ids,\n * just the ones from the fields inside a localized array or block.\n */\nfunction removeIdIfParentIsLocalized(data: Data, fields: Field[]): Data {\n traverseFields({\n callback: ({ parentIsLocalized, ref }) => {\n if (parentIsLocalized) {\n delete (ref as { id: unknown }).id\n }\n },\n fields,\n fillEmpty: false,\n ref: data,\n })\n\n return data\n}\n\nexport const copyDataFromLocaleHandler: ServerFunction<CopyDataFromLocaleArgs> = async (args) => {\n const { req } = args\n\n try {\n return await copyDataFromLocale(args)\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `There was an error copying data from \"${args.fromLocale}\" to \"${args.toLocale}\"`,\n })\n\n // Re-throw the error so it can be caught by the client\n throw err\n }\n}\n\nexport const copyDataFromLocale = async (args: CopyDataFromLocaleArgs) => {\n const {\n collectionSlug,\n docID,\n fromLocale,\n globalSlug,\n overrideData = false,\n req: {\n payload,\n payload: { collections, globals },\n user,\n },\n req,\n toLocale,\n } = args\n\n await canAccessAdmin({ req })\n\n const [fromLocaleData, toLocaleData] = await Promise.allSettled([\n globalSlug\n ? payload.findGlobal({\n slug: globalSlug,\n depth: 0,\n locale: fromLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n })\n : payload.findByID({\n id: docID,\n collection: collectionSlug,\n depth: 0,\n joins: false,\n locale: fromLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n }),\n globalSlug\n ? payload.findGlobal({\n slug: globalSlug,\n depth: 0,\n locale: toLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n })\n : payload.findByID({\n id: docID,\n collection: collectionSlug,\n depth: 0,\n joins: false,\n locale: toLocale,\n overrideAccess: false,\n user,\n // `select` would allow us to select only the fields we need in the future\n }),\n ])\n\n if (fromLocaleData.status === 'rejected') {\n throw new Error(`Error fetching data from locale \"${fromLocale}\"`)\n }\n\n if (toLocaleData.status === 'rejected') {\n throw new Error(`Error fetching data from locale \"${toLocale}\"`)\n }\n\n const fields = globalSlug\n ? globals[globalSlug].config.fields\n : collections[collectionSlug].config.fields\n\n const fromLocaleDataWithoutID = fromLocaleData.value\n const toLocaleDataWithoutID = toLocaleData.value\n\n const dataWithID = overrideData\n ? fromLocaleDataWithoutID\n : mergeData(fromLocaleDataWithoutID, toLocaleDataWithoutID, fields, req, false)\n\n const data = removeIdIfParentIsLocalized(dataWithID, fields)\n\n return globalSlug\n ? await payload.updateGlobal({\n slug: globalSlug,\n data,\n locale: toLocale,\n overrideAccess: false,\n req,\n user,\n })\n : await payload.update({\n id: docID,\n collection: collectionSlug,\n data,\n locale: toLocale,\n overrideAccess: false,\n req,\n user,\n })\n}\n"],"mappings":"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","ignoreList":[]}
@@ -16,13 +16,13 @@ export const getDisplayedFieldValue = (cellData, field, i18n) => {
16
16
  if (typeof selectedOption === 'object' && 'label' in selectedOption) {
17
17
  return isValidReactElement(selectedOption.label) ? selectedOption.label // Return JSX directly
18
18
  : getTranslation(selectedOption.label, i18n) || selectedOption.value // Use translation or fallback to value
19
- ;
19
+ ;
20
20
  }
21
21
  return selectedOption // If option is a string, return it directly
22
- ;
22
+ ;
23
23
  }
24
24
  }
25
25
  return cellData // Default fallback if no match found
26
- ;
26
+ ;
27
27
  };
28
28
  //# sourceMappingURL=getDisplayedFieldValue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getDisplayedFieldValue.js","names":["getTranslation","isValidReactElement","getDisplayedFieldValue","cellData","field","i18n","type","Array","isArray","options","selectedOption","find","opt","value","label"],"sources":["../../src/utilities/getDisplayedFieldValue.ts"],"sourcesContent":["import type { I18nClient } from '@payloadcms/translations'\nimport type { ClientField } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\n\nimport { isValidReactElement } from './isValidReactElement.js'\n\n/**\n * Returns the appropriate display value for a field.\n * - For select and radio fields:\n * - Returns JSX elements as-is.\n * - Translates localized label objects based on the current language.\n * - Returns string labels directly.\n * - Falls back to the option value if no valid label is found.\n * - For all other field types, returns `cellData` unchanged.\n */\nexport const getDisplayedFieldValue = (cellData: any, field: ClientField, i18n: I18nClient) => {\n if ((field?.type === 'select' || field?.type === 'radio') && Array.isArray(field.options)) {\n const selectedOption = field.options.find((opt) =>\n typeof opt === 'object' ? opt.value === cellData : opt === cellData,\n )\n\n if (selectedOption) {\n if (typeof selectedOption === 'object' && 'label' in selectedOption) {\n return isValidReactElement(selectedOption.label)\n ? selectedOption.label // Return JSX directly\n : getTranslation(selectedOption.label, i18n) || selectedOption.value // Use translation or fallback to value\n }\n return selectedOption // If option is a string, return it directly\n }\n }\n return cellData // Default fallback if no match found\n}\n"],"mappings":"AAGA,SAASA,cAAc,QAAQ;AAE/B,SAASC,mBAAmB,QAAQ;AAEpC;;;;;;;;;AASA,OAAO,MAAMC,sBAAA,GAAyBA,CAACC,QAAA,EAAeC,KAAA,EAAoBC,IAAA;EACxE,IAAI,CAACD,KAAA,EAAOE,IAAA,KAAS,YAAYF,KAAA,EAAOE,IAAA,KAAS,OAAM,KAAMC,KAAA,CAAMC,OAAO,CAACJ,KAAA,CAAMK,OAAO,GAAG;IACzF,MAAMC,cAAA,GAAiBN,KAAA,CAAMK,OAAO,CAACE,IAAI,CAAEC,GAAA,IACzC,OAAOA,GAAA,KAAQ,WAAWA,GAAA,CAAIC,KAAK,KAAKV,QAAA,GAAWS,GAAA,KAAQT,QAAA;IAG7D,IAAIO,cAAA,EAAgB;MAClB,IAAI,OAAOA,cAAA,KAAmB,YAAY,WAAWA,cAAA,EAAgB;QACnE,OAAOT,mBAAA,CAAoBS,cAAA,CAAeI,KAAK,IAC3CJ,cAAA,CAAeI,KAAK,CAAC;QAAA,EACrBd,cAAA,CAAeU,cAAA,CAAeI,KAAK,EAAET,IAAA,KAASK,cAAA,CAAeG,KAAK,CAAC;QAAA;MACzE;MACA,OAAOH,cAAA,CAAe;MAAA;IACxB;EACF;EACA,OAAOP,QAAA,CAAS;EAAA;AAClB","ignoreList":[]}
1
+ {"version":3,"file":"getDisplayedFieldValue.js","names":["getTranslation","isValidReactElement","getDisplayedFieldValue","cellData","field","i18n","type","Array","isArray","options","selectedOption","find","opt","value","label"],"sources":["../../src/utilities/getDisplayedFieldValue.ts"],"sourcesContent":["import type { I18nClient } from '@payloadcms/translations'\nimport type { ClientField } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\n\nimport { isValidReactElement } from './isValidReactElement.js'\n\n/**\n * Returns the appropriate display value for a field.\n * - For select and radio fields:\n * - Returns JSX elements as-is.\n * - Translates localized label objects based on the current language.\n * - Returns string labels directly.\n * - Falls back to the option value if no valid label is found.\n * - For all other field types, returns `cellData` unchanged.\n */\nexport const getDisplayedFieldValue = (cellData: any, field: ClientField, i18n: I18nClient) => {\n if ((field?.type === 'select' || field?.type === 'radio') && Array.isArray(field.options)) {\n const selectedOption = field.options.find((opt) =>\n typeof opt === 'object' ? opt.value === cellData : opt === cellData,\n )\n\n if (selectedOption) {\n if (typeof selectedOption === 'object' && 'label' in selectedOption) {\n return isValidReactElement(selectedOption.label)\n ? selectedOption.label // Return JSX directly\n : getTranslation(selectedOption.label, i18n) || selectedOption.value // Use translation or fallback to value\n }\n return selectedOption // If option is a string, return it directly\n }\n }\n return cellData // Default fallback if no match found\n}\n"],"mappings":"AAGA,SAASA,cAAc,QAAQ;AAE/B,SAASC,mBAAmB,QAAQ;AAEpC;;;;;;;;;AASA,OAAO,MAAMC,sBAAA,GAAyBA,CAACC,QAAA,EAAeC,KAAA,EAAoBC,IAAA;EACxE,IAAI,CAACD,KAAA,EAAOE,IAAA,KAAS,YAAYF,KAAA,EAAOE,IAAA,KAAS,OAAM,KAAMC,KAAA,CAAMC,OAAO,CAACJ,KAAA,CAAMK,OAAO,GAAG;IACzF,MAAMC,cAAA,GAAiBN,KAAA,CAAMK,OAAO,CAACE,IAAI,CAAEC,GAAA,IACzC,OAAOA,GAAA,KAAQ,WAAWA,GAAA,CAAIC,KAAK,KAAKV,QAAA,GAAWS,GAAA,KAAQT,QAAA;IAG7D,IAAIO,cAAA,EAAgB;MAClB,IAAI,OAAOA,cAAA,KAAmB,YAAY,WAAWA,cAAA,EAAgB;QACnE,OAAOT,mBAAA,CAAoBS,cAAA,CAAeI,KAAK,IAC3CJ,cAAA,CAAeI,KAAK,CAAC;QAAA,EACrBd,cAAA,CAAeU,cAAA,CAAeI,KAAK,EAAET,IAAA,KAASK,cAAA,CAAeG,KAAK,CAAC;AAAA;MACzE;MACA,OAAOH,cAAA,CAAe;AAAA;IACxB;EACF;EACA,OAAOP,QAAA,CAAS;AAAA;AAClB","ignoreList":[]}
@@ -15,7 +15,7 @@ export const isURLAllowed = (url, allowList) => {
15
15
  // Convert wildcards to a regex
16
16
  const regexPattern = value.replace(/\*\*/g, '.*') // Match any path
17
17
  .replace(/\*/g, '[^/]*') // Match any part of a path segment
18
- ;
18
+ ;
19
19
  const regex = new RegExp(`^${regexPattern}$`);
20
20
  return regex.test(parsedUrl.pathname);
21
21
  }
@@ -25,7 +25,7 @@ export const isURLAllowed = (url, allowList) => {
25
25
  });
26
26
  } catch {
27
27
  return false // If the URL is invalid, deny by default
28
- ;
28
+ ;
29
29
  }
30
30
  };
31
31
  //# sourceMappingURL=isURLAllowed.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"isURLAllowed.js","names":["isURLAllowed","url","allowList","parsedUrl","URL","some","allowItem","Object","entries","every","key","value","protocol","regexPattern","replace","regex","RegExp","test","pathname"],"sources":["../../src/utilities/isURLAllowed.ts"],"sourcesContent":["import type { AllowList } from 'payload'\n\nexport const isURLAllowed = (url: string, allowList: AllowList): boolean => {\n try {\n const parsedUrl = new URL(url)\n\n return allowList.some((allowItem) => {\n return Object.entries(allowItem).every(([key, value]) => {\n // Skip undefined or null values\n if (!value) {\n return true\n }\n // Compare protocol with colon\n if (key === 'protocol') {\n return typeof value === 'string' && parsedUrl.protocol === `${value}:`\n }\n\n if (key === 'pathname') {\n // Convert wildcards to a regex\n const regexPattern = value\n .replace(/\\*\\*/g, '.*') // Match any path\n .replace(/\\*/g, '[^/]*') // Match any part of a path segment\n const regex = new RegExp(`^${regexPattern}$`)\n return regex.test(parsedUrl.pathname)\n }\n\n // Default comparison for all other properties (hostname, port, search)\n return parsedUrl[key as keyof URL] === value\n })\n })\n } catch {\n return false // If the URL is invalid, deny by default\n }\n}\n"],"mappings":"AAEA,OAAO,MAAMA,YAAA,GAAeA,CAACC,GAAA,EAAaC,SAAA;EACxC,IAAI;IACF,MAAMC,SAAA,GAAY,IAAIC,GAAA,CAAIH,GAAA;IAE1B,OAAOC,SAAA,CAAUG,IAAI,CAAEC,SAAA;MACrB,OAAOC,MAAA,CAAOC,OAAO,CAACF,SAAA,EAAWG,KAAK,CAAC,CAAC,CAACC,GAAA,EAAKC,KAAA,CAAM;QAClD;QACA,IAAI,CAACA,KAAA,EAAO;UACV,OAAO;QACT;QACA;QACA,IAAID,GAAA,KAAQ,YAAY;UACtB,OAAO,OAAOC,KAAA,KAAU,YAAYR,SAAA,CAAUS,QAAQ,KAAK,GAAGD,KAAA,GAAQ;QACxE;QAEA,IAAID,GAAA,KAAQ,YAAY;UACtB;UACA,MAAMG,YAAA,GAAeF,KAAA,CAClBG,OAAO,CAAC,SAAS,MAAM;UAAA,CACvBA,OAAO,CAAC,OAAO,SAAS;UAAA;UAC3B,MAAMC,KAAA,GAAQ,IAAIC,MAAA,CAAO,IAAIH,YAAA,GAAe;UAC5C,OAAOE,KAAA,CAAME,IAAI,CAACd,SAAA,CAAUe,QAAQ;QACtC;QAEA;QACA,OAAOf,SAAS,CAACO,GAAA,CAAiB,KAAKC,KAAA;MACzC;IACF;EACF,EAAE,MAAM;IACN,OAAO,MAAM;IAAA;EACf;AACF","ignoreList":[]}
1
+ {"version":3,"file":"isURLAllowed.js","names":["isURLAllowed","url","allowList","parsedUrl","URL","some","allowItem","Object","entries","every","key","value","protocol","regexPattern","replace","regex","RegExp","test","pathname"],"sources":["../../src/utilities/isURLAllowed.ts"],"sourcesContent":["import type { AllowList } from 'payload'\n\nexport const isURLAllowed = (url: string, allowList: AllowList): boolean => {\n try {\n const parsedUrl = new URL(url)\n\n return allowList.some((allowItem) => {\n return Object.entries(allowItem).every(([key, value]) => {\n // Skip undefined or null values\n if (!value) {\n return true\n }\n // Compare protocol with colon\n if (key === 'protocol') {\n return typeof value === 'string' && parsedUrl.protocol === `${value}:`\n }\n\n if (key === 'pathname') {\n // Convert wildcards to a regex\n const regexPattern = value\n .replace(/\\*\\*/g, '.*') // Match any path\n .replace(/\\*/g, '[^/]*') // Match any part of a path segment\n const regex = new RegExp(`^${regexPattern}$`)\n return regex.test(parsedUrl.pathname)\n }\n\n // Default comparison for all other properties (hostname, port, search)\n return parsedUrl[key as keyof URL] === value\n })\n })\n } catch {\n return false // If the URL is invalid, deny by default\n }\n}\n"],"mappings":"AAEA,OAAO,MAAMA,YAAA,GAAeA,CAACC,GAAA,EAAaC,SAAA;EACxC,IAAI;IACF,MAAMC,SAAA,GAAY,IAAIC,GAAA,CAAIH,GAAA;IAE1B,OAAOC,SAAA,CAAUG,IAAI,CAAEC,SAAA;MACrB,OAAOC,MAAA,CAAOC,OAAO,CAACF,SAAA,EAAWG,KAAK,CAAC,CAAC,CAACC,GAAA,EAAKC,KAAA,CAAM;QAClD;QACA,IAAI,CAACA,KAAA,EAAO;UACV,OAAO;QACT;QACA;QACA,IAAID,GAAA,KAAQ,YAAY;UACtB,OAAO,OAAOC,KAAA,KAAU,YAAYR,SAAA,CAAUS,QAAQ,KAAK,GAAGD,KAAA,GAAQ;QACxE;QAEA,IAAID,GAAA,KAAQ,YAAY;UACtB;UACA,MAAMG,YAAA,GAAeF,KAAA,CAClBG,OAAO,CAAC,SAAS,MAAM;UAAA,CACvBA,OAAO,CAAC,OAAO,SAAS;AAAA;UAC3B,MAAMC,KAAA,GAAQ,IAAIC,MAAA,CAAO,IAAIH,YAAA,GAAe;UAC5C,OAAOE,KAAA,CAAME,IAAI,CAACd,SAAA,CAAUe,QAAQ;QACtC;QAEA;QACA,OAAOf,SAAS,CAACO,GAAA,CAAiB,KAAKC,KAAA;MACzC;IACF;EACF,EAAE,MAAM;IACN,OAAO,MAAM;AAAA;EACf;AACF","ignoreList":[]}
@@ -166,7 +166,7 @@ export function DefaultEditView({
166
166
  const lockDocumentsProp = docConfig?.lockDocuments !== undefined ? docConfig?.lockDocuments : true;
167
167
  const isLockingEnabled = lockDocumentsProp !== false;
168
168
  const lockDurationDefault = 300 // Default 5 minutes in seconds
169
- ;
169
+ ;
170
170
  const lockDuration = typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault;
171
171
  const lockDurationInMilliseconds = lockDuration * 1000;
172
172
  const autosaveEnabled = hasAutosaveEnabled(docConfig);
@@ -343,7 +343,7 @@ export function DefaultEditView({
343
343
  const currentTime = Date.now();
344
344
  const timeSinceLastUpdate = currentTime - editSessionStartTime;
345
345
  const updateLastEdited = isLockingEnabled && timeSinceLastUpdate >= 10000 // 10 seconds
346
- ;
346
+ ;
347
347
  if (updateLastEdited) {
348
348
  setEditSessionStartTime(currentTime);
349
349
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useRouter","useSearchParams","formatAdminURL","hasAutosaveEnabled","React","Fragment","useCallback","useEffect","useMemo","useRef","useState","toast","DocumentControls","DocumentDrawerHeader","useDocumentDrawerContext","DocumentFields","DocumentLocked","DocumentTakeOver","LeaveWithoutSaving","LivePreviewWindow","Upload","Form","useAuth","useConfig","useDocumentEvents","useDocumentInfo","useEditDepth","useLivePreviewContext","usePreviewURL","OperationProvider","useRouteCache","useRouteTransition","useServerFunctions","UploadControlsProvider","useUploadEdits","abortAndIgnore","handleAbortRef","handleBackToDashboard","handleGoBack","handleTakeOver","Auth","SetDocumentStepNav","SetDocumentTitle","baseClass","PENDING_SUCCESS_TOAST_KEY","DefaultEditView","BeforeDocumentControls","Description","EditMenuItems","LivePreview","CustomLivePreview","PreviewButton","PublishButton","SaveButton","SaveDraftButton","Status","UnpublishButton","CustomUpload","UploadControls","id","action","AfterDocument","AfterFields","apiURL","BeforeFields","collectionSlug","currentEditor","data","disableActions","disableCreate","disableLeaveWithoutSaving","docPermissions","documentIsLocked","documentLockState","getDocPermissions","getDocPreferences","globalSlug","hasPublishPermission","hasSavePermission","incrementVersionCount","initialState","isEditing","isInitializing","isLocked","isTrashed","lastUpdateTime","redirectAfterCreate","redirectAfterDelete","redirectAfterDuplicate","redirectAfterRestore","setCurrentEditor","setData","setDocumentIsLocked","setLastUpdateTime","unlockDocument","updateDocumentEditor","clearDoc","drawerSlug","onDelete","onDuplicate","onRestore","onSave","onSaveFromContext","isInDrawer","Boolean","refreshCookieAsync","user","config","admin","userSlug","routes","adminRoute","serverURL","getEntityConfig","collectionConfig","globalConfig","depth","router","params","reportUpdate","resetUploadEdits","getFormState","startRouteTransition","clearRouteCache","isLivePreviewEnabled","isLivePreviewing","previewWindowType","setURL","setLivePreviewURL","typeofLivePreviewURL","url","livePreviewURL","isPreviewEnabled","setPreviewURL","abortOnChangeRef","abortOnSaveRef","locale","get","entitySlug","slug","operation","auth","undefined","upload","docConfig","lockDocumentsProp","lockDocuments","isLockingEnabled","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","autosaveEnabled","isReadOnlyForIncomingUser","setIsReadOnlyForIncomingUser","showTakeOverModal","setShowTakeOverModal","editSessionStartTime","setEditSessionStartTime","Date","now","lockExpiryTime","isLockExpired","preventLeaveWithoutSaving","schemaPathSegments","validateBeforeSubmit","setValidateBeforeSubmit","disableLocalStrategy","nextHrefRef","handleDocumentLocking","lockedState","previousOwnerID","current","lockedUserID","hasShownLockedModal","lastEditedAt","getTime","handlePrevent","nextHref","handleLeaveConfirm","lockUser","isLockOwnedByCurrentUser","nextPath","URL","pathname","isInternalView","some","path","includes","err","console","error","json","ctx","context","formState","controller","document","doc","result","updatedAt","toISOString","message","window","sessionStorage","setItem","redirectRoute","push","docPreferences","previewURL","state","renderAllFields","returnLivePreviewURL","returnLockStatus","returnPreviewURL","schemaPath","join","signal","skipValidation","file","onChange","prevFormState","submitted","currentTime","timeSinceLastUpdate","updateLastEdited","abortOnChange","abortOnSave","pendingMessage","getItem","removeItem","success","shouldShowDocumentLockedModal","isFolderCollection","folders","_jsx","className","filter","_jsxs","disabled","disableSuccessStatus","disableValidationOnSubmit","isDocumentForm","method","onSuccess","AfterHeader","showDocumentID","isActive","onReadOnly","onTakeOver","documentLockStateRef","isWithinDoc","onConfirm","onPrevent","pluralLabel","labels","plural","useAsTitle","fallback","toString","customComponents","onDrawerCreateNew","permissions","readOnlyForIncomingUser","email","loginWithUsername","readOnly","requirePassword","useAPIKey","username","verify","uploadConfig","fields","forceSidebarWrap","_Fragment"],"sources":["../../../src/views/Edit/index.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientUser, DocumentViewClientProps } from 'payload'\n\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport { formatAdminURL, hasAutosaveEnabled } from 'payload/shared'\nimport React, { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type { FormProps } from '../../forms/Form/index.js'\nimport type { FormOnSuccess } from '../../forms/Form/types.js'\nimport type { LockedState } from '../../utilities/buildFormState.js'\n\nimport { DocumentControls } from '../../elements/DocumentControls/index.js'\nimport { DocumentDrawerHeader } from '../../elements/DocumentDrawer/DrawerHeader/index.js'\nimport { useDocumentDrawerContext } from '../../elements/DocumentDrawer/Provider.js'\nimport { DocumentFields } from '../../elements/DocumentFields/index.js'\nimport { DocumentLocked } from '../../elements/DocumentLocked/index.js'\nimport { DocumentTakeOver } from '../../elements/DocumentTakeOver/index.js'\nimport { LeaveWithoutSaving } from '../../elements/LeaveWithoutSaving/index.js'\nimport { LivePreviewWindow } from '../../elements/LivePreview/Window/index.js'\nimport { Upload } from '../../elements/Upload/index.js'\nimport { Form } from '../../forms/Form/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentEvents } from '../../providers/DocumentEvents/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useLivePreviewContext, usePreviewURL } from '../../providers/LivePreview/context.js'\nimport { OperationProvider } from '../../providers/Operation/index.js'\nimport { useRouteCache } from '../../providers/RouteCache/index.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { UploadControlsProvider } from '../../providers/UploadControls/index.js'\nimport { useUploadEdits } from '../../providers/UploadEdits/index.js'\nimport { abortAndIgnore, handleAbortRef } from '../../utilities/abortAndIgnore.js'\nimport { handleBackToDashboard } from '../../utilities/handleBackToDashboard.js'\nimport { handleGoBack } from '../../utilities/handleGoBack.js'\nimport { handleTakeOver } from '../../utilities/handleTakeOver.js'\nimport { Auth } from './Auth/index.js'\nimport { SetDocumentStepNav } from './SetDocumentStepNav/index.js'\nimport { SetDocumentTitle } from './SetDocumentTitle/index.js'\nimport './index.scss'\n\nconst baseClass = 'collection-edit'\nconst PENDING_SUCCESS_TOAST_KEY = 'payload-pending-success-toast'\n\nexport type OnSaveContext = {\n getDocPermissions?: boolean\n incrementVersionCount?: boolean\n}\n\n// This component receives props only on _pages_\n// When rendered within a drawer, props are empty\n// This is solely to support custom edit views which get server-rendered\nexport function DefaultEditView({\n BeforeDocumentControls,\n Description,\n EditMenuItems,\n LivePreview: CustomLivePreview,\n PreviewButton,\n PublishButton,\n SaveButton,\n SaveDraftButton,\n Status,\n UnpublishButton,\n Upload: CustomUpload,\n UploadControls,\n}: DocumentViewClientProps) {\n const {\n id,\n action,\n AfterDocument,\n AfterFields,\n apiURL,\n BeforeFields,\n collectionSlug,\n currentEditor,\n data,\n disableActions,\n disableCreate,\n disableLeaveWithoutSaving,\n docPermissions,\n documentIsLocked,\n documentLockState,\n getDocPermissions,\n getDocPreferences,\n globalSlug,\n hasPublishPermission,\n hasSavePermission,\n incrementVersionCount,\n initialState,\n isEditing,\n isInitializing,\n isLocked,\n isTrashed,\n lastUpdateTime,\n redirectAfterCreate,\n redirectAfterDelete,\n redirectAfterDuplicate,\n redirectAfterRestore,\n setCurrentEditor,\n setData,\n setDocumentIsLocked,\n setLastUpdateTime,\n unlockDocument,\n updateDocumentEditor,\n } = useDocumentInfo()\n\n const {\n clearDoc,\n drawerSlug,\n onDelete,\n onDuplicate,\n onRestore,\n onSave: onSaveFromContext,\n } = useDocumentDrawerContext()\n\n const isInDrawer = Boolean(drawerSlug)\n\n const { refreshCookieAsync, user } = useAuth()\n\n const {\n config,\n config: {\n admin: { user: userSlug },\n routes: { admin: adminRoute },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n const globalConfig = getEntityConfig({ globalSlug })\n\n const depth = useEditDepth()\n\n const router = useRouter()\n const params = useSearchParams()\n const { reportUpdate } = useDocumentEvents()\n const { resetUploadEdits } = useUploadEdits()\n const { getFormState } = useServerFunctions()\n const { startRouteTransition } = useRouteTransition()\n const { clearRouteCache } = useRouteCache()\n const {\n isLivePreviewEnabled,\n isLivePreviewing,\n previewWindowType,\n setURL: setLivePreviewURL,\n typeofLivePreviewURL,\n url: livePreviewURL,\n } = useLivePreviewContext()\n const { isPreviewEnabled, setPreviewURL } = usePreviewURL()\n\n const abortOnChangeRef = useRef<AbortController>(null)\n const abortOnSaveRef = useRef<AbortController>(null)\n\n const locale = params.get('locale')\n\n const entitySlug = collectionConfig?.slug || globalConfig?.slug\n\n const operation = collectionSlug && !id ? 'create' : 'update'\n\n const auth = collectionConfig ? collectionConfig.auth : undefined\n const upload = collectionConfig ? collectionConfig.upload : undefined\n\n const docConfig = collectionConfig || globalConfig\n\n const lockDocumentsProp = docConfig?.lockDocuments !== undefined ? docConfig?.lockDocuments : true\n const isLockingEnabled = lockDocumentsProp !== false\n\n const lockDurationDefault = 300 // Default 5 minutes in seconds\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n const autosaveEnabled = hasAutosaveEnabled(docConfig)\n\n const [isReadOnlyForIncomingUser, setIsReadOnlyForIncomingUser] = useState(false)\n const [showTakeOverModal, setShowTakeOverModal] = useState(false)\n\n const [editSessionStartTime, setEditSessionStartTime] = useState(Date.now())\n\n const lockExpiryTime = lastUpdateTime + lockDurationInMilliseconds\n const isLockExpired = Date.now() > lockExpiryTime\n\n const preventLeaveWithoutSaving =\n !isReadOnlyForIncomingUser &&\n (typeof disableLeaveWithoutSaving !== 'undefined'\n ? !disableLeaveWithoutSaving\n : !autosaveEnabled)\n\n const schemaPathSegments = useMemo(() => [entitySlug], [entitySlug])\n\n const [validateBeforeSubmit, setValidateBeforeSubmit] = useState(() => {\n if (operation === 'create' && auth && !auth.disableLocalStrategy) {\n return true\n }\n\n return false\n })\n\n const nextHrefRef = React.useRef<null | string>(null)\n\n const handleDocumentLocking = useCallback(\n (lockedState: LockedState) => {\n setDocumentIsLocked(true)\n const previousOwnerID =\n typeof documentLockState.current?.user === 'object'\n ? documentLockState.current?.user?.id\n : documentLockState.current?.user\n\n if (lockedState && lockedState.user) {\n const lockedUserID =\n typeof lockedState.user === 'string' || typeof lockedState.user === 'number'\n ? lockedState.user\n : lockedState.user.id\n\n if (!documentLockState.current || lockedUserID !== previousOwnerID) {\n if (previousOwnerID === user.id && lockedUserID !== user.id) {\n setShowTakeOverModal(true)\n documentLockState.current.hasShownLockedModal = true\n }\n\n documentLockState.current = {\n hasShownLockedModal: documentLockState.current?.hasShownLockedModal || false,\n isLocked: true,\n user: lockedState.user as ClientUser,\n }\n setCurrentEditor(lockedState.user as ClientUser)\n }\n\n // Update lastUpdateTime when lock state changes\n if (lockedState.lastEditedAt) {\n setLastUpdateTime(new Date(lockedState.lastEditedAt).getTime())\n }\n }\n },\n [documentLockState, setCurrentEditor, setDocumentIsLocked, setLastUpdateTime, user?.id],\n )\n\n const handlePrevent = useCallback((nextHref: null | string) => {\n nextHrefRef.current = nextHref\n }, [])\n\n const handleLeaveConfirm = useCallback(async () => {\n const lockUser = documentLockState.current?.user\n\n const isLockOwnedByCurrentUser =\n typeof lockUser === 'object' ? lockUser?.id === user?.id : lockUser === user?.id\n\n if (isLockingEnabled && documentIsLocked && (id || globalSlug)) {\n // Check where user is trying to go\n const nextPath = nextHrefRef.current ? new URL(nextHrefRef.current).pathname : ''\n const isInternalView = ['/preview', '/api', '/versions'].some((path) =>\n nextPath.includes(path),\n )\n\n // Remove the lock if the user is navigating away from the document view they have locked\n if (isLockOwnedByCurrentUser && !isInternalView) {\n try {\n await unlockDocument(id, collectionSlug ?? globalSlug)\n setDocumentIsLocked(false)\n setCurrentEditor(null)\n } catch (err) {\n console.error('Failed to unlock before leave', err) // eslint-disable-line no-console\n }\n }\n }\n }, [\n collectionSlug,\n documentIsLocked,\n documentLockState,\n globalSlug,\n id,\n isLockingEnabled,\n setCurrentEditor,\n setDocumentIsLocked,\n unlockDocument,\n user?.id,\n ])\n\n const onSave: FormOnSuccess<any, OnSaveContext> = useCallback(\n async (json, ctx) => {\n const { context, formState } = ctx || {}\n\n const controller = handleAbortRef(abortOnSaveRef)\n\n const document = json?.doc || json?.result\n\n const updatedAt = document?.updatedAt || new Date().toISOString()\n\n // If we're editing the doc of the logged-in user,\n // Refresh the cookie to get new permissions\n if (user && collectionSlug === userSlug && id === user.id) {\n void refreshCookieAsync()\n }\n\n setLastUpdateTime(updatedAt)\n\n if (context?.incrementVersionCount !== false) {\n incrementVersionCount()\n }\n\n if (typeof setData === 'function') {\n void setData(document || {})\n }\n\n if (typeof onSaveFromContext === 'function') {\n const operation = id ? 'update' : 'create'\n\n void onSaveFromContext({\n ...(json as Record<string, unknown>),\n context,\n operation,\n // @ts-expect-error todo: this is not right, should be under `doc`?\n updatedAt:\n operation === 'update'\n ? new Date().toISOString()\n : document?.updatedAt || new Date().toISOString(),\n })\n }\n\n if (!isEditing && depth < 2 && redirectAfterCreate !== false) {\n // Store success message to show after redirect\n if (json.message && typeof window !== 'undefined') {\n window.sessionStorage.setItem(PENDING_SUCCESS_TOAST_KEY, json.message)\n }\n\n // Redirect to the same locale if it's been set\n const redirectRoute = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}/${document?.id}${locale ? `?locale=${locale}` : ''}`,\n })\n\n startRouteTransition(() => router.push(redirectRoute))\n } else {\n resetUploadEdits()\n }\n\n if (context?.getDocPermissions !== false) {\n await getDocPermissions(json)\n }\n\n if (id || globalSlug) {\n const docPreferences = await getDocPreferences()\n\n const { livePreviewURL, previewURL, state } = await getFormState({\n id,\n collectionSlug,\n data: document,\n docPermissions,\n docPreferences,\n formState,\n globalSlug,\n operation,\n renderAllFields: false,\n returnLivePreviewURL: isLivePreviewEnabled && typeofLivePreviewURL === 'function',\n returnLockStatus: false,\n returnPreviewURL: isPreviewEnabled,\n schemaPath: schemaPathSegments.join('.'),\n signal: controller.signal,\n skipValidation: true,\n })\n\n // For upload collections, clear the file field from the returned state\n // to prevent the File object from persisting in form state after save\n if (upload && state) {\n delete state.file\n }\n\n // Unlock the document after save\n if (isLockingEnabled) {\n setDocumentIsLocked(false)\n }\n\n if (isLivePreviewEnabled && typeofLivePreviewURL === 'function') {\n setLivePreviewURL(livePreviewURL)\n }\n\n if (isPreviewEnabled) {\n setPreviewURL(previewURL)\n }\n\n reportUpdate({\n id,\n doc: document,\n drawerSlug,\n entitySlug,\n operation: 'update',\n updatedAt,\n })\n\n abortOnSaveRef.current = null\n\n return state\n } else {\n reportUpdate({\n id,\n doc: document,\n drawerSlug,\n entitySlug,\n operation: 'create',\n updatedAt,\n })\n }\n },\n [\n user,\n collectionSlug,\n userSlug,\n id,\n setLastUpdateTime,\n setData,\n onSaveFromContext,\n isEditing,\n depth,\n redirectAfterCreate,\n globalSlug,\n refreshCookieAsync,\n incrementVersionCount,\n adminRoute,\n locale,\n startRouteTransition,\n router,\n resetUploadEdits,\n getDocPermissions,\n getDocPreferences,\n getFormState,\n docPermissions,\n operation,\n isLivePreviewEnabled,\n typeofLivePreviewURL,\n isPreviewEnabled,\n schemaPathSegments,\n upload,\n isLockingEnabled,\n reportUpdate,\n drawerSlug,\n entitySlug,\n setDocumentIsLocked,\n setLivePreviewURL,\n setPreviewURL,\n ],\n )\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState, submitted }) => {\n const controller = handleAbortRef(abortOnChangeRef)\n\n const currentTime = Date.now()\n const timeSinceLastUpdate = currentTime - editSessionStartTime\n\n const updateLastEdited = isLockingEnabled && timeSinceLastUpdate >= 10000 // 10 seconds\n\n if (updateLastEdited) {\n setEditSessionStartTime(currentTime)\n }\n\n const docPreferences = await getDocPreferences()\n\n const result = await getFormState({\n id,\n collectionSlug,\n docPermissions,\n docPreferences,\n formState: prevFormState,\n globalSlug,\n operation,\n renderAllFields: false,\n returnLockStatus: isLockingEnabled,\n schemaPath: schemaPathSegments.join('.'),\n signal: controller.signal,\n skipValidation: !submitted,\n updateLastEdited,\n })\n\n if (!result) {\n return\n }\n\n const { lockedState, state } = result\n\n if (isLockingEnabled) {\n handleDocumentLocking(lockedState)\n }\n\n abortOnChangeRef.current = null\n\n return state\n },\n [\n editSessionStartTime,\n isLockingEnabled,\n getDocPreferences,\n getFormState,\n id,\n collectionSlug,\n docPermissions,\n globalSlug,\n operation,\n schemaPathSegments,\n handleDocumentLocking,\n ],\n )\n\n // Clean up when the component unmounts or when the document is unlocked\n useEffect(() => {\n return () => {\n setShowTakeOverModal(false)\n }\n }, [])\n\n useEffect(() => {\n const abortOnChange = abortOnChangeRef.current\n const abortOnSave = abortOnSaveRef.current\n\n return () => {\n abortAndIgnore(abortOnChange)\n abortAndIgnore(abortOnSave)\n }\n }, [])\n\n // Show pending success toast after redirect from create\n useEffect(() => {\n if (!isInitializing && typeof window !== 'undefined') {\n const pendingMessage = window.sessionStorage.getItem(PENDING_SUCCESS_TOAST_KEY)\n\n if (pendingMessage) {\n window.sessionStorage.removeItem(PENDING_SUCCESS_TOAST_KEY)\n toast.success(pendingMessage)\n }\n }\n }, [isInitializing])\n\n const shouldShowDocumentLockedModal =\n documentIsLocked &&\n currentEditor &&\n (typeof currentEditor === 'object'\n ? currentEditor.id !== user?.id\n : currentEditor !== user?.id) &&\n !isReadOnlyForIncomingUser &&\n !showTakeOverModal &&\n !documentLockState.current?.hasShownLockedModal &&\n !isLockExpired\n\n const isFolderCollection = config.folders && collectionSlug === config.folders?.slug\n\n return (\n <main\n className={[\n baseClass,\n (id || globalSlug) && `${baseClass}--is-editing`,\n globalSlug && `global-edit--${globalSlug}`,\n collectionSlug && `collection-edit--${collectionSlug}`,\n isLivePreviewing && previewWindowType === 'iframe' && `${baseClass}--is-live-previewing`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <OperationProvider operation={operation}>\n <Form\n action={action}\n className={`${baseClass}__form`}\n disabled={isReadOnlyForIncomingUser || isInitializing || !hasSavePermission || isTrashed}\n disableSuccessStatus={!isEditing && depth < 2 && redirectAfterCreate !== false}\n disableValidationOnSubmit={!validateBeforeSubmit}\n initialState={!isInitializing && initialState}\n isDocumentForm={true}\n isInitializing={isInitializing}\n key={`${isLocked}`}\n method={id ? 'PATCH' : 'POST'}\n onChange={[onChange]}\n onSuccess={onSave}\n >\n {isInDrawer && (\n <DocumentDrawerHeader\n AfterHeader={Description}\n drawerSlug={drawerSlug}\n showDocumentID={!isFolderCollection}\n />\n )}\n {isLockingEnabled && shouldShowDocumentLockedModal && (\n <DocumentLocked\n handleGoBack={() => handleGoBack({ adminRoute, collectionSlug, router, serverURL })}\n isActive={shouldShowDocumentLockedModal}\n onReadOnly={() => {\n setIsReadOnlyForIncomingUser(true)\n setShowTakeOverModal(false)\n }}\n onTakeOver={() =>\n handleTakeOver({\n id,\n clearRouteCache,\n collectionSlug,\n documentLockStateRef: documentLockState,\n globalSlug,\n isLockingEnabled,\n isWithinDoc: false,\n setCurrentEditor,\n updateDocumentEditor,\n user,\n })\n }\n updatedAt={lastUpdateTime}\n user={currentEditor}\n />\n )}\n {isLockingEnabled && showTakeOverModal && (\n <DocumentTakeOver\n handleBackToDashboard={() => handleBackToDashboard({ adminRoute, router, serverURL })}\n isActive={showTakeOverModal}\n onReadOnly={() => {\n setIsReadOnlyForIncomingUser(true)\n setShowTakeOverModal(false)\n }}\n />\n )}\n {preventLeaveWithoutSaving && (\n <LeaveWithoutSaving onConfirm={handleLeaveConfirm} onPrevent={handlePrevent} />\n )}\n {!isInDrawer && (\n <SetDocumentStepNav\n collectionSlug={collectionConfig?.slug}\n globalSlug={globalConfig?.slug}\n id={id}\n isTrashed={isTrashed}\n pluralLabel={collectionConfig?.labels?.plural}\n useAsTitle={collectionConfig?.admin?.useAsTitle}\n />\n )}\n <SetDocumentTitle\n collectionConfig={collectionConfig}\n config={config}\n fallback={depth <= 1 ? id?.toString() : undefined}\n globalConfig={globalConfig}\n />\n <DocumentControls\n apiURL={apiURL}\n BeforeDocumentControls={BeforeDocumentControls}\n customComponents={{\n PreviewButton,\n PublishButton,\n SaveButton,\n SaveDraftButton,\n Status,\n UnpublishButton,\n }}\n data={data}\n disableActions={disableActions || isFolderCollection || isTrashed}\n disableCreate={disableCreate}\n EditMenuItems={EditMenuItems}\n hasPublishPermission={hasPublishPermission}\n hasSavePermission={hasSavePermission}\n id={id}\n isEditing={isEditing}\n isInDrawer={isInDrawer}\n isTrashed={isTrashed}\n onDelete={onDelete}\n onDrawerCreateNew={clearDoc}\n onDuplicate={onDuplicate}\n onRestore={onRestore}\n onSave={onSave}\n onTakeOver={() =>\n handleTakeOver({\n id,\n clearRouteCache,\n collectionSlug,\n documentLockStateRef: documentLockState,\n globalSlug,\n isLockingEnabled,\n isWithinDoc: true,\n setCurrentEditor,\n setIsReadOnlyForIncomingUser,\n updateDocumentEditor,\n user,\n })\n }\n permissions={docPermissions}\n readOnlyForIncomingUser={isReadOnlyForIncomingUser}\n redirectAfterDelete={redirectAfterDelete}\n redirectAfterDuplicate={redirectAfterDuplicate}\n redirectAfterRestore={redirectAfterRestore}\n slug={collectionConfig?.slug || globalConfig?.slug}\n user={currentEditor}\n />\n <div\n className={[\n `${baseClass}__main-wrapper`,\n previewWindowType === 'popup' && `${baseClass}--detached`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div\n className={[\n `${baseClass}__main`,\n previewWindowType === 'popup' && `${baseClass}__main--popup-open`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <DocumentFields\n AfterFields={AfterFields}\n BeforeFields={\n BeforeFields || (\n <Fragment>\n {auth && (\n <Auth\n className={`${baseClass}__auth`}\n collectionSlug={collectionConfig.slug}\n disableLocalStrategy={collectionConfig.auth?.disableLocalStrategy}\n email={data?.email}\n loginWithUsername={auth?.loginWithUsername}\n operation={operation}\n readOnly={!hasSavePermission}\n requirePassword={!id}\n setValidateBeforeSubmit={setValidateBeforeSubmit}\n // eslint-disable-next-line react-compiler/react-compiler\n useAPIKey={auth.useAPIKey}\n username={data?.username}\n verify={auth.verify}\n />\n )}\n {upload && (\n <React.Fragment>\n <UploadControlsProvider>\n {CustomUpload || (\n <Upload\n collectionSlug={collectionConfig.slug}\n initialState={initialState}\n uploadConfig={upload}\n UploadControls={UploadControls}\n />\n )}\n </UploadControlsProvider>\n </React.Fragment>\n )}\n </Fragment>\n )\n }\n Description={Description}\n docPermissions={docPermissions}\n fields={docConfig.fields}\n forceSidebarWrap={isLivePreviewing}\n isTrashed={isTrashed}\n readOnly={isReadOnlyForIncomingUser || !hasSavePermission || isTrashed}\n schemaPathSegments={schemaPathSegments}\n />\n {AfterDocument}\n </div>\n {isLivePreviewEnabled && !isInDrawer && livePreviewURL && (\n <>\n {CustomLivePreview || (\n <LivePreviewWindow collectionSlug={collectionSlug} globalSlug={globalSlug} />\n )}\n </>\n )}\n </div>\n </Form>\n </OperationProvider>\n </main>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useRouter","useSearchParams","formatAdminURL","hasAutosaveEnabled","React","Fragment","useCallback","useEffect","useMemo","useRef","useState","toast","DocumentControls","DocumentDrawerHeader","useDocumentDrawerContext","DocumentFields","DocumentLocked","DocumentTakeOver","LeaveWithoutSaving","LivePreviewWindow","Upload","Form","useAuth","useConfig","useDocumentEvents","useDocumentInfo","useEditDepth","useLivePreviewContext","usePreviewURL","OperationProvider","useRouteCache","useRouteTransition","useServerFunctions","UploadControlsProvider","useUploadEdits","abortAndIgnore","handleAbortRef","handleBackToDashboard","handleGoBack","handleTakeOver","Auth","SetDocumentStepNav","SetDocumentTitle","baseClass","PENDING_SUCCESS_TOAST_KEY","DefaultEditView","BeforeDocumentControls","Description","EditMenuItems","LivePreview","CustomLivePreview","PreviewButton","PublishButton","SaveButton","SaveDraftButton","Status","UnpublishButton","CustomUpload","UploadControls","id","action","AfterDocument","AfterFields","apiURL","BeforeFields","collectionSlug","currentEditor","data","disableActions","disableCreate","disableLeaveWithoutSaving","docPermissions","documentIsLocked","documentLockState","getDocPermissions","getDocPreferences","globalSlug","hasPublishPermission","hasSavePermission","incrementVersionCount","initialState","isEditing","isInitializing","isLocked","isTrashed","lastUpdateTime","redirectAfterCreate","redirectAfterDelete","redirectAfterDuplicate","redirectAfterRestore","setCurrentEditor","setData","setDocumentIsLocked","setLastUpdateTime","unlockDocument","updateDocumentEditor","clearDoc","drawerSlug","onDelete","onDuplicate","onRestore","onSave","onSaveFromContext","isInDrawer","Boolean","refreshCookieAsync","user","config","admin","userSlug","routes","adminRoute","serverURL","getEntityConfig","collectionConfig","globalConfig","depth","router","params","reportUpdate","resetUploadEdits","getFormState","startRouteTransition","clearRouteCache","isLivePreviewEnabled","isLivePreviewing","previewWindowType","setURL","setLivePreviewURL","typeofLivePreviewURL","url","livePreviewURL","isPreviewEnabled","setPreviewURL","abortOnChangeRef","abortOnSaveRef","locale","get","entitySlug","slug","operation","auth","undefined","upload","docConfig","lockDocumentsProp","lockDocuments","isLockingEnabled","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","autosaveEnabled","isReadOnlyForIncomingUser","setIsReadOnlyForIncomingUser","showTakeOverModal","setShowTakeOverModal","editSessionStartTime","setEditSessionStartTime","Date","now","lockExpiryTime","isLockExpired","preventLeaveWithoutSaving","schemaPathSegments","validateBeforeSubmit","setValidateBeforeSubmit","disableLocalStrategy","nextHrefRef","handleDocumentLocking","lockedState","previousOwnerID","current","lockedUserID","hasShownLockedModal","lastEditedAt","getTime","handlePrevent","nextHref","handleLeaveConfirm","lockUser","isLockOwnedByCurrentUser","nextPath","URL","pathname","isInternalView","some","path","includes","err","console","error","json","ctx","context","formState","controller","document","doc","result","updatedAt","toISOString","message","window","sessionStorage","setItem","redirectRoute","push","docPreferences","previewURL","state","renderAllFields","returnLivePreviewURL","returnLockStatus","returnPreviewURL","schemaPath","join","signal","skipValidation","file","onChange","prevFormState","submitted","currentTime","timeSinceLastUpdate","updateLastEdited","abortOnChange","abortOnSave","pendingMessage","getItem","removeItem","success","shouldShowDocumentLockedModal","isFolderCollection","folders","_jsx","className","filter","_jsxs","disabled","disableSuccessStatus","disableValidationOnSubmit","isDocumentForm","method","onSuccess","AfterHeader","showDocumentID","isActive","onReadOnly","onTakeOver","documentLockStateRef","isWithinDoc","onConfirm","onPrevent","pluralLabel","labels","plural","useAsTitle","fallback","toString","customComponents","onDrawerCreateNew","permissions","readOnlyForIncomingUser","email","loginWithUsername","readOnly","requirePassword","useAPIKey","username","verify","uploadConfig","fields","forceSidebarWrap","_Fragment"],"sources":["../../../src/views/Edit/index.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientUser, DocumentViewClientProps } from 'payload'\n\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport { formatAdminURL, hasAutosaveEnabled } from 'payload/shared'\nimport React, { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type { FormProps } from '../../forms/Form/index.js'\nimport type { FormOnSuccess } from '../../forms/Form/types.js'\nimport type { LockedState } from '../../utilities/buildFormState.js'\n\nimport { DocumentControls } from '../../elements/DocumentControls/index.js'\nimport { DocumentDrawerHeader } from '../../elements/DocumentDrawer/DrawerHeader/index.js'\nimport { useDocumentDrawerContext } from '../../elements/DocumentDrawer/Provider.js'\nimport { DocumentFields } from '../../elements/DocumentFields/index.js'\nimport { DocumentLocked } from '../../elements/DocumentLocked/index.js'\nimport { DocumentTakeOver } from '../../elements/DocumentTakeOver/index.js'\nimport { LeaveWithoutSaving } from '../../elements/LeaveWithoutSaving/index.js'\nimport { LivePreviewWindow } from '../../elements/LivePreview/Window/index.js'\nimport { Upload } from '../../elements/Upload/index.js'\nimport { Form } from '../../forms/Form/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentEvents } from '../../providers/DocumentEvents/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useLivePreviewContext, usePreviewURL } from '../../providers/LivePreview/context.js'\nimport { OperationProvider } from '../../providers/Operation/index.js'\nimport { useRouteCache } from '../../providers/RouteCache/index.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { UploadControlsProvider } from '../../providers/UploadControls/index.js'\nimport { useUploadEdits } from '../../providers/UploadEdits/index.js'\nimport { abortAndIgnore, handleAbortRef } from '../../utilities/abortAndIgnore.js'\nimport { handleBackToDashboard } from '../../utilities/handleBackToDashboard.js'\nimport { handleGoBack } from '../../utilities/handleGoBack.js'\nimport { handleTakeOver } from '../../utilities/handleTakeOver.js'\nimport { Auth } from './Auth/index.js'\nimport { SetDocumentStepNav } from './SetDocumentStepNav/index.js'\nimport { SetDocumentTitle } from './SetDocumentTitle/index.js'\nimport './index.scss'\n\nconst baseClass = 'collection-edit'\nconst PENDING_SUCCESS_TOAST_KEY = 'payload-pending-success-toast'\n\nexport type OnSaveContext = {\n getDocPermissions?: boolean\n incrementVersionCount?: boolean\n}\n\n// This component receives props only on _pages_\n// When rendered within a drawer, props are empty\n// This is solely to support custom edit views which get server-rendered\nexport function DefaultEditView({\n BeforeDocumentControls,\n Description,\n EditMenuItems,\n LivePreview: CustomLivePreview,\n PreviewButton,\n PublishButton,\n SaveButton,\n SaveDraftButton,\n Status,\n UnpublishButton,\n Upload: CustomUpload,\n UploadControls,\n}: DocumentViewClientProps) {\n const {\n id,\n action,\n AfterDocument,\n AfterFields,\n apiURL,\n BeforeFields,\n collectionSlug,\n currentEditor,\n data,\n disableActions,\n disableCreate,\n disableLeaveWithoutSaving,\n docPermissions,\n documentIsLocked,\n documentLockState,\n getDocPermissions,\n getDocPreferences,\n globalSlug,\n hasPublishPermission,\n hasSavePermission,\n incrementVersionCount,\n initialState,\n isEditing,\n isInitializing,\n isLocked,\n isTrashed,\n lastUpdateTime,\n redirectAfterCreate,\n redirectAfterDelete,\n redirectAfterDuplicate,\n redirectAfterRestore,\n setCurrentEditor,\n setData,\n setDocumentIsLocked,\n setLastUpdateTime,\n unlockDocument,\n updateDocumentEditor,\n } = useDocumentInfo()\n\n const {\n clearDoc,\n drawerSlug,\n onDelete,\n onDuplicate,\n onRestore,\n onSave: onSaveFromContext,\n } = useDocumentDrawerContext()\n\n const isInDrawer = Boolean(drawerSlug)\n\n const { refreshCookieAsync, user } = useAuth()\n\n const {\n config,\n config: {\n admin: { user: userSlug },\n routes: { admin: adminRoute },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n const globalConfig = getEntityConfig({ globalSlug })\n\n const depth = useEditDepth()\n\n const router = useRouter()\n const params = useSearchParams()\n const { reportUpdate } = useDocumentEvents()\n const { resetUploadEdits } = useUploadEdits()\n const { getFormState } = useServerFunctions()\n const { startRouteTransition } = useRouteTransition()\n const { clearRouteCache } = useRouteCache()\n const {\n isLivePreviewEnabled,\n isLivePreviewing,\n previewWindowType,\n setURL: setLivePreviewURL,\n typeofLivePreviewURL,\n url: livePreviewURL,\n } = useLivePreviewContext()\n const { isPreviewEnabled, setPreviewURL } = usePreviewURL()\n\n const abortOnChangeRef = useRef<AbortController>(null)\n const abortOnSaveRef = useRef<AbortController>(null)\n\n const locale = params.get('locale')\n\n const entitySlug = collectionConfig?.slug || globalConfig?.slug\n\n const operation = collectionSlug && !id ? 'create' : 'update'\n\n const auth = collectionConfig ? collectionConfig.auth : undefined\n const upload = collectionConfig ? collectionConfig.upload : undefined\n\n const docConfig = collectionConfig || globalConfig\n\n const lockDocumentsProp = docConfig?.lockDocuments !== undefined ? docConfig?.lockDocuments : true\n const isLockingEnabled = lockDocumentsProp !== false\n\n const lockDurationDefault = 300 // Default 5 minutes in seconds\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n const autosaveEnabled = hasAutosaveEnabled(docConfig)\n\n const [isReadOnlyForIncomingUser, setIsReadOnlyForIncomingUser] = useState(false)\n const [showTakeOverModal, setShowTakeOverModal] = useState(false)\n\n const [editSessionStartTime, setEditSessionStartTime] = useState(Date.now())\n\n const lockExpiryTime = lastUpdateTime + lockDurationInMilliseconds\n const isLockExpired = Date.now() > lockExpiryTime\n\n const preventLeaveWithoutSaving =\n !isReadOnlyForIncomingUser &&\n (typeof disableLeaveWithoutSaving !== 'undefined'\n ? !disableLeaveWithoutSaving\n : !autosaveEnabled)\n\n const schemaPathSegments = useMemo(() => [entitySlug], [entitySlug])\n\n const [validateBeforeSubmit, setValidateBeforeSubmit] = useState(() => {\n if (operation === 'create' && auth && !auth.disableLocalStrategy) {\n return true\n }\n\n return false\n })\n\n const nextHrefRef = React.useRef<null | string>(null)\n\n const handleDocumentLocking = useCallback(\n (lockedState: LockedState) => {\n setDocumentIsLocked(true)\n const previousOwnerID =\n typeof documentLockState.current?.user === 'object'\n ? documentLockState.current?.user?.id\n : documentLockState.current?.user\n\n if (lockedState && lockedState.user) {\n const lockedUserID =\n typeof lockedState.user === 'string' || typeof lockedState.user === 'number'\n ? lockedState.user\n : lockedState.user.id\n\n if (!documentLockState.current || lockedUserID !== previousOwnerID) {\n if (previousOwnerID === user.id && lockedUserID !== user.id) {\n setShowTakeOverModal(true)\n documentLockState.current.hasShownLockedModal = true\n }\n\n documentLockState.current = {\n hasShownLockedModal: documentLockState.current?.hasShownLockedModal || false,\n isLocked: true,\n user: lockedState.user as ClientUser,\n }\n setCurrentEditor(lockedState.user as ClientUser)\n }\n\n // Update lastUpdateTime when lock state changes\n if (lockedState.lastEditedAt) {\n setLastUpdateTime(new Date(lockedState.lastEditedAt).getTime())\n }\n }\n },\n [documentLockState, setCurrentEditor, setDocumentIsLocked, setLastUpdateTime, user?.id],\n )\n\n const handlePrevent = useCallback((nextHref: null | string) => {\n nextHrefRef.current = nextHref\n }, [])\n\n const handleLeaveConfirm = useCallback(async () => {\n const lockUser = documentLockState.current?.user\n\n const isLockOwnedByCurrentUser =\n typeof lockUser === 'object' ? lockUser?.id === user?.id : lockUser === user?.id\n\n if (isLockingEnabled && documentIsLocked && (id || globalSlug)) {\n // Check where user is trying to go\n const nextPath = nextHrefRef.current ? new URL(nextHrefRef.current).pathname : ''\n const isInternalView = ['/preview', '/api', '/versions'].some((path) =>\n nextPath.includes(path),\n )\n\n // Remove the lock if the user is navigating away from the document view they have locked\n if (isLockOwnedByCurrentUser && !isInternalView) {\n try {\n await unlockDocument(id, collectionSlug ?? globalSlug)\n setDocumentIsLocked(false)\n setCurrentEditor(null)\n } catch (err) {\n console.error('Failed to unlock before leave', err) // eslint-disable-line no-console\n }\n }\n }\n }, [\n collectionSlug,\n documentIsLocked,\n documentLockState,\n globalSlug,\n id,\n isLockingEnabled,\n setCurrentEditor,\n setDocumentIsLocked,\n unlockDocument,\n user?.id,\n ])\n\n const onSave: FormOnSuccess<any, OnSaveContext> = useCallback(\n async (json, ctx) => {\n const { context, formState } = ctx || {}\n\n const controller = handleAbortRef(abortOnSaveRef)\n\n const document = json?.doc || json?.result\n\n const updatedAt = document?.updatedAt || new Date().toISOString()\n\n // If we're editing the doc of the logged-in user,\n // Refresh the cookie to get new permissions\n if (user && collectionSlug === userSlug && id === user.id) {\n void refreshCookieAsync()\n }\n\n setLastUpdateTime(updatedAt)\n\n if (context?.incrementVersionCount !== false) {\n incrementVersionCount()\n }\n\n if (typeof setData === 'function') {\n void setData(document || {})\n }\n\n if (typeof onSaveFromContext === 'function') {\n const operation = id ? 'update' : 'create'\n\n void onSaveFromContext({\n ...(json as Record<string, unknown>),\n context,\n operation,\n // @ts-expect-error todo: this is not right, should be under `doc`?\n updatedAt:\n operation === 'update'\n ? new Date().toISOString()\n : document?.updatedAt || new Date().toISOString(),\n })\n }\n\n if (!isEditing && depth < 2 && redirectAfterCreate !== false) {\n // Store success message to show after redirect\n if (json.message && typeof window !== 'undefined') {\n window.sessionStorage.setItem(PENDING_SUCCESS_TOAST_KEY, json.message)\n }\n\n // Redirect to the same locale if it's been set\n const redirectRoute = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}/${document?.id}${locale ? `?locale=${locale}` : ''}`,\n })\n\n startRouteTransition(() => router.push(redirectRoute))\n } else {\n resetUploadEdits()\n }\n\n if (context?.getDocPermissions !== false) {\n await getDocPermissions(json)\n }\n\n if (id || globalSlug) {\n const docPreferences = await getDocPreferences()\n\n const { livePreviewURL, previewURL, state } = await getFormState({\n id,\n collectionSlug,\n data: document,\n docPermissions,\n docPreferences,\n formState,\n globalSlug,\n operation,\n renderAllFields: false,\n returnLivePreviewURL: isLivePreviewEnabled && typeofLivePreviewURL === 'function',\n returnLockStatus: false,\n returnPreviewURL: isPreviewEnabled,\n schemaPath: schemaPathSegments.join('.'),\n signal: controller.signal,\n skipValidation: true,\n })\n\n // For upload collections, clear the file field from the returned state\n // to prevent the File object from persisting in form state after save\n if (upload && state) {\n delete state.file\n }\n\n // Unlock the document after save\n if (isLockingEnabled) {\n setDocumentIsLocked(false)\n }\n\n if (isLivePreviewEnabled && typeofLivePreviewURL === 'function') {\n setLivePreviewURL(livePreviewURL)\n }\n\n if (isPreviewEnabled) {\n setPreviewURL(previewURL)\n }\n\n reportUpdate({\n id,\n doc: document,\n drawerSlug,\n entitySlug,\n operation: 'update',\n updatedAt,\n })\n\n abortOnSaveRef.current = null\n\n return state\n } else {\n reportUpdate({\n id,\n doc: document,\n drawerSlug,\n entitySlug,\n operation: 'create',\n updatedAt,\n })\n }\n },\n [\n user,\n collectionSlug,\n userSlug,\n id,\n setLastUpdateTime,\n setData,\n onSaveFromContext,\n isEditing,\n depth,\n redirectAfterCreate,\n globalSlug,\n refreshCookieAsync,\n incrementVersionCount,\n adminRoute,\n locale,\n startRouteTransition,\n router,\n resetUploadEdits,\n getDocPermissions,\n getDocPreferences,\n getFormState,\n docPermissions,\n operation,\n isLivePreviewEnabled,\n typeofLivePreviewURL,\n isPreviewEnabled,\n schemaPathSegments,\n upload,\n isLockingEnabled,\n reportUpdate,\n drawerSlug,\n entitySlug,\n setDocumentIsLocked,\n setLivePreviewURL,\n setPreviewURL,\n ],\n )\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState, submitted }) => {\n const controller = handleAbortRef(abortOnChangeRef)\n\n const currentTime = Date.now()\n const timeSinceLastUpdate = currentTime - editSessionStartTime\n\n const updateLastEdited = isLockingEnabled && timeSinceLastUpdate >= 10000 // 10 seconds\n\n if (updateLastEdited) {\n setEditSessionStartTime(currentTime)\n }\n\n const docPreferences = await getDocPreferences()\n\n const result = await getFormState({\n id,\n collectionSlug,\n docPermissions,\n docPreferences,\n formState: prevFormState,\n globalSlug,\n operation,\n renderAllFields: false,\n returnLockStatus: isLockingEnabled,\n schemaPath: schemaPathSegments.join('.'),\n signal: controller.signal,\n skipValidation: !submitted,\n updateLastEdited,\n })\n\n if (!result) {\n return\n }\n\n const { lockedState, state } = result\n\n if (isLockingEnabled) {\n handleDocumentLocking(lockedState)\n }\n\n abortOnChangeRef.current = null\n\n return state\n },\n [\n editSessionStartTime,\n isLockingEnabled,\n getDocPreferences,\n getFormState,\n id,\n collectionSlug,\n docPermissions,\n globalSlug,\n operation,\n schemaPathSegments,\n handleDocumentLocking,\n ],\n )\n\n // Clean up when the component unmounts or when the document is unlocked\n useEffect(() => {\n return () => {\n setShowTakeOverModal(false)\n }\n }, [])\n\n useEffect(() => {\n const abortOnChange = abortOnChangeRef.current\n const abortOnSave = abortOnSaveRef.current\n\n return () => {\n abortAndIgnore(abortOnChange)\n abortAndIgnore(abortOnSave)\n }\n }, [])\n\n // Show pending success toast after redirect from create\n useEffect(() => {\n if (!isInitializing && typeof window !== 'undefined') {\n const pendingMessage = window.sessionStorage.getItem(PENDING_SUCCESS_TOAST_KEY)\n\n if (pendingMessage) {\n window.sessionStorage.removeItem(PENDING_SUCCESS_TOAST_KEY)\n toast.success(pendingMessage)\n }\n }\n }, [isInitializing])\n\n const shouldShowDocumentLockedModal =\n documentIsLocked &&\n currentEditor &&\n (typeof currentEditor === 'object'\n ? currentEditor.id !== user?.id\n : currentEditor !== user?.id) &&\n !isReadOnlyForIncomingUser &&\n !showTakeOverModal &&\n !documentLockState.current?.hasShownLockedModal &&\n !isLockExpired\n\n const isFolderCollection = config.folders && collectionSlug === config.folders?.slug\n\n return (\n <main\n className={[\n baseClass,\n (id || globalSlug) && `${baseClass}--is-editing`,\n globalSlug && `global-edit--${globalSlug}`,\n collectionSlug && `collection-edit--${collectionSlug}`,\n isLivePreviewing && previewWindowType === 'iframe' && `${baseClass}--is-live-previewing`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <OperationProvider operation={operation}>\n <Form\n action={action}\n className={`${baseClass}__form`}\n disabled={isReadOnlyForIncomingUser || isInitializing || !hasSavePermission || isTrashed}\n disableSuccessStatus={!isEditing && depth < 2 && redirectAfterCreate !== false}\n disableValidationOnSubmit={!validateBeforeSubmit}\n initialState={!isInitializing && initialState}\n isDocumentForm={true}\n isInitializing={isInitializing}\n key={`${isLocked}`}\n method={id ? 'PATCH' : 'POST'}\n onChange={[onChange]}\n onSuccess={onSave}\n >\n {isInDrawer && (\n <DocumentDrawerHeader\n AfterHeader={Description}\n drawerSlug={drawerSlug}\n showDocumentID={!isFolderCollection}\n />\n )}\n {isLockingEnabled && shouldShowDocumentLockedModal && (\n <DocumentLocked\n handleGoBack={() => handleGoBack({ adminRoute, collectionSlug, router, serverURL })}\n isActive={shouldShowDocumentLockedModal}\n onReadOnly={() => {\n setIsReadOnlyForIncomingUser(true)\n setShowTakeOverModal(false)\n }}\n onTakeOver={() =>\n handleTakeOver({\n id,\n clearRouteCache,\n collectionSlug,\n documentLockStateRef: documentLockState,\n globalSlug,\n isLockingEnabled,\n isWithinDoc: false,\n setCurrentEditor,\n updateDocumentEditor,\n user,\n })\n }\n updatedAt={lastUpdateTime}\n user={currentEditor}\n />\n )}\n {isLockingEnabled && showTakeOverModal && (\n <DocumentTakeOver\n handleBackToDashboard={() => handleBackToDashboard({ adminRoute, router, serverURL })}\n isActive={showTakeOverModal}\n onReadOnly={() => {\n setIsReadOnlyForIncomingUser(true)\n setShowTakeOverModal(false)\n }}\n />\n )}\n {preventLeaveWithoutSaving && (\n <LeaveWithoutSaving onConfirm={handleLeaveConfirm} onPrevent={handlePrevent} />\n )}\n {!isInDrawer && (\n <SetDocumentStepNav\n collectionSlug={collectionConfig?.slug}\n globalSlug={globalConfig?.slug}\n id={id}\n isTrashed={isTrashed}\n pluralLabel={collectionConfig?.labels?.plural}\n useAsTitle={collectionConfig?.admin?.useAsTitle}\n />\n )}\n <SetDocumentTitle\n collectionConfig={collectionConfig}\n config={config}\n fallback={depth <= 1 ? id?.toString() : undefined}\n globalConfig={globalConfig}\n />\n <DocumentControls\n apiURL={apiURL}\n BeforeDocumentControls={BeforeDocumentControls}\n customComponents={{\n PreviewButton,\n PublishButton,\n SaveButton,\n SaveDraftButton,\n Status,\n UnpublishButton,\n }}\n data={data}\n disableActions={disableActions || isFolderCollection || isTrashed}\n disableCreate={disableCreate}\n EditMenuItems={EditMenuItems}\n hasPublishPermission={hasPublishPermission}\n hasSavePermission={hasSavePermission}\n id={id}\n isEditing={isEditing}\n isInDrawer={isInDrawer}\n isTrashed={isTrashed}\n onDelete={onDelete}\n onDrawerCreateNew={clearDoc}\n onDuplicate={onDuplicate}\n onRestore={onRestore}\n onSave={onSave}\n onTakeOver={() =>\n handleTakeOver({\n id,\n clearRouteCache,\n collectionSlug,\n documentLockStateRef: documentLockState,\n globalSlug,\n isLockingEnabled,\n isWithinDoc: true,\n setCurrentEditor,\n setIsReadOnlyForIncomingUser,\n updateDocumentEditor,\n user,\n })\n }\n permissions={docPermissions}\n readOnlyForIncomingUser={isReadOnlyForIncomingUser}\n redirectAfterDelete={redirectAfterDelete}\n redirectAfterDuplicate={redirectAfterDuplicate}\n redirectAfterRestore={redirectAfterRestore}\n slug={collectionConfig?.slug || globalConfig?.slug}\n user={currentEditor}\n />\n <div\n className={[\n `${baseClass}__main-wrapper`,\n previewWindowType === 'popup' && `${baseClass}--detached`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div\n className={[\n `${baseClass}__main`,\n previewWindowType === 'popup' && `${baseClass}__main--popup-open`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <DocumentFields\n AfterFields={AfterFields}\n BeforeFields={\n BeforeFields || (\n <Fragment>\n {auth && (\n <Auth\n className={`${baseClass}__auth`}\n collectionSlug={collectionConfig.slug}\n disableLocalStrategy={collectionConfig.auth?.disableLocalStrategy}\n email={data?.email}\n loginWithUsername={auth?.loginWithUsername}\n operation={operation}\n readOnly={!hasSavePermission}\n requirePassword={!id}\n setValidateBeforeSubmit={setValidateBeforeSubmit}\n // eslint-disable-next-line react-compiler/react-compiler\n useAPIKey={auth.useAPIKey}\n username={data?.username}\n verify={auth.verify}\n />\n )}\n {upload && (\n <React.Fragment>\n <UploadControlsProvider>\n {CustomUpload || (\n <Upload\n collectionSlug={collectionConfig.slug}\n initialState={initialState}\n uploadConfig={upload}\n UploadControls={UploadControls}\n />\n )}\n </UploadControlsProvider>\n </React.Fragment>\n )}\n </Fragment>\n )\n }\n Description={Description}\n docPermissions={docPermissions}\n fields={docConfig.fields}\n forceSidebarWrap={isLivePreviewing}\n isTrashed={isTrashed}\n readOnly={isReadOnlyForIncomingUser || !hasSavePermission || isTrashed}\n schemaPathSegments={schemaPathSegments}\n />\n {AfterDocument}\n </div>\n {isLivePreviewEnabled && !isInDrawer && livePreviewURL && (\n <>\n {CustomLivePreview || (\n <LivePreviewWindow collectionSlug={collectionSlug} globalSlug={globalSlug} />\n )}\n </>\n )}\n </div>\n </Form>\n </OperationProvider>\n </main>\n )\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/ui",
3
- "version": "3.76.0-canary.4",
3
+ "version": "3.76.1",
4
4
  "homepage": "https://payloadcms.com",
5
5
  "repository": {
6
6
  "type": "git",
@@ -136,7 +136,7 @@
136
136
  "ts-essentials": "10.0.3",
137
137
  "use-context-selector": "2.0.0",
138
138
  "uuid": "10.0.0",
139
- "@payloadcms/translations": "3.76.0-canary.4"
139
+ "@payloadcms/translations": "3.76.1"
140
140
  },
141
141
  "devDependencies": {
142
142
  "@babel/cli": "7.27.2",
@@ -151,14 +151,14 @@
151
151
  "babel-plugin-react-compiler": "19.1.0-rc.3",
152
152
  "esbuild": "0.27.1",
153
153
  "esbuild-sass-plugin": "3.3.1",
154
- "payload": "3.76.0-canary.4",
155
- "@payloadcms/eslint-config": "3.28.0"
154
+ "@payloadcms/eslint-config": "3.28.0",
155
+ "payload": "3.76.1"
156
156
  },
157
157
  "peerDependencies": {
158
- "next": "^15.2.8 || ^15.3.8 || ^15.4.10 || ^15.5.9 || >=16.1.1-canary.35 <16.2.0 || ^16.2.0",
158
+ "next": ">=15.2.9 <15.3.0 || >=15.3.9 <15.4.0 || >=15.4.11 <15.5.0 || >=16.2.0-canary.10 <17.0.0",
159
159
  "react": "^19.0.1 || ^19.1.2 || ^19.2.1",
160
160
  "react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1",
161
- "payload": "3.76.0-canary.4"
161
+ "payload": "3.76.1"
162
162
  },
163
163
  "engines": {
164
164
  "node": "^18.20.2 || >=20.9.0"