@payloadcms/plugin-multi-tenant 3.51.0-canary.4 → 3.51.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.
Files changed (151) hide show
  1. package/dist/components/TenantSelector/index.d.ts.map +1 -1
  2. package/dist/components/TenantSelector/index.js +4 -4
  3. package/dist/components/TenantSelector/index.js.map +1 -1
  4. package/dist/exports/fields.d.ts +0 -1
  5. package/dist/exports/fields.d.ts.map +1 -1
  6. package/dist/exports/fields.js +0 -1
  7. package/dist/exports/fields.js.map +1 -1
  8. package/dist/fields/tenantField/index.d.ts +4 -3
  9. package/dist/fields/tenantField/index.d.ts.map +1 -1
  10. package/dist/fields/tenantField/index.js +21 -10
  11. package/dist/fields/tenantField/index.js.map +1 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +24 -41
  14. package/dist/index.js.map +1 -1
  15. package/dist/translations/languages/ar.d.ts.map +1 -1
  16. package/dist/translations/languages/ar.js +4 -3
  17. package/dist/translations/languages/ar.js.map +1 -1
  18. package/dist/translations/languages/az.d.ts.map +1 -1
  19. package/dist/translations/languages/az.js +4 -3
  20. package/dist/translations/languages/az.js.map +1 -1
  21. package/dist/translations/languages/bg.d.ts.map +1 -1
  22. package/dist/translations/languages/bg.js +4 -3
  23. package/dist/translations/languages/bg.js.map +1 -1
  24. package/dist/translations/languages/bnBd.d.ts +4 -0
  25. package/dist/translations/languages/bnBd.d.ts.map +1 -0
  26. package/dist/translations/languages/bnBd.js +14 -0
  27. package/dist/translations/languages/bnBd.js.map +1 -0
  28. package/dist/translations/languages/bnIn.d.ts +4 -0
  29. package/dist/translations/languages/bnIn.d.ts.map +1 -0
  30. package/dist/translations/languages/bnIn.js +14 -0
  31. package/dist/translations/languages/bnIn.js.map +1 -0
  32. package/dist/translations/languages/ca.d.ts.map +1 -1
  33. package/dist/translations/languages/ca.js +4 -3
  34. package/dist/translations/languages/ca.js.map +1 -1
  35. package/dist/translations/languages/cs.d.ts.map +1 -1
  36. package/dist/translations/languages/cs.js +4 -3
  37. package/dist/translations/languages/cs.js.map +1 -1
  38. package/dist/translations/languages/da.d.ts.map +1 -1
  39. package/dist/translations/languages/da.js +4 -3
  40. package/dist/translations/languages/da.js.map +1 -1
  41. package/dist/translations/languages/de.d.ts.map +1 -1
  42. package/dist/translations/languages/de.js +4 -3
  43. package/dist/translations/languages/de.js.map +1 -1
  44. package/dist/translations/languages/en.d.ts +4 -3
  45. package/dist/translations/languages/en.d.ts.map +1 -1
  46. package/dist/translations/languages/en.js +4 -3
  47. package/dist/translations/languages/en.js.map +1 -1
  48. package/dist/translations/languages/es.d.ts.map +1 -1
  49. package/dist/translations/languages/es.js +4 -3
  50. package/dist/translations/languages/es.js.map +1 -1
  51. package/dist/translations/languages/et.d.ts.map +1 -1
  52. package/dist/translations/languages/et.js +4 -3
  53. package/dist/translations/languages/et.js.map +1 -1
  54. package/dist/translations/languages/fa.d.ts.map +1 -1
  55. package/dist/translations/languages/fa.js +4 -3
  56. package/dist/translations/languages/fa.js.map +1 -1
  57. package/dist/translations/languages/fr.d.ts.map +1 -1
  58. package/dist/translations/languages/fr.js +4 -3
  59. package/dist/translations/languages/fr.js.map +1 -1
  60. package/dist/translations/languages/he.d.ts.map +1 -1
  61. package/dist/translations/languages/he.js +4 -3
  62. package/dist/translations/languages/he.js.map +1 -1
  63. package/dist/translations/languages/hr.d.ts.map +1 -1
  64. package/dist/translations/languages/hr.js +4 -3
  65. package/dist/translations/languages/hr.js.map +1 -1
  66. package/dist/translations/languages/hu.d.ts.map +1 -1
  67. package/dist/translations/languages/hu.js +4 -3
  68. package/dist/translations/languages/hu.js.map +1 -1
  69. package/dist/translations/languages/hy.d.ts.map +1 -1
  70. package/dist/translations/languages/hy.js +4 -3
  71. package/dist/translations/languages/hy.js.map +1 -1
  72. package/dist/translations/languages/id.d.ts +4 -0
  73. package/dist/translations/languages/id.d.ts.map +1 -0
  74. package/dist/translations/languages/id.js +14 -0
  75. package/dist/translations/languages/id.js.map +1 -0
  76. package/dist/translations/languages/it.d.ts.map +1 -1
  77. package/dist/translations/languages/it.js +4 -3
  78. package/dist/translations/languages/it.js.map +1 -1
  79. package/dist/translations/languages/ja.d.ts.map +1 -1
  80. package/dist/translations/languages/ja.js +4 -3
  81. package/dist/translations/languages/ja.js.map +1 -1
  82. package/dist/translations/languages/ko.d.ts.map +1 -1
  83. package/dist/translations/languages/ko.js +4 -3
  84. package/dist/translations/languages/ko.js.map +1 -1
  85. package/dist/translations/languages/lt.d.ts.map +1 -1
  86. package/dist/translations/languages/lt.js +4 -3
  87. package/dist/translations/languages/lt.js.map +1 -1
  88. package/dist/translations/languages/lv.d.ts.map +1 -1
  89. package/dist/translations/languages/lv.js +4 -3
  90. package/dist/translations/languages/lv.js.map +1 -1
  91. package/dist/translations/languages/my.d.ts.map +1 -1
  92. package/dist/translations/languages/my.js +4 -3
  93. package/dist/translations/languages/my.js.map +1 -1
  94. package/dist/translations/languages/nb.d.ts.map +1 -1
  95. package/dist/translations/languages/nb.js +4 -3
  96. package/dist/translations/languages/nb.js.map +1 -1
  97. package/dist/translations/languages/nl.d.ts.map +1 -1
  98. package/dist/translations/languages/nl.js +4 -3
  99. package/dist/translations/languages/nl.js.map +1 -1
  100. package/dist/translations/languages/pl.d.ts.map +1 -1
  101. package/dist/translations/languages/pl.js +4 -3
  102. package/dist/translations/languages/pl.js.map +1 -1
  103. package/dist/translations/languages/pt.d.ts.map +1 -1
  104. package/dist/translations/languages/pt.js +4 -3
  105. package/dist/translations/languages/pt.js.map +1 -1
  106. package/dist/translations/languages/ro.d.ts.map +1 -1
  107. package/dist/translations/languages/ro.js +4 -3
  108. package/dist/translations/languages/ro.js.map +1 -1
  109. package/dist/translations/languages/rs.d.ts.map +1 -1
  110. package/dist/translations/languages/rs.js +4 -3
  111. package/dist/translations/languages/rs.js.map +1 -1
  112. package/dist/translations/languages/rsLatin.d.ts.map +1 -1
  113. package/dist/translations/languages/rsLatin.js +4 -3
  114. package/dist/translations/languages/rsLatin.js.map +1 -1
  115. package/dist/translations/languages/ru.d.ts.map +1 -1
  116. package/dist/translations/languages/ru.js +4 -3
  117. package/dist/translations/languages/ru.js.map +1 -1
  118. package/dist/translations/languages/sk.d.ts.map +1 -1
  119. package/dist/translations/languages/sk.js +4 -3
  120. package/dist/translations/languages/sk.js.map +1 -1
  121. package/dist/translations/languages/sl.d.ts.map +1 -1
  122. package/dist/translations/languages/sl.js +4 -3
  123. package/dist/translations/languages/sl.js.map +1 -1
  124. package/dist/translations/languages/sv.d.ts.map +1 -1
  125. package/dist/translations/languages/sv.js +4 -3
  126. package/dist/translations/languages/sv.js.map +1 -1
  127. package/dist/translations/languages/th.d.ts.map +1 -1
  128. package/dist/translations/languages/th.js +4 -3
  129. package/dist/translations/languages/th.js.map +1 -1
  130. package/dist/translations/languages/tr.d.ts.map +1 -1
  131. package/dist/translations/languages/tr.js +4 -3
  132. package/dist/translations/languages/tr.js.map +1 -1
  133. package/dist/translations/languages/uk.d.ts.map +1 -1
  134. package/dist/translations/languages/uk.js +4 -3
  135. package/dist/translations/languages/uk.js.map +1 -1
  136. package/dist/translations/languages/vi.d.ts.map +1 -1
  137. package/dist/translations/languages/vi.js +4 -3
  138. package/dist/translations/languages/vi.js.map +1 -1
  139. package/dist/translations/languages/zh.d.ts.map +1 -1
  140. package/dist/translations/languages/zh.js +4 -3
  141. package/dist/translations/languages/zh.js.map +1 -1
  142. package/dist/translations/languages/zhTw.d.ts.map +1 -1
  143. package/dist/translations/languages/zhTw.js +4 -3
  144. package/dist/translations/languages/zhTw.js.map +1 -1
  145. package/dist/translations/types.d.ts +4 -3
  146. package/dist/translations/types.d.ts.map +1 -1
  147. package/dist/translations/types.js.map +1 -1
  148. package/dist/types.d.ts +38 -10
  149. package/dist/types.d.ts.map +1 -1
  150. package/dist/types.js.map +1 -1
  151. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/TenantSelector/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAUxC,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,OAAO,cAAc,CAAA;AAKrB,eAAO,MAAM,cAAc,wBAAyB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,6BAuH1F,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/TenantSelector/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAUxC,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,OAAO,cAAc,CAAA;AAKrB,eAAO,MAAM,cAAc,wBAAyB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,6BA2H1F,CAAA"}
