@payloadcms/ui 3.29.0-canary.2 → 3.29.0-canary.4

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 (46) hide show
  1. package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
  2. package/dist/elements/Table/DefaultCell/index.js +32 -25
  3. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  4. package/dist/elements/TableColumns/buildColumnState.d.ts.map +1 -1
  5. package/dist/elements/TableColumns/buildColumnState.js +8 -1
  6. package/dist/elements/TableColumns/buildColumnState.js.map +1 -1
  7. package/dist/exports/client/index.js +11 -11
  8. package/dist/exports/client/index.js.map +4 -4
  9. package/dist/forms/Form/index.d.ts.map +1 -1
  10. package/dist/forms/Form/index.js.map +1 -1
  11. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts +3 -1
  12. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
  13. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +28 -0
  14. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  15. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/index.d.ts +4 -2
  16. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/index.d.ts.map +1 -1
  17. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/index.js +4 -0
  18. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/index.js.map +1 -1
  19. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/iterateFields.d.ts +4 -2
  20. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/iterateFields.d.ts.map +1 -1
  21. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/iterateFields.js +4 -0
  22. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/iterateFields.js.map +1 -1
  23. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.d.ts +4 -2
  24. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.d.ts.map +1 -1
  25. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.js +41 -2
  26. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.js.map +1 -1
  27. package/dist/forms/fieldSchemasToFormState/index.d.ts +4 -2
  28. package/dist/forms/fieldSchemasToFormState/index.d.ts.map +1 -1
  29. package/dist/forms/fieldSchemasToFormState/index.js +6 -0
  30. package/dist/forms/fieldSchemasToFormState/index.js.map +1 -1
  31. package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts +4 -2
  32. package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts.map +1 -1
  33. package/dist/forms/fieldSchemasToFormState/iterateFields.js +16 -0
  34. package/dist/forms/fieldSchemasToFormState/iterateFields.js.map +1 -1
  35. package/dist/utilities/buildFormState.d.ts.map +1 -1
  36. package/dist/utilities/buildFormState.js +5 -1
  37. package/dist/utilities/buildFormState.js.map +1 -1
  38. package/dist/utilities/getDisplayedFieldValue.d.ts +13 -0
  39. package/dist/utilities/getDisplayedFieldValue.d.ts.map +1 -0
  40. package/dist/utilities/getDisplayedFieldValue.js +28 -0
  41. package/dist/utilities/getDisplayedFieldValue.js.map +1 -0
  42. package/dist/utilities/hasOptionLabelJSXElement.d.ts +3 -0
  43. package/dist/utilities/hasOptionLabelJSXElement.d.ts.map +1 -0
  44. package/dist/utilities/hasOptionLabelJSXElement.js +15 -0
  45. package/dist/utilities/hasOptionLabelJSXElement.js.map +1 -0
  46. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"buildFormState.js","names":["formatErrors","reduceFieldsToValues","fieldSchemasToFormState","renderField","getClientConfig","getClientSchemaMap","getSchemaMap","handleFormStateLocking","buildFormStateHandler","args","req","incomingUserSlug","user","collection","adminUserSlug","payload","config","admin","adminAccessFunction","collections","access","canAccessAdmin","Error","hasUsers","find","depth","limit","pagination","docs","length","res","buildFormState","err","logger","error","msg","message","id","idFromArgs","collectionSlug","data","incomingData","docPermissions","docPreferences","documentFormState","formState","globalSlug","initialBlockData","initialBlockFormState","operation","renderAllFields","i18n","returnLockStatus","schemaPath","skipValidation","updateLastEdited","schemaMap","clientSchemaMap","importMap","undefined","fieldOrEntityConfig","get","fields","type","documentData","blockData","Array","isArray","formStateResult","clientFieldSchemaMap","fieldSchemaMap","permissions","preferences","previousFormState","renderFieldFn","upload","file","lockedStateResult","lockedState","state"],"sources":["../../src/utilities/buildFormState.ts"],"sourcesContent":["import type { BuildFormStateArgs, ClientConfig, ClientUser, ErrorResult, FormState } from 'payload'\n\nimport { formatErrors } from 'payload'\nimport { reduceFieldsToValues } from 'payload/shared'\n\nimport { fieldSchemasToFormState } from '../forms/fieldSchemasToFormState/index.js'\nimport { renderField } from '../forms/fieldSchemasToFormState/renderField.js'\nimport { getClientConfig } from './getClientConfig.js'\nimport { getClientSchemaMap } from './getClientSchemaMap.js'\nimport { getSchemaMap } from './getSchemaMap.js'\nimport { handleFormStateLocking } from './handleFormStateLocking.js'\n\nexport type LockedState = {\n isLocked: boolean\n lastEditedAt: string\n user: ClientUser | number | string\n}\n\ntype BuildFormStateSuccessResult = {\n clientConfig?: ClientConfig\n errors?: never\n indexPath?: string\n lockedState?: LockedState\n state: FormState\n}\n\ntype BuildFormStateErrorResult = {\n lockedState?: never\n state?: never\n} & (\n | {\n message: string\n }\n | ErrorResult\n)\n\nexport type BuildFormStateResult = BuildFormStateErrorResult | BuildFormStateSuccessResult\n\nexport const buildFormStateHandler = async (\n args: BuildFormStateArgs,\n): Promise<BuildFormStateResult> => {\n const { req } = args\n\n const incomingUserSlug = req.user?.collection\n const adminUserSlug = req.payload.config.admin.user\n\n try {\n // If we have a user slug, test it against the functions\n if (incomingUserSlug) {\n const adminAccessFunction = req.payload.collections[incomingUserSlug].config.access?.admin\n\n // Run the admin access function from the config if it exists\n if (adminAccessFunction) {\n const canAccessAdmin = await adminAccessFunction({ req })\n\n if (!canAccessAdmin) {\n throw new Error('Unauthorized')\n }\n // Match the user collection to the global admin config\n } else if (adminUserSlug !== incomingUserSlug) {\n throw new Error('Unauthorized')\n }\n } else {\n const hasUsers = await req.payload.find({\n collection: adminUserSlug,\n depth: 0,\n limit: 1,\n pagination: false,\n })\n\n // If there are users, we should not allow access because of /create-first-user\n if (hasUsers.docs.length) {\n throw new Error('Unauthorized')\n }\n }\n\n const res = await buildFormState(args)\n return res\n } catch (err) {\n req.payload.logger.error({ err, msg: `There was an error building form state` })\n\n if (err.message === 'Could not find field schema for given path') {\n return {\n message: err.message,\n }\n }\n\n if (err.message === 'Unauthorized') {\n return null\n }\n\n return formatErrors(err)\n }\n}\n\nexport const buildFormState = async (\n args: BuildFormStateArgs,\n): Promise<BuildFormStateSuccessResult> => {\n const {\n id: idFromArgs,\n collectionSlug,\n data: incomingData,\n docPermissions,\n docPreferences,\n documentFormState,\n formState,\n globalSlug,\n initialBlockData,\n initialBlockFormState,\n operation,\n renderAllFields,\n req,\n req: {\n i18n,\n payload,\n payload: { config },\n },\n returnLockStatus,\n schemaPath = collectionSlug || globalSlug,\n skipValidation,\n updateLastEdited,\n } = args\n\n let data = incomingData\n\n if (!collectionSlug && !globalSlug) {\n throw new Error('Either collectionSlug or globalSlug must be provided')\n }\n\n const schemaMap = getSchemaMap({\n collectionSlug,\n config,\n globalSlug,\n i18n,\n })\n\n const clientSchemaMap = getClientSchemaMap({\n collectionSlug,\n config: getClientConfig({ config, i18n, importMap: req.payload.importMap }),\n globalSlug,\n i18n,\n payload,\n schemaMap,\n })\n\n const id = collectionSlug ? idFromArgs : undefined\n const fieldOrEntityConfig = schemaMap.get(schemaPath)\n\n if (!fieldOrEntityConfig) {\n throw new Error(`Could not find \"${schemaPath}\" in the fieldSchemaMap`)\n }\n\n if (\n (!('fields' in fieldOrEntityConfig) ||\n !fieldOrEntityConfig.fields ||\n !fieldOrEntityConfig.fields.length) &&\n 'type' in fieldOrEntityConfig &&\n fieldOrEntityConfig.type !== 'blocks'\n ) {\n throw new Error(\n `The field found in fieldSchemaMap for \"${schemaPath}\" does not contain any subfields.`,\n )\n }\n\n // If there is a form state,\n // then we can deduce data from that form state\n if (formState) {\n data = reduceFieldsToValues(formState, true)\n }\n\n let documentData = undefined\n if (documentFormState) {\n documentData = reduceFieldsToValues(documentFormState, true)\n }\n\n let blockData = initialBlockData\n if (initialBlockFormState) {\n blockData = reduceFieldsToValues(initialBlockFormState, true)\n }\n\n /**\n * When building state for sub schemas we need to adjust:\n * - `fields`\n * - `parentSchemaPath`\n * - `parentPath`\n *\n * Type assertion is fine because we wrap sub schemas in an array\n * so we can safely map over them within `fieldSchemasToFormState`\n */\n const fields = Array.isArray(fieldOrEntityConfig)\n ? fieldOrEntityConfig\n : 'fields' in fieldOrEntityConfig\n ? fieldOrEntityConfig.fields\n : [fieldOrEntityConfig]\n\n const formStateResult = await fieldSchemasToFormState({\n id,\n clientFieldSchemaMap: clientSchemaMap,\n collectionSlug,\n data,\n documentData,\n fields,\n fieldSchemaMap: schemaMap,\n initialBlockData: blockData,\n operation,\n permissions: docPermissions?.fields || {},\n preferences: docPreferences || { fields: {} },\n previousFormState: formState,\n renderAllFields,\n renderFieldFn: renderField,\n req,\n schemaPath,\n skipValidation,\n })\n\n // Maintain form state of auth / upload fields\n if (collectionSlug && formState) {\n if (payload.collections[collectionSlug]?.config?.upload && formState.file) {\n formStateResult.file = formState.file\n }\n }\n\n let lockedStateResult\n\n if (returnLockStatus) {\n lockedStateResult = await handleFormStateLocking({\n id,\n collectionSlug,\n globalSlug,\n req,\n updateLastEdited,\n })\n }\n\n return {\n lockedState: lockedStateResult,\n state: formStateResult,\n }\n}\n"],"mappings":"AAEA,SAASA,YAAY,QAAQ;AAC7B,SAASC,oBAAoB,QAAQ;AAErC,SAASC,uBAAuB,QAAQ;AACxC,SAASC,WAAW,QAAQ;AAC5B,SAASC,eAAe,QAAQ;AAChC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,YAAY,QAAQ;AAC7B,SAASC,sBAAsB,QAAQ;AA4BvC,OAAO,MAAMC,qBAAA,GAAwB,MACnCC,IAAA;EAEA,MAAM;IAAEC;EAAG,CAAE,GAAGD,IAAA;EAEhB,MAAME,gBAAA,GAAmBD,GAAA,CAAIE,IAAI,EAAEC,UAAA;EACnC,MAAMC,aAAA,GAAgBJ,GAAA,CAAIK,OAAO,CAACC,MAAM,CAACC,KAAK,CAACL,IAAI;EAEnD,IAAI;IACF;IACA,IAAID,gBAAA,EAAkB;MACpB,MAAMO,mBAAA,GAAsBR,GAAA,CAAIK,OAAO,CAACI,WAAW,CAACR,gBAAA,CAAiB,CAACK,MAAM,CAACI,MAAM,EAAEH,KAAA;MAErF;MACA,IAAIC,mBAAA,EAAqB;QACvB,MAAMG,cAAA,GAAiB,MAAMH,mBAAA,CAAoB;UAAER;QAAI;QAEvD,IAAI,CAACW,cAAA,EAAgB;UACnB,MAAM,IAAIC,KAAA,CAAM;QAClB;QACA;MACF,OAAO,IAAIR,aAAA,KAAkBH,gBAAA,EAAkB;QAC7C,MAAM,IAAIW,KAAA,CAAM;MAClB;IACF,OAAO;MACL,MAAMC,QAAA,GAAW,MAAMb,GAAA,CAAIK,OAAO,CAACS,IAAI,CAAC;QACtCX,UAAA,EAAYC,aAAA;QACZW,KAAA,EAAO;QACPC,KAAA,EAAO;QACPC,UAAA,EAAY;MACd;MAEA;MACA,IAAIJ,QAAA,CAASK,IAAI,CAACC,MAAM,EAAE;QACxB,MAAM,IAAIP,KAAA,CAAM;MAClB;IACF;IAEA,MAAMQ,GAAA,GAAM,MAAMC,cAAA,CAAetB,IAAA;IACjC,OAAOqB,GAAA;EACT,EAAE,OAAOE,GAAA,EAAK;IACZtB,GAAA,CAAIK,OAAO,CAACkB,MAAM,CAACC,KAAK,CAAC;MAAEF,GAAA;MAAKG,GAAA,EAAK;IAAyC;IAE9E,IAAIH,GAAA,CAAII,OAAO,KAAK,8CAA8C;MAChE,OAAO;QACLA,OAAA,EAASJ,GAAA,CAAII;MACf;IACF;IAEA,IAAIJ,GAAA,CAAII,OAAO,KAAK,gBAAgB;MAClC,OAAO;IACT;IAEA,OAAOpC,YAAA,CAAagC,GAAA;EACtB;AACF;AAEA,OAAO,MAAMD,cAAA,GAAiB,MAC5BtB,IAAA;EAEA,MAAM;IACJ4B,EAAA,EAAIC,UAAU;IACdC,cAAc;IACdC,IAAA,EAAMC,YAAY;IAClBC,cAAc;IACdC,cAAc;IACdC,iBAAiB;IACjBC,SAAS;IACTC,UAAU;IACVC,gBAAgB;IAChBC,qBAAqB;IACrBC,SAAS;IACTC,eAAe;IACfxC,GAAG;IACHA,GAAA,EAAK;MACHyC,IAAI;MACJpC,OAAO;MACPA,OAAA,EAAS;QAAEC;MAAM;IAAE,CACpB;IACDoC,gBAAgB;IAChBC,UAAA,GAAad,cAAA,IAAkBO,UAAU;IACzCQ,cAAc;IACdC;EAAgB,CACjB,GAAG9C,IAAA;EAEJ,IAAI+B,IAAA,GAAOC,YAAA;EAEX,IAAI,CAACF,cAAA,IAAkB,CAACO,UAAA,EAAY;IAClC,MAAM,IAAIxB,KAAA,CAAM;EAClB;EAEA,MAAMkC,SAAA,GAAYlD,YAAA,CAAa;IAC7BiC,cAAA;IACAvB,MAAA;IACA8B,UAAA;IACAK;EACF;EAEA,MAAMM,eAAA,GAAkBpD,kBAAA,CAAmB;IACzCkC,cAAA;IACAvB,MAAA,EAAQZ,eAAA,CAAgB;MAAEY,MAAA;MAAQmC,IAAA;MAAMO,SAAA,EAAWhD,GAAA,CAAIK,OAAO,CAAC2C;IAAU;IACzEZ,UAAA;IACAK,IAAA;IACApC,OAAA;IACAyC;EACF;EAEA,MAAMnB,EAAA,GAAKE,cAAA,GAAiBD,UAAA,GAAaqB,SAAA;EACzC,MAAMC,mBAAA,GAAsBJ,SAAA,CAAUK,GAAG,CAACR,UAAA;EAE1C,IAAI,CAACO,mBAAA,EAAqB;IACxB,MAAM,IAAItC,KAAA,CAAM,mBAAmB+B,UAAA,yBAAmC;EACxE;EAEA,IACE,CAAC,EAAE,YAAYO,mBAAkB,KAC/B,CAACA,mBAAA,CAAoBE,MAAM,IAC3B,CAACF,mBAAA,CAAoBE,MAAM,CAACjC,MAAM,KACpC,UAAU+B,mBAAA,IACVA,mBAAA,CAAoBG,IAAI,KAAK,UAC7B;IACA,MAAM,IAAIzC,KAAA,CACR,0CAA0C+B,UAAA,mCAA6C;EAE3F;EAEA;EACA;EACA,IAAIR,SAAA,EAAW;IACbL,IAAA,GAAOvC,oBAAA,CAAqB4C,SAAA,EAAW;EACzC;EAEA,IAAImB,YAAA,GAAeL,SAAA;EACnB,IAAIf,iBAAA,EAAmB;IACrBoB,YAAA,GAAe/D,oBAAA,CAAqB2C,iBAAA,EAAmB;EACzD;EAEA,IAAIqB,SAAA,GAAYlB,gBAAA;EAChB,IAAIC,qBAAA,EAAuB;IACzBiB,SAAA,GAAYhE,oBAAA,CAAqB+C,qBAAA,EAAuB;EAC1D;EAEA;;;;;;;;;EASA,MAAMc,MAAA,GAASI,KAAA,CAAMC,OAAO,CAACP,mBAAA,IACzBA,mBAAA,GACA,YAAYA,mBAAA,GACVA,mBAAA,CAAoBE,MAAM,GAC1B,CAACF,mBAAA,CAAoB;EAE3B,MAAMQ,eAAA,GAAkB,MAAMlE,uBAAA,CAAwB;IACpDmC,EAAA;IACAgC,oBAAA,EAAsBZ,eAAA;IACtBlB,cAAA;IACAC,IAAA;IACAwB,YAAA;IACAF,MAAA;IACAQ,cAAA,EAAgBd,SAAA;IAChBT,gBAAA,EAAkBkB,SAAA;IAClBhB,SAAA;IACAsB,WAAA,EAAa7B,cAAA,EAAgBoB,MAAA,IAAU,CAAC;IACxCU,WAAA,EAAa7B,cAAA,IAAkB;MAAEmB,MAAA,EAAQ,CAAC;IAAE;IAC5CW,iBAAA,EAAmB5B,SAAA;IACnBK,eAAA;IACAwB,aAAA,EAAevE,WAAA;IACfO,GAAA;IACA2C,UAAA;IACAC;EACF;EAEA;EACA,IAAIf,cAAA,IAAkBM,SAAA,EAAW;IAC/B,IAAI9B,OAAA,CAAQI,WAAW,CAACoB,cAAA,CAAe,EAAEvB,MAAA,EAAQ2D,MAAA,IAAU9B,SAAA,CAAU+B,IAAI,EAAE;MACzER,eAAA,CAAgBQ,IAAI,GAAG/B,SAAA,CAAU+B,IAAI;IACvC;EACF;EAEA,IAAIC,iBAAA;EAEJ,IAAIzB,gBAAA,EAAkB;IACpByB,iBAAA,GAAoB,MAAMtE,sBAAA,CAAuB;MAC/C8B,EAAA;MACAE,cAAA;MACAO,UAAA;MACApC,GAAA;MACA6C;IACF;EACF;EAEA,OAAO;IACLuB,WAAA,EAAaD,iBAAA;IACbE,KAAA,EAAOX;EACT;AACF","ignoreList":[]}
