-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
Copy pathindex.ts
64 lines (61 loc) · 1.59 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import { type RelationshipField } from 'payload'
import { APIError } from 'payload'
import { defaults } from '../../defaults.js'
import { getCollectionIDType } from '../../utilities/getCollectionIDType.js'
import { getTenantFromCookie } from '../../utilities/getTenantFromCookie.js'
type Args = {
access?: RelationshipField['access']
debug?: boolean
name: string
tenantsCollectionSlug: string
unique: boolean
}
export const tenantField = ({
name = defaults.tenantFieldName,
access = undefined,
debug,
tenantsCollectionSlug = defaults.tenantCollectionSlug,
unique,
}: Args): RelationshipField => ({
name,
type: 'relationship',
access,
admin: {
allowCreate: false,
allowEdit: false,
components: {
Field: {
clientProps: {
debug,
unique,
},
path: '@payloadcms/plugin-multi-tenant/client#TenantField',
},
},
disableListColumn: true,
disableListFilter: true,
},
hasMany: false,
hooks: {
beforeChange: [
({ req, value }) => {
const idType = getCollectionIDType({
collectionSlug: tenantsCollectionSlug,
payload: req.payload,
})
if (!value) {
const tenantFromCookie = getTenantFromCookie(req.headers, idType)
if (tenantFromCookie) {
return tenantFromCookie
}
throw new APIError('You must select a tenant', 400, null, true)
}
return idType === 'number' ? parseFloat(value) : value
},
],
},
index: true,
label: 'Assigned Tenant',
relationTo: tenantsCollectionSlug,
unique,
})