@payloadcms/plugin-multi-tenant
Version:
Multi Tenant plugin for Payload
63 lines (62 loc) • 2.32 kB
JavaScript
export const getTenantOptions = async ({ payload, tenantsArrayFieldName, tenantsArrayTenantFieldName, tenantsCollectionSlug, useAsTitle, user, userHasAccessToAllTenants })=>{
let tenantOptions = [];
if (!user) {
return tenantOptions;
}
if (userHasAccessToAllTenants(user)) {
// If the user has access to all tenants get them from the DB
const isOrderable = payload.collections[tenantsCollectionSlug]?.config?.orderable || false;
const tenants = await payload.find({
collection: tenantsCollectionSlug,
depth: 0,
limit: 0,
overrideAccess: false,
select: {
[useAsTitle]: true,
...isOrderable && {
_order: true
}
},
sort: isOrderable ? '_order' : useAsTitle,
user
});
tenantOptions = tenants.docs.map((doc)=>({
label: String(doc[useAsTitle]),
value: doc.id
}));
} else {
const tenantsToPopulate = [];
(user[tenantsArrayFieldName] || []).map((tenantRow)=>{
const tenantField = tenantRow[tenantsArrayTenantFieldName] // tenants.tenant
;
if (typeof tenantField === 'string' || typeof tenantField === 'number') {
tenantsToPopulate.push(tenantField);
} else if (tenantField && typeof tenantField === 'object') {
tenantOptions.push({
label: String(tenantField[useAsTitle]),
value: tenantField.id
});
}
});
if (tenantsToPopulate.length > 0) {
const populatedTenants = await payload.find({
collection: tenantsCollectionSlug,
depth: 0,
limit: 0,
overrideAccess: false,
user,
where: {
id: {
in: tenantsToPopulate
}
}
});
tenantOptions = populatedTenants.docs.map((doc)=>({
label: String(doc[useAsTitle]),
value: doc.id
}));
}
}
return tenantOptions;
};
//# sourceMappingURL=getTenantOptions.js.map