1
+ {"version":3,"file":"buildFormState.js","names":["formatErrors","getSelectMode","reduceFieldsToValues","fieldSchemasToFormState","renderField","getClientConfig","getClientSchemaMap","getSchemaMap","handleFormStateLocking","buildFormStateHandler","args","req","incomingUserSlug","user","collection","adminUserSlug","payload","config","admin","adminAccessFunction","collections","access","canAccessAdmin","Error","hasUsers","find","depth","limit","pagination","docs","length","res","buildFormState","err","logger","error","msg","message","id","idFromArgs","collectionSlug","data","incomingData","docPermissions","docPreferences","documentFormState","formState","globalSlug","initialBlockData","initialBlockFormState","operation","renderAllFields","i18n","returnLockStatus","schemaPath","select","skipValidation","updateLastEdited","selectMode","undefined","schemaMap","clientSchemaMap","importMap","fieldOrEntityConfig","get","fields","type","documentData","blockData","Array","isArray","formStateResult","clientFieldSchemaMap","fieldSchemaMap","permissions","preferences","previousFormState","renderFieldFn","upload","file","lockedStateResult","lockedState","state"],"sources":["../../src/utilities/buildFormState.ts"],"sourcesContent":["import type { BuildFormStateArgs, ClientConfig, ClientUser, ErrorResult, FormState } from 'payload'\n\nimport { formatErrors } from 'payload'\nimport { getSelectMode, reduceFieldsToValues } from 'payload/shared'\n\nimport { fieldSchemasToFormState } from '../forms/fieldSchemasToFormState/index.js'\nimport { renderField } from '../forms/fieldSchemasToFormState/renderField.js'\nimport { getClientConfig } from './getClientConfig.js'\nimport { getClientSchemaMap } from './getClientSchemaMap.js'\nimport { getSchemaMap } from './getSchemaMap.js'\nimport { handleFormStateLocking } from './handleFormStateLocking.js'\n\nexport type LockedState = {\n isLocked: boolean\n lastEditedAt: string\n user: ClientUser | number | string\n}\n\ntype BuildFormStateSuccessResult = {\n clientConfig?: ClientConfig\n errors?: never\n indexPath?: string\n lockedState?: LockedState\n state: FormState\n}\n\ntype BuildFormStateErrorResult = {\n lockedState?: never\n state?: never\n} & (\n | {\n message: string\n }\n | ErrorResult\n)\n\nexport type BuildFormStateResult = BuildFormStateErrorResult | BuildFormStateSuccessResult\n\nexport const buildFormStateHandler = async (\n args: BuildFormStateArgs,\n): Promise<BuildFormStateResult> => {\n const { req } = args\n\n const incomingUserSlug = req.user?.collection\n const adminUserSlug = req.payload.config.admin.user\n\n try {\n // If we have a user slug, test it against the functions\n if (incomingUserSlug) {\n const adminAccessFunction = req.payload.collections[incomingUserSlug].config.access?.admin\n\n // Run the admin access function from the config if it exists\n if (adminAccessFunction) {\n const canAccessAdmin = await adminAccessFunction({ req })\n\n if (!canAccessAdmin) {\n throw new Error('Unauthorized')\n }\n // Match the user collection to the global admin config\n } else if (adminUserSlug !== incomingUserSlug) {\n throw new Error('Unauthorized')\n }\n } else {\n const hasUsers = await req.payload.find({\n collection: adminUserSlug,\n depth: 0,\n limit: 1,\n pagination: false,\n })\n\n // If there are users, we should not allow access because of /create-first-user\n if (hasUsers.docs.length) {\n throw new Error('Unauthorized')\n }\n }\n\n const res = await buildFormState(args)\n return res\n } catch (err) {\n req.payload.logger.error({ err, msg: `There was an error building form state` })\n\n if (err.message === 'Could not find field schema for given path') {\n return {\n message: err.message,\n }\n }\n\n if (err.message === 'Unauthorized') {\n return null\n }\n\n return formatErrors(err)\n }\n}\n\nexport const buildFormState = async (\n args: BuildFormStateArgs,\n): Promise<BuildFormStateSuccessResult> => {\n const {\n id: idFromArgs,\n collectionSlug,\n data: incomingData,\n docPermissions,\n docPreferences,\n documentFormState,\n formState,\n globalSlug,\n initialBlockData,\n initialBlockFormState,\n operation,\n renderAllFields,\n req,\n req: {\n i18n,\n payload,\n payload: { config },\n },\n returnLockStatus,\n schemaPath = collectionSlug || globalSlug,\n select,\n skipValidation,\n updateLastEdited,\n } = args\n\n const selectMode = select ? getSelectMode(select) : undefined\n\n let data = incomingData\n\n if (!collectionSlug && !globalSlug) {\n throw new Error('Either collectionSlug or globalSlug must be provided')\n }\n\n const schemaMap = getSchemaMap({\n collectionSlug,\n config,\n globalSlug,\n i18n,\n })\n\n const clientSchemaMap = getClientSchemaMap({\n collectionSlug,\n config: getClientConfig({ config, i18n, importMap: req.payload.importMap }),\n globalSlug,\n i18n,\n payload,\n schemaMap,\n })\n\n const id = collectionSlug ? idFromArgs : undefined\n const fieldOrEntityConfig = schemaMap.get(schemaPath)\n\n if (!fieldOrEntityConfig) {\n throw new Error(`Could not find \"${schemaPath}\" in the fieldSchemaMap`)\n }\n\n if (\n (!('fields' in fieldOrEntityConfig) ||\n !fieldOrEntityConfig.fields ||\n !fieldOrEntityConfig.fields.length) &&\n 'type' in fieldOrEntityConfig &&\n fieldOrEntityConfig.type !== 'blocks'\n ) {\n throw new Error(\n `The field found in fieldSchemaMap for \"${schemaPath}\" does not contain any subfields.`,\n )\n }\n\n // If there is a form state,\n // then we can deduce data from that form state\n if (formState) {\n data = reduceFieldsToValues(formState, true)\n }\n\n let documentData = undefined\n if (documentFormState) {\n documentData = reduceFieldsToValues(documentFormState, true)\n }\n\n let blockData = initialBlockData\n if (initialBlockFormState) {\n blockData = reduceFieldsToValues(initialBlockFormState, true)\n }\n\n /**\n * When building state for sub schemas we need to adjust:\n * - `fields`\n * - `parentSchemaPath`\n * - `parentPath`\n *\n * Type assertion is fine because we wrap sub schemas in an array\n * so we can safely map over them within `fieldSchemasToFormState`\n */\n const fields = Array.isArray(fieldOrEntityConfig)\n ? fieldOrEntityConfig\n : 'fields' in fieldOrEntityConfig\n ? fieldOrEntityConfig.fields\n : [fieldOrEntityConfig]\n\n const formStateResult = await fieldSchemasToFormState({\n id,\n clientFieldSchemaMap: clientSchemaMap,\n collectionSlug,\n data,\n documentData,\n fields,\n fieldSchemaMap: schemaMap,\n initialBlockData: blockData,\n operation,\n permissions: docPermissions?.fields || {},\n preferences: docPreferences || { fields: {} },\n previousFormState: formState,\n renderAllFields,\n renderFieldFn: renderField,\n req,\n schemaPath,\n select,\n selectMode,\n skipValidation,\n })\n\n // Maintain form state of auth / upload fields\n if (collectionSlug && formState) {\n if (payload.collections[collectionSlug]?.config?.upload && formState.file) {\n formStateResult.file = formState.file\n }\n }\n\n let lockedStateResult\n\n if (returnLockStatus) {\n lockedStateResult = await handleFormStateLocking({\n id,\n collectionSlug,\n globalSlug,\n req,\n updateLastEdited,\n })\n }\n\n return {\n lockedState: lockedStateResult,\n state: formStateResult,\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ import type { I18nClient } from '@payloadcms/translations';
2
+ import type { ClientField } from 'payload';
3
+ /**
4
+ * Returns the appropriate display value for a field.
5
+ * - For select and radio fields:
6
+ * - Returns JSX elements as-is.
7
+ * - Translates localized label objects based on the current language.
8
+ * - Returns string labels directly.
9
+ * - Falls back to the option value if no valid label is found.
10
+ * - For all other field types, returns `cellData` unchanged.
11
+ */
12
+ export declare const getDisplayedFieldValue: (cellData: any, field: ClientField, i18n: I18nClient) => any;
13
+ //# sourceMappingURL=getDisplayedFieldValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDisplayedFieldValue.d.ts","sourceRoot":"","sources":["../../src/utilities/getDisplayedFieldValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAK1C;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,aAAc,GAAG,SAAS,WAAW,QAAQ,UAAU,QAgBzF,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { getTranslation } from '@payloadcms/translations';
2
+ import React from 'react';
3
+ /**
4
+ * Returns the appropriate display value for a field.
5
+ * - For select and radio fields:
6
+ * - Returns JSX elements as-is.
7
+ * - Translates localized label objects based on the current language.
8
+ * - Returns string labels directly.
9
+ * - Falls back to the option value if no valid label is found.
10
+ * - For all other field types, returns `cellData` unchanged.
11
+ */
12
+ export const getDisplayedFieldValue = (cellData, field, i18n) => {
13
+ if ((field?.type === 'select' || field?.type === 'radio') && Array.isArray(field.options)) {
14
+ const selectedOption = field.options.find(opt => typeof opt === 'object' ? opt.value === cellData : opt === cellData);
15
+ if (selectedOption) {
16
+ if (typeof selectedOption === 'object' && 'label' in selectedOption) {
17
+ return React.isValidElement(selectedOption.label) ? selectedOption.label // Return JSX directly
18
+ : getTranslation(selectedOption.label, i18n) || selectedOption.value // Use translation or fallback to value
19
+ ;
20
+ }
21
+ return selectedOption // If option is a string, return it directly
22
+ ;
23
+ }
24
+ }
25
+ return cellData // Default fallback if no match found
26
+ ;
27
+ };
28
+ //# sourceMappingURL=getDisplayedFieldValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDisplayedFieldValue.js","names":["getTranslation","React","getDisplayedFieldValue","cellData","field","i18n","type","Array","isArray","options","selectedOption","find","opt","value","isValidElement","label"],"sources":["../../src/utilities/getDisplayedFieldValue.ts"],"sourcesContent":["import type { I18nClient } from '@payloadcms/translations'\nimport type { ClientField } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\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 React.isValidElement(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;AAC/B,OAAOC,KAAA,MAAW;AAElB;;;;;;;;;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,KAAA,CAAMa,cAAc,CAACJ,cAAA,CAAeK,KAAK,IAC5CL,cAAA,CAAeK,KAAK,CAAC;QAAA,EACrBf,cAAA,CAAeU,cAAA,CAAeK,KAAK,EAAEV,IAAA,KAASK,cAAA,CAAeG,KAAK,CAAC;QAAA;MACzE;MACA,OAAOH,cAAA,CAAe;MAAA;IACxB;EACF;EACA,OAAOP,QAAA,CAAS;EAAA;AAClB","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ import type { DefaultCellComponentProps } from 'payload';
2
+ export declare const hasOptionLabelJSXElement: (cellClientProps: DefaultCellComponentProps) => boolean;
3
+ //# sourceMappingURL=hasOptionLabelJSXElement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasOptionLabelJSXElement.d.ts","sourceRoot":"","sources":["../../src/utilities/hasOptionLabelJSXElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAIxD,eAAO,MAAM,wBAAwB,oBAAqB,yBAAyB,YAkBlF,CAAA"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ export const hasOptionLabelJSXElement = cellClientProps => {
3
+ const {
4
+ cellData,
5
+ field
6
+ } = cellClientProps;
7
+ if ((field?.type === 'select' || field?.type == 'radio') && Array.isArray(field?.options)) {
8
+ const matchingOption = field.options.find(option => typeof option === 'object' && option.value === cellData);
9
+ if (matchingOption && typeof matchingOption === 'object' && React.isValidElement(matchingOption.label)) {
10
+ return true;
11
+ }
12
+ }
13
+ return false;
14
+ };
15
+ //# sourceMappingURL=hasOptionLabelJSXElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasOptionLabelJSXElement.js","names":["React","hasOptionLabelJSXElement","cellClientProps","cellData","field","type","Array","isArray","options","matchingOption","find","option","value","isValidElement","label"],"sources":["../../src/utilities/hasOptionLabelJSXElement.ts"],"sourcesContent":["import type { DefaultCellComponentProps } from 'payload'\n\nimport React from 'react'\n\nexport const hasOptionLabelJSXElement = (cellClientProps: DefaultCellComponentProps) => {\n const { cellData, field } = cellClientProps\n\n if ((field?.type === 'select' || field?.type == 'radio') && Array.isArray(field?.options)) {\n const matchingOption = field.options.find(\n (option) => typeof option === 'object' && option.value === cellData,\n )\n\n if (\n matchingOption &&\n typeof matchingOption === 'object' &&\n React.isValidElement(matchingOption.label)\n ) {\n return true\n }\n }\n\n return false\n}\n"],"mappings":"AAEA,OAAOA,KAAA,MAAW;AAElB,OAAO,MAAMC,wBAAA,GAA4BC,eAAA;EACvC,MAAM;IAAEC,QAAQ;IAAEC;EAAK,CAAE,GAAGF,eAAA;EAE5B,IAAI,CAACE,KAAA,EAAOC,IAAA,KAAS,YAAYD,KAAA,EAAOC,IAAA,IAAQ,OAAM,KAAMC,KAAA,CAAMC,OAAO,CAACH,KAAA,EAAOI,OAAA,GAAU;IACzF,MAAMC,cAAA,GAAiBL,KAAA,CAAMI,OAAO,CAACE,IAAI,CACtCC,MAAA,IAAW,OAAOA,MAAA,KAAW,YAAYA,MAAA,CAAOC,KAAK,KAAKT,QAAA;IAG7D,IACEM,cAAA,IACA,OAAOA,cAAA,KAAmB,YAC1BT,KAAA,CAAMa,cAAc,CAACJ,cAAA,CAAeK,KAAK,GACzC;MACA,OAAO;IACT;EACF;EAEA,OAAO;AACT","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/ui",
3
- "version": "3.29.0-canary.2",
3
+ "version": "3.29.0-canary.4",
4
4
  "homepage": "https://payloadcms.com",
5
5
  "repository": {
6
6
  "type": "git",
@@ -132,7 +132,7 @@
132
132
  "ts-essentials": "10.0.3",
133
133
  "use-context-selector": "2.0.0",
134
134
  "uuid": "10.0.0",
135
- "@payloadcms/translations": "3.29.0-canary.2"
135
+ "@payloadcms/translations": "3.29.0-canary.4"
136
136
  },
137
137
  "devDependencies": {
138
138
  "@babel/cli": "7.26.4",
@@ -148,14 +148,14 @@
148
148
  "esbuild": "0.24.2",
149
149
  "esbuild-sass-plugin": "3.3.1",
150
150
  "eslint-plugin-react-compiler": "19.0.0-beta-714736e-20250131",
151
- "@payloadcms/eslint-config": "3.28.0",
152
- "payload": "3.29.0-canary.2"
151
+ "payload": "3.29.0-canary.4",
152
+ "@payloadcms/eslint-config": "3.28.0"
153
153
  },
154
154
  "peerDependencies": {
155
155
  "next": "^15.0.0",
156
156
  "react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
157
157
  "react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
158
- "payload": "3.29.0-canary.2"
158
+ "payload": "3.29.0-canary.4"
159
159
  },
160
160
  "engines": {
161
161
  "node": "^18.20.2 || >=20.9.0"