@payloadcms/plugin-multi-tenant 3.53.0-internal.2dadf5b → 3.53.0
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.
- package/dist/components/TenantField/index.client.d.ts.map +1 -1
- package/dist/components/TenantField/index.client.js +139 -55
- package/dist/components/TenantField/index.client.js.map +1 -1
- package/dist/components/TenantField/index.scss +47 -13
- package/dist/components/TenantSelector/index.client.d.ts +10 -0
- package/dist/components/TenantSelector/index.client.d.ts.map +1 -0
- package/dist/components/TenantSelector/index.client.js +85 -0
- package/dist/components/TenantSelector/index.client.js.map +1 -0
- package/dist/components/TenantSelector/index.d.ts +8 -7
- package/dist/components/TenantSelector/index.d.ts.map +1 -1
- package/dist/components/TenantSelector/index.js +9 -128
- package/dist/components/TenantSelector/index.js.map +1 -1
- package/dist/exports/client.d.ts +0 -1
- package/dist/exports/client.d.ts.map +1 -1
- package/dist/exports/client.js +0 -1
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/rsc.d.ts +1 -0
- package/dist/exports/rsc.d.ts.map +1 -1
- package/dist/exports/rsc.js +1 -0
- package/dist/exports/rsc.js.map +1 -1
- package/dist/fields/tenantField/index.d.ts +3 -1
- package/dist/fields/tenantField/index.d.ts.map +1 -1
- package/dist/fields/tenantField/index.js +61 -30
- package/dist/fields/tenantField/index.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +78 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/TenantSelectionProvider/index.client.d.ts.map +1 -1
- package/dist/providers/TenantSelectionProvider/index.client.js +83 -38
- package/dist/providers/TenantSelectionProvider/index.client.js.map +1 -1
- package/dist/translations/languages/zhTw.js +1 -1
- package/dist/translations/languages/zhTw.js.map +1 -1
- package/dist/utilities/addCollectionAccess.d.ts.map +1 -1
- package/dist/utilities/addCollectionAccess.js +0 -1
- package/dist/utilities/addCollectionAccess.js.map +1 -1
- package/dist/utilities/addFilterOptionsToFields.d.ts +3 -1
- package/dist/utilities/addFilterOptionsToFields.d.ts.map +1 -1
- package/dist/utilities/addFilterOptionsToFields.js +21 -35
- package/dist/utilities/addFilterOptionsToFields.js.map +1 -1
- package/dist/utilities/generateCookie.d.ts +26 -0
- package/dist/utilities/generateCookie.d.ts.map +1 -0
- package/dist/utilities/generateCookie.js +61 -0
- package/dist/utilities/generateCookie.js.map +1 -0
- package/dist/utilities/withTenantAccess.d.ts +1 -2
- package/dist/utilities/withTenantAccess.d.ts.map +1 -1
- package/dist/utilities/withTenantAccess.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/TenantSelector/index.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../src/components/TenantSelector/index.tsx"],"sourcesContent":["import type { ServerProps } from 'payload'\n\nimport type { MultiTenantPluginConfig } from '../../types.js'\n\nimport { TenantSelectorClient } from './index.client.js'\n\ntype Props = {\n enabledSlugs: string[]\n label: MultiTenantPluginConfig['tenantSelectorLabel']\n} & ServerProps\nexport const TenantSelector = (props: Props) => {\n const { enabledSlugs, label, params, viewType } = props\n const enabled = Boolean(\n params?.segments &&\n Array.isArray(params.segments) &&\n params.segments[0] === 'collections' &&\n params.segments[1] &&\n enabledSlugs.includes(params.segments[1]),\n )\n\n return <TenantSelectorClient disabled={!enabled} label={label} viewType={viewType} />\n}\n"],"names":["TenantSelectorClient","TenantSelector","props","enabledSlugs","label","params","viewType","enabled","Boolean","segments","Array","isArray","includes","disabled"],"mappings":";AAIA,SAASA,oBAAoB,QAAQ,oBAAmB;AAMxD,OAAO,MAAMC,iBAAiB,CAACC;IAC7B,MAAM,EAAEC,YAAY,EAAEC,KAAK,EAAEC,MAAM,EAAEC,QAAQ,EAAE,GAAGJ;IAClD,MAAMK,UAAUC,QACdH,QAAQI,YACNC,MAAMC,OAAO,CAACN,OAAOI,QAAQ,KAC7BJ,OAAOI,QAAQ,CAAC,EAAE,KAAK,iBACvBJ,OAAOI,QAAQ,CAAC,EAAE,IAClBN,aAAaS,QAAQ,CAACP,OAAOI,QAAQ,CAAC,EAAE;IAG5C,qBAAO,KAACT;QAAqBa,UAAU,CAACN;QAASH,OAAOA;QAAOE,UAAUA;;AAC3E,EAAC"}
|
package/dist/exports/client.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export { TenantField } from '../components/TenantField/index.client.js';
|
|
2
|
-
export { TenantSelector } from '../components/TenantSelector/index.js';
|
|
3
2
|
export { WatchTenantCollection } from '../components/WatchTenantCollection/index.js';
|
|
4
3
|
export { useTenantSelection } from '../providers/TenantSelectionProvider/index.client.js';
|
|
5
4
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAA;AACvE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAA;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAA;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sDAAsD,CAAA"}
|
package/dist/exports/client.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export { TenantField } from '../components/TenantField/index.client.js';
|
|
2
|
-
export { TenantSelector } from '../components/TenantSelector/index.js';
|
|
3
2
|
export { WatchTenantCollection } from '../components/WatchTenantCollection/index.js';
|
|
4
3
|
export { useTenantSelection } from '../providers/TenantSelectionProvider/index.client.js';
|
|
5
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/exports/client.ts"],"sourcesContent":["export { TenantField } from '../components/TenantField/index.client.js'\nexport {
|
|
1
|
+
{"version":3,"sources":["../../src/exports/client.ts"],"sourcesContent":["export { TenantField } from '../components/TenantField/index.client.js'\nexport { WatchTenantCollection } from '../components/WatchTenantCollection/index.js'\nexport { useTenantSelection } from '../providers/TenantSelectionProvider/index.client.js'\n"],"names":["TenantField","WatchTenantCollection","useTenantSelection"],"mappings":"AAAA,SAASA,WAAW,QAAQ,4CAA2C;AACvE,SAASC,qBAAqB,QAAQ,+CAA8C;AACpF,SAASC,kBAAkB,QAAQ,uDAAsD"}
|
package/dist/exports/rsc.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { GlobalViewRedirect } from '../components/GlobalViewRedirect/index.js';
|
|
2
|
+
export { TenantSelector } from '../components/TenantSelector/index.js';
|
|
2
3
|
export { TenantSelectionProvider } from '../providers/TenantSelectionProvider/index.js';
|
|
3
4
|
//# sourceMappingURL=rsc.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsc.d.ts","sourceRoot":"","sources":["../../src/exports/rsc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAA;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAA"}
|
|
1
|
+
{"version":3,"file":"rsc.d.ts","sourceRoot":"","sources":["../../src/exports/rsc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAA;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAA"}
|
package/dist/exports/rsc.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { GlobalViewRedirect } from '../components/GlobalViewRedirect/index.js';
|
|
2
|
+
export { TenantSelector } from '../components/TenantSelector/index.js';
|
|
2
3
|
export { TenantSelectionProvider } from '../providers/TenantSelectionProvider/index.js';
|
|
3
4
|
|
|
4
5
|
//# sourceMappingURL=rsc.js.map
|
package/dist/exports/rsc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/exports/rsc.ts"],"sourcesContent":["export { GlobalViewRedirect } from '../components/GlobalViewRedirect/index.js'\nexport { TenantSelectionProvider } from '../providers/TenantSelectionProvider/index.js'\n"],"names":["GlobalViewRedirect","TenantSelectionProvider"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,4CAA2C;AAC9E,SAASC,uBAAuB,QAAQ,gDAA+C"}
|
|
1
|
+
{"version":3,"sources":["../../src/exports/rsc.ts"],"sourcesContent":["export { GlobalViewRedirect } from '../components/GlobalViewRedirect/index.js'\nexport { TenantSelector } from '../components/TenantSelector/index.js'\nexport { TenantSelectionProvider } from '../providers/TenantSelectionProvider/index.js'\n"],"names":["GlobalViewRedirect","TenantSelector","TenantSelectionProvider"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,4CAA2C;AAC9E,SAASC,cAAc,QAAQ,wCAAuC;AACtE,SAASC,uBAAuB,QAAQ,gDAA+C"}
|
|
@@ -4,9 +4,11 @@ type Args = {
|
|
|
4
4
|
debug?: boolean;
|
|
5
5
|
name: string;
|
|
6
6
|
overrides?: RootTenantFieldConfigOverrides;
|
|
7
|
+
tenantsArrayFieldName: string;
|
|
8
|
+
tenantsArrayTenantFieldName: string;
|
|
7
9
|
tenantsCollectionSlug: string;
|
|
8
10
|
unique: boolean;
|
|
9
11
|
};
|
|
10
|
-
export declare const tenantField: ({ name, debug, overrides: _overrides, tenantsCollectionSlug, unique, }: Args) => SingleRelationshipField;
|
|
12
|
+
export declare const tenantField: ({ name, debug, overrides: _overrides, tenantsArrayFieldName, tenantsArrayTenantFieldName, tenantsCollectionSlug, unique, }: Args) => SingleRelationshipField;
|
|
11
13
|
export {};
|
|
12
14
|
//# 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,KAAK,EAAqC,uBAAuB,EAAE,MAAM,SAAS,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;AAEzF,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAA;AAwBpE,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,2BAA2B,EAAE,MAAM,CAAA;IACnC,qBAAqB,EAAE,MAAM,CAAA;IAC7B,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AACD,eAAO,MAAM,WAAW,+HAQrB,IAAI,KAAG,uBAkFT,CAAA"}
|
|
@@ -1,60 +1,91 @@
|
|
|
1
|
-
import { APIError } from 'payload';
|
|
2
1
|
import { defaults } from '../../defaults.js';
|
|
3
2
|
import { getCollectionIDType } from '../../utilities/getCollectionIDType.js';
|
|
4
3
|
import { getTenantFromCookie } from '../../utilities/getTenantFromCookie.js';
|
|
5
|
-
|
|
4
|
+
import { getUserTenantIDs } from '../../utilities/getUserTenantIDs.js';
|
|
5
|
+
const fieldValidation = (validateFunction)=>(value, options)=>{
|
|
6
|
+
if (validateFunction) {
|
|
7
|
+
const result = validateFunction(value, options);
|
|
8
|
+
if (result !== true) {
|
|
9
|
+
return result;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
if (!value) {
|
|
13
|
+
return options.req.t('validation:required');
|
|
14
|
+
}
|
|
15
|
+
return true;
|
|
16
|
+
};
|
|
17
|
+
export const tenantField = ({ name = defaults.tenantFieldName, debug, overrides: _overrides = {}, tenantsArrayFieldName = defaults.tenantsArrayFieldName, tenantsArrayTenantFieldName = defaults.tenantsArrayTenantFieldName, tenantsCollectionSlug = defaults.tenantCollectionSlug, unique })=>{
|
|
6
18
|
const { validate, ...overrides } = _overrides || {};
|
|
7
19
|
return {
|
|
8
20
|
...overrides || {},
|
|
9
21
|
name,
|
|
10
22
|
type: 'relationship',
|
|
11
|
-
access: overrides
|
|
23
|
+
access: overrides.access || {},
|
|
12
24
|
admin: {
|
|
13
25
|
allowCreate: false,
|
|
14
26
|
allowEdit: false,
|
|
15
27
|
disableListColumn: true,
|
|
16
28
|
disableListFilter: true,
|
|
17
|
-
|
|
29
|
+
position: 'sidebar',
|
|
30
|
+
...overrides.admin || {},
|
|
18
31
|
components: {
|
|
19
|
-
...overrides
|
|
32
|
+
...overrides.admin?.components || {},
|
|
20
33
|
Field: {
|
|
21
34
|
path: '@payloadcms/plugin-multi-tenant/client#TenantField',
|
|
22
|
-
...typeof overrides
|
|
35
|
+
...typeof overrides.admin?.components?.Field !== 'string' ? overrides.admin?.components?.Field || {} : {},
|
|
23
36
|
clientProps: {
|
|
24
|
-
...typeof overrides
|
|
37
|
+
...typeof overrides.admin?.components?.Field !== 'string' ? (overrides.admin?.components?.Field || {})?.clientProps : {},
|
|
25
38
|
debug,
|
|
26
39
|
unique
|
|
27
40
|
}
|
|
28
41
|
}
|
|
29
42
|
}
|
|
30
43
|
},
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
defaultValue: overrides.defaultValue || (async ({ req })=>{
|
|
45
|
+
const idType = getCollectionIDType({
|
|
46
|
+
collectionSlug: tenantsCollectionSlug,
|
|
47
|
+
payload: req.payload
|
|
48
|
+
});
|
|
49
|
+
const tenantFromCookie = getTenantFromCookie(req.headers, idType);
|
|
50
|
+
if (tenantFromCookie) {
|
|
51
|
+
const isValidTenant = await req.payload.count({
|
|
52
|
+
collection: tenantsCollectionSlug,
|
|
53
|
+
depth: 0,
|
|
54
|
+
overrideAccess: false,
|
|
55
|
+
req,
|
|
56
|
+
user: req.user,
|
|
57
|
+
where: {
|
|
58
|
+
id: {
|
|
59
|
+
equals: tenantFromCookie
|
|
44
60
|
}
|
|
45
|
-
throw new APIError('You must select a tenant', 400, null, true);
|
|
46
61
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
},
|
|
62
|
+
});
|
|
63
|
+
return isValidTenant ? tenantFromCookie : null;
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}),
|
|
67
|
+
filterOptions: overrides.filterOptions || (({ req })=>{
|
|
68
|
+
const userAssignedTenants = getUserTenantIDs(req.user, {
|
|
69
|
+
tenantsArrayFieldName,
|
|
70
|
+
tenantsArrayTenantFieldName
|
|
71
|
+
});
|
|
72
|
+
if (userAssignedTenants.length > 0) {
|
|
73
|
+
return {
|
|
74
|
+
id: {
|
|
75
|
+
in: userAssignedTenants
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
return true;
|
|
80
|
+
}),
|
|
81
|
+
hasMany: false,
|
|
52
82
|
index: true,
|
|
53
|
-
validate: validate || undefined,
|
|
54
|
-
// @ts-expect-error translations are not typed for this plugin
|
|
55
|
-
label: overrides?.label || (({ t })=>t('plugin-multi-tenant:field-assignedTenant-label')),
|
|
56
83
|
relationTo: tenantsCollectionSlug,
|
|
57
|
-
unique
|
|
84
|
+
unique,
|
|
85
|
+
// TODO: V4 - replace validation with required: true
|
|
86
|
+
validate: fieldValidation(validate),
|
|
87
|
+
// @ts-expect-error translations are not typed for this plugin
|
|
88
|
+
label: overrides.label || (({ t })=>t('plugin-multi-tenant:field-assignedTenant-label'))
|
|
58
89
|
};
|
|
59
90
|
};
|
|
60
91
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/tenantField/index.ts"],"sourcesContent":["import type { RelationshipFieldSingleValidation, SingleRelationshipField } from 'payload'\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/tenantField/index.ts"],"sourcesContent":["import type { RelationshipFieldSingleValidation, SingleRelationshipField } 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'\nimport { getUserTenantIDs } from '../../utilities/getUserTenantIDs.js'\n\nconst fieldValidation =\n (validateFunction?: RelationshipFieldSingleValidation): RelationshipFieldSingleValidation =>\n (value, options) => {\n if (validateFunction) {\n const result = validateFunction(value, options)\n if (result !== true) {\n return result\n }\n }\n\n if (!value) {\n return options.req.t('validation:required')\n }\n\n return true\n }\n\ntype Args = {\n debug?: boolean\n name: string\n overrides?: RootTenantFieldConfigOverrides\n tenantsArrayFieldName: string\n tenantsArrayTenantFieldName: string\n tenantsCollectionSlug: string\n unique: boolean\n}\nexport const tenantField = ({\n name = defaults.tenantFieldName,\n debug,\n overrides: _overrides = {},\n tenantsArrayFieldName = defaults.tenantsArrayFieldName,\n tenantsArrayTenantFieldName = defaults.tenantsArrayTenantFieldName,\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 position: 'sidebar',\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 defaultValue:\n overrides.defaultValue ||\n (async ({ req }) => {\n const idType = getCollectionIDType({\n collectionSlug: tenantsCollectionSlug,\n payload: req.payload,\n })\n const tenantFromCookie = getTenantFromCookie(req.headers, idType)\n if (tenantFromCookie) {\n const isValidTenant = await req.payload.count({\n collection: tenantsCollectionSlug,\n depth: 0,\n overrideAccess: false,\n req,\n user: req.user,\n where: {\n id: {\n equals: tenantFromCookie,\n },\n },\n })\n return isValidTenant ? tenantFromCookie : null\n }\n return null\n }),\n filterOptions:\n overrides.filterOptions ||\n (({ req }) => {\n const userAssignedTenants = getUserTenantIDs(req.user, {\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n })\n if (userAssignedTenants.length > 0) {\n return {\n id: {\n in: userAssignedTenants,\n },\n }\n }\n\n return true\n }),\n hasMany: false,\n index: true,\n relationTo: tenantsCollectionSlug,\n unique,\n // TODO: V4 - replace validation with required: true\n validate: fieldValidation(validate as RelationshipFieldSingleValidation),\n // @ts-expect-error translations are not typed for this plugin\n label: overrides.label || (({ t }) => t('plugin-multi-tenant:field-assignedTenant-label')),\n }\n}\n"],"names":["defaults","getCollectionIDType","getTenantFromCookie","getUserTenantIDs","fieldValidation","validateFunction","value","options","result","req","t","tenantField","name","tenantFieldName","debug","overrides","_overrides","tenantsArrayFieldName","tenantsArrayTenantFieldName","tenantsCollectionSlug","tenantCollectionSlug","unique","validate","type","access","admin","allowCreate","allowEdit","disableListColumn","disableListFilter","position","components","Field","path","clientProps","defaultValue","idType","collectionSlug","payload","tenantFromCookie","headers","isValidTenant","count","collection","depth","overrideAccess","user","where","id","equals","filterOptions","userAssignedTenants","length","in","hasMany","index","relationTo","label"],"mappings":"AAIA,SAASA,QAAQ,QAAQ,oBAAmB;AAC5C,SAASC,mBAAmB,QAAQ,yCAAwC;AAC5E,SAASC,mBAAmB,QAAQ,yCAAwC;AAC5E,SAASC,gBAAgB,QAAQ,sCAAqC;AAEtE,MAAMC,kBACJ,CAACC,mBACD,CAACC,OAAOC;QACN,IAAIF,kBAAkB;YACpB,MAAMG,SAASH,iBAAiBC,OAAOC;YACvC,IAAIC,WAAW,MAAM;gBACnB,OAAOA;YACT;QACF;QAEA,IAAI,CAACF,OAAO;YACV,OAAOC,QAAQE,GAAG,CAACC,CAAC,CAAC;QACvB;QAEA,OAAO;IACT;AAWF,OAAO,MAAMC,cAAc,CAAC,EAC1BC,OAAOZ,SAASa,eAAe,EAC/BC,KAAK,EACLC,WAAWC,aAAa,CAAC,CAAC,EAC1BC,wBAAwBjB,SAASiB,qBAAqB,EACtDC,8BAA8BlB,SAASkB,2BAA2B,EAClEC,wBAAwBnB,SAASoB,oBAAoB,EACrDC,MAAM,EACD;IACL,MAAM,EAAEC,QAAQ,EAAE,GAAGP,WAAW,GAAGC,cAAc,CAAC;IAClD,OAAO;QACL,GAAID,aAAa,CAAC,CAAC;QACnBH;QACAW,MAAM;QACNC,QAAQT,UAAUS,MAAM,IAAI,CAAC;QAC7BC,OAAO;YACLC,aAAa;YACbC,WAAW;YACXC,mBAAmB;YACnBC,mBAAmB;YACnBC,UAAU;YACV,GAAIf,UAAUU,KAAK,IAAI,CAAC,CAAC;YACzBM,YAAY;gBACV,GAAIhB,UAAUU,KAAK,EAAEM,cAAc,CAAC,CAAC;gBACrCC,OAAO;oBACLC,MAAM;oBACN,GAAI,OAAOlB,UAAUU,KAAK,EAAEM,YAAYC,UAAU,WAC9CjB,UAAUU,KAAK,EAAEM,YAAYC,SAAS,CAAC,IACvC,CAAC,CAAC;oBACNE,aAAa;wBACX,GAAI,OAAOnB,UAAUU,KAAK,EAAEM,YAAYC,UAAU,WAC7CjB,CAAAA,UAAUU,KAAK,EAAEM,YAAYC,SAAS,CAAC,CAAA,GAAIE,cAC5C,CAAC,CAAC;wBACNpB;wBACAO;oBACF;gBACF;YACF;QACF;QACAc,cACEpB,UAAUoB,YAAY,IACrB,CAAA,OAAO,EAAE1B,GAAG,EAAE;YACb,MAAM2B,SAASnC,oBAAoB;gBACjCoC,gBAAgBlB;gBAChBmB,SAAS7B,IAAI6B,OAAO;YACtB;YACA,MAAMC,mBAAmBrC,oBAAoBO,IAAI+B,OAAO,EAAEJ;YAC1D,IAAIG,kBAAkB;gBACpB,MAAME,gBAAgB,MAAMhC,IAAI6B,OAAO,CAACI,KAAK,CAAC;oBAC5CC,YAAYxB;oBACZyB,OAAO;oBACPC,gBAAgB;oBAChBpC;oBACAqC,MAAMrC,IAAIqC,IAAI;oBACdC,OAAO;wBACLC,IAAI;4BACFC,QAAQV;wBACV;oBACF;gBACF;gBACA,OAAOE,gBAAgBF,mBAAmB;YAC5C;YACA,OAAO;QACT,CAAA;QACFW,eACEnC,UAAUmC,aAAa,IACtB,CAAA,CAAC,EAAEzC,GAAG,EAAE;YACP,MAAM0C,sBAAsBhD,iBAAiBM,IAAIqC,IAAI,EAAE;gBACrD7B;gBACAC;YACF;YACA,IAAIiC,oBAAoBC,MAAM,GAAG,GAAG;gBAClC,OAAO;oBACLJ,IAAI;wBACFK,IAAIF;oBACN;gBACF;YACF;YAEA,OAAO;QACT,CAAA;QACFG,SAAS;QACTC,OAAO;QACPC,YAAYrC;QACZE;QACA,oDAAoD;QACpDC,UAAUlB,gBAAgBkB;QAC1B,8DAA8D;QAC9DmC,OAAO1C,UAAU0C,KAAK,IAAK,CAAA,CAAC,EAAE/C,CAAC,EAAE,GAAKA,EAAE,iDAAgD;IAC1F;AACF,EAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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,MAodzB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
1
2
|
import { defaults } from './defaults.js';
|
|
2
3
|
import { getTenantOptionsEndpoint } from './endpoints/getTenantOptionsEndpoint.js';
|
|
3
4
|
import { tenantField } from './fields/tenantField/index.js';
|
|
@@ -102,6 +103,63 @@ export const multiTenantPlugin = (pluginConfig)=>(incomingConfig)=>{
|
|
|
102
103
|
[],
|
|
103
104
|
[]
|
|
104
105
|
]);
|
|
106
|
+
// used to validate enabled collection slugs
|
|
107
|
+
const multiTenantCollectionsFound = [];
|
|
108
|
+
/**
|
|
109
|
+
* The folders collection is added AFTER the plugin is initialized
|
|
110
|
+
* so if they added the folder slug to the plugin collections,
|
|
111
|
+
* we can assume that they have folders enabled
|
|
112
|
+
*/ const foldersSlug = incomingConfig.folders ? incomingConfig.folders.slug || 'payload-folders' : 'payload-folders';
|
|
113
|
+
if (collectionSlugs.includes(foldersSlug)) {
|
|
114
|
+
multiTenantCollectionsFound.push(foldersSlug);
|
|
115
|
+
const overrides = pluginConfig.collections[foldersSlug]?.tenantFieldOverrides ? pluginConfig.collections[foldersSlug]?.tenantFieldOverrides : pluginConfig.tenantField || {};
|
|
116
|
+
incomingConfig.folders = incomingConfig.folders || {};
|
|
117
|
+
incomingConfig.folders.collectionOverrides = incomingConfig.folders.collectionOverrides || [];
|
|
118
|
+
incomingConfig.folders.collectionOverrides.push(({ collection })=>{
|
|
119
|
+
/**
|
|
120
|
+
* Add tenant field to enabled collections
|
|
121
|
+
*/ const folderTenantField = tenantField({
|
|
122
|
+
...pluginConfig?.tenantField || {},
|
|
123
|
+
name: tenantFieldName,
|
|
124
|
+
debug: pluginConfig.debug,
|
|
125
|
+
overrides,
|
|
126
|
+
tenantsArrayFieldName,
|
|
127
|
+
tenantsArrayTenantFieldName,
|
|
128
|
+
tenantsCollectionSlug,
|
|
129
|
+
unique: false
|
|
130
|
+
});
|
|
131
|
+
collection.fields.unshift(folderTenantField);
|
|
132
|
+
if (pluginConfig.collections[foldersSlug]?.useBaseListFilter !== false) {
|
|
133
|
+
/**
|
|
134
|
+
* Add list filter to enabled collections
|
|
135
|
+
* - filters results by selected tenant
|
|
136
|
+
*/ collection.admin = collection.admin || {};
|
|
137
|
+
collection.admin.baseFilter = combineFilters({
|
|
138
|
+
baseFilter: collection.admin?.baseFilter ?? collection.admin?.baseListFilter,
|
|
139
|
+
customFilter: (args)=>filterDocumentsByTenants({
|
|
140
|
+
filterFieldName: tenantFieldName,
|
|
141
|
+
req: args.req,
|
|
142
|
+
tenantsArrayFieldName,
|
|
143
|
+
tenantsArrayTenantFieldName,
|
|
144
|
+
tenantsCollectionSlug
|
|
145
|
+
})
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
if (pluginConfig.collections[foldersSlug]?.useTenantAccess !== false) {
|
|
149
|
+
/**
|
|
150
|
+
* Add access control constraint to tenant enabled folders collection
|
|
151
|
+
*/ addCollectionAccess({
|
|
152
|
+
adminUsersSlug: adminUsersCollection.slug,
|
|
153
|
+
collection,
|
|
154
|
+
fieldName: tenantFieldName,
|
|
155
|
+
tenantsArrayFieldName,
|
|
156
|
+
tenantsArrayTenantFieldName,
|
|
157
|
+
userHasAccessToAllTenants
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
return collection;
|
|
161
|
+
});
|
|
162
|
+
}
|
|
105
163
|
/**
|
|
106
164
|
* Modify collections
|
|
107
165
|
*/ incomingConfig.collections.forEach((collection)=>{
|
|
@@ -183,6 +241,7 @@ export const multiTenantPlugin = (pluginConfig)=>(incomingConfig)=>{
|
|
|
183
241
|
})
|
|
184
242
|
];
|
|
185
243
|
} else if (pluginConfig.collections?.[collection.slug]) {
|
|
244
|
+
multiTenantCollectionsFound.push(collection.slug);
|
|
186
245
|
const isGlobal = Boolean(pluginConfig.collections[collection.slug]?.isGlobal);
|
|
187
246
|
if (isGlobal) {
|
|
188
247
|
collection.disableDuplicate = true;
|
|
@@ -195,6 +254,8 @@ export const multiTenantPlugin = (pluginConfig)=>(incomingConfig)=>{
|
|
|
195
254
|
tenantEnabledCollectionSlugs: collectionSlugs,
|
|
196
255
|
tenantEnabledGlobalSlugs: globalCollectionSlugs,
|
|
197
256
|
tenantFieldName,
|
|
257
|
+
tenantsArrayFieldName,
|
|
258
|
+
tenantsArrayTenantFieldName,
|
|
198
259
|
tenantsCollectionSlug
|
|
199
260
|
});
|
|
200
261
|
const overrides = pluginConfig.collections[collection.slug]?.tenantFieldOverrides ? pluginConfig.collections[collection.slug]?.tenantFieldOverrides : pluginConfig.tenantField || {};
|
|
@@ -204,6 +265,8 @@ export const multiTenantPlugin = (pluginConfig)=>(incomingConfig)=>{
|
|
|
204
265
|
name: tenantFieldName,
|
|
205
266
|
debug: pluginConfig.debug,
|
|
206
267
|
overrides,
|
|
268
|
+
tenantsArrayFieldName,
|
|
269
|
+
tenantsArrayTenantFieldName,
|
|
207
270
|
tenantsCollectionSlug,
|
|
208
271
|
unique: isGlobal
|
|
209
272
|
}));
|
|
@@ -244,6 +307,14 @@ export const multiTenantPlugin = (pluginConfig)=>(incomingConfig)=>{
|
|
|
244
307
|
if (!tenantCollection) {
|
|
245
308
|
throw new Error(`Tenants collection not found with slug: ${tenantsCollectionSlug}`);
|
|
246
309
|
}
|
|
310
|
+
if (multiTenantCollectionsFound.length !== collectionSlugs.length + globalCollectionSlugs.length) {
|
|
311
|
+
const missingSlugs = [
|
|
312
|
+
...collectionSlugs,
|
|
313
|
+
...globalCollectionSlugs
|
|
314
|
+
].filter((slug)=>!multiTenantCollectionsFound.includes(slug));
|
|
315
|
+
// eslint-disable-next-line no-console
|
|
316
|
+
console.error(chalk.yellow.bold('WARNING (plugin-multi-tenant)'), 'missing collections', missingSlugs, 'try placing the multi-tenant plugin after other plugins.');
|
|
317
|
+
}
|
|
247
318
|
/**
|
|
248
319
|
* Add TenantSelectionProvider to admin providers
|
|
249
320
|
*/ incomingConfig.admin.components.providers.push({
|
|
@@ -277,9 +348,15 @@ export const multiTenantPlugin = (pluginConfig)=>(incomingConfig)=>{
|
|
|
277
348
|
* Add tenant selector to admin UI
|
|
278
349
|
*/ incomingConfig.admin.components.beforeNavLinks.push({
|
|
279
350
|
clientProps: {
|
|
351
|
+
enabledSlugs: [
|
|
352
|
+
...collectionSlugs,
|
|
353
|
+
...globalCollectionSlugs,
|
|
354
|
+
adminUsersCollection.slug,
|
|
355
|
+
tenantCollection.slug
|
|
356
|
+
],
|
|
280
357
|
label: pluginConfig.tenantSelectorLabel || undefined
|
|
281
358
|
},
|
|
282
|
-
path: '@payloadcms/plugin-multi-tenant/
|
|
359
|
+
path: '@payloadcms/plugin-multi-tenant/rsc#TenantSelector'
|
|
283
360
|
});
|
|
284
361
|
/**
|
|
285
362
|
* Merge plugin translations
|
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 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
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { AcceptedLanguages } from '@payloadcms/translations'\nimport type { CollectionConfig, Config } from 'payload'\n\nimport chalk from 'chalk'\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 // used to validate enabled collection slugs\n const multiTenantCollectionsFound: string[] = []\n\n /**\n * The folders collection is added AFTER the plugin is initialized\n * so if they added the folder slug to the plugin collections,\n * we can assume that they have folders enabled\n */\n const foldersSlug = incomingConfig.folders\n ? incomingConfig.folders.slug || 'payload-folders'\n : 'payload-folders'\n\n if (collectionSlugs.includes(foldersSlug)) {\n multiTenantCollectionsFound.push(foldersSlug)\n const overrides = pluginConfig.collections[foldersSlug]?.tenantFieldOverrides\n ? pluginConfig.collections[foldersSlug]?.tenantFieldOverrides\n : pluginConfig.tenantField || {}\n incomingConfig.folders = incomingConfig.folders || {}\n incomingConfig.folders.collectionOverrides = incomingConfig.folders.collectionOverrides || []\n incomingConfig.folders.collectionOverrides.push(({ collection }) => {\n /**\n * Add tenant field to enabled collections\n */\n const folderTenantField = tenantField({\n ...(pluginConfig?.tenantField || {}),\n name: tenantFieldName,\n debug: pluginConfig.debug,\n overrides,\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n tenantsCollectionSlug,\n unique: false,\n })\n collection.fields.unshift(folderTenantField)\n\n if (pluginConfig.collections[foldersSlug]?.useBaseListFilter !== false) {\n /**\n * Add list filter to enabled collections\n * - filters results by selected tenant\n */\n collection.admin = collection.admin || {}\n collection.admin.baseFilter = combineFilters({\n baseFilter: collection.admin?.baseFilter ?? collection.admin?.baseListFilter,\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[foldersSlug]?.useTenantAccess !== false) {\n /**\n * Add access control constraint to tenant enabled folders collection\n */\n addCollectionAccess({\n adminUsersSlug: adminUsersCollection.slug,\n collection,\n fieldName: tenantFieldName,\n tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\n userHasAccessToAllTenants,\n })\n }\n\n return collection\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 multiTenantCollectionsFound.push(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 tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\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 tenantsArrayFieldName,\n tenantsArrayTenantFieldName,\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 if (\n multiTenantCollectionsFound.length !==\n collectionSlugs.length + globalCollectionSlugs.length\n ) {\n const missingSlugs = [...collectionSlugs, ...globalCollectionSlugs].filter(\n (slug) => !multiTenantCollectionsFound.includes(slug),\n )\n // eslint-disable-next-line no-console\n console.error(\n chalk.yellow.bold('WARNING (plugin-multi-tenant)'),\n 'missing collections',\n missingSlugs,\n 'try placing the multi-tenant plugin after other plugins.',\n )\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 enabledSlugs: [\n ...collectionSlugs,\n ...globalCollectionSlugs,\n adminUsersCollection.slug,\n tenantCollection.slug,\n ],\n label: pluginConfig.tenantSelectorLabel || undefined,\n },\n path: '@payloadcms/plugin-multi-tenant/rsc#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":["chalk","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","multiTenantCollectionsFound","foldersSlug","folders","includes","overrides","tenantFieldOverrides","collectionOverrides","folderTenantField","debug","unique","unshift","useBaseListFilter","useTenantAccess","forEach","useTenantsCollectionAccess","useTenantsListFilter","cleanupAfterTenantDelete","enabledSlugs","usersSlug","usersTenantsArrayFieldName","usersTenantsArrayTenantFieldName","type","Field","path","endpoints","useAsTitle","Boolean","disableDuplicate","config","tenantEnabledCollectionSlugs","tenantEnabledGlobalSlugs","splice","useBaseFilter","length","missingSlugs","filter","console","error","yellow","bold","clientProps","serverProps","globalSlugs","label","tenantSelectorLabel","undefined","i18n","entries","locale","pluginI18nObject","typedLocale"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/providers/TenantSelectionProvider/index.client.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAI3C,OAAO,KAAwB,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/providers/TenantSelectionProvider/index.client.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAI3C,OAAO,KAAwB,MAAM,OAAO,CAAA;AAI5C,KAAK,WAAW,GAAG;IACjB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;OAEG;IACH,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB;;OAEG;IACH,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAC7C;;OAEG;IACH,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAA;IACtF;;OAEG;IACH,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;IAC1D;;;;;OAKG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;IACjF;;OAEG;IACH,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC;;OAEG;IACH,aAAa,EAAE,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;CACtE,CAAA;AAiCD,eAAO,MAAM,6BAA6B,6EAKvC;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,oBAAoB,EAAE,YAAY,EAAE,CAAA;IACpC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,qBAAqB,EAAE,MAAM,CAAA;CAC9B,sBAqKA,CAAA;AAED,eAAO,MAAM,kBAAkB,mBAA2B,CAAA"}
|