@payloadcms/next 3.73.0-canary.5 → 3.73.0-canary.6

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.
@@ -6,5 +6,5 @@ export declare const generateLabelFromValue: ({ field, locale, parentIsLocalized
6
6
  parentIsLocalized: boolean;
7
7
  req: PayloadRequest;
8
8
  value: RelationshipValue;
9
- }) => string;
9
+ }) => Promise<string>;
10
10
  //# sourceMappingURL=generateLabelFromValue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateLabelFromValue.d.ts","sourceRoot":"","sources":["../../../../../../src/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAc,MAAM,SAAS,CAAA;AAS5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,eAAO,MAAM,sBAAsB,sDAMhC;IACD,KAAK,EAAE,iBAAiB,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,iBAAiB,EAAE,OAAO,CAAA;IAC1B,GAAG,EAAE,cAAc,CAAA;IACnB,KAAK,EAAE,iBAAiB,CAAA;CACzB,KAAG,MAyDH,CAAA"}
1
+ {"version":3,"file":"generateLabelFromValue.d.ts","sourceRoot":"","sources":["../../../../../../src/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAc,MAAM,SAAS,CAAA;AAS5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,eAAO,MAAM,sBAAsB,sDAMhC;IACD,KAAK,EAAE,iBAAiB,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,iBAAiB,EAAE,OAAO,CAAA;IAC1B,GAAG,EAAE,cAAc,CAAA;IACnB,KAAK,EAAE,iBAAiB,CAAA;CACzB,KAAG,OAAO,CAAC,MAAM,CA4EjB,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { fieldAffectsData, fieldIsPresentationalOnly, fieldShouldBeLocalized, flattenTopLevelFields } from 'payload/shared';
2
- export const generateLabelFromValue = ({
2
+ export const generateLabelFromValue = async ({
3
3
  field,
4
4
  locale,
5
5
  parentIsLocalized,
@@ -31,8 +31,30 @@ export const generateLabelFromValue = ({
31
31
  }
32
32
  if (typeof relatedDoc?.[useAsTitle] !== 'undefined') {
33
33
  valueToReturn = relatedDoc[useAsTitle];
34
+ } else if (typeof relatedDoc === 'string' || typeof relatedDoc === 'number') {
35
+ // When relatedDoc is just an ID (due to maxDepth: 0), fetch the document to get the title
36
+ try {
37
+ const fetchedDoc = await req.payload.findByID({
38
+ id: relatedDoc,
39
+ collection: relationTo,
40
+ depth: 0,
41
+ locale: titleFieldIsLocalized ? locale : undefined,
42
+ req,
43
+ select: {
44
+ [useAsTitle]: true
45
+ }
46
+ });
47
+ if (fetchedDoc?.[useAsTitle]) {
48
+ valueToReturn = fetchedDoc[useAsTitle];
49
+ } else {
50
+ valueToReturn = `${req.i18n.t('general:untitled')} - ID: ${relatedDoc}`;
51
+ }
52
+ } catch (error) {
53
+ // Document might have been deleted or user doesn't have access
54
+ valueToReturn = `${req.i18n.t('general:untitled')} - ID: ${relatedDoc}`;
55
+ }
34
56
  } else {
35
- valueToReturn = String(typeof relatedDoc === 'object' ? relatedDoc.id : `${req.i18n.t('general:untitled')} - ID: ${relatedDoc}`);
57
+ valueToReturn = String(typeof relatedDoc === 'object' ? relatedDoc.id : relatedDoc);
36
58
  }
37
59
  if (typeof valueToReturn === 'object' && valueToReturn && titleFieldIsLocalized && valueToReturn?.[locale]) {
38
60
  valueToReturn = valueToReturn[locale];
@@ -1 +1 @@
1
- {"version":3,"file":"generateLabelFromValue.js","names":["fieldAffectsData","fieldIsPresentationalOnly","fieldShouldBeLocalized","flattenTopLevelFields","generateLabelFromValue","field","locale","parentIsLocalized","req","value","relatedDoc","relationTo","valueToReturn","relatedCollection","payload","collections","config","useAsTitle","admin","flattenedRelatedCollectionFields","fields","moveSubFieldsToTop","useAsTitleField","find","f","name","titleFieldIsLocalized","String","id","i18n","t","JSON","stringify"],"sources":["../../../../../../src/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.ts"],"sourcesContent":["import type { PayloadRequest, RelationshipField, TypeWithID } from 'payload'\n\nimport {\n fieldAffectsData,\n fieldIsPresentationalOnly,\n fieldShouldBeLocalized,\n flattenTopLevelFields,\n} from 'payload/shared'\n\nimport type { RelationshipValue } from './index.js'\n\nexport const generateLabelFromValue = ({\n field,\n locale,\n parentIsLocalized,\n req,\n value,\n}: {\n field: RelationshipField\n locale: string\n parentIsLocalized: boolean\n req: PayloadRequest\n value: RelationshipValue\n}): string => {\n let relatedDoc: number | string | TypeWithID\n let relationTo: string = field.relationTo as string\n let valueToReturn: string = ''\n\n if (typeof value === 'object' && 'relationTo' in value) {\n relatedDoc = value.value\n relationTo = value.relationTo\n } else {\n // Non-polymorphic relationship or deleted document\n relatedDoc = value\n }\n\n const relatedCollection = req.payload.collections[relationTo].config\n\n const useAsTitle = relatedCollection?.admin?.useAsTitle\n\n const flattenedRelatedCollectionFields = flattenTopLevelFields(relatedCollection.fields, {\n moveSubFieldsToTop: true,\n })\n\n const useAsTitleField = flattenedRelatedCollectionFields.find(\n (f) => fieldAffectsData(f) && !fieldIsPresentationalOnly(f) && f.name === useAsTitle,\n )\n let titleFieldIsLocalized = false\n\n if (useAsTitleField && fieldAffectsData(useAsTitleField)) {\n titleFieldIsLocalized = fieldShouldBeLocalized({ field: useAsTitleField, parentIsLocalized })\n }\n\n if (typeof relatedDoc?.[useAsTitle] !== 'undefined') {\n valueToReturn = relatedDoc[useAsTitle]\n } else {\n valueToReturn = String(\n typeof relatedDoc === 'object'\n ? relatedDoc.id\n : `${req.i18n.t('general:untitled')} - ID: ${relatedDoc}`,\n )\n }\n\n if (\n typeof valueToReturn === 'object' &&\n valueToReturn &&\n titleFieldIsLocalized &&\n valueToReturn?.[locale]\n ) {\n valueToReturn = valueToReturn[locale]\n }\n\n if (\n (valueToReturn && typeof valueToReturn === 'object' && valueToReturn !== null) ||\n typeof valueToReturn !== 'string'\n ) {\n valueToReturn = JSON.stringify(valueToReturn)\n }\n\n return valueToReturn\n}\n"],"mappings":"AAEA,SACEA,gBAAgB,EAChBC,yBAAyB,EACzBC,sBAAsB,EACtBC,qBAAqB,QAChB;AAIP,OAAO,MAAMC,sBAAA,GAAyBA,CAAC;EACrCC,KAAK;EACLC,MAAM;EACNC,iBAAiB;EACjBC,GAAG;EACHC;AAAK,CAON;EACC,IAAIC,UAAA;EACJ,IAAIC,UAAA,GAAqBN,KAAA,CAAMM,UAAU;EACzC,IAAIC,aAAA,GAAwB;EAE5B,IAAI,OAAOH,KAAA,KAAU,YAAY,gBAAgBA,KAAA,EAAO;IACtDC,UAAA,GAAaD,KAAA,CAAMA,KAAK;IACxBE,UAAA,GAAaF,KAAA,CAAME,UAAU;EAC/B,OAAO;IACL;IACAD,UAAA,GAAaD,KAAA;EACf;EAEA,MAAMI,iBAAA,GAAoBL,GAAA,CAAIM,OAAO,CAACC,WAAW,CAACJ,UAAA,CAAW,CAACK,MAAM;EAEpE,MAAMC,UAAA,GAAaJ,iBAAA,EAAmBK,KAAA,EAAOD,UAAA;EAE7C,MAAME,gCAAA,GAAmChB,qBAAA,CAAsBU,iBAAA,CAAkBO,MAAM,EAAE;IACvFC,kBAAA,EAAoB;EACtB;EAEA,MAAMC,eAAA,GAAkBH,gCAAA,CAAiCI,IAAI,CAC1DC,CAAA,IAAMxB,gBAAA,CAAiBwB,CAAA,KAAM,CAACvB,yBAAA,CAA0BuB,CAAA,KAAMA,CAAA,CAAEC,IAAI,KAAKR,UAAA;EAE5E,IAAIS,qBAAA,GAAwB;EAE5B,IAAIJ,eAAA,IAAmBtB,gBAAA,CAAiBsB,eAAA,GAAkB;IACxDI,qBAAA,GAAwBxB,sBAAA,CAAuB;MAAEG,KAAA,EAAOiB,eAAA;MAAiBf;IAAkB;EAC7F;EAEA,IAAI,OAAOG,UAAA,GAAaO,UAAA,CAAW,KAAK,aAAa;IACnDL,aAAA,GAAgBF,UAAU,CAACO,UAAA,CAAW;EACxC,OAAO;IACLL,aAAA,GAAgBe,MAAA,CACd,OAAOjB,UAAA,KAAe,WAClBA,UAAA,CAAWkB,EAAE,GACb,GAAGpB,GAAA,CAAIqB,IAAI,CAACC,CAAC,CAAC,6BAA6BpB,UAAA,EAAY;EAE/D;EAEA,IACE,OAAOE,aAAA,KAAkB,YACzBA,aAAA,IACAc,qBAAA,IACAd,aAAA,GAAgBN,MAAA,CAAO,EACvB;IACAM,aAAA,GAAgBA,aAAa,CAACN,MAAA,CAAO;EACvC;EAEA,IACEM,aAAC,IAAiB,OAAOA,aAAA,KAAkB,YAAYA,aAAA,KAAkB,QACzE,OAAOA,aAAA,KAAkB,UACzB;IACAA,aAAA,GAAgBmB,IAAA,CAAKC,SAAS,CAACpB,aAAA;EACjC;EAEA,OAAOA,aAAA;AACT","ignoreList":[]}
1
+ {"version":3,"file":"generateLabelFromValue.js","names":["fieldAffectsData","fieldIsPresentationalOnly","fieldShouldBeLocalized","flattenTopLevelFields","generateLabelFromValue","field","locale","parentIsLocalized","req","value","relatedDoc","relationTo","valueToReturn","relatedCollection","payload","collections","config","useAsTitle","admin","flattenedRelatedCollectionFields","fields","moveSubFieldsToTop","useAsTitleField","find","f","name","titleFieldIsLocalized","fetchedDoc","findByID","id","collection","depth","undefined","select","i18n","t","error","String","JSON","stringify"],"sources":["../../../../../../src/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.ts"],"sourcesContent":["import type { PayloadRequest, RelationshipField, TypeWithID } from 'payload'\n\nimport {\n fieldAffectsData,\n fieldIsPresentationalOnly,\n fieldShouldBeLocalized,\n flattenTopLevelFields,\n} from 'payload/shared'\n\nimport type { RelationshipValue } from './index.js'\n\nexport const generateLabelFromValue = async ({\n field,\n locale,\n parentIsLocalized,\n req,\n value,\n}: {\n field: RelationshipField\n locale: string\n parentIsLocalized: boolean\n req: PayloadRequest\n value: RelationshipValue\n}): Promise<string> => {\n let relatedDoc: number | string | TypeWithID\n let relationTo: string = field.relationTo as string\n let valueToReturn: string = ''\n\n if (typeof value === 'object' && 'relationTo' in value) {\n relatedDoc = value.value\n relationTo = value.relationTo\n } else {\n // Non-polymorphic relationship or deleted document\n relatedDoc = value\n }\n\n const relatedCollection = req.payload.collections[relationTo].config\n\n const useAsTitle = relatedCollection?.admin?.useAsTitle\n\n const flattenedRelatedCollectionFields = flattenTopLevelFields(relatedCollection.fields, {\n moveSubFieldsToTop: true,\n })\n\n const useAsTitleField = flattenedRelatedCollectionFields.find(\n (f) => fieldAffectsData(f) && !fieldIsPresentationalOnly(f) && f.name === useAsTitle,\n )\n let titleFieldIsLocalized = false\n\n if (useAsTitleField && fieldAffectsData(useAsTitleField)) {\n titleFieldIsLocalized = fieldShouldBeLocalized({ field: useAsTitleField, parentIsLocalized })\n }\n\n if (typeof relatedDoc?.[useAsTitle] !== 'undefined') {\n valueToReturn = relatedDoc[useAsTitle]\n } else if (typeof relatedDoc === 'string' || typeof relatedDoc === 'number') {\n // When relatedDoc is just an ID (due to maxDepth: 0), fetch the document to get the title\n try {\n const fetchedDoc = await req.payload.findByID({\n id: relatedDoc,\n collection: relationTo,\n depth: 0,\n locale: titleFieldIsLocalized ? locale : undefined,\n req,\n select: {\n [useAsTitle]: true,\n },\n })\n\n if (fetchedDoc?.[useAsTitle]) {\n valueToReturn = fetchedDoc[useAsTitle]\n } else {\n valueToReturn = `${req.i18n.t('general:untitled')} - ID: ${relatedDoc}`\n }\n } catch (error) {\n // Document might have been deleted or user doesn't have access\n valueToReturn = `${req.i18n.t('general:untitled')} - ID: ${relatedDoc}`\n }\n } else {\n valueToReturn = String(typeof relatedDoc === 'object' ? relatedDoc.id : relatedDoc)\n }\n\n if (\n typeof valueToReturn === 'object' &&\n valueToReturn &&\n titleFieldIsLocalized &&\n valueToReturn?.[locale]\n ) {\n valueToReturn = valueToReturn[locale]\n }\n\n if (\n (valueToReturn && typeof valueToReturn === 'object' && valueToReturn !== null) ||\n typeof valueToReturn !== 'string'\n ) {\n valueToReturn = JSON.stringify(valueToReturn)\n }\n\n return valueToReturn\n}\n"],"mappings":"AAEA,SACEA,gBAAgB,EAChBC,yBAAyB,EACzBC,sBAAsB,EACtBC,qBAAqB,QAChB;AAIP,OAAO,MAAMC,sBAAA,GAAyB,MAAAA,CAAO;EAC3CC,KAAK;EACLC,MAAM;EACNC,iBAAiB;EACjBC,GAAG;EACHC;AAAK,CAON;EACC,IAAIC,UAAA;EACJ,IAAIC,UAAA,GAAqBN,KAAA,CAAMM,UAAU;EACzC,IAAIC,aAAA,GAAwB;EAE5B,IAAI,OAAOH,KAAA,KAAU,YAAY,gBAAgBA,KAAA,EAAO;IACtDC,UAAA,GAAaD,KAAA,CAAMA,KAAK;IACxBE,UAAA,GAAaF,KAAA,CAAME,UAAU;EAC/B,OAAO;IACL;IACAD,UAAA,GAAaD,KAAA;EACf;EAEA,MAAMI,iBAAA,GAAoBL,GAAA,CAAIM,OAAO,CAACC,WAAW,CAACJ,UAAA,CAAW,CAACK,MAAM;EAEpE,MAAMC,UAAA,GAAaJ,iBAAA,EAAmBK,KAAA,EAAOD,UAAA;EAE7C,MAAME,gCAAA,GAAmChB,qBAAA,CAAsBU,iBAAA,CAAkBO,MAAM,EAAE;IACvFC,kBAAA,EAAoB;EACtB;EAEA,MAAMC,eAAA,GAAkBH,gCAAA,CAAiCI,IAAI,CAC1DC,CAAA,IAAMxB,gBAAA,CAAiBwB,CAAA,KAAM,CAACvB,yBAAA,CAA0BuB,CAAA,KAAMA,CAAA,CAAEC,IAAI,KAAKR,UAAA;EAE5E,IAAIS,qBAAA,GAAwB;EAE5B,IAAIJ,eAAA,IAAmBtB,gBAAA,CAAiBsB,eAAA,GAAkB;IACxDI,qBAAA,GAAwBxB,sBAAA,CAAuB;MAAEG,KAAA,EAAOiB,eAAA;MAAiBf;IAAkB;EAC7F;EAEA,IAAI,OAAOG,UAAA,GAAaO,UAAA,CAAW,KAAK,aAAa;IACnDL,aAAA,GAAgBF,UAAU,CAACO,UAAA,CAAW;EACxC,OAAO,IAAI,OAAOP,UAAA,KAAe,YAAY,OAAOA,UAAA,KAAe,UAAU;IAC3E;IACA,IAAI;MACF,MAAMiB,UAAA,GAAa,MAAMnB,GAAA,CAAIM,OAAO,CAACc,QAAQ,CAAC;QAC5CC,EAAA,EAAInB,UAAA;QACJoB,UAAA,EAAYnB,UAAA;QACZoB,KAAA,EAAO;QACPzB,MAAA,EAAQoB,qBAAA,GAAwBpB,MAAA,GAAS0B,SAAA;QACzCxB,GAAA;QACAyB,MAAA,EAAQ;UACN,CAAChB,UAAA,GAAa;QAChB;MACF;MAEA,IAAIU,UAAA,GAAaV,UAAA,CAAW,EAAE;QAC5BL,aAAA,GAAgBe,UAAU,CAACV,UAAA,CAAW;MACxC,OAAO;QACLL,aAAA,GAAgB,GAAGJ,GAAA,CAAI0B,IAAI,CAACC,CAAC,CAAC,6BAA6BzB,UAAA,EAAY;MACzE;IACF,EAAE,OAAO0B,KAAA,EAAO;MACd;MACAxB,aAAA,GAAgB,GAAGJ,GAAA,CAAI0B,IAAI,CAACC,CAAC,CAAC,6BAA6BzB,UAAA,EAAY;IACzE;EACF,OAAO;IACLE,aAAA,GAAgByB,MAAA,CAAO,OAAO3B,UAAA,KAAe,WAAWA,UAAA,CAAWmB,EAAE,GAAGnB,UAAA;EAC1E;EAEA,IACE,OAAOE,aAAA,KAAkB,YACzBA,aAAA,IACAc,qBAAA,IACAd,aAAA,GAAgBN,MAAA,CAAO,EACvB;IACAM,aAAA,GAAgBA,aAAa,CAACN,MAAA,CAAO;EACvC;EAEA,IACEM,aAAC,IAAiB,OAAOA,aAAA,KAAkB,YAAYA,aAAA,KAAkB,QACzE,OAAOA,aAAA,KAAkB,UACzB;IACAA,aAAA,GAAgB0B,IAAA,CAAKC,SAAS,CAAC3B,aAAA;EACjC;EAEA,OAAOA,aAAA;AACT","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/views/Version/RenderFieldsToDiff/fields/Relationship/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,oCAAoC,EACpC,UAAU,EACX,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAG1E,OAAO,cAAc,CAAA;AAErB,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,MAAM,MAAM,iBAAiB,GACzB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAA;CAAE,GAC3D,CAAC,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,CAAA;AAElC,eAAO,MAAM,YAAY,EAAE,oCA0C1B,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC;IAC5C,KAAK,EAAE,iBAAiB,CAAA;IACxB,IAAI,EAAE,UAAU,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,WAAW,EAAE,OAAO,CAAA;IACpB,GAAG,EAAE,cAAc,CAAA;IACnB,SAAS,EAAE,iBAAiB,CAAA;IAC5B,OAAO,EAAE,iBAAiB,CAAA;CAC3B,CAqEA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/views/Version/RenderFieldsToDiff/fields/Relationship/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,oCAAoC,EACpC,UAAU,EACX,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAG1E,OAAO,cAAc,CAAA;AAErB,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,MAAM,MAAM,iBAAiB,GACzB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAA;CAAE,GAC3D,CAAC,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,CAAA;AAElC,eAAO,MAAM,YAAY,EAAE,oCA0C1B,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC;IAC5C,KAAK,EAAE,iBAAiB,CAAA;IACxB,IAAI,EAAE,UAAU,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,WAAW,EAAE,OAAO,CAAA;IACpB,GAAG,EAAE,cAAc,CAAA;IACnB,SAAS,EAAE,iBAAiB,CAAA;IAC5B,OAAO,EAAE,iBAAiB,CAAA;CAC3B,CAkGA,CAAA"}
@@ -54,6 +54,21 @@ export const SingleRelationshipDiff = async args => {
54
54
  valueTo
55
55
  } = args;
56
56
  const ReactDOMServer = (await import('react-dom/server')).default;
57
+ const localeToUse = locale ?? (req.payload.config?.localization && req.payload.config?.localization?.defaultLocale) ?? 'en';
58
+ // Generate titles asynchronously before creating components
59
+ const [titleFrom, titleTo] = await Promise.all([valueFrom ? generateLabelFromValue({
60
+ field,
61
+ locale: localeToUse,
62
+ parentIsLocalized,
63
+ req,
64
+ value: valueFrom
65
+ }) : Promise.resolve(null), valueTo ? generateLabelFromValue({
66
+ field,
67
+ locale: localeToUse,
68
+ parentIsLocalized,
69
+ req,
70
+ value: valueTo
71
+ }) : Promise.resolve(null)]);
57
72
  const FromComponent = valueFrom ? /*#__PURE__*/_jsx(RelationshipDocumentDiff, {
58
73
  field: field,
59
74
  i18n: i18n,
@@ -63,6 +78,7 @@ export const SingleRelationshipDiff = async args => {
63
78
  relationTo: polymorphic ? valueFrom.relationTo : field.relationTo,
64
79
  req: req,
65
80
  showPill: true,
81
+ title: titleFrom,
66
82
  value: valueFrom
67
83
  }) : null;
68
84
  const ToComponent = valueTo ? /*#__PURE__*/_jsx(RelationshipDocumentDiff, {
@@ -74,6 +90,7 @@ export const SingleRelationshipDiff = async args => {
74
90
  relationTo: polymorphic ? valueTo.relationTo : field.relationTo,
75
91
  req: req,
76
92
  showPill: true,
93
+ title: titleTo,
77
94
  value: valueTo
78
95
  }) : null;
79
96
  const fromHTML = FromComponent ? ReactDOMServer.renderToStaticMarkup(FromComponent) : `<p></p>`;
@@ -109,7 +126,22 @@ const ManyRelationshipDiff = async ({
109
126
  const ReactDOMServer = (await import('react-dom/server')).default;
110
127
  const fromArr = Array.isArray(valueFrom) ? valueFrom : [];
111
128
  const toArr = Array.isArray(valueTo) ? valueTo : [];
112
- const makeNodes = list => list.map((val, idx) => /*#__PURE__*/_jsx(RelationshipDocumentDiff, {
129
+ const localeToUse = locale ?? (req.payload.config?.localization && req.payload.config?.localization?.defaultLocale) ?? 'en';
130
+ // Generate all titles asynchronously before creating components
131
+ const [titlesFrom, titlesTo] = await Promise.all([Promise.all(fromArr.map(val => generateLabelFromValue({
132
+ field,
133
+ locale: localeToUse,
134
+ parentIsLocalized,
135
+ req,
136
+ value: val
137
+ }))), Promise.all(toArr.map(val => generateLabelFromValue({
138
+ field,
139
+ locale: localeToUse,
140
+ parentIsLocalized,
141
+ req,
142
+ value: val
143
+ })))]);
144
+ const makeNodes = (list, titles) => list.map((val, idx) => /*#__PURE__*/_jsx(RelationshipDocumentDiff, {
113
145
  field: field,
114
146
  i18n: i18n,
115
147
  locale: locale,
@@ -118,12 +150,13 @@ const ManyRelationshipDiff = async ({
118
150
  relationTo: polymorphic ? val.relationTo : field.relationTo,
119
151
  req: req,
120
152
  showPill: polymorphic,
153
+ title: titles[idx],
121
154
  value: val
122
155
  }, idx));
123
- const fromNodes = fromArr.length > 0 ? makeNodes(fromArr) : /*#__PURE__*/_jsx("p", {
156
+ const fromNodes = fromArr.length > 0 ? makeNodes(fromArr, titlesFrom) : /*#__PURE__*/_jsx("p", {
124
157
  className: `${baseClass}__empty`
125
158
  });
126
- const toNodes = toArr.length > 0 ? makeNodes(toArr) : /*#__PURE__*/_jsx("p", {
159
+ const toNodes = toArr.length > 0 ? makeNodes(toArr, titlesTo) : /*#__PURE__*/_jsx("p", {
127
160
  className: `${baseClass}__empty`
128
161
  });
129
162
  const fromHTML = ReactDOMServer.renderToStaticMarkup(fromNodes);
@@ -154,16 +187,9 @@ const RelationshipDocumentDiff = ({
154
187
  relationTo,
155
188
  req,
156
189
  showPill = false,
190
+ title,
157
191
  value
158
192
  }) => {
159
- const localeToUse = locale ?? (req.payload.config?.localization && req.payload.config?.localization?.defaultLocale) ?? 'en';
160
- const title = generateLabelFromValue({
161
- field,
162
- locale: localeToUse,
163
- parentIsLocalized,
164
- req,
165
- value
166
- });
167
193
  let pillLabel = null;
168
194
  if (showPill) {
169
195
  const collectionConfig = req.payload.collections[relationTo].config;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["getTranslation","FieldDiffContainer","getHTMLDiffComponents","React","generateLabelFromValue","baseClass","Relationship","comparisonValue","valueFrom","field","i18n","locale","nestingLevel","parentIsLocalized","req","versionValue","valueTo","hasMany","polymorphic","Array","isArray","relationTo","_jsx","ManyRelationshipDiff","SingleRelationshipDiff","args","ReactDOMServer","default","FromComponent","RelationshipDocumentDiff","showPill","value","ToComponent","fromHTML","renderToStaticMarkup","toHTML","diff","tokenizeByCharacter","className","From","label","To","fromArr","toArr","makeNodes","list","map","val","idx","fromNodes","length","toNodes","localeToUse","payload","config","localization","defaultLocale","title","pillLabel","collectionConfig","collections","labels","singular","slug","_jsxs","id"],"sources":["../../../../../../src/views/Version/RenderFieldsToDiff/fields/Relationship/index.tsx"],"sourcesContent":["import type {\n PayloadRequest,\n RelationshipField,\n RelationshipFieldDiffServerComponent,\n TypeWithID,\n} from 'payload'\n\nimport { getTranslation, type I18nClient } from '@payloadcms/translations'\nimport { FieldDiffContainer, getHTMLDiffComponents } from '@payloadcms/ui/rsc'\n\nimport './index.scss'\n\nimport React from 'react'\n\nimport { generateLabelFromValue } from './generateLabelFromValue.js'\n\nconst baseClass = 'relationship-diff'\n\nexport type RelationshipValue =\n | { relationTo: string; value: number | string | TypeWithID }\n | (number | string | TypeWithID)\n\nexport const Relationship: RelationshipFieldDiffServerComponent = ({\n comparisonValue: valueFrom,\n field,\n i18n,\n locale,\n nestingLevel,\n parentIsLocalized,\n req,\n versionValue: valueTo,\n}) => {\n const hasMany = 'hasMany' in field && field.hasMany\n const polymorphic = Array.isArray(field.relationTo)\n\n if (hasMany) {\n return (\n <ManyRelationshipDiff\n field={field}\n i18n={i18n}\n locale={locale}\n nestingLevel={nestingLevel}\n parentIsLocalized={parentIsLocalized}\n polymorphic={polymorphic}\n req={req}\n valueFrom={valueFrom as RelationshipValue[] | undefined}\n valueTo={valueTo as RelationshipValue[] | undefined}\n />\n )\n }\n\n return (\n <SingleRelationshipDiff\n field={field}\n i18n={i18n}\n locale={locale}\n nestingLevel={nestingLevel}\n parentIsLocalized={parentIsLocalized}\n polymorphic={polymorphic}\n req={req}\n valueFrom={valueFrom as RelationshipValue}\n valueTo={valueTo as RelationshipValue}\n />\n )\n}\n\nexport const SingleRelationshipDiff: React.FC<{\n field: RelationshipField\n i18n: I18nClient\n locale: string\n nestingLevel?: number\n parentIsLocalized: boolean\n polymorphic: boolean\n req: PayloadRequest\n valueFrom: RelationshipValue\n valueTo: RelationshipValue\n}> = async (args) => {\n const {\n field,\n i18n,\n locale,\n nestingLevel,\n parentIsLocalized,\n polymorphic,\n req,\n valueFrom,\n valueTo,\n } = args\n\n const ReactDOMServer = (await import('react-dom/server')).default\n\n const FromComponent = valueFrom ? (\n <RelationshipDocumentDiff\n field={field}\n i18n={i18n}\n locale={locale}\n parentIsLocalized={parentIsLocalized}\n polymorphic={polymorphic}\n relationTo={\n polymorphic\n ? (valueFrom as { relationTo: string; value: TypeWithID }).relationTo\n : (field.relationTo as string)\n }\n req={req}\n showPill={true}\n value={valueFrom}\n />\n ) : null\n const ToComponent = valueTo ? (\n <RelationshipDocumentDiff\n field={field}\n i18n={i18n}\n locale={locale}\n parentIsLocalized={parentIsLocalized}\n polymorphic={polymorphic}\n relationTo={\n polymorphic\n ? (valueTo as { relationTo: string; value: TypeWithID }).relationTo\n : (field.relationTo as string)\n }\n req={req}\n showPill={true}\n value={valueTo}\n />\n ) : null\n\n const fromHTML = FromComponent ? ReactDOMServer.renderToStaticMarkup(FromComponent) : `<p></p>`\n const toHTML = ToComponent ? ReactDOMServer.renderToStaticMarkup(ToComponent) : `<p></p>`\n\n const diff = getHTMLDiffComponents({\n fromHTML,\n toHTML,\n tokenizeByCharacter: false,\n })\n\n return (\n <FieldDiffContainer\n className={`${baseClass}-container ${baseClass}-container--hasOne`}\n From={diff.From}\n i18n={i18n}\n label={{ label: field.label, locale }}\n nestingLevel={nestingLevel}\n To={diff.To}\n />\n )\n}\n\nconst ManyRelationshipDiff: React.FC<{\n field: RelationshipField\n i18n: I18nClient\n locale: string\n nestingLevel?: number\n parentIsLocalized: boolean\n polymorphic: boolean\n req: PayloadRequest\n valueFrom: RelationshipValue[] | undefined\n valueTo: RelationshipValue[] | undefined\n}> = async ({\n field,\n i18n,\n locale,\n nestingLevel,\n parentIsLocalized,\n polymorphic,\n req,\n valueFrom,\n valueTo,\n}) => {\n const ReactDOMServer = (await import('react-dom/server')).default\n\n const fromArr = Array.isArray(valueFrom) ? valueFrom : []\n const toArr = Array.isArray(valueTo) ? valueTo : []\n\n const makeNodes = (list: RelationshipValue[]) =>\n list.map((val, idx) => (\n <RelationshipDocumentDiff\n field={field}\n i18n={i18n}\n key={idx}\n locale={locale}\n parentIsLocalized={parentIsLocalized}\n polymorphic={polymorphic}\n relationTo={\n polymorphic\n ? (val as { relationTo: string; value: TypeWithID }).relationTo\n : (field.relationTo as string)\n }\n req={req}\n showPill={polymorphic}\n value={val}\n />\n ))\n\n const fromNodes =\n fromArr.length > 0 ? makeNodes(fromArr) : <p className={`${baseClass}__empty`}></p>\n\n const toNodes = toArr.length > 0 ? makeNodes(toArr) : <p className={`${baseClass}__empty`}></p>\n\n const fromHTML = ReactDOMServer.renderToStaticMarkup(fromNodes)\n const toHTML = ReactDOMServer.renderToStaticMarkup(toNodes)\n\n const diff = getHTMLDiffComponents({\n fromHTML,\n toHTML,\n tokenizeByCharacter: false,\n })\n\n return (\n <FieldDiffContainer\n className={`${baseClass}-container ${baseClass}-container--hasMany`}\n From={diff.From}\n i18n={i18n}\n label={{ label: field.label, locale }}\n nestingLevel={nestingLevel}\n To={diff.To}\n />\n )\n}\n\nconst RelationshipDocumentDiff = ({\n field,\n i18n,\n locale,\n parentIsLocalized,\n polymorphic,\n relationTo,\n req,\n showPill = false,\n value,\n}: {\n field: RelationshipField\n i18n: I18nClient\n locale: string\n parentIsLocalized: boolean\n polymorphic: boolean\n relationTo: string\n req: PayloadRequest\n showPill?: boolean\n value: RelationshipValue\n}) => {\n const localeToUse =\n locale ??\n (req.payload.config?.localization && req.payload.config?.localization?.defaultLocale) ??\n 'en'\n\n const title = generateLabelFromValue({\n field,\n locale: localeToUse,\n parentIsLocalized,\n req,\n value,\n })\n\n let pillLabel: null | string = null\n if (showPill) {\n const collectionConfig = req.payload.collections[relationTo].config\n pillLabel = collectionConfig.labels?.singular\n ? getTranslation(collectionConfig.labels.singular, i18n)\n : collectionConfig.slug\n }\n\n return (\n <div\n className={`${baseClass}`}\n data-enable-match=\"true\"\n data-id={\n polymorphic\n ? (value as { relationTo: string; value: TypeWithID }).value.id\n : (value as TypeWithID).id\n }\n data-relation-to={relationTo}\n >\n {pillLabel && (\n <span className={`${baseClass}__pill`} data-enable-match=\"false\">\n {pillLabel}\n </span>\n )}\n <strong className={`${baseClass}__info`} data-enable-match=\"false\">\n {title}\n </strong>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["getTranslation","FieldDiffContainer","getHTMLDiffComponents","React","generateLabelFromValue","baseClass","Relationship","comparisonValue","valueFrom","field","i18n","locale","nestingLevel","parentIsLocalized","req","versionValue","valueTo","hasMany","polymorphic","Array","isArray","relationTo","_jsx","ManyRelationshipDiff","SingleRelationshipDiff","args","ReactDOMServer","default","localeToUse","payload","config","localization","defaultLocale","titleFrom","titleTo","Promise","all","value","resolve","FromComponent","RelationshipDocumentDiff","showPill","title","ToComponent","fromHTML","renderToStaticMarkup","toHTML","diff","tokenizeByCharacter","className","From","label","To","fromArr","toArr","titlesFrom","titlesTo","map","val","makeNodes","list","titles","idx","fromNodes","length","toNodes","pillLabel","collectionConfig","collections","labels","singular","slug","_jsxs","id"],"sources":["../../../../../../src/views/Version/RenderFieldsToDiff/fields/Relationship/index.tsx"],"sourcesContent":["import type {\n PayloadRequest,\n RelationshipField,\n RelationshipFieldDiffServerComponent,\n TypeWithID,\n} from 'payload'\n\nimport { getTranslation, type I18nClient } from '@payloadcms/translations'\nimport { FieldDiffContainer, getHTMLDiffComponents } from '@payloadcms/ui/rsc'\n\nimport './index.scss'\n\nimport React from 'react'\n\nimport { generateLabelFromValue } from './generateLabelFromValue.js'\n\nconst baseClass = 'relationship-diff'\n\nexport type RelationshipValue =\n | { relationTo: string; value: number | string | TypeWithID }\n | (number | string | TypeWithID)\n\nexport const Relationship: RelationshipFieldDiffServerComponent = ({\n comparisonValue: valueFrom,\n field,\n i18n,\n locale,\n nestingLevel,\n parentIsLocalized,\n req,\n versionValue: valueTo,\n}) => {\n const hasMany = 'hasMany' in field && field.hasMany\n const polymorphic = Array.isArray(field.relationTo)\n\n if (hasMany) {\n return (\n <ManyRelationshipDiff\n field={field}\n i18n={i18n}\n locale={locale}\n nestingLevel={nestingLevel}\n parentIsLocalized={parentIsLocalized}\n polymorphic={polymorphic}\n req={req}\n valueFrom={valueFrom as RelationshipValue[] | undefined}\n valueTo={valueTo as RelationshipValue[] | undefined}\n />\n )\n }\n\n return (\n <SingleRelationshipDiff\n field={field}\n i18n={i18n}\n locale={locale}\n nestingLevel={nestingLevel}\n parentIsLocalized={parentIsLocalized}\n polymorphic={polymorphic}\n req={req}\n valueFrom={valueFrom as RelationshipValue}\n valueTo={valueTo as RelationshipValue}\n />\n )\n}\n\nexport const SingleRelationshipDiff: React.FC<{\n field: RelationshipField\n i18n: I18nClient\n locale: string\n nestingLevel?: number\n parentIsLocalized: boolean\n polymorphic: boolean\n req: PayloadRequest\n valueFrom: RelationshipValue\n valueTo: RelationshipValue\n}> = async (args) => {\n const {\n field,\n i18n,\n locale,\n nestingLevel,\n parentIsLocalized,\n polymorphic,\n req,\n valueFrom,\n valueTo,\n } = args\n\n const ReactDOMServer = (await import('react-dom/server')).default\n\n const localeToUse =\n locale ??\n (req.payload.config?.localization && req.payload.config?.localization?.defaultLocale) ??\n 'en'\n\n // Generate titles asynchronously before creating components\n const [titleFrom, titleTo] = await Promise.all([\n valueFrom\n ? generateLabelFromValue({\n field,\n locale: localeToUse,\n parentIsLocalized,\n req,\n value: valueFrom,\n })\n : Promise.resolve(null),\n valueTo\n ? generateLabelFromValue({\n field,\n locale: localeToUse,\n parentIsLocalized,\n req,\n value: valueTo,\n })\n : Promise.resolve(null),\n ])\n\n const FromComponent = valueFrom ? (\n <RelationshipDocumentDiff\n field={field}\n i18n={i18n}\n locale={locale}\n parentIsLocalized={parentIsLocalized}\n polymorphic={polymorphic}\n relationTo={\n polymorphic\n ? (valueFrom as { relationTo: string; value: TypeWithID }).relationTo\n : (field.relationTo as string)\n }\n req={req}\n showPill={true}\n title={titleFrom}\n value={valueFrom}\n />\n ) : null\n const ToComponent = valueTo ? (\n <RelationshipDocumentDiff\n field={field}\n i18n={i18n}\n locale={locale}\n parentIsLocalized={parentIsLocalized}\n polymorphic={polymorphic}\n relationTo={\n polymorphic\n ? (valueTo as { relationTo: string; value: TypeWithID }).relationTo\n : (field.relationTo as string)\n }\n req={req}\n showPill={true}\n title={titleTo}\n value={valueTo}\n />\n ) : null\n\n const fromHTML = FromComponent ? ReactDOMServer.renderToStaticMarkup(FromComponent) : `<p></p>`\n const toHTML = ToComponent ? ReactDOMServer.renderToStaticMarkup(ToComponent) : `<p></p>`\n\n const diff = getHTMLDiffComponents({\n fromHTML,\n toHTML,\n tokenizeByCharacter: false,\n })\n\n return (\n <FieldDiffContainer\n className={`${baseClass}-container ${baseClass}-container--hasOne`}\n From={diff.From}\n i18n={i18n}\n label={{ label: field.label, locale }}\n nestingLevel={nestingLevel}\n To={diff.To}\n />\n )\n}\n\nconst ManyRelationshipDiff: React.FC<{\n field: RelationshipField\n i18n: I18nClient\n locale: string\n nestingLevel?: number\n parentIsLocalized: boolean\n polymorphic: boolean\n req: PayloadRequest\n valueFrom: RelationshipValue[] | undefined\n valueTo: RelationshipValue[] | undefined\n}> = async ({\n field,\n i18n,\n locale,\n nestingLevel,\n parentIsLocalized,\n polymorphic,\n req,\n valueFrom,\n valueTo,\n}) => {\n const ReactDOMServer = (await import('react-dom/server')).default\n\n const fromArr = Array.isArray(valueFrom) ? valueFrom : []\n const toArr = Array.isArray(valueTo) ? valueTo : []\n\n const localeToUse =\n locale ??\n (req.payload.config?.localization && req.payload.config?.localization?.defaultLocale) ??\n 'en'\n\n // Generate all titles asynchronously before creating components\n const [titlesFrom, titlesTo] = await Promise.all([\n Promise.all(\n fromArr.map((val) =>\n generateLabelFromValue({\n field,\n locale: localeToUse,\n parentIsLocalized,\n req,\n value: val,\n }),\n ),\n ),\n Promise.all(\n toArr.map((val) =>\n generateLabelFromValue({\n field,\n locale: localeToUse,\n parentIsLocalized,\n req,\n value: val,\n }),\n ),\n ),\n ])\n\n const makeNodes = (list: RelationshipValue[], titles: string[]) =>\n list.map((val, idx) => (\n <RelationshipDocumentDiff\n field={field}\n i18n={i18n}\n key={idx}\n locale={locale}\n parentIsLocalized={parentIsLocalized}\n polymorphic={polymorphic}\n relationTo={\n polymorphic\n ? (val as { relationTo: string; value: TypeWithID }).relationTo\n : (field.relationTo as string)\n }\n req={req}\n showPill={polymorphic}\n title={titles[idx]}\n value={val}\n />\n ))\n\n const fromNodes =\n fromArr.length > 0 ? makeNodes(fromArr, titlesFrom) : <p className={`${baseClass}__empty`}></p>\n\n const toNodes =\n toArr.length > 0 ? makeNodes(toArr, titlesTo) : <p className={`${baseClass}__empty`}></p>\n\n const fromHTML = ReactDOMServer.renderToStaticMarkup(fromNodes)\n const toHTML = ReactDOMServer.renderToStaticMarkup(toNodes)\n\n const diff = getHTMLDiffComponents({\n fromHTML,\n toHTML,\n tokenizeByCharacter: false,\n })\n\n return (\n <FieldDiffContainer\n className={`${baseClass}-container ${baseClass}-container--hasMany`}\n From={diff.From}\n i18n={i18n}\n label={{ label: field.label, locale }}\n nestingLevel={nestingLevel}\n To={diff.To}\n />\n )\n}\n\nconst RelationshipDocumentDiff = ({\n field,\n i18n,\n locale,\n parentIsLocalized,\n polymorphic,\n relationTo,\n req,\n showPill = false,\n title,\n value,\n}: {\n field: RelationshipField\n i18n: I18nClient\n locale: string\n parentIsLocalized: boolean\n polymorphic: boolean\n relationTo: string\n req: PayloadRequest\n showPill?: boolean\n title: null | string\n value: RelationshipValue\n}) => {\n let pillLabel: null | string = null\n if (showPill) {\n const collectionConfig = req.payload.collections[relationTo].config\n pillLabel = collectionConfig.labels?.singular\n ? getTranslation(collectionConfig.labels.singular, i18n)\n : collectionConfig.slug\n }\n\n return (\n <div\n className={`${baseClass}`}\n data-enable-match=\"true\"\n data-id={\n polymorphic\n ? (value as { relationTo: string; value: TypeWithID }).value.id\n : (value as TypeWithID).id\n }\n data-relation-to={relationTo}\n >\n {pillLabel && (\n <span className={`${baseClass}__pill`} data-enable-match=\"false\">\n {pillLabel}\n </span>\n )}\n <strong className={`${baseClass}__info`} data-enable-match=\"false\">\n {title}\n </strong>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/next",
3
- "version": "3.73.0-canary.5",
3
+ "version": "3.73.0-canary.6",
4
4
  "homepage": "https://payloadcms.com",
5
5
  "repository": {
6
6
  "type": "git",
@@ -99,9 +99,9 @@
99
99
  "qs-esm": "7.0.2",
100
100
  "sass": "1.77.4",
101
101
  "uuid": "10.0.0",
102
- "@payloadcms/graphql": "3.73.0-canary.5",
103
- "@payloadcms/translations": "3.73.0-canary.5",
104
- "@payloadcms/ui": "3.73.0-canary.5"
102
+ "@payloadcms/graphql": "3.73.0-canary.6",
103
+ "@payloadcms/translations": "3.73.0-canary.6",
104
+ "@payloadcms/ui": "3.73.0-canary.6"
105
105
  },
106
106
  "devDependencies": {
107
107
  "@babel/cli": "7.27.2",
@@ -118,13 +118,13 @@
118
118
  "esbuild": "0.27.1",
119
119
  "esbuild-sass-plugin": "3.3.1",
120
120
  "swc-plugin-transform-remove-imports": "8.3.0",
121
- "payload": "3.73.0-canary.5",
121
+ "payload": "3.73.0-canary.6",
122
122
  "@payloadcms/eslint-config": "3.28.0"
123
123
  },
124
124
  "peerDependencies": {
125
125
  "graphql": "^16.8.1",
126
126
  "next": "^15.4.10 || >=16.1.1-canary.35 <16.2.0 || ^16.2.0",
127
- "payload": "3.73.0-canary.5"
127
+ "payload": "3.73.0-canary.6"
128
128
  },
129
129
  "engines": {
130
130
  "node": "^18.20.2 || >=20.9.0"