@@ -79,7 +79,7 @@ export const TenantSelector = ({ label, viewType })=>{
79
79
  children: [
80
80
  /*#__PURE__*/ _jsx(SelectInput, {
81
81
  isClearable: viewType === 'list',
82
- label: getTranslation(label, i18n),
82
+ label: label ? getTranslation(label, i18n) : t('plugin-multi-tenant:nav-tenantSelector-label'),
83
83
  name: "setTenant",
84
84
  onChange: onChange,
85
85
  options: options,
@@ -97,15 +97,15 @@ export const TenantSelector = ({ label, viewType })=>{
97
97
  },
98
98
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
99
99
  // @ts-expect-error
100
- i18nKey: "plugin-multi-tenant:confirm-tenant-switch--body",
100
+ i18nKey: "plugin-multi-tenant:confirm-modal-tenant-switch--body",
101
101
  t: t,
102
102
  variables: {
103
103
  fromTenant: selectedValue?.label,
104
104
  toTenant: newSelectedValue?.label
105
105
  }
106
106
  }),
107
- heading: t('plugin-multi-tenant:confirm-tenant-switch--heading', {
108
- tenantLabel: getTranslation(label, i18n)
107
+ heading: t('plugin-multi-tenant:confirm-modal-tenant-switch--heading', {
108
+ tenantLabel: label ? getTranslation(label, i18n) : t('plugin-multi-tenant:nav-tenantSelector-label')
109
109
  }),
110
110
  modalSlug: confirmSwitchTenantSlug,
111
111
  onConfirm: ()=>{
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/TenantSelector/index.tsx"],"sourcesContent":["'use client'\nimport type { ReactSelectOption } from '@payloadcms/ui'\nimport type { ViewTypes } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n ConfirmationModal,\n SelectInput,\n Translation,\n useModal,\n useTranslation,\n} from '@payloadcms/ui'\nimport React from 'react'\n\nimport type {\n PluginMultiTenantTranslationKeys,\n PluginMultiTenantTranslations,\n} from '../../translations/index.js'\n\nimport { useTenantSelection } from '../../providers/TenantSelectionProvider/index.client.js'\nimport './index.scss'\n\nconst confirmSwitchTenantSlug = 'confirm-switch-tenant'\nconst confirmLeaveWithoutSavingSlug = 'confirm-leave-without-saving'\n\nexport const TenantSelector = ({ label, viewType }: { label: string; viewType?: ViewTypes }) => {\n const { entityType, modified, options, selectedTenantID, setTenant } = useTenantSelection()\n const { closeModal, openModal } = useModal()\n const { i18n, t } = useTranslation<\n PluginMultiTenantTranslations,\n PluginMultiTenantTranslationKeys\n >()\n const [tenantSelection, setTenantSelection] = React.useState<\n ReactSelectOption | ReactSelectOption[]\n >()\n\n const selectedValue = React.useMemo(() => {\n if (selectedTenantID) {\n return options.find((option) => option.value === selectedTenantID)\n }\n return undefined\n }, [options, selectedTenantID])\n\n const newSelectedValue = React.useMemo(() => {\n if (tenantSelection && 'value' in tenantSelection) {\n return options.find((option) => option.value === tenantSelection.value)\n }\n return undefined\n }, [options, tenantSelection])\n\n const switchTenant = React.useCallback(\n (option: ReactSelectOption | ReactSelectOption[] | undefined) => {\n if (option && 'value' in option) {\n setTenant({ id: option.value as string, refresh: true })\n } else {\n setTenant({ id: undefined, refresh: true })\n }\n },\n [setTenant],\n )\n\n const onChange = React.useCallback(\n (option: ReactSelectOption | ReactSelectOption[]) => {\n if (option && 'value' in option && option.value === selectedTenantID) {\n // If the selected option is the same as the current tenant, do nothing\n return\n }\n\n if (entityType !== 'document') {\n if (entityType === 'global' && modified) {\n // If the entityType is 'global' and there are unsaved changes, prompt for confirmation\n setTenantSelection(option)\n openModal(confirmLeaveWithoutSavingSlug)\n } else {\n // If the entityType is not 'document', switch tenant without confirmation\n switchTenant(option)\n }\n } else {\n // non-unique documents should always prompt for confirmation\n setTenantSelection(option)\n openModal(confirmSwitchTenantSlug)\n }\n },\n [selectedTenantID, entityType, modified, switchTenant, openModal],\n )\n\n if (options.length <= 1) {\n return null\n }\n\n return (\n <div className=\"tenant-selector\">\n <SelectInput\n isClearable={viewType === 'list'}\n label={getTranslation(label, i18n)}\n name=\"setTenant\"\n onChange={onChange}\n options={options}\n path=\"setTenant\"\n value={selectedTenantID as string | undefined}\n />\n\n <ConfirmationModal\n body={\n <Translation\n elements={{\n 0: ({ children }) => {\n return <b>{children}</b>\n },\n }}\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n i18nKey=\"plugin-multi-tenant:confirm-tenant-switch--body\"\n t={t}\n variables={{\n fromTenant: selectedValue?.label,\n toTenant: newSelectedValue?.label,\n }}\n />\n }\n heading={t('plugin-multi-tenant:confirm-tenant-switch--heading', {\n tenantLabel: getTranslation(label, i18n),\n })}\n modalSlug={confirmSwitchTenantSlug}\n onConfirm={() => {\n switchTenant(tenantSelection)\n }}\n />\n\n <ConfirmationModal\n body={t('general:changesNotSaved')}\n cancelLabel={t('general:stayOnThisPage')}\n confirmLabel={t('general:leaveAnyway')}\n heading={t('general:leaveWithoutSaving')}\n modalSlug={confirmLeaveWithoutSavingSlug}\n onCancel={() => {\n closeModal(confirmLeaveWithoutSavingSlug)\n }}\n onConfirm={() => {\n switchTenant(tenantSelection)\n }}\n />\n </div>\n )\n}\n"],"names":["getTranslation","ConfirmationModal","SelectInput","Translation","useModal","useTranslation","React","useTenantSelection","confirmSwitchTenantSlug","confirmLeaveWithoutSavingSlug","TenantSelector","label","viewType","entityType","modified","options","selectedTenantID","setTenant","closeModal","openModal","i18n","t","tenantSelection","setTenantSelection","useState","selectedValue","useMemo","find","option","value","undefined","newSelectedValue","switchTenant","useCallback","id","refresh","onChange","length","div","className","isClearable","name","path","body","elements","children","b","i18nKey","variables","fromTenant","toTenant","heading","tenantLabel","modalSlug","onConfirm","cancelLabel","confirmLabel","onCancel"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/TenantSelector/index.tsx"],"sourcesContent":["'use client'\nimport type { ReactSelectOption } from '@payloadcms/ui'\nimport type { ViewTypes } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n ConfirmationModal,\n SelectInput,\n Translation,\n useModal,\n useTranslation,\n} from '@payloadcms/ui'\nimport React from 'react'\n\nimport type {\n PluginMultiTenantTranslationKeys,\n PluginMultiTenantTranslations,\n} from '../../translations/index.js'\n\nimport { useTenantSelection } from '../../providers/TenantSelectionProvider/index.client.js'\nimport './index.scss'\n\nconst confirmSwitchTenantSlug = 'confirm-switch-tenant'\nconst confirmLeaveWithoutSavingSlug = 'confirm-leave-without-saving'\n\nexport const TenantSelector = ({ label, viewType }: { label: string; viewType?: ViewTypes }) => {\n const { entityType, modified, options, selectedTenantID, setTenant } = useTenantSelection()\n const { closeModal, openModal } = useModal()\n const { i18n, t } = useTranslation<\n PluginMultiTenantTranslations,\n PluginMultiTenantTranslationKeys\n >()\n const [tenantSelection, setTenantSelection] = React.useState<\n ReactSelectOption | ReactSelectOption[]\n >()\n\n const selectedValue = React.useMemo(() => {\n if (selectedTenantID) {\n return options.find((option) => option.value === selectedTenantID)\n }\n return undefined\n }, [options, selectedTenantID])\n\n const newSelectedValue = React.useMemo(() => {\n if (tenantSelection && 'value' in tenantSelection) {\n return options.find((option) => option.value === tenantSelection.value)\n }\n return undefined\n }, [options, tenantSelection])\n\n const switchTenant = React.useCallback(\n (option: ReactSelectOption | ReactSelectOption[] | undefined) => {\n if (option && 'value' in option) {\n setTenant({ id: option.value as string, refresh: true })\n } else {\n setTenant({ id: undefined, refresh: true })\n }\n },\n [setTenant],\n )\n\n const onChange = React.useCallback(\n (option: ReactSelectOption | ReactSelectOption[]) => {\n if (option && 'value' in option && option.value === selectedTenantID) {\n // If the selected option is the same as the current tenant, do nothing\n return\n }\n\n if (entityType !== 'document') {\n if (entityType === 'global' && modified) {\n // If the entityType is 'global' and there are unsaved changes, prompt for confirmation\n setTenantSelection(option)\n openModal(confirmLeaveWithoutSavingSlug)\n } else {\n // If the entityType is not 'document', switch tenant without confirmation\n switchTenant(option)\n }\n } else {\n // non-unique documents should always prompt for confirmation\n setTenantSelection(option)\n openModal(confirmSwitchTenantSlug)\n }\n },\n [selectedTenantID, entityType, modified, switchTenant, openModal],\n )\n\n if (options.length <= 1) {\n return null\n }\n\n return (\n <div className=\"tenant-selector\">\n <SelectInput\n isClearable={viewType === 'list'}\n label={\n label ? getTranslation(label, i18n) : t('plugin-multi-tenant:nav-tenantSelector-label')\n }\n name=\"setTenant\"\n onChange={onChange}\n options={options}\n path=\"setTenant\"\n value={selectedTenantID as string | undefined}\n />\n\n <ConfirmationModal\n body={\n <Translation\n elements={{\n 0: ({ children }) => {\n return <b>{children}</b>\n },\n }}\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n i18nKey=\"plugin-multi-tenant:confirm-modal-tenant-switch--body\"\n t={t}\n variables={{\n fromTenant: selectedValue?.label,\n toTenant: newSelectedValue?.label,\n }}\n />\n }\n heading={t('plugin-multi-tenant:confirm-modal-tenant-switch--heading', {\n tenantLabel: label\n ? getTranslation(label, i18n)\n : t('plugin-multi-tenant:nav-tenantSelector-label'),\n })}\n modalSlug={confirmSwitchTenantSlug}\n onConfirm={() => {\n switchTenant(tenantSelection)\n }}\n />\n\n <ConfirmationModal\n body={t('general:changesNotSaved')}\n cancelLabel={t('general:stayOnThisPage')}\n confirmLabel={t('general:leaveAnyway')}\n heading={t('general:leaveWithoutSaving')}\n modalSlug={confirmLeaveWithoutSavingSlug}\n onCancel={() => {\n closeModal(confirmLeaveWithoutSavingSlug)\n }}\n onConfirm={() => {\n switchTenant(tenantSelection)\n }}\n />\n </div>\n )\n}\n"],"names":["getTranslation","ConfirmationModal","SelectInput","Translation","useModal","useTranslation","React","useTenantSelection","confirmSwitchTenantSlug","confirmLeaveWithoutSavingSlug","TenantSelector","label","viewType","entityType","modified","options","selectedTenantID","setTenant","closeModal","openModal","i18n","t","tenantSelection","setTenantSelection","useState","selectedValue","useMemo","find","option","value","undefined","newSelectedValue","switchTenant","useCallback","id","refresh","onChange","length","div","className","isClearable","name","path","body","elements","children","b","i18nKey","variables","fromTenant","toTenant","heading","tenantLabel","modalSlug","onConfirm","cancelLabel","confirmLabel","onCancel"],"mappings":"AAAA;;AAIA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,SACEC,iBAAiB,EACjBC,WAAW,EACXC,WAAW,EACXC,QAAQ,EACRC,cAAc,QACT,iBAAgB;AACvB,OAAOC,WAAW,QAAO;AAOzB,SAASC,kBAAkB,QAAQ,0DAAyD;AAC5F,OAAO,eAAc;AAErB,MAAMC,0BAA0B;AAChC,MAAMC,gCAAgC;AAEtC,OAAO,MAAMC,iBAAiB,CAAC,EAAEC,KAAK,EAAEC,QAAQ,EAA2C;IACzF,MAAM,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,gBAAgB,EAAEC,SAAS,EAAE,GAAGV;IACvE,MAAM,EAAEW,UAAU,EAAEC,SAAS,EAAE,GAAGf;IAClC,MAAM,EAAEgB,IAAI,EAAEC,CAAC,EAAE,GAAGhB;IAIpB,MAAM,CAACiB,iBAAiBC,mBAAmB,GAAGjB,MAAMkB,QAAQ;IAI5D,MAAMC,gBAAgBnB,MAAMoB,OAAO,CAAC;QAClC,IAAIV,kBAAkB;YACpB,OAAOD,QAAQY,IAAI,CAAC,CAACC,SAAWA,OAAOC,KAAK,KAAKb;QACnD;QACA,OAAOc;IACT,GAAG;QAACf;QAASC;KAAiB;IAE9B,MAAMe,mBAAmBzB,MAAMoB,OAAO,CAAC;QACrC,IAAIJ,mBAAmB,WAAWA,iBAAiB;YACjD,OAAOP,QAAQY,IAAI,CAAC,CAACC,SAAWA,OAAOC,KAAK,KAAKP,gBAAgBO,KAAK;QACxE;QACA,OAAOC;IACT,GAAG;QAACf;QAASO;KAAgB;IAE7B,MAAMU,eAAe1B,MAAM2B,WAAW,CACpC,CAACL;QACC,IAAIA,UAAU,WAAWA,QAAQ;YAC/BX,UAAU;gBAAEiB,IAAIN,OAAOC,KAAK;gBAAYM,SAAS;YAAK;QACxD,OAAO;YACLlB,UAAU;gBAAEiB,IAAIJ;gBAAWK,SAAS;YAAK;QAC3C;IACF,GACA;QAAClB;KAAU;IAGb,MAAMmB,WAAW9B,MAAM2B,WAAW,CAChC,CAACL;QACC,IAAIA,UAAU,WAAWA,UAAUA,OAAOC,KAAK,KAAKb,kBAAkB;YACpE,uEAAuE;YACvE;QACF;QAEA,IAAIH,eAAe,YAAY;YAC7B,IAAIA,eAAe,YAAYC,UAAU;gBACvC,uFAAuF;gBACvFS,mBAAmBK;gBACnBT,UAAUV;YACZ,OAAO;gBACL,0EAA0E;gBAC1EuB,aAAaJ;YACf;QACF,OAAO;YACL,6DAA6D;YAC7DL,mBAAmBK;YACnBT,UAAUX;QACZ;IACF,GACA;QAACQ;QAAkBH;QAAYC;QAAUkB;QAAcb;KAAU;IAGnE,IAAIJ,QAAQsB,MAAM,IAAI,GAAG;QACvB,OAAO;IACT;IAEA,qBACE,MAACC;QAAIC,WAAU;;0BACb,KAACrC;gBACCsC,aAAa5B,aAAa;gBAC1BD,OACEA,QAAQX,eAAeW,OAAOS,QAAQC,EAAE;gBAE1CoB,MAAK;gBACLL,UAAUA;gBACVrB,SAASA;gBACT2B,MAAK;gBACLb,OAAOb;;0BAGT,KAACf;gBACC0C,oBACE,KAACxC;oBACCyC,UAAU;wBACR,GAAG,CAAC,EAAEC,QAAQ,EAAE;4BACd,qBAAO,KAACC;0CAAGD;;wBACb;oBACF;oBACA,6DAA6D;oBAC7D,mBAAmB;oBACnBE,SAAQ;oBACR1B,GAAGA;oBACH2B,WAAW;wBACTC,YAAYxB,eAAed;wBAC3BuC,UAAUnB,kBAAkBpB;oBAC9B;;gBAGJwC,SAAS9B,EAAE,4DAA4D;oBACrE+B,aAAazC,QACTX,eAAeW,OAAOS,QACtBC,EAAE;gBACR;gBACAgC,WAAW7C;gBACX8C,WAAW;oBACTtB,aAAaV;gBACf;;0BAGF,KAACrB;gBACC0C,MAAMtB,EAAE;gBACRkC,aAAalC,EAAE;gBACfmC,cAAcnC,EAAE;gBAChB8B,SAAS9B,EAAE;gBACXgC,WAAW5C;gBACXgD,UAAU;oBACRvC,WAAWT;gBACb;gBACA6C,WAAW;oBACTtB,aAAaV;gBACf;;;;AAIR,EAAC"}
@@ -1,3 +1,2 @@
1
- export { tenantField } from '../fields/tenantField/index.js';
2
1
  export { tenantsArrayField } from '../fields/tenantsArrayField/index.js';
3
2
  //# sourceMappingURL=fields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/exports/fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAA"}
1
+ {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/exports/fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAA"}
@@ -1,4 +1,3 @@
1
- export { tenantField } from '../fields/tenantField/index.js';
2
1
  export { tenantsArrayField } from '../fields/tenantsArrayField/index.js';
3
2
 
4
3
  //# sourceMappingURL=fields.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/exports/fields.ts"],"sourcesContent":["export { tenantField } from '../fields/tenantField/index.js'\nexport { tenantsArrayField } from '../fields/tenantsArrayField/index.js'\n"],"names":["tenantField","tenantsArrayField"],"mappings":"AAAA,SAASA,WAAW,QAAQ,iCAAgC;AAC5D,SAASC,iBAAiB,QAAQ,uCAAsC"}
1
+ {"version":3,"sources":["../../src/exports/fields.ts"],"sourcesContent":["export { tenantsArrayField } from '../fields/tenantsArrayField/index.js'\n"],"names":["tenantsArrayField"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,uCAAsC"}
@@ -1,11 +1,12 @@
1
- import { type RelationshipField } from 'payload';
1
+ import type { SingleRelationshipField } from 'payload';
2
+ import type { RootTenantFieldConfigOverrides } from '../../types.js';
2
3
  type Args = {
3
- access?: RelationshipField['access'];
4
4
  debug?: boolean;
5
5
  name: string;
6
+ overrides?: RootTenantFieldConfigOverrides;
6
7
  tenantsCollectionSlug: string;
7
8
  unique: boolean;
8
9
  };
9
- export declare const tenantField: ({ name, access, debug, tenantsCollectionSlug, unique, }: Args) => RelationshipField;
10
+ export declare const tenantField: ({ name, debug, overrides: _overrides, tenantsCollectionSlug, unique, }: Args) => SingleRelationshipField;
10
11
  export {};
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/tenantField/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAOhD,KAAK,IAAI,GAAG;IACV,MAAM,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IACpC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,qBAAqB,EAAE,MAAM,CAAA;IAC7B,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AACD,eAAO,MAAM,WAAW,4DAMrB,IAAI,KAAG,iBA4CR,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/tenantField/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqC,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAIzF,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAA;AAMpE,KAAK,IAAI,GAAG;IACV,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,8BAA8B,CAAA;IAC1C,qBAAqB,EAAE,MAAM,CAAA;IAC7B,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AACD,eAAO,MAAM,WAAW,2EAMrB,IAAI,KAAG,uBA2DT,CAAA"}
@@ -2,27 +2,35 @@ import { APIError } from 'payload';
2
2
  import { defaults } from '../../defaults.js';
3
3
  import { getCollectionIDType } from '../../utilities/getCollectionIDType.js';
4
4
  import { getTenantFromCookie } from '../../utilities/getTenantFromCookie.js';
5
- export const tenantField = ({ name = defaults.tenantFieldName, access = undefined, debug, tenantsCollectionSlug = defaults.tenantCollectionSlug, unique })=>({
5
+ export const tenantField = ({ name = defaults.tenantFieldName, debug, overrides: _overrides = {}, tenantsCollectionSlug = defaults.tenantCollectionSlug, unique })=>{
6
+ const { validate, ...overrides } = _overrides || {};
7
+ return {
8
+ ...overrides || {},
6
9
  name,
7
10
  type: 'relationship',
8
- access,
11
+ access: overrides?.access || {},
9
12
  admin: {
10
13
  allowCreate: false,
11
14
  allowEdit: false,
15
+ disableListColumn: true,
16
+ disableListFilter: true,
17
+ ...overrides?.admin || {},
12
18
  components: {
19
+ ...overrides?.admin?.components || {},
13
20
  Field: {
21
+ path: '@payloadcms/plugin-multi-tenant/client#TenantField',
22
+ ...typeof overrides?.admin?.components?.Field !== 'string' ? overrides?.admin?.components?.Field || {} : {},
14
23
  clientProps: {
24
+ ...typeof overrides?.admin?.components?.Field !== 'string' ? (overrides?.admin?.components?.Field || {})?.clientProps : {},
15
25
  debug,
16
26
  unique
17
- },
18
- path: '@payloadcms/plugin-multi-tenant/client#TenantField'
27
+ }
19
28
  }
20
- },
21
- disableListColumn: true,
22
- disableListFilter: true
29
+ }
23
30
  },
24
31
  hasMany: false,
25
32
  hooks: {
33
+ ...overrides.hooks || [],
26
34
  beforeChange: [
27
35
  ({ req, value })=>{
28
36
  const idType = getCollectionIDType({
@@ -37,14 +45,17 @@ export const tenantField = ({ name = defaults.tenantFieldName, access = undefine
37
45
  throw new APIError('You must select a tenant', 400, null, true);
38
46
  }
39
47
  return idType === 'number' ? parseFloat(value) : value;
40
- }
48
+ },
49
+ ...overrides?.hooks?.beforeChange || []
41
50
  ]
42
51
  },
43
52
  index: true,
53
+ validate: validate || undefined,
44
54
  // @ts-expect-error translations are not typed for this plugin
45
- label: ({ t })=>t('plugin-multi-tenant:field-assignedTentant-label'),
55
+ label: overrides?.label || (({ t })=>t('plugin-multi-tenant:field-assignedTenant-label')),
46
56
  relationTo: tenantsCollectionSlug,
47
57
  unique
48
- });
58
+ };
59
+ };
49
60
 
50
61
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/tenantField/index.ts"],"sourcesContent":["import { type RelationshipField } from 'payload'\nimport { APIError } from 'payload'\n\nimport { defaults } from '../../defaults.js'\nimport { getCollectionIDType } from '../../utilities/getCollectionIDType.js'\nimport { getTenantFromCookie } from '../../utilities/getTenantFromCookie.js'\n\ntype Args = {\n access?: RelationshipField['access']\n debug?: boolean\n name: string\n tenantsCollectionSlug: string\n unique: boolean\n}\nexport const tenantField = ({\n name = defaults.tenantFieldName,\n access = undefined,\n debug,\n tenantsCollectionSlug = defaults.tenantCollectionSlug,\n unique,\n}: Args): RelationshipField => ({\n name,\n type: 'relationship',\n access,\n admin: {\n allowCreate: false,\n allowEdit: false,\n components: {\n Field: {\n clientProps: {\n debug,\n unique,\n },\n path: '@payloadcms/plugin-multi-tenant/client#TenantField',\n },\n },\n disableListColumn: true,\n disableListFilter: true,\n },\n hasMany: false,\n hooks: {\n beforeChange: [\n ({ req, value }) => {\n const idType = getCollectionIDType({\n collectionSlug: tenantsCollectionSlug,\n payload: req.payload,\n })\n if (!value) {\n const tenantFromCookie = getTenantFromCookie(req.headers, idType)\n if (tenantFromCookie) {\n return tenantFromCookie\n }\n throw new APIError('You must select a tenant', 400, null, true)\n }\n\n return idType === 'number' ? parseFloat(value) : value\n },\n ],\n },\n index: true,\n // @ts-expect-error translations are not typed for this plugin\n label: ({ t }) => t('plugin-multi-tenant:field-assignedTentant-label'),\n relationTo: tenantsCollectionSlug,\n unique,\n})\n"],"names":["APIError","defaults","getCollectionIDType","getTenantFromCookie","tenantField","name","tenantFieldName","access","undefined","debug","tenantsCollectionSlug","tenantCollectionSlug","unique","type","admin","allowCreate","allowEdit","components","Field","clientProps","path","disableListColumn","disableListFilter","hasMany","hooks","beforeChange","req","value","idType","collectionSlug","payload","tenantFromCookie","headers","parseFloat","index","label","t","relationTo"],"mappings":"AACA,SAASA,QAAQ,QAAQ,UAAS;AAElC,SAASC,QAAQ,QAAQ,oBAAmB;AAC5C,SAASC,mBAAmB,QAAQ,yCAAwC;AAC5E,SAASC,mBAAmB,QAAQ,yCAAwC;AAS5E,OAAO,MAAMC,cAAc,CAAC,EAC1BC,OAAOJ,SAASK,eAAe,EAC/BC,SAASC,SAAS,EAClBC,KAAK,EACLC,wBAAwBT,SAASU,oBAAoB,EACrDC,MAAM,EACD,GAAyB,CAAA;QAC9BP;QACAQ,MAAM;QACNN;QACAO,OAAO;YACLC,aAAa;YACbC,WAAW;YACXC,YAAY;gBACVC,OAAO;oBACLC,aAAa;wBACXV;wBACAG;oBACF;oBACAQ,MAAM;gBACR;YACF;YACAC,mBAAmB;YACnBC,mBAAmB;QACrB;QACAC,SAAS;QACTC,OAAO;YACLC,cAAc;gBACZ,CAAC,EAAEC,GAAG,EAAEC,KAAK,EAAE;oBACb,MAAMC,SAAS1B,oBAAoB;wBACjC2B,gBAAgBnB;wBAChBoB,SAASJ,IAAII,OAAO;oBACtB;oBACA,IAAI,CAACH,OAAO;wBACV,MAAMI,mBAAmB5B,oBAAoBuB,IAAIM,OAAO,EAAEJ;wBAC1D,IAAIG,kBAAkB;4BACpB,OAAOA;wBACT;wBACA,MAAM,IAAI/B,SAAS,4BAA4B,KAAK,MAAM;oBAC5D;oBAEA,OAAO4B,WAAW,WAAWK,WAAWN,SAASA;gBACnD;aACD;QACH;QACAO,OAAO;QACP,8DAA8D;QAC9DC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;QACpBC,YAAY3B;QACZE;IACF,CAAA,EAAE"}
1
+ {"version":3,"sources":["../../../src/fields/tenantField/index.ts"],"sourcesContent":["import type { RelationshipFieldSingleValidation, SingleRelationshipField } from 'payload'\n\nimport { APIError } from 'payload'\n\nimport type { RootTenantFieldConfigOverrides } from '../../types.js'\n\nimport { defaults } from '../../defaults.js'\nimport { getCollectionIDType } from '../../utilities/getCollectionIDType.js'\nimport { getTenantFromCookie } from '../../utilities/getTenantFromCookie.js'\n\ntype Args = {\n debug?: boolean\n name: string\n overrides?: RootTenantFieldConfigOverrides\n tenantsCollectionSlug: string\n unique: boolean\n}\nexport const tenantField = ({\n name = defaults.tenantFieldName,\n debug,\n overrides: _overrides = {},\n tenantsCollectionSlug = defaults.tenantCollectionSlug,\n unique,\n}: Args): SingleRelationshipField => {\n const { validate, ...overrides } = _overrides || {}\n return {\n ...(overrides || {}),\n name,\n type: 'relationship',\n access: overrides?.access || {},\n admin: {\n allowCreate: false,\n allowEdit: false,\n disableListColumn: true,\n disableListFilter: true,\n ...(overrides?.admin || {}),\n components: {\n ...(overrides?.admin?.components || {}),\n Field: {\n path: '@payloadcms/plugin-multi-tenant/client#TenantField',\n ...(typeof overrides?.admin?.components?.Field !== 'string'\n ? overrides?.admin?.components?.Field || {}\n : {}),\n clientProps: {\n ...(typeof overrides?.admin?.components?.Field !== 'string'\n ? (overrides?.admin?.components?.Field || {})?.clientProps\n : {}),\n debug,\n unique,\n },\n },\n },\n },\n hasMany: false,\n hooks: {\n ...(overrides.hooks || []),\n beforeChange: [\n ({ req, value }) => {\n const idType = getCollectionIDType({\n collectionSlug: tenantsCollectionSlug,\n payload: req.payload,\n })\n if (!value) {\n const tenantFromCookie = getTenantFromCookie(req.headers, idType)\n if (tenantFromCookie) {\n return tenantFromCookie\n }\n throw new APIError('You must select a tenant', 400, null, true)\n }\n\n return idType === 'number' ? parseFloat(value) : value\n },\n ...(overrides?.hooks?.beforeChange || []),\n ],\n },\n index: true,\n validate: (validate as RelationshipFieldSingleValidation) || undefined,\n // @ts-expect-error translations are not typed for this plugin\n label: overrides?.label || (({ t }) => t('plugin-multi-tenant:field-assignedTenant-label')),\n relationTo: tenantsCollectionSlug,\n unique,\n }\n}\n"],"names":["APIError","defaults","getCollectionIDType","getTenantFromCookie","tenantField","name","tenantFieldName","debug","overrides","_overrides","tenantsCollectionSlug","tenantCollectionSlug","unique","validate","type","access","admin","allowCreate","allowEdit","disableListColumn","disableListFilter","components","Field","path","clientProps","hasMany","hooks","beforeChange","req","value","idType","collectionSlug","payload","tenantFromCookie","headers","parseFloat","index","undefined","label","t","relationTo"],"mappings":"AAEA,SAASA,QAAQ,QAAQ,UAAS;AAIlC,SAASC,QAAQ,QAAQ,oBAAmB;AAC5C,SAASC,mBAAmB,QAAQ,yCAAwC;AAC5E,SAASC,mBAAmB,QAAQ,yCAAwC;AAS5E,OAAO,MAAMC,cAAc,CAAC,EAC1BC,OAAOJ,SAASK,eAAe,EAC/BC,KAAK,EACLC,WAAWC,aAAa,CAAC,CAAC,EAC1BC,wBAAwBT,SAASU,oBAAoB,EACrDC,MAAM,EACD;IACL,MAAM,EAAEC,QAAQ,EAAE,GAAGL,WAAW,GAAGC,cAAc,CAAC;IAClD,OAAO;QACL,GAAID,aAAa,CAAC,CAAC;QACnBH;QACAS,MAAM;QACNC,QAAQP,WAAWO,UAAU,CAAC;QAC9BC,OAAO;YACLC,aAAa;YACbC,WAAW;YACXC,mBAAmB;YACnBC,mBAAmB;YACnB,GAAIZ,WAAWQ,SAAS,CAAC,CAAC;YAC1BK,YAAY;gBACV,GAAIb,WAAWQ,OAAOK,cAAc,CAAC,CAAC;gBACtCC,OAAO;oBACLC,MAAM;oBACN,GAAI,OAAOf,WAAWQ,OAAOK,YAAYC,UAAU,WAC/Cd,WAAWQ,OAAOK,YAAYC,SAAS,CAAC,IACxC,CAAC,CAAC;oBACNE,aAAa;wBACX,GAAI,OAAOhB,WAAWQ,OAAOK,YAAYC,UAAU,WAC9Cd,CAAAA,WAAWQ,OAAOK,YAAYC,SAAS,CAAC,CAAA,GAAIE,cAC7C,CAAC,CAAC;wBACNjB;wBACAK;oBACF;gBACF;YACF;QACF;QACAa,SAAS;QACTC,OAAO;YACL,GAAIlB,UAAUkB,KAAK,IAAI,EAAE;YACzBC,cAAc;gBACZ,CAAC,EAAEC,GAAG,EAAEC,KAAK,EAAE;oBACb,MAAMC,SAAS5B,oBAAoB;wBACjC6B,gBAAgBrB;wBAChBsB,SAASJ,IAAII,OAAO;oBACtB;oBACA,IAAI,CAACH,OAAO;wBACV,MAAMI,mBAAmB9B,oBAAoByB,IAAIM,OAAO,EAAEJ;wBAC1D,IAAIG,kBAAkB;4BACpB,OAAOA;wBACT;wBACA,MAAM,IAAIjC,SAAS,4BAA4B,KAAK,MAAM;oBAC5D;oBAEA,OAAO8B,WAAW,WAAWK,WAAWN,SAASA;gBACnD;mBACIrB,WAAWkB,OAAOC,gBAAgB,EAAE;aACzC;QACH;QACAS,OAAO;QACPvB,UAAU,AAACA,YAAkDwB;QAC7D,8DAA8D;QAC9DC,OAAO9B,WAAW8B,SAAU,CAAA,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE,iDAAgD;QACzFC,YAAY9B;QACZE;IACF;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,MAAM,EAAE,MAAM,SAAS,CAAA;AAKvD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAazD,eAAO,MAAM,iBAAiB,GAC3B,UAAU,gBAAgB,uBAAuB,CAAC,UAAU,CAAC,sBAC7C,MAAM,KAAG,MAqYzB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,MAAM,EAAE,MAAM,SAAS,CAAA;AAKvD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAazD,eAAO,MAAM,iBAAiB,GAC3B,UAAU,gBAAgB,uBAAuB,CAAC,UAAU,CAAC,sBAC7C,MAAM,KAAG,MAiXzB,CAAA"}
package/dist/index.js CHANGED
@@ -1,4 +1,3 @@
1
- import { deepMergeSimple } from 'payload';
2
1
  import { defaults } from './defaults.js';
3
2
  import { getTenantOptionsEndpoint } from './endpoints/getTenantOptionsEndpoint.js';
4
3
  import { tenantField } from './fields/tenantField/index.js';
@@ -20,7 +19,6 @@ export const multiTenantPlugin = (pluginConfig)=>(incomingConfig)=>{
20
19
  const tenantFieldName = pluginConfig?.tenantField?.name || defaults.tenantFieldName;
21
20
  const tenantsArrayFieldName = pluginConfig?.tenantsArrayField?.arrayFieldName || defaults.tenantsArrayFieldName;
22
21
  const tenantsArrayTenantFieldName = pluginConfig?.tenantsArrayField?.arrayTenantFieldName || defaults.tenantsArrayTenantFieldName;
23
- const tenantSelectorLabel = pluginConfig.tenantSelectorLabel || defaults.tenantSelectorLabel;
24
22
  const basePath = pluginConfig.basePath || defaults.basePath;
25
23
  /**
26
24
  * Add defaults for admin properties
@@ -47,35 +45,6 @@ export const multiTenantPlugin = (pluginConfig)=>(incomingConfig)=>{
47
45
  incomingConfig.collections = [];
48
46
  }
49
47
  /**
50
- * Add tenant selector localized labels
51
- */ if (typeof tenantSelectorLabel === 'object') {
52
- if (!incomingConfig.i18n) {
53
- incomingConfig.i18n = {};
54
- }
55
- Object.entries(tenantSelectorLabel).forEach(([_locale, label])=>{
56
- const locale = _locale;
57
- if (!incomingConfig.i18n) {
58
- incomingConfig.i18n = {};
59
- }
60
- if (!incomingConfig.i18n.translations) {
61
- incomingConfig.i18n.translations = {};
62
- }
63
- if (!(locale in incomingConfig.i18n.translations)) {
64
- incomingConfig.i18n.translations[locale] = {};
65
- }
66
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
67
- // @ts-expect-error
68
- if (!('multiTenant' in incomingConfig.i18n.translations[locale])) {
69
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
70
- // @ts-expect-error
71
- incomingConfig.i18n.translations[locale].multiTenant = {};
72
- }
73
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
74
- // @ts-expect-error
75
- incomingConfig.i18n.translations[locale].multiTenant.selectorLabel = label;
76
- });
77
- }
78
- /**
79
48
  * Add tenants array field to users collection
80
49
  */ const adminUsersCollection = incomingConfig.collections.find(({ slug, auth })=>{
81
50
  if (incomingConfig.admin?.user) {
@@ -228,12 +197,13 @@ export const multiTenantPlugin = (pluginConfig)=>(incomingConfig)=>{
228
197
  tenantFieldName,
229
198
  tenantsCollectionSlug
230
199
  });
200
+ const overrides = pluginConfig.collections[collection.slug]?.tenantFieldOverrides ? pluginConfig.collections[collection.slug]?.tenantFieldOverrides : pluginConfig.tenantField || {};
231
201
  /**
232
202
  * Add tenant field to enabled collections
233
203
  */ collection.fields.splice(0, 0, tenantField({
234
- ...pluginConfig?.tenantField || {},
235
204
  name: tenantFieldName,
236
205
  debug: pluginConfig.debug,
206
+ overrides,
237
207
  tenantsCollectionSlug,
238
208
  unique: isGlobal
239
209
  }));
@@ -307,20 +277,33 @@ export const multiTenantPlugin = (pluginConfig)=>(incomingConfig)=>{
307
277
  * Add tenant selector to admin UI
308
278
  */ incomingConfig.admin.components.beforeNavLinks.push({
309
279
  clientProps: {
310
- label: tenantSelectorLabel
280
+ label: pluginConfig.tenantSelectorLabel || undefined
311
281
  },
312
282
  path: '@payloadcms/plugin-multi-tenant/client#TenantSelector'
313
283
  });
314
284
  /**
315
285
  * Merge plugin translations
316
- */ const simplifiedTranslations = Object.entries(translations).reduce((acc, [key, value])=>{
317
- acc[key] = value.translations;
318
- return acc;
319
- }, {});
320
- incomingConfig.i18n = {
321
- ...incomingConfig.i18n,
322
- translations: deepMergeSimple(simplifiedTranslations, incomingConfig.i18n?.translations ?? {})
323
- };
286
+ */ if (!incomingConfig.i18n) {
287
+ incomingConfig.i18n = {};
288
+ }
289
+ Object.entries(translations).forEach(([locale, pluginI18nObject])=>{
290
+ const typedLocale = locale;
291
+ if (!incomingConfig.i18n.translations) {
292
+ incomingConfig.i18n.translations = {};
293
+ }
294
+ if (!(typedLocale in incomingConfig.i18n.translations)) {
295
+ incomingConfig.i18n.translations[typedLocale] = {};
296
+ }
297
+ if (!('plugin-multi-tenant' in incomingConfig.i18n.translations[typedLocale])) {
298
+ ;
299
+ incomingConfig.i18n.translations[typedLocale]['plugin-multi-tenant'] = {};
300
+ }
301
+ ;
302
+ incomingConfig.i18n.translations[typedLocale]['plugin-multi-tenant'] = {
303
+ ...pluginI18nObject.translations['plugin-multi-tenant'],
304
+ ...pluginConfig.i18n?.translations?.[typedLocale] || {}
305
+ };
306
+ });
324
307
  return incomingConfig;
325
308
  };
326
309
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { AcceptedLanguages } from '@payloadcms/translations'\nimport type { CollectionConfig, Config } from 'payload'\n\nimport { deepMergeSimple } from 'payload'\n\nimport type { PluginDefaultTranslationsObject } from './translations/types.js'\nimport type { MultiTenantPluginConfig } from './types.js'\n\nimport { defaults } from './defaults.js'\nimport { getTenantOptionsEndpoint } from './endpoints/getTenantOptionsEndpoint.js'\nimport { tenantField } from './fields/tenantField/index.js'\nimport { tenantsArrayField } from './fields/tenantsArrayField/index.js'\nimport { filterDocumentsByTenants } from './filters/filterDocumentsByTenants.js'\nimport { addTenantCleanup } from './hooks/afterTenantDelete.js'\nimport { translations } from './translations/index.js'\nimport { addCollectionAccess } from './utilities/addCollectionAccess.js'\nimport { addFilterOptionsToFields } from './utilities/addFilterOptionsToFields.js'\nimport { combineFilters } from './utilities/combineFilters.js'\n\nexport const multiTenantPlugin =\n <ConfigType>(pluginConfig: MultiTenantPluginConfig<ConfigType>) =>\n (incomingConfig: Config): Config => {\n if (pluginConfig.enabled === false) {\n return incomingConfig\n }\n\n /**\n * Set defaults\n */\n const userHasAccessToAllTenants: Required<\n MultiTenantPluginConfig<ConfigType>\n >['userHasAccessToAllTenants'] =\n typeof pluginConfig.userHasAccessToAllTenants === 'function'\n ? pluginConfig.userHasAccessToAllTenants\n : () => false\n const tenantsCollectionSlug = (pluginConfig.tenantsSlug =\n pluginConfig.tenantsSlug || defaults.tenantCollectionSlug)\n const tenantFieldName = pluginConfig?.tenantField?.name || defaults.tenantFieldName\n const tenantsArrayFieldName =\n pluginConfig?.tenantsArrayField?.arrayFieldName || defaults.tenantsArrayFieldName\n const tenantsArrayTenantFieldName =\n pluginConfig?.tenantsArrayField?.arrayTenantFieldName || defaults.tenantsArrayTenantFieldName\n const tenantSelectorLabel = pluginConfig.tenantSelectorLabel || defaults.tenantSelectorLabel\n const basePath = pluginConfig.basePath || defaults.basePath\n\n /**\n * Add defaults for admin properties\n */\n if (!incomingConfig.admin) {\n incomingConfig.admin = {}\n }\n if (!incomingConfig.admin?.components) {\n incomingConfig.admin.components = {\n actions: [],\n beforeNavLinks: [],\n providers: [],\n }\n }\n if (!incomingConfig.admin.components?.providers) {\n incomingConfig.admin.components.providers = []\n }\n if (!incomingConfig.admin.components?.actions) {\n incomingConfig.admin.components.actions = []\n }\n if (!incomingConfig.admin.components?.beforeNavLinks) {\n incomingConfig.admin.components.beforeNavLinks = []\n }\n if (!incomingConfig.collections) {\n incomingConfig.collections = []\n }\n\n /**\n * Add tenant selector localized labels\n */\n if (typeof tenantSelectorLabel === 'object') {\n if (!incomingConfig.i18n) {\n incomingConfig.i18n = {}\n }\n Object.entries(tenantSelectorLabel).forEach(([_locale, label]) => {\n const locale = _locale as AcceptedLanguages\n if (!incomingConfig.i18n) {\n incomingConfig.i18n = {}\n }\n if (!incomingConfig.i18n.translations) {\n incomingConfig.i18n.translations = {}\n }\n if (!(locale in incomingConfig.i18n.translations)) {\n incomingConfig.i18n.translations[locale] = {}\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (!('multiTenant' in incomingConfig.i18n.translations[locale])) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n incomingConfig.i18n.translations[locale].multiTenant = {}\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n incomingConfig.i18n.translations[locale].multiTenant.selectorLabel = label\n })\n }\n\n /**\n * Add tenants array field to users collection\n */\n const adminUsersCollection = incomingConfig.collections.find(({ slug, auth }) => {\n if (incomingConfig.admin?.user) {\n return slug === incomingConfig.admin.user\n } else if (auth) {\n return true\n }\n })\n\n if (!adminUsersCollection) {\n throw Error('An auth enabled collection was not found')\n }\n\n /**\n * Add tenants array field to users collection\n */\n if (pluginConfig?.tenantsArrayField?.includeDefaultField !== false) {\n adminUsersCollection.fields.push(\n tenantsArrayField({\n ...(pluginConfig?.tenantsArrayField || {}),\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n tenantsCollectionSlug,\n }),\n )\n }\n\n addCollectionAccess({\n adminUsersSlug: adminUsersCollection.slug,\n collection: adminUsersCollection,\n fieldName: `${tenantsArrayFieldName}.${tenantsArrayTenantFieldName}`,\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n userHasAccessToAllTenants,\n })\n\n if (pluginConfig.useUsersTenantFilter !== false) {\n if (!adminUsersCollection.admin) {\n adminUsersCollection.admin = {}\n }\n\n const baseFilter =\n adminUsersCollection.admin?.baseFilter ?? adminUsersCollection.admin?.baseListFilter\n adminUsersCollection.admin.baseFilter = combineFilters({\n baseFilter,\n customFilter: (args) =>\n filterDocumentsByTenants({\n filterFieldName: `${tenantsArrayFieldName}.${tenantsArrayTenantFieldName}`,\n req: args.req,\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n tenantsCollectionSlug,\n }),\n })\n }\n\n let tenantCollection: CollectionConfig | undefined\n\n const [collectionSlugs, globalCollectionSlugs] = Object.keys(pluginConfig.collections).reduce<\n [string[], string[]]\n >(\n (acc, slug) => {\n if (pluginConfig?.collections?.[slug]?.isGlobal) {\n acc[1].push(slug)\n } else {\n acc[0].push(slug)\n }\n\n return acc\n },\n [[], []],\n )\n\n /**\n * Modify collections\n */\n incomingConfig.collections.forEach((collection) => {\n /**\n * Modify tenants collection\n */\n if (collection.slug === tenantsCollectionSlug) {\n tenantCollection = collection\n\n if (pluginConfig.useTenantsCollectionAccess !== false) {\n /**\n * Add access control constraint to tenants collection\n * - constrains access a users assigned tenants\n */\n addCollectionAccess({\n adminUsersSlug: adminUsersCollection.slug,\n collection,\n fieldName: 'id',\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n userHasAccessToAllTenants,\n })\n }\n\n if (pluginConfig.useTenantsListFilter !== false) {\n /**\n * Add list filter to tenants collection\n * - filter by selected tenant\n */\n if (!collection.admin) {\n collection.admin = {}\n }\n\n const baseFilter = collection.admin?.baseFilter ?? collection.admin?.baseListFilter\n collection.admin.baseFilter = combineFilters({\n baseFilter,\n customFilter: (args) =>\n filterDocumentsByTenants({\n filterFieldName: 'id',\n req: args.req,\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n tenantsCollectionSlug,\n }),\n })\n }\n\n if (pluginConfig.cleanupAfterTenantDelete !== false) {\n /**\n * Add cleanup logic when tenant is deleted\n * - delete documents related to tenant\n * - remove tenant from users\n */\n addTenantCleanup({\n collection,\n enabledSlugs: [...collectionSlugs, ...globalCollectionSlugs],\n tenantFieldName,\n tenantsCollectionSlug,\n usersSlug: adminUsersCollection.slug,\n usersTenantsArrayFieldName: tenantsArrayFieldName,\n usersTenantsArrayTenantFieldName: tenantsArrayTenantFieldName,\n })\n }\n\n /**\n * Add custom tenant field that watches and dispatches updates to the selector\n */\n collection.fields.push({\n name: '_watchTenant',\n type: 'ui',\n admin: {\n components: {\n Field: {\n path: '@payloadcms/plugin-multi-tenant/client#WatchTenantCollection',\n },\n },\n },\n })\n\n collection.endpoints = [\n ...(collection.endpoints || []),\n getTenantOptionsEndpoint<ConfigType>({\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n tenantsCollectionSlug,\n useAsTitle: tenantCollection.admin?.useAsTitle || 'id',\n userHasAccessToAllTenants,\n }),\n ]\n } else if (pluginConfig.collections?.[collection.slug]) {\n const isGlobal = Boolean(pluginConfig.collections[collection.slug]?.isGlobal)\n\n if (isGlobal) {\n collection.disableDuplicate = true\n }\n\n /**\n * Modify enabled collections\n */\n addFilterOptionsToFields({\n config: incomingConfig,\n fields: collection.fields,\n tenantEnabledCollectionSlugs: collectionSlugs,\n tenantEnabledGlobalSlugs: globalCollectionSlugs,\n tenantFieldName,\n tenantsCollectionSlug,\n })\n\n /**\n * Add tenant field to enabled collections\n */\n collection.fields.splice(\n 0,\n 0,\n tenantField({\n ...(pluginConfig?.tenantField || {}),\n name: tenantFieldName,\n debug: pluginConfig.debug,\n tenantsCollectionSlug,\n unique: isGlobal,\n }),\n )\n\n const { useBaseFilter, useBaseListFilter } = pluginConfig.collections[collection.slug] || {}\n\n if (useBaseFilter ?? useBaseListFilter ?? true) {\n /**\n * Add list filter to enabled collections\n * - filters results by selected tenant\n */\n if (!collection.admin) {\n collection.admin = {}\n }\n\n const baseFilter = collection.admin?.baseFilter ?? collection.admin?.baseListFilter\n collection.admin.baseFilter = combineFilters({\n baseFilter,\n customFilter: (args) =>\n filterDocumentsByTenants({\n filterFieldName: tenantFieldName,\n req: args.req,\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n tenantsCollectionSlug,\n }),\n })\n }\n\n if (pluginConfig.collections[collection.slug]?.useTenantAccess !== false) {\n /**\n * Add access control constraint to tenant enabled collection\n */\n addCollectionAccess({\n adminUsersSlug: adminUsersCollection.slug,\n collection,\n fieldName: tenantFieldName,\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n userHasAccessToAllTenants,\n })\n }\n }\n })\n\n if (!tenantCollection) {\n throw new Error(`Tenants collection not found with slug: ${tenantsCollectionSlug}`)\n }\n\n /**\n * Add TenantSelectionProvider to admin providers\n */\n incomingConfig.admin.components.providers.push({\n clientProps: {\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n tenantsCollectionSlug: tenantCollection.slug,\n useAsTitle: tenantCollection.admin?.useAsTitle || 'id',\n userHasAccessToAllTenants,\n },\n path: '@payloadcms/plugin-multi-tenant/rsc#TenantSelectionProvider',\n })\n\n /**\n * Add global redirect action\n */\n if (globalCollectionSlugs.length) {\n incomingConfig.admin.components.actions.push({\n path: '@payloadcms/plugin-multi-tenant/rsc#GlobalViewRedirect',\n serverProps: {\n basePath,\n globalSlugs: globalCollectionSlugs,\n tenantFieldName,\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n tenantsCollectionSlug,\n useAsTitle: tenantCollection.admin?.useAsTitle || 'id',\n userHasAccessToAllTenants,\n },\n })\n }\n\n /**\n * Add tenant selector to admin UI\n */\n incomingConfig.admin.components.beforeNavLinks.push({\n clientProps: {\n label: tenantSelectorLabel,\n },\n path: '@payloadcms/plugin-multi-tenant/client#TenantSelector',\n })\n\n /**\n * Merge plugin translations\n */\n\n const simplifiedTranslations = Object.entries(translations).reduce(\n (acc, [key, value]) => {\n acc[key] = value.translations\n return acc\n },\n {} as Record<string, PluginDefaultTranslationsObject>,\n )\n\n incomingConfig.i18n = {\n ...incomingConfig.i18n,\n translations: deepMergeSimple(\n simplifiedTranslations,\n incomingConfig.i18n?.translations ?? {},\n ),\n }\n\n return incomingConfig\n }\n"],"names":["deepMergeSimple","defaults","getTenantOptionsEndpoint","tenantField","tenantsArrayField","filterDocumentsByTenants","addTenantCleanup","translations","addCollectionAccess","addFilterOptionsToFields","combineFilters","multiTenantPlugin","pluginConfig","incomingConfig","enabled","userHasAccessToAllTenants","tenantsCollectionSlug","tenantsSlug","tenantCollectionSlug","tenantFieldName","name","tenantsArrayFieldName","arrayFieldName","tenantsArrayTenantFieldName","arrayTenantFieldName","tenantSelectorLabel","basePath","admin","components","actions","beforeNavLinks","providers","collections","i18n","Object","entries","forEach","_locale","label","locale","multiTenant","selectorLabel","adminUsersCollection","find","slug","auth","user","Error","includeDefaultField","fields","push","adminUsersSlug","collection","fieldName","useUsersTenantFilter","baseFilter","baseListFilter","customFilter","args","filterFieldName","req","tenantCollection","collectionSlugs","globalCollectionSlugs","keys","reduce","acc","isGlobal","useTenantsCollectionAccess","useTenantsListFilter","cleanupAfterTenantDelete","enabledSlugs","usersSlug","usersTenantsArrayFieldName","usersTenantsArrayTenantFieldName","type","Field","path","endpoints","useAsTitle","Boolean","disableDuplicate","config","tenantEnabledCollectionSlugs","tenantEnabledGlobalSlugs","splice","debug","unique","useBaseFilter","useBaseListFilter","useTenantAccess","clientProps","length","serverProps","globalSlugs","simplifiedTranslations","key","value"],"mappings":"AAGA,SAASA,eAAe,QAAQ,UAAS;AAKzC,SAASC,QAAQ,QAAQ,gBAAe;AACxC,SAASC,wBAAwB,QAAQ,0CAAyC;AAClF,SAASC,WAAW,QAAQ,gCAA+B;AAC3D,SAASC,iBAAiB,QAAQ,sCAAqC;AACvE,SAASC,wBAAwB,QAAQ,wCAAuC;AAChF,SAASC,gBAAgB,QAAQ,+BAA8B;AAC/D,SAASC,YAAY,QAAQ,0BAAyB;AACtD,SAASC,mBAAmB,QAAQ,qCAAoC;AACxE,SAASC,wBAAwB,QAAQ,0CAAyC;AAClF,SAASC,cAAc,QAAQ,gCAA+B;AAE9D,OAAO,MAAMC,oBACX,CAAaC,eACb,CAACC;QACC,IAAID,aAAaE,OAAO,KAAK,OAAO;YAClC,OAAOD;QACT;QAEA;;KAEC,GACD,MAAME,4BAGJ,OAAOH,aAAaG,yBAAyB,KAAK,aAC9CH,aAAaG,yBAAyB,GACtC,IAAM;QACZ,MAAMC,wBAAyBJ,aAAaK,WAAW,GACrDL,aAAaK,WAAW,IAAIhB,SAASiB,oBAAoB;QAC3D,MAAMC,kBAAkBP,cAAcT,aAAaiB,QAAQnB,SAASkB,eAAe;QACnF,MAAME,wBACJT,cAAcR,mBAAmBkB,kBAAkBrB,SAASoB,qBAAqB;QACnF,MAAME,8BACJX,cAAcR,mBAAmBoB,wBAAwBvB,SAASsB,2BAA2B;QAC/F,MAAME,sBAAsBb,aAAaa,mBAAmB,IAAIxB,SAASwB,mBAAmB;QAC5F,MAAMC,WAAWd,aAAac,QAAQ,IAAIzB,SAASyB,QAAQ;QAE3D;;KAEC,GACD,IAAI,CAACb,eAAec,KAAK,EAAE;YACzBd,eAAec,KAAK,GAAG,CAAC;QAC1B;QACA,IAAI,CAACd,eAAec,KAAK,EAAEC,YAAY;YACrCf,eAAec,KAAK,CAACC,UAAU,GAAG;gBAChCC,SAAS,EAAE;gBACXC,gBAAgB,EAAE;gBAClBC,WAAW,EAAE;YACf;QACF;QACA,IAAI,CAAClB,eAAec,KAAK,CAACC,UAAU,EAAEG,WAAW;YAC/ClB,eAAec,KAAK,CAACC,UAAU,CAACG,SAAS,GAAG,EAAE;QAChD;QACA,IAAI,CAAClB,eAAec,KAAK,CAACC,UAAU,EAAEC,SAAS;YAC7ChB,eAAec,KAAK,CAACC,UAAU,CAACC,OAAO,GAAG,EAAE;QAC9C;QACA,IAAI,CAAChB,eAAec,KAAK,CAACC,UAAU,EAAEE,gBAAgB;YACpDjB,eAAec,KAAK,CAACC,UAAU,CAACE,cAAc,GAAG,EAAE;QACrD;QACA,IAAI,CAACjB,eAAemB,WAAW,EAAE;YAC/BnB,eAAemB,WAAW,GAAG,EAAE;QACjC;QAEA;;KAEC,GACD,IAAI,OAAOP,wBAAwB,UAAU;YAC3C,IAAI,CAACZ,eAAeoB,IAAI,EAAE;gBACxBpB,eAAeoB,IAAI,GAAG,CAAC;YACzB;YACAC,OAAOC,OAAO,CAACV,qBAAqBW,OAAO,CAAC,CAAC,CAACC,SAASC,MAAM;gBAC3D,MAAMC,SAASF;gBACf,IAAI,CAACxB,eAAeoB,IAAI,EAAE;oBACxBpB,eAAeoB,IAAI,GAAG,CAAC;gBACzB;gBACA,IAAI,CAACpB,eAAeoB,IAAI,CAAC1B,YAAY,EAAE;oBACrCM,eAAeoB,IAAI,CAAC1B,YAAY,GAAG,CAAC;gBACtC;gBACA,IAAI,CAAEgC,CAAAA,UAAU1B,eAAeoB,IAAI,CAAC1B,YAAY,AAAD,GAAI;oBACjDM,eAAeoB,IAAI,CAAC1B,YAAY,CAACgC,OAAO,GAAG,CAAC;gBAC9C;gBACA,6DAA6D;gBAC7D,mBAAmB;gBACnB,IAAI,CAAE,CAAA,iBAAiB1B,eAAeoB,IAAI,CAAC1B,YAAY,CAACgC,OAAO,AAAD,GAAI;oBAChE,6DAA6D;oBAC7D,mBAAmB;oBACnB1B,eAAeoB,IAAI,CAAC1B,YAAY,CAACgC,OAAO,CAACC,WAAW,GAAG,CAAC;gBAC1D;gBACA,6DAA6D;gBAC7D,mBAAmB;gBACnB3B,eAAeoB,IAAI,CAAC1B,YAAY,CAACgC,OAAO,CAACC,WAAW,CAACC,aAAa,GAAGH;YACvE;QACF;QAEA;;KAEC,GACD,MAAMI,uBAAuB7B,eAAemB,WAAW,CAACW,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAEC,IAAI,EAAE;YAC1E,IAAIhC,eAAec,KAAK,EAAEmB,MAAM;gBAC9B,OAAOF,SAAS/B,eAAec,KAAK,CAACmB,IAAI;YAC3C,OAAO,IAAID,MAAM;gBACf,OAAO;YACT;QACF;QAEA,IAAI,CAACH,sBAAsB;YACzB,MAAMK,MAAM;QACd;QAEA;;KAEC,GACD,IAAInC,cAAcR,mBAAmB4C,wBAAwB,OAAO;YAClEN,qBAAqBO,MAAM,CAACC,IAAI,CAC9B9C,kBAAkB;gBAChB,GAAIQ,cAAcR,qBAAqB,CAAC,CAAC;gBACzCiB;gBACAE;gBACAP;YACF;QAEJ;QAEAR,oBAAoB;YAClB2C,gBAAgBT,qBAAqBE,IAAI;YACzCQ,YAAYV;YACZW,WAAW,GAAGhC,sBAAsB,CAAC,EAAEE,6BAA6B;YACpEF;YACAE;YACAR;QACF;QAEA,IAAIH,aAAa0C,oBAAoB,KAAK,OAAO;YAC/C,IAAI,CAACZ,qBAAqBf,KAAK,EAAE;gBAC/Be,qBAAqBf,KAAK,GAAG,CAAC;YAChC;YAEA,MAAM4B,aACJb,qBAAqBf,KAAK,EAAE4B,cAAcb,qBAAqBf,KAAK,EAAE6B;YACxEd,qBAAqBf,KAAK,CAAC4B,UAAU,GAAG7C,eAAe;gBACrD6C;gBACAE,cAAc,CAACC,OACbrD,yBAAyB;wBACvBsD,iBAAiB,GAAGtC,sBAAsB,CAAC,EAAEE,6BAA6B;wBAC1EqC,KAAKF,KAAKE,GAAG;wBACbvC;wBACAE;wBACAP;oBACF;YACJ;QACF;QAEA,IAAI6C;QAEJ,MAAM,CAACC,iBAAiBC,sBAAsB,GAAG7B,OAAO8B,IAAI,CAACpD,aAAaoB,WAAW,EAAEiC,MAAM,CAG3F,CAACC,KAAKtB;YACJ,IAAIhC,cAAcoB,aAAa,CAACY,KAAK,EAAEuB,UAAU;gBAC/CD,GAAG,CAAC,EAAE,CAAChB,IAAI,CAACN;YACd,OAAO;gBACLsB,GAAG,CAAC,EAAE,CAAChB,IAAI,CAACN;YACd;YAEA,OAAOsB;QACT,GACA;YAAC,EAAE;YAAE,EAAE;SAAC;QAGV;;KAEC,GACDrD,eAAemB,WAAW,CAACI,OAAO,CAAC,CAACgB;YAClC;;OAEC,GACD,IAAIA,WAAWR,IAAI,KAAK5B,uBAAuB;gBAC7C6C,mBAAmBT;gBAEnB,IAAIxC,aAAawD,0BAA0B,KAAK,OAAO;oBACrD;;;WAGC,GACD5D,oBAAoB;wBAClB2C,gBAAgBT,qBAAqBE,IAAI;wBACzCQ;wBACAC,WAAW;wBACXhC;wBACAE;wBACAR;oBACF;gBACF;gBAEA,IAAIH,aAAayD,oBAAoB,KAAK,OAAO;oBAC/C;;;WAGC,GACD,IAAI,CAACjB,WAAWzB,KAAK,EAAE;wBACrByB,WAAWzB,KAAK,GAAG,CAAC;oBACtB;oBAEA,MAAM4B,aAAaH,WAAWzB,KAAK,EAAE4B,cAAcH,WAAWzB,KAAK,EAAE6B;oBACrEJ,WAAWzB,KAAK,CAAC4B,UAAU,GAAG7C,eAAe;wBAC3C6C;wBACAE,cAAc,CAACC,OACbrD,yBAAyB;gCACvBsD,iBAAiB;gCACjBC,KAAKF,KAAKE,GAAG;gCACbvC;gCACAE;gCACAP;4BACF;oBACJ;gBACF;gBAEA,IAAIJ,aAAa0D,wBAAwB,KAAK,OAAO;oBACnD;;;;WAIC,GACDhE,iBAAiB;wBACf8C;wBACAmB,cAAc;+BAAIT;+BAAoBC;yBAAsB;wBAC5D5C;wBACAH;wBACAwD,WAAW9B,qBAAqBE,IAAI;wBACpC6B,4BAA4BpD;wBAC5BqD,kCAAkCnD;oBACpC;gBACF;gBAEA;;SAEC,GACD6B,WAAWH,MAAM,CAACC,IAAI,CAAC;oBACrB9B,MAAM;oBACNuD,MAAM;oBACNhD,OAAO;wBACLC,YAAY;4BACVgD,OAAO;gCACLC,MAAM;4BACR;wBACF;oBACF;gBACF;gBAEAzB,WAAW0B,SAAS,GAAG;uBACjB1B,WAAW0B,SAAS,IAAI,EAAE;oBAC9B5E,yBAAqC;wBACnCmB;wBACAE;wBACAP;wBACA+D,YAAYlB,iBAAiBlC,KAAK,EAAEoD,cAAc;wBAClDhE;oBACF;iBACD;YACH,OAAO,IAAIH,aAAaoB,WAAW,EAAE,CAACoB,WAAWR,IAAI,CAAC,EAAE;gBACtD,MAAMuB,WAAWa,QAAQpE,aAAaoB,WAAW,CAACoB,WAAWR,IAAI,CAAC,EAAEuB;gBAEpE,IAAIA,UAAU;oBACZf,WAAW6B,gBAAgB,GAAG;gBAChC;gBAEA;;SAEC,GACDxE,yBAAyB;oBACvByE,QAAQrE;oBACRoC,QAAQG,WAAWH,MAAM;oBACzBkC,8BAA8BrB;oBAC9BsB,0BAA0BrB;oBAC1B5C;oBACAH;gBACF;gBAEA;;SAEC,GACDoC,WAAWH,MAAM,CAACoC,MAAM,CACtB,GACA,GACAlF,YAAY;oBACV,GAAIS,cAAcT,eAAe,CAAC,CAAC;oBACnCiB,MAAMD;oBACNmE,OAAO1E,aAAa0E,KAAK;oBACzBtE;oBACAuE,QAAQpB;gBACV;gBAGF,MAAM,EAAEqB,aAAa,EAAEC,iBAAiB,EAAE,GAAG7E,aAAaoB,WAAW,CAACoB,WAAWR,IAAI,CAAC,IAAI,CAAC;gBAE3F,IAAI4C,iBAAiBC,qBAAqB,MAAM;oBAC9C;;;WAGC,GACD,IAAI,CAACrC,WAAWzB,KAAK,EAAE;wBACrByB,WAAWzB,KAAK,GAAG,CAAC;oBACtB;oBAEA,MAAM4B,aAAaH,WAAWzB,KAAK,EAAE4B,cAAcH,WAAWzB,KAAK,EAAE6B;oBACrEJ,WAAWzB,KAAK,CAAC4B,UAAU,GAAG7C,eAAe;wBAC3C6C;wBACAE,cAAc,CAACC,OACbrD,yBAAyB;gCACvBsD,iBAAiBxC;gCACjByC,KAAKF,KAAKE,GAAG;gCACbvC;gCACAE;gCACAP;4BACF;oBACJ;gBACF;gBAEA,IAAIJ,aAAaoB,WAAW,CAACoB,WAAWR,IAAI,CAAC,EAAE8C,oBAAoB,OAAO;oBACxE;;WAEC,GACDlF,oBAAoB;wBAClB2C,gBAAgBT,qBAAqBE,IAAI;wBACzCQ;wBACAC,WAAWlC;wBACXE;wBACAE;wBACAR;oBACF;gBACF;YACF;QACF;QAEA,IAAI,CAAC8C,kBAAkB;YACrB,MAAM,IAAId,MAAM,CAAC,wCAAwC,EAAE/B,uBAAuB;QACpF;QAEA;;KAEC,GACDH,eAAec,KAAK,CAACC,UAAU,CAACG,SAAS,CAACmB,IAAI,CAAC;YAC7CyC,aAAa;gBACXtE;gBACAE;gBACAP,uBAAuB6C,iBAAiBjB,IAAI;gBAC5CmC,YAAYlB,iBAAiBlC,KAAK,EAAEoD,cAAc;gBAClDhE;YACF;YACA8D,MAAM;QACR;QAEA;;KAEC,GACD,IAAId,sBAAsB6B,MAAM,EAAE;YAChC/E,eAAec,KAAK,CAACC,UAAU,CAACC,OAAO,CAACqB,IAAI,CAAC;gBAC3C2B,MAAM;gBACNgB,aAAa;oBACXnE;oBACAoE,aAAa/B;oBACb5C;oBACAE;oBACAE;oBACAP;oBACA+D,YAAYlB,iBAAiBlC,KAAK,EAAEoD,cAAc;oBAClDhE;gBACF;YACF;QACF;QAEA;;KAEC,GACDF,eAAec,KAAK,CAACC,UAAU,CAACE,cAAc,CAACoB,IAAI,CAAC;YAClDyC,aAAa;gBACXrD,OAAOb;YACT;YACAoD,MAAM;QACR;QAEA;;KAEC,GAED,MAAMkB,yBAAyB7D,OAAOC,OAAO,CAAC5B,cAAc0D,MAAM,CAChE,CAACC,KAAK,CAAC8B,KAAKC,MAAM;YAChB/B,GAAG,CAAC8B,IAAI,GAAGC,MAAM1F,YAAY;YAC7B,OAAO2D;QACT,GACA,CAAC;QAGHrD,eAAeoB,IAAI,GAAG;YACpB,GAAGpB,eAAeoB,IAAI;YACtB1B,cAAcP,gBACZ+F,wBACAlF,eAAeoB,IAAI,EAAE1B,gBAAgB,CAAC;QAE1C;QAEA,OAAOM;IACT,EAAC"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { AcceptedLanguages } from '@payloadcms/translations'\nimport type { CollectionConfig, Config } from 'payload'\n\nimport { deepMergeSimple } from 'payload'\n\nimport type { PluginDefaultTranslationsObject } from './translations/types.js'\nimport type { MultiTenantPluginConfig } from './types.js'\n\nimport { defaults } from './defaults.js'\nimport { getTenantOptionsEndpoint } from './endpoints/getTenantOptionsEndpoint.js'\nimport { tenantField } from './fields/tenantField/index.js'\nimport { tenantsArrayField } from './fields/tenantsArrayField/index.js'\nimport { filterDocumentsByTenants } from './filters/filterDocumentsByTenants.js'\nimport { addTenantCleanup } from './hooks/afterTenantDelete.js'\nimport { translations } from './translations/index.js'\nimport { addCollectionAccess } from './utilities/addCollectionAccess.js'\nimport { addFilterOptionsToFields } from './utilities/addFilterOptionsToFields.js'\nimport { combineFilters } from './utilities/combineFilters.js'\n\nexport const multiTenantPlugin =\n <ConfigType>(pluginConfig: MultiTenantPluginConfig<ConfigType>) =>\n (incomingConfig: Config): Config => {\n if (pluginConfig.enabled === false) {\n return incomingConfig\n }\n\n /**\n * Set defaults\n */\n const userHasAccessToAllTenants: Required<\n MultiTenantPluginConfig<ConfigType>\n >['userHasAccessToAllTenants'] =\n typeof pluginConfig.userHasAccessToAllTenants === 'function'\n ? pluginConfig.userHasAccessToAllTenants\n : () => false\n const tenantsCollectionSlug = (pluginConfig.tenantsSlug =\n pluginConfig.tenantsSlug || defaults.tenantCollectionSlug)\n const tenantFieldName = pluginConfig?.tenantField?.name || defaults.tenantFieldName\n const tenantsArrayFieldName =\n pluginConfig?.tenantsArrayField?.arrayFieldName || defaults.tenantsArrayFieldName\n const tenantsArrayTenantFieldName =\n pluginConfig?.tenantsArrayField?.arrayTenantFieldName || defaults.tenantsArrayTenantFieldName\n const basePath = pluginConfig.basePath || defaults.basePath\n\n /**\n * Add defaults for admin properties\n */\n if (!incomingConfig.admin) {\n incomingConfig.admin = {}\n }\n if (!incomingConfig.admin?.components) {\n incomingConfig.admin.components = {\n actions: [],\n beforeNavLinks: [],\n providers: [],\n }\n }\n if (!incomingConfig.admin.components?.providers) {\n incomingConfig.admin.components.providers = []\n }\n if (!incomingConfig.admin.components?.actions) {\n incomingConfig.admin.components.actions = []\n }\n if (!incomingConfig.admin.components?.beforeNavLinks) {\n incomingConfig.admin.components.beforeNavLinks = []\n }\n if (!incomingConfig.collections) {\n incomingConfig.collections = []\n }\n\n /**\n * Add tenants array field to users collection\n */\n const adminUsersCollection = incomingConfig.collections.find(({ slug, auth }) => {\n if (incomingConfig.admin?.user) {\n return slug === incomingConfig.admin.user\n } else if (auth) {\n return true\n }\n })\n\n if (!adminUsersCollection) {\n throw Error('An auth enabled collection was not found')\n }\n\n /**\n * Add tenants array field to users collection\n */\n if (pluginConfig?.tenantsArrayField?.includeDefaultField !== false) {\n adminUsersCollection.fields.push(\n tenantsArrayField({\n ...(pluginConfig?.tenantsArrayField || {}),\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n tenantsCollectionSlug,\n }),\n )\n }\n\n addCollectionAccess({\n adminUsersSlug: adminUsersCollection.slug,\n collection: adminUsersCollection,\n fieldName: `${tenantsArrayFieldName}.${tenantsArrayTenantFieldName}`,\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n userHasAccessToAllTenants,\n })\n\n if (pluginConfig.useUsersTenantFilter !== false) {\n if (!adminUsersCollection.admin) {\n adminUsersCollection.admin = {}\n }\n\n const baseFilter =\n adminUsersCollection.admin?.baseFilter ?? adminUsersCollection.admin?.baseListFilter\n adminUsersCollection.admin.baseFilter = combineFilters({\n baseFilter,\n customFilter: (args) =>\n filterDocumentsByTenants({\n filterFieldName: `${tenantsArrayFieldName}.${tenantsArrayTenantFieldName}`,\n req: args.req,\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n tenantsCollectionSlug,\n }),\n })\n }\n\n let tenantCollection: CollectionConfig | undefined\n\n const [collectionSlugs, globalCollectionSlugs] = Object.keys(pluginConfig.collections).reduce<\n [string[], string[]]\n >(\n (acc, slug) => {\n if (pluginConfig?.collections?.[slug]?.isGlobal) {\n acc[1].push(slug)\n } else {\n acc[0].push(slug)\n }\n\n return acc\n },\n [[], []],\n )\n\n /**\n * Modify collections\n */\n incomingConfig.collections.forEach((collection) => {\n /**\n * Modify tenants collection\n */\n if (collection.slug === tenantsCollectionSlug) {\n tenantCollection = collection\n\n if (pluginConfig.useTenantsCollectionAccess !== false) {\n /**\n * Add access control constraint to tenants collection\n * - constrains access a users assigned tenants\n */\n addCollectionAccess({\n adminUsersSlug: adminUsersCollection.slug,\n collection,\n fieldName: 'id',\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n userHasAccessToAllTenants,\n })\n }\n\n if (pluginConfig.useTenantsListFilter !== false) {\n /**\n * Add list filter to tenants collection\n * - filter by selected tenant\n */\n if (!collection.admin) {\n collection.admin = {}\n }\n\n const baseFilter = collection.admin?.baseFilter ?? collection.admin?.baseListFilter\n collection.admin.baseFilter = combineFilters({\n baseFilter,\n customFilter: (args) =>\n filterDocumentsByTenants({\n filterFieldName: 'id',\n req: args.req,\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n tenantsCollectionSlug,\n }),\n })\n }\n\n if (pluginConfig.cleanupAfterTenantDelete !== false) {\n /**\n * Add cleanup logic when tenant is deleted\n * - delete documents related to tenant\n * - remove tenant from users\n */\n addTenantCleanup({\n collection,\n enabledSlugs: [...collectionSlugs, ...globalCollectionSlugs],\n tenantFieldName,\n tenantsCollectionSlug,\n usersSlug: adminUsersCollection.slug,\n usersTenantsArrayFieldName: tenantsArrayFieldName,\n usersTenantsArrayTenantFieldName: tenantsArrayTenantFieldName,\n })\n }\n\n /**\n * Add custom tenant field that watches and dispatches updates to the selector\n */\n collection.fields.push({\n name: '_watchTenant',\n type: 'ui',\n admin: {\n components: {\n Field: {\n path: '@payloadcms/plugin-multi-tenant/client#WatchTenantCollection',\n },\n },\n },\n })\n\n collection.endpoints = [\n ...(collection.endpoints || []),\n getTenantOptionsEndpoint<ConfigType>({\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n tenantsCollectionSlug,\n useAsTitle: tenantCollection.admin?.useAsTitle || 'id',\n userHasAccessToAllTenants,\n }),\n ]\n } else if (pluginConfig.collections?.[collection.slug]) {\n const isGlobal = Boolean(pluginConfig.collections[collection.slug]?.isGlobal)\n\n if (isGlobal) {\n collection.disableDuplicate = true\n }\n\n /**\n * Modify enabled collections\n */\n addFilterOptionsToFields({\n config: incomingConfig,\n fields: collection.fields,\n tenantEnabledCollectionSlugs: collectionSlugs,\n tenantEnabledGlobalSlugs: globalCollectionSlugs,\n tenantFieldName,\n tenantsCollectionSlug,\n })\n\n const overrides = pluginConfig.collections[collection.slug]?.tenantFieldOverrides\n ? pluginConfig.collections[collection.slug]?.tenantFieldOverrides\n : pluginConfig.tenantField || {}\n\n /**\n * Add tenant field to enabled collections\n */\n collection.fields.splice(\n 0,\n 0,\n tenantField({\n name: tenantFieldName,\n debug: pluginConfig.debug,\n overrides,\n tenantsCollectionSlug,\n unique: isGlobal,\n }),\n )\n\n const { useBaseFilter, useBaseListFilter } = pluginConfig.collections[collection.slug] || {}\n\n if (useBaseFilter ?? useBaseListFilter ?? true) {\n /**\n * Add list filter to enabled collections\n * - filters results by selected tenant\n */\n if (!collection.admin) {\n collection.admin = {}\n }\n\n const baseFilter = collection.admin?.baseFilter ?? collection.admin?.baseListFilter\n collection.admin.baseFilter = combineFilters({\n baseFilter,\n customFilter: (args) =>\n filterDocumentsByTenants({\n filterFieldName: tenantFieldName,\n req: args.req,\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n tenantsCollectionSlug,\n }),\n })\n }\n\n if (pluginConfig.collections[collection.slug]?.useTenantAccess !== false) {\n /**\n * Add access control constraint to tenant enabled collection\n */\n addCollectionAccess({\n adminUsersSlug: adminUsersCollection.slug,\n collection,\n fieldName: tenantFieldName,\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n userHasAccessToAllTenants,\n })\n }\n }\n })\n\n if (!tenantCollection) {\n throw new Error(`Tenants collection not found with slug: ${tenantsCollectionSlug}`)\n }\n\n /**\n * Add TenantSelectionProvider to admin providers\n */\n incomingConfig.admin.components.providers.push({\n clientProps: {\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n tenantsCollectionSlug: tenantCollection.slug,\n useAsTitle: tenantCollection.admin?.useAsTitle || 'id',\n userHasAccessToAllTenants,\n },\n path: '@payloadcms/plugin-multi-tenant/rsc#TenantSelectionProvider',\n })\n\n /**\n * Add global redirect action\n */\n if (globalCollectionSlugs.length) {\n incomingConfig.admin.components.actions.push({\n path: '@payloadcms/plugin-multi-tenant/rsc#GlobalViewRedirect',\n serverProps: {\n basePath,\n globalSlugs: globalCollectionSlugs,\n tenantFieldName,\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n tenantsCollectionSlug,\n useAsTitle: tenantCollection.admin?.useAsTitle || 'id',\n userHasAccessToAllTenants,\n },\n })\n }\n\n /**\n * Add tenant selector to admin UI\n */\n incomingConfig.admin.components.beforeNavLinks.push({\n clientProps: {\n label: pluginConfig.tenantSelectorLabel || undefined,\n },\n path: '@payloadcms/plugin-multi-tenant/client#TenantSelector',\n })\n\n /**\n * Merge plugin translations\n */\n if (!incomingConfig.i18n) {\n incomingConfig.i18n = {}\n }\n Object.entries(translations).forEach(([locale, pluginI18nObject]) => {\n const typedLocale = locale as AcceptedLanguages\n if (!incomingConfig.i18n!.translations) {\n incomingConfig.i18n!.translations = {}\n }\n if (!(typedLocale in incomingConfig.i18n!.translations)) {\n incomingConfig.i18n!.translations[typedLocale] = {}\n }\n if (!('plugin-multi-tenant' in incomingConfig.i18n!.translations[typedLocale]!)) {\n ;(incomingConfig.i18n!.translations[typedLocale] as PluginDefaultTranslationsObject)[\n 'plugin-multi-tenant'\n ] = {} as PluginDefaultTranslationsObject['plugin-multi-tenant']\n }\n\n ;(incomingConfig.i18n!.translations[typedLocale] as PluginDefaultTranslationsObject)[\n 'plugin-multi-tenant'\n ] = {\n ...pluginI18nObject.translations['plugin-multi-tenant'],\n ...(pluginConfig.i18n?.translations?.[typedLocale] || {}),\n }\n })\n\n return incomingConfig\n }\n"],"names":["defaults","getTenantOptionsEndpoint","tenantField","tenantsArrayField","filterDocumentsByTenants","addTenantCleanup","translations","addCollectionAccess","addFilterOptionsToFields","combineFilters","multiTenantPlugin","pluginConfig","incomingConfig","enabled","userHasAccessToAllTenants","tenantsCollectionSlug","tenantsSlug","tenantCollectionSlug","tenantFieldName","name","tenantsArrayFieldName","arrayFieldName","tenantsArrayTenantFieldName","arrayTenantFieldName","basePath","admin","components","actions","beforeNavLinks","providers","collections","adminUsersCollection","find","slug","auth","user","Error","includeDefaultField","fields","push","adminUsersSlug","collection","fieldName","useUsersTenantFilter","baseFilter","baseListFilter","customFilter","args","filterFieldName","req","tenantCollection","collectionSlugs","globalCollectionSlugs","Object","keys","reduce","acc","isGlobal","forEach","useTenantsCollectionAccess","useTenantsListFilter","cleanupAfterTenantDelete","enabledSlugs","usersSlug","usersTenantsArrayFieldName","usersTenantsArrayTenantFieldName","type","Field","path","endpoints","useAsTitle","Boolean","disableDuplicate","config","tenantEnabledCollectionSlugs","tenantEnabledGlobalSlugs","overrides","tenantFieldOverrides","splice","debug","unique","useBaseFilter","useBaseListFilter","useTenantAccess","clientProps","length","serverProps","globalSlugs","label","tenantSelectorLabel","undefined","i18n","entries","locale","pluginI18nObject","typedLocale"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/ar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAElF,eAAO,MAAM,cAAc,EAAE,+BAO5B,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}
1
+ {"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/ar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAElF,eAAO,MAAM,cAAc,EAAE,+BAQ5B,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}
@@ -1,8 +1,9 @@
1
1
  export const arTranslations = {
2
2
  'plugin-multi-tenant': {
3
- 'confirm-tenant-switch--body': 'أنت على وشك تغيير الملكية من <0>{{fromTenant}}</0> إلى <0>{{toTenant}}</0>',
4
- 'confirm-tenant-switch--heading': 'تأكيد تغيير {{tenantLabel}}',
5
- 'field-assignedTentant-label': 'المستأجر المعين'
3
+ 'confirm-modal-tenant-switch--body': 'أنت على وشك تغيير الملكية من <0>{{fromTenant}}</0> إلى <0>{{toTenant}}</0>',
4
+ 'confirm-modal-tenant-switch--heading': 'تأكيد تغيير {{tenantLabel}}',
5
+ 'field-assignedTenant-label': 'المستأجر المعين',
6
+ 'nav-tenantSelector-label': 'المستأجر'
6
7
  }
7
8
  };
8
9
  export const ar = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/translations/languages/ar.ts"],"sourcesContent":["import type { PluginDefaultTranslationsObject, PluginLanguage } from '../types.js'\n\nexport const arTranslations: PluginDefaultTranslationsObject = {\n 'plugin-multi-tenant': {\n 'confirm-tenant-switch--body':\n 'أنت على وشك تغيير الملكية من <0>{{fromTenant}}</0> إلى <0>{{toTenant}}</0>',\n 'confirm-tenant-switch--heading': 'تأكيد تغيير {{tenantLabel}}',\n 'field-assignedTentant-label': 'المستأجر المعين',\n },\n}\n\nexport const ar: PluginLanguage = {\n dateFNSKey: 'ar',\n translations: arTranslations,\n}\n"],"names":["arTranslations","ar","dateFNSKey","translations"],"mappings":"AAEA,OAAO,MAAMA,iBAAkD;IAC7D,uBAAuB;QACrB,+BACE;QACF,kCAAkC;QAClC,+BAA+B;IACjC;AACF,EAAC;AAED,OAAO,MAAMC,KAAqB;IAChCC,YAAY;IACZC,cAAcH;AAChB,EAAC"}
1
+ {"version":3,"sources":["../../../src/translations/languages/ar.ts"],"sourcesContent":["import type { PluginDefaultTranslationsObject, PluginLanguage } from '../types.js'\n\nexport const arTranslations: PluginDefaultTranslationsObject = {\n 'plugin-multi-tenant': {\n 'confirm-modal-tenant-switch--body':\n 'أنت على وشك تغيير الملكية من <0>{{fromTenant}}</0> إلى <0>{{toTenant}}</0>',\n 'confirm-modal-tenant-switch--heading': 'تأكيد تغيير {{tenantLabel}}',\n 'field-assignedTenant-label': 'المستأجر المعين',\n 'nav-tenantSelector-label': 'المستأجر',\n },\n}\n\nexport const ar: PluginLanguage = {\n dateFNSKey: 'ar',\n translations: arTranslations,\n}\n"],"names":["arTranslations","ar","dateFNSKey","translations"],"mappings":"AAEA,OAAO,MAAMA,iBAAkD;IAC7D,uBAAuB;QACrB,qCACE;QACF,wCAAwC;QACxC,8BAA8B;QAC9B,4BAA4B;IAC9B;AACF,EAAC;AAED,OAAO,MAAMC,KAAqB;IAChCC,YAAY;IACZC,cAAcH;AAChB,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"az.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/az.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAElF,eAAO,MAAM,cAAc,EAAE,+BAO5B,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}
1
+ {"version":3,"file":"az.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/az.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAElF,eAAO,MAAM,cAAc,EAAE,+BAQ5B,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}
@@ -1,8 +1,9 @@
1
1
  export const azTranslations = {
2
2
  'plugin-multi-tenant': {
3
- 'confirm-tenant-switch--body': 'Siz <0>{{fromTenant}}</0> mülkiyyətini <0>{{toTenant}}</0> mülkiyyətinə dəyişdirəcəksiniz.',
4
- 'confirm-tenant-switch--heading': '{{tenantLabel}} dəyişikliyini təsdiqləyin',
5
- 'field-assignedTentant-label': 'Təyin edilmiş İcarəçi'
3
+ 'confirm-modal-tenant-switch--body': 'Siz <0>{{fromTenant}}</0>-dən <0>{{toTenant}}</0>-a mülkiyyəti dəyişməyə hazırlaşırsınız',
4
+ 'confirm-modal-tenant-switch--heading': '{{tenantLabel}} dəyişikliyini təsdiqləyin',
5
+ 'field-assignedTenant-label': 'Təyin edilmiş İcarəçi',
6
+ 'nav-tenantSelector-label': 'Kirayəçi'
6
7
  }
7
8
  };
8
9
  export const az = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/translations/languages/az.ts"],"sourcesContent":["import type { PluginDefaultTranslationsObject, PluginLanguage } from '../types.js'\n\nexport const azTranslations: PluginDefaultTranslationsObject = {\n 'plugin-multi-tenant': {\n 'confirm-tenant-switch--body':\n 'Siz <0>{{fromTenant}}</0> mülkiyyətini <0>{{toTenant}}</0> mülkiyyətinə dəyişdirəcəksiniz.',\n 'confirm-tenant-switch--heading': '{{tenantLabel}} dəyişikliyini təsdiqləyin',\n 'field-assignedTentant-label': 'Təyin edilmiş İcarəçi',\n },\n}\n\nexport const az: PluginLanguage = {\n dateFNSKey: 'az',\n translations: azTranslations,\n}\n"],"names":["azTranslations","az","dateFNSKey","translations"],"mappings":"AAEA,OAAO,MAAMA,iBAAkD;IAC7D,uBAAuB;QACrB,+BACE;QACF,kCAAkC;QAClC,+BAA+B;IACjC;AACF,EAAC;AAED,OAAO,MAAMC,KAAqB;IAChCC,YAAY;IACZC,cAAcH;AAChB,EAAC"}
1
+ {"version":3,"sources":["../../../src/translations/languages/az.ts"],"sourcesContent":["import type { PluginDefaultTranslationsObject, PluginLanguage } from '../types.js'\n\nexport const azTranslations: PluginDefaultTranslationsObject = {\n 'plugin-multi-tenant': {\n 'confirm-modal-tenant-switch--body':\n 'Siz <0>{{fromTenant}}</0>-dən <0>{{toTenant}}</0>-a mülkiyyəti dəyişməyə hazırlaşırsınız',\n 'confirm-modal-tenant-switch--heading': '{{tenantLabel}} dəyişikliyini təsdiqləyin',\n 'field-assignedTenant-label': 'Təyin edilmiş İcarəçi',\n 'nav-tenantSelector-label': 'Kirayəçi',\n },\n}\n\nexport const az: PluginLanguage = {\n dateFNSKey: 'az',\n translations: azTranslations,\n}\n"],"names":["azTranslations","az","dateFNSKey","translations"],"mappings":"AAEA,OAAO,MAAMA,iBAAkD;IAC7D,uBAAuB;QACrB,qCACE;QACF,wCAAwC;QACxC,8BAA8B;QAC9B,4BAA4B;IAC9B;AACF,EAAC;AAED,OAAO,MAAMC,KAAqB;IAChCC,YAAY;IACZC,cAAcH;AAChB,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bg.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/bg.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAElF,eAAO,MAAM,cAAc,EAAE,+BAO5B,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}
1
+ {"version":3,"file":"bg.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/bg.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAElF,eAAO,MAAM,cAAc,EAAE,+BAQ5B,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}
@@ -1,8 +1,9 @@
1
1
  export const bgTranslations = {
2
2
  'plugin-multi-tenant': {
3
- 'confirm-tenant-switch--body': 'Предстои да промените собствеността от <0>{{fromTenant}}</0> на <0>{{toTenant}}</0>',
4
- 'confirm-tenant-switch--heading': 'Потвърдете промяната на {{tenantLabel}}',
5
- 'field-assignedTentant-label': 'Назначен наемател'
3
+ 'confirm-modal-tenant-switch--body': 'Предстои да промените собствеността от <0>{{fromTenant}}</0> на <0>{{toTenant}}</0>',
4
+ 'confirm-modal-tenant-switch--heading': 'Потвърждаване на промяна в {{tenantLabel}}',
5
+ 'field-assignedTenant-label': 'Назначен наемател',
6
+ 'nav-tenantSelector-label': 'Потребител'
6
7
  }
7
8
  };
8
9
  export const bg = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/translations/languages/bg.ts"],"sourcesContent":["import type { PluginDefaultTranslationsObject, PluginLanguage } from '../types.js'\n\nexport const bgTranslations: PluginDefaultTranslationsObject = {\n 'plugin-multi-tenant': {\n 'confirm-tenant-switch--body':\n 'Предстои да промените собствеността от <0>{{fromTenant}}</0> на <0>{{toTenant}}</0>',\n 'confirm-tenant-switch--heading': 'Потвърдете промяната на {{tenantLabel}}',\n 'field-assignedTentant-label': 'Назначен наемател',\n },\n}\n\nexport const bg: PluginLanguage = {\n dateFNSKey: 'bg',\n translations: bgTranslations,\n}\n"],"names":["bgTranslations","bg","dateFNSKey","translations"],"mappings":"AAEA,OAAO,MAAMA,iBAAkD;IAC7D,uBAAuB;QACrB,+BACE;QACF,kCAAkC;QAClC,+BAA+B;IACjC;AACF,EAAC;AAED,OAAO,MAAMC,KAAqB;IAChCC,YAAY;IACZC,cAAcH;AAChB,EAAC"}
1
+ {"version":3,"sources":["../../../src/translations/languages/bg.ts"],"sourcesContent":["import type { PluginDefaultTranslationsObject, PluginLanguage } from '../types.js'\n\nexport const bgTranslations: PluginDefaultTranslationsObject = {\n 'plugin-multi-tenant': {\n 'confirm-modal-tenant-switch--body':\n 'Предстои да промените собствеността от <0>{{fromTenant}}</0> на <0>{{toTenant}}</0>',\n 'confirm-modal-tenant-switch--heading': 'Потвърждаване на промяна в {{tenantLabel}}',\n 'field-assignedTenant-label': 'Назначен наемател',\n 'nav-tenantSelector-label': 'Потребител',\n },\n}\n\nexport const bg: PluginLanguage = {\n dateFNSKey: 'bg',\n translations: bgTranslations,\n}\n"],"names":["bgTranslations","bg","dateFNSKey","translations"],"mappings":"AAEA,OAAO,MAAMA,iBAAkD;IAC7D,uBAAuB;QACrB,qCACE;QACF,wCAAwC;QACxC,8BAA8B;QAC9B,4BAA4B;IAC9B;AACF,EAAC;AAED,OAAO,MAAMC,KAAqB;IAChCC,YAAY;IACZC,cAAcH;AAChB,EAAC"}
@@ -0,0 +1,4 @@
1
+ import type { PluginDefaultTranslationsObject, PluginLanguage } from '../types.js';
2
+ export declare const bnBdTranslations: PluginDefaultTranslationsObject;
3
+ export declare const bnBd: PluginLanguage;
4
+ //# sourceMappingURL=bnBd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bnBd.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/bnBd.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAElF,eAAO,MAAM,gBAAgB,EAAE,+BAQ9B,CAAA;AAED,eAAO,MAAM,IAAI,EAAE,cAGlB,CAAA"}
@@ -0,0 +1,14 @@
1
+ export const bnBdTranslations = {
2
+ 'plugin-multi-tenant': {
3
+ 'confirm-modal-tenant-switch--body': 'আপনি <0>{{fromTenant}}</0> থেকে <0>{{toTenant}}</0> তে মালিকানা পরিবর্তন করতে চলেছেন।',
4
+ 'confirm-modal-tenant-switch--heading': '{{tenantLabel}} পরিবর্তন নিশ্চিত করুন',
5
+ 'field-assignedTenant-label': 'নির্ধারিত টেনেন্ট',
6
+ 'nav-tenantSelector-label': 'ভাড়াটিয়া'
7
+ }
8
+ };
9
+ export const bnBd = {
10
+ dateFNSKey: 'bn-BD',
11
+ translations: bnBdTranslations
12
+ };
13
+
14
+ //# sourceMappingURL=bnBd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/translations/languages/bnBd.ts"],"sourcesContent":["import type { PluginDefaultTranslationsObject, PluginLanguage } from '../types.js'\n\nexport const bnBdTranslations: PluginDefaultTranslationsObject = {\n 'plugin-multi-tenant': {\n 'confirm-modal-tenant-switch--body':\n 'আপনি <0>{{fromTenant}}</0> থেকে <0>{{toTenant}}</0> তে মালিকানা পরিবর্তন করতে চলেছেন।',\n 'confirm-modal-tenant-switch--heading': '{{tenantLabel}} পরিবর্তন নিশ্চিত করুন',\n 'field-assignedTenant-label': 'নির্ধারিত টেনেন্ট',\n 'nav-tenantSelector-label': 'ভাড়াটিয়া',\n },\n}\n\nexport const bnBd: PluginLanguage = {\n dateFNSKey: 'bn-BD',\n translations: bnBdTranslations,\n}\n"],"names":["bnBdTranslations","bnBd","dateFNSKey","translations"],"mappings":"AAEA,OAAO,MAAMA,mBAAoD;IAC/D,uBAAuB;QACrB,qCACE;QACF,wCAAwC;QACxC,8BAA8B;QAC9B,4BAA4B;IAC9B;AACF,EAAC;AAED,OAAO,MAAMC,OAAuB;IAClCC,YAAY;IACZC,cAAcH;AAChB,EAAC"}
@@ -0,0 +1,4 @@
1
+ import type { PluginDefaultTranslationsObject, PluginLanguage } from '../types.js';
2
+ export declare const bnInTranslations: PluginDefaultTranslationsObject;
3
+ export declare const bnIn: PluginLanguage;
4
+ //# sourceMappingURL=bnIn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bnIn.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/bnIn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAElF,eAAO,MAAM,gBAAgB,EAAE,+BAQ9B,CAAA;AAED,eAAO,MAAM,IAAI,EAAE,cAGlB,CAAA"}
@@ -0,0 +1,14 @@
1
+ export const bnInTranslations = {
2
+ 'plugin-multi-tenant': {
3
+ 'confirm-modal-tenant-switch--body': 'আপনি স্বত্বাধিকার পরিবর্তন করতে চলেছেন <0>{{fromTenant}}</0> থেকে <0>{{toTenant}}</0> এ।',
4
+ 'confirm-modal-tenant-switch--heading': '{{tenantLabel}} পরিবর্তন নিশ্চিত করুন',
5
+ 'field-assignedTenant-label': 'নির্ধারিত টেনেন্ট',
6
+ 'nav-tenantSelector-label': 'ভাড়াটিয়া'
7
+ }
8
+ };
9
+ export const bnIn = {
10
+ dateFNSKey: 'bn-IN',
11
+ translations: bnInTranslations
12
+ };
13
+
14
+ //# sourceMappingURL=bnIn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/translations/languages/bnIn.ts"],"sourcesContent":["import type { PluginDefaultTranslationsObject, PluginLanguage } from '../types.js'\n\nexport const bnInTranslations: PluginDefaultTranslationsObject = {\n 'plugin-multi-tenant': {\n 'confirm-modal-tenant-switch--body':\n 'আপনি স্বত্বাধিকার পরিবর্তন করতে চলেছেন <0>{{fromTenant}}</0> থেকে <0>{{toTenant}}</0> এ।',\n 'confirm-modal-tenant-switch--heading': '{{tenantLabel}} পরিবর্তন নিশ্চিত করুন',\n 'field-assignedTenant-label': 'নির্ধারিত টেনেন্ট',\n 'nav-tenantSelector-label': 'ভাড়াটিয়া',\n },\n}\n\nexport const bnIn: PluginLanguage = {\n dateFNSKey: 'bn-IN',\n translations: bnInTranslations,\n}\n"],"names":["bnInTranslations","bnIn","dateFNSKey","translations"],"mappings":"AAEA,OAAO,MAAMA,mBAAoD;IAC/D,uBAAuB;QACrB,qCACE;QACF,wCAAwC;QACxC,8BAA8B;QAC9B,4BAA4B;IAC9B;AACF,EAAC;AAED,OAAO,MAAMC,OAAuB;IAClCC,YAAY;IACZC,cAAcH;AAChB,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ca.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/ca.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAElF,eAAO,MAAM,cAAc,EAAE,+BAO5B,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}
1
+ {"version":3,"file":"ca.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/ca.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAElF,eAAO,MAAM,cAAc,EAAE,+BAQ5B,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}