@payloadcms/plugin-multi-tenant 3.57.0-internal.f26caed → 3.58.0-canary.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/AssignTenantFieldModal/index.client.d.ts +12 -0
- package/dist/components/AssignTenantFieldModal/index.client.d.ts.map +1 -0
- package/dist/components/AssignTenantFieldModal/index.client.js +133 -0
- package/dist/components/AssignTenantFieldModal/index.client.js.map +1 -0
- package/dist/components/AssignTenantFieldModal/index.scss +78 -0
- package/dist/components/TenantField/index.client.d.ts +1 -1
- package/dist/components/TenantField/index.client.d.ts.map +1 -1
- package/dist/components/TenantField/index.client.js +135 -110
- package/dist/components/TenantField/index.client.js.map +1 -1
- package/dist/components/TenantField/index.scss +4 -0
- package/dist/exports/client.d.ts +1 -0
- package/dist/exports/client.d.ts.map +1 -1
- package/dist/exports/client.js +1 -0
- package/dist/exports/client.js.map +1 -1
- package/dist/filters/filterDocumentsByTenants.d.ts +6 -1
- package/dist/filters/filterDocumentsByTenants.d.ts.map +1 -1
- package/dist/filters/filterDocumentsByTenants.js +2 -2
- package/dist/filters/filterDocumentsByTenants.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/translations/index.d.ts.map +1 -1
- package/dist/translations/index.js +2 -0
- package/dist/translations/index.js.map +1 -1
- package/dist/translations/languages/ar.d.ts.map +1 -1
- package/dist/translations/languages/ar.js +2 -2
- package/dist/translations/languages/ar.js.map +1 -1
- package/dist/translations/languages/az.d.ts.map +1 -1
- package/dist/translations/languages/az.js +2 -2
- package/dist/translations/languages/az.js.map +1 -1
- package/dist/translations/languages/bg.d.ts.map +1 -1
- package/dist/translations/languages/bg.js +2 -2
- package/dist/translations/languages/bg.js.map +1 -1
- package/dist/translations/languages/bnBd.d.ts.map +1 -1
- package/dist/translations/languages/bnBd.js +4 -4
- package/dist/translations/languages/bnBd.js.map +1 -1
- package/dist/translations/languages/bnIn.d.ts.map +1 -1
- package/dist/translations/languages/bnIn.js +3 -3
- package/dist/translations/languages/bnIn.js.map +1 -1
- package/dist/translations/languages/ca.d.ts.map +1 -1
- package/dist/translations/languages/ca.js +2 -2
- package/dist/translations/languages/ca.js.map +1 -1
- package/dist/translations/languages/cs.d.ts.map +1 -1
- package/dist/translations/languages/cs.js +2 -2
- package/dist/translations/languages/cs.js.map +1 -1
- package/dist/translations/languages/da.d.ts.map +1 -1
- package/dist/translations/languages/da.js +2 -2
- package/dist/translations/languages/da.js.map +1 -1
- package/dist/translations/languages/de.d.ts.map +1 -1
- package/dist/translations/languages/de.js +2 -2
- package/dist/translations/languages/de.js.map +1 -1
- package/dist/translations/languages/en.d.ts +2 -2
- package/dist/translations/languages/en.d.ts.map +1 -1
- package/dist/translations/languages/en.js +3 -3
- package/dist/translations/languages/en.js.map +1 -1
- package/dist/translations/languages/es.d.ts.map +1 -1
- package/dist/translations/languages/es.js +2 -2
- package/dist/translations/languages/es.js.map +1 -1
- package/dist/translations/languages/et.d.ts.map +1 -1
- package/dist/translations/languages/et.js +2 -2
- package/dist/translations/languages/et.js.map +1 -1
- package/dist/translations/languages/fa.d.ts.map +1 -1
- package/dist/translations/languages/fa.js +2 -2
- package/dist/translations/languages/fa.js.map +1 -1
- package/dist/translations/languages/fr.d.ts.map +1 -1
- package/dist/translations/languages/fr.js +2 -2
- package/dist/translations/languages/fr.js.map +1 -1
- package/dist/translations/languages/he.d.ts.map +1 -1
- package/dist/translations/languages/he.js +2 -2
- package/dist/translations/languages/he.js.map +1 -1
- package/dist/translations/languages/hr.d.ts.map +1 -1
- package/dist/translations/languages/hr.js +2 -2
- package/dist/translations/languages/hr.js.map +1 -1
- package/dist/translations/languages/hu.d.ts.map +1 -1
- package/dist/translations/languages/hu.js +2 -2
- package/dist/translations/languages/hu.js.map +1 -1
- package/dist/translations/languages/hy.d.ts.map +1 -1
- package/dist/translations/languages/hy.js +2 -2
- package/dist/translations/languages/hy.js.map +1 -1
- package/dist/translations/languages/id.d.ts.map +1 -1
- package/dist/translations/languages/id.js +3 -3
- package/dist/translations/languages/id.js.map +1 -1
- package/dist/translations/languages/is.d.ts +4 -0
- package/dist/translations/languages/is.d.ts.map +1 -0
- package/dist/translations/languages/is.js +14 -0
- package/dist/translations/languages/is.js.map +1 -0
- package/dist/translations/languages/it.d.ts.map +1 -1
- package/dist/translations/languages/it.js +2 -2
- package/dist/translations/languages/it.js.map +1 -1
- package/dist/translations/languages/ja.d.ts.map +1 -1
- package/dist/translations/languages/ja.js +2 -2
- package/dist/translations/languages/ja.js.map +1 -1
- package/dist/translations/languages/ko.d.ts.map +1 -1
- package/dist/translations/languages/ko.js +2 -2
- package/dist/translations/languages/ko.js.map +1 -1
- package/dist/translations/languages/lt.d.ts.map +1 -1
- package/dist/translations/languages/lt.js +2 -2
- package/dist/translations/languages/lt.js.map +1 -1
- package/dist/translations/languages/lv.d.ts.map +1 -1
- package/dist/translations/languages/lv.js +4 -4
- package/dist/translations/languages/lv.js.map +1 -1
- package/dist/translations/languages/my.d.ts.map +1 -1
- package/dist/translations/languages/my.js +2 -2
- package/dist/translations/languages/my.js.map +1 -1
- package/dist/translations/languages/nb.d.ts.map +1 -1
- package/dist/translations/languages/nb.js +4 -4
- package/dist/translations/languages/nb.js.map +1 -1
- package/dist/translations/languages/nl.d.ts.map +1 -1
- package/dist/translations/languages/nl.js +2 -2
- package/dist/translations/languages/nl.js.map +1 -1
- package/dist/translations/languages/pl.d.ts.map +1 -1
- package/dist/translations/languages/pl.js +2 -2
- package/dist/translations/languages/pl.js.map +1 -1
- package/dist/translations/languages/pt.d.ts.map +1 -1
- package/dist/translations/languages/pt.js +2 -2
- package/dist/translations/languages/pt.js.map +1 -1
- package/dist/translations/languages/ro.d.ts.map +1 -1
- package/dist/translations/languages/ro.js +2 -2
- package/dist/translations/languages/ro.js.map +1 -1
- package/dist/translations/languages/rs.d.ts.map +1 -1
- package/dist/translations/languages/rs.js +2 -2
- package/dist/translations/languages/rs.js.map +1 -1
- package/dist/translations/languages/rsLatin.d.ts.map +1 -1
- package/dist/translations/languages/rsLatin.js +2 -2
- package/dist/translations/languages/rsLatin.js.map +1 -1
- package/dist/translations/languages/ru.d.ts.map +1 -1
- package/dist/translations/languages/ru.js +2 -2
- package/dist/translations/languages/ru.js.map +1 -1
- package/dist/translations/languages/sk.d.ts.map +1 -1
- package/dist/translations/languages/sk.js +2 -2
- package/dist/translations/languages/sk.js.map +1 -1
- package/dist/translations/languages/sl.d.ts.map +1 -1
- package/dist/translations/languages/sl.js +2 -2
- package/dist/translations/languages/sl.js.map +1 -1
- package/dist/translations/languages/sv.d.ts.map +1 -1
- package/dist/translations/languages/sv.js +2 -2
- package/dist/translations/languages/sv.js.map +1 -1
- package/dist/translations/languages/ta.d.ts +4 -0
- package/dist/translations/languages/ta.d.ts.map +1 -0
- package/dist/translations/languages/ta.js +14 -0
- package/dist/translations/languages/ta.js.map +1 -0
- package/dist/translations/languages/th.d.ts.map +1 -1
- package/dist/translations/languages/th.js +2 -2
- package/dist/translations/languages/th.js.map +1 -1
- package/dist/translations/languages/tr.d.ts.map +1 -1
- package/dist/translations/languages/tr.js +2 -2
- package/dist/translations/languages/tr.js.map +1 -1
- package/dist/translations/languages/uk.d.ts.map +1 -1
- package/dist/translations/languages/uk.js +2 -2
- package/dist/translations/languages/uk.js.map +1 -1
- package/dist/translations/languages/vi.d.ts.map +1 -1
- package/dist/translations/languages/vi.js +2 -2
- package/dist/translations/languages/vi.js.map +1 -1
- package/dist/translations/languages/zh.d.ts.map +1 -1
- package/dist/translations/languages/zh.js +2 -2
- package/dist/translations/languages/zh.js.map +1 -1
- package/dist/translations/languages/zhTw.d.ts.map +1 -1
- package/dist/translations/languages/zhTw.js +2 -2
- package/dist/translations/languages/zhTw.js.map +1 -1
- package/dist/translations/types.d.ts +2 -2
- package/dist/translations/types.d.ts.map +1 -1
- package/dist/translations/types.js.map +1 -1
- package/dist/types.d.ts +12 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utilities/addFilterOptionsToFields.js +1 -0
- package/dist/utilities/addFilterOptionsToFields.js.map +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './index.scss';
|
|
3
|
+
export declare const assignTenantModalSlug = "assign-tenant-field-modal";
|
|
4
|
+
export declare const AssignTenantFieldTrigger: React.FC;
|
|
5
|
+
export declare const AssignTenantFieldModal: React.FC<{
|
|
6
|
+
afterModalClose: () => void;
|
|
7
|
+
afterModalOpen: () => void;
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
onCancel?: () => void;
|
|
10
|
+
onConfirm?: () => void;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=index.client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/components/AssignTenantFieldModal/index.client.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,OAAO,cAAc,CAAA;AAGrB,eAAO,MAAM,qBAAqB,8BAA8B,CAAA;AAGhE,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAgB5C,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC;IAC5C,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB,CA8EA,CAAA"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { Button, Modal, Pill, PopupList, useConfig, useDocumentInfo, useDocumentTitle, useModal, useTranslation } from '@payloadcms/ui';
|
|
4
|
+
import { drawerZBase, useDrawerDepth } from '@payloadcms/ui/elements/Drawer';
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import './index.scss';
|
|
7
|
+
import { useTenantSelection } from '../../providers/TenantSelectionProvider/index.client.js';
|
|
8
|
+
export const assignTenantModalSlug = 'assign-tenant-field-modal';
|
|
9
|
+
const baseClass = 'assign-tenant-field-modal';
|
|
10
|
+
export const AssignTenantFieldTrigger = ()=>{
|
|
11
|
+
const { openModal } = useModal();
|
|
12
|
+
const { t } = useTranslation();
|
|
13
|
+
const { options } = useTenantSelection();
|
|
14
|
+
if (options.length <= 1) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
return /*#__PURE__*/ _jsx(_Fragment, {
|
|
18
|
+
children: /*#__PURE__*/ _jsx(PopupList.Button, {
|
|
19
|
+
onClick: ()=>openModal(assignTenantModalSlug),
|
|
20
|
+
children: t('plugin-multi-tenant:assign-tenant-button-label')
|
|
21
|
+
})
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
export const AssignTenantFieldModal = ({ afterModalClose, afterModalOpen, children, onCancel, onConfirm })=>{
|
|
25
|
+
const editDepth = useDrawerDepth();
|
|
26
|
+
const { t } = useTranslation();
|
|
27
|
+
const { collectionSlug } = useDocumentInfo();
|
|
28
|
+
const { title } = useDocumentTitle();
|
|
29
|
+
const { getEntityConfig } = useConfig();
|
|
30
|
+
const collectionConfig = getEntityConfig({
|
|
31
|
+
collectionSlug
|
|
32
|
+
});
|
|
33
|
+
const { closeModal, isModalOpen: isModalOpenFn } = useModal();
|
|
34
|
+
const isModalOpen = isModalOpenFn(assignTenantModalSlug);
|
|
35
|
+
const wasModalOpenRef = React.useRef(isModalOpen);
|
|
36
|
+
const onModalConfirm = React.useCallback(()=>{
|
|
37
|
+
if (typeof onConfirm === 'function') {
|
|
38
|
+
onConfirm();
|
|
39
|
+
}
|
|
40
|
+
closeModal(assignTenantModalSlug);
|
|
41
|
+
}, [
|
|
42
|
+
onConfirm,
|
|
43
|
+
closeModal
|
|
44
|
+
]);
|
|
45
|
+
const onModalCancel = React.useCallback(()=>{
|
|
46
|
+
if (typeof onCancel === 'function') {
|
|
47
|
+
onCancel();
|
|
48
|
+
}
|
|
49
|
+
closeModal(assignTenantModalSlug);
|
|
50
|
+
}, [
|
|
51
|
+
onCancel,
|
|
52
|
+
closeModal
|
|
53
|
+
]);
|
|
54
|
+
React.useEffect(()=>{
|
|
55
|
+
if (wasModalOpenRef.current && !isModalOpen) {
|
|
56
|
+
// modal was open, and now is closed
|
|
57
|
+
if (typeof afterModalClose === 'function') {
|
|
58
|
+
afterModalClose();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (!wasModalOpenRef.current && isModalOpen) {
|
|
62
|
+
// modal was closed, and now is open
|
|
63
|
+
if (typeof afterModalOpen === 'function') {
|
|
64
|
+
afterModalOpen();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
wasModalOpenRef.current = isModalOpen;
|
|
68
|
+
}, [
|
|
69
|
+
isModalOpen,
|
|
70
|
+
onCancel,
|
|
71
|
+
afterModalClose,
|
|
72
|
+
afterModalOpen
|
|
73
|
+
]);
|
|
74
|
+
if (!collectionConfig) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
return /*#__PURE__*/ _jsxs(Modal, {
|
|
78
|
+
className: baseClass,
|
|
79
|
+
slug: assignTenantModalSlug,
|
|
80
|
+
style: {
|
|
81
|
+
zIndex: drawerZBase + editDepth
|
|
82
|
+
},
|
|
83
|
+
children: [
|
|
84
|
+
/*#__PURE__*/ _jsx("div", {
|
|
85
|
+
className: `${baseClass}__bg`
|
|
86
|
+
}),
|
|
87
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
88
|
+
className: `${baseClass}__wrapper`,
|
|
89
|
+
children: [
|
|
90
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
91
|
+
className: `${baseClass}__header`,
|
|
92
|
+
children: [
|
|
93
|
+
/*#__PURE__*/ _jsx("h3", {
|
|
94
|
+
children: t('plugin-multi-tenant:assign-tenant-modal-title', {
|
|
95
|
+
title
|
|
96
|
+
})
|
|
97
|
+
}),
|
|
98
|
+
/*#__PURE__*/ _jsx(Pill, {
|
|
99
|
+
className: `${baseClass}__collection-pill`,
|
|
100
|
+
size: "small",
|
|
101
|
+
children: /*#__PURE__*/ _jsx(_Fragment, {
|
|
102
|
+
children: collectionConfig.labels.singular
|
|
103
|
+
})
|
|
104
|
+
})
|
|
105
|
+
]
|
|
106
|
+
}),
|
|
107
|
+
/*#__PURE__*/ _jsx("div", {
|
|
108
|
+
className: `${baseClass}__content`,
|
|
109
|
+
children: children
|
|
110
|
+
}),
|
|
111
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
112
|
+
className: `${baseClass}__actions`,
|
|
113
|
+
children: [
|
|
114
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
115
|
+
buttonStyle: "secondary",
|
|
116
|
+
margin: false,
|
|
117
|
+
onClick: onModalCancel,
|
|
118
|
+
children: t('general:cancel')
|
|
119
|
+
}),
|
|
120
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
121
|
+
margin: false,
|
|
122
|
+
onClick: onModalConfirm,
|
|
123
|
+
children: t('general:confirm')
|
|
124
|
+
})
|
|
125
|
+
]
|
|
126
|
+
})
|
|
127
|
+
]
|
|
128
|
+
})
|
|
129
|
+
]
|
|
130
|
+
});
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
//# sourceMappingURL=index.client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/AssignTenantFieldModal/index.client.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientCollectionConfig } from 'payload'\n\nimport {\n Button,\n Modal,\n Pill,\n PopupList,\n useConfig,\n useDocumentInfo,\n useDocumentTitle,\n useModal,\n useTranslation,\n} from '@payloadcms/ui'\nimport { drawerZBase, useDrawerDepth } from '@payloadcms/ui/elements/Drawer'\nimport React from 'react'\n\nimport type {\n PluginMultiTenantTranslationKeys,\n PluginMultiTenantTranslations,\n} from '../../translations/index.js'\n\nimport './index.scss'\nimport { useTenantSelection } from '../../providers/TenantSelectionProvider/index.client.js'\n\nexport const assignTenantModalSlug = 'assign-tenant-field-modal'\nconst baseClass = 'assign-tenant-field-modal'\n\nexport const AssignTenantFieldTrigger: React.FC = () => {\n const { openModal } = useModal()\n const { t } = useTranslation<PluginMultiTenantTranslations, PluginMultiTenantTranslationKeys>()\n const { options } = useTenantSelection()\n\n if (options.length <= 1) {\n return null\n }\n\n return (\n <>\n <PopupList.Button onClick={() => openModal(assignTenantModalSlug)}>\n {t('plugin-multi-tenant:assign-tenant-button-label')}\n </PopupList.Button>\n </>\n )\n}\n\nexport const AssignTenantFieldModal: React.FC<{\n afterModalClose: () => void\n afterModalOpen: () => void\n children: React.ReactNode\n onCancel?: () => void\n onConfirm?: () => void\n}> = ({ afterModalClose, afterModalOpen, children, onCancel, onConfirm }) => {\n const editDepth = useDrawerDepth()\n const { t } = useTranslation<PluginMultiTenantTranslations, PluginMultiTenantTranslationKeys>()\n const { collectionSlug } = useDocumentInfo()\n const { title } = useDocumentTitle()\n const { getEntityConfig } = useConfig()\n const collectionConfig = getEntityConfig({ collectionSlug }) as ClientCollectionConfig\n const { closeModal, isModalOpen: isModalOpenFn } = useModal()\n const isModalOpen = isModalOpenFn(assignTenantModalSlug)\n const wasModalOpenRef = React.useRef<boolean>(isModalOpen)\n\n const onModalConfirm = React.useCallback(() => {\n if (typeof onConfirm === 'function') {\n onConfirm()\n }\n closeModal(assignTenantModalSlug)\n }, [onConfirm, closeModal])\n\n const onModalCancel = React.useCallback(() => {\n if (typeof onCancel === 'function') {\n onCancel()\n }\n closeModal(assignTenantModalSlug)\n }, [onCancel, closeModal])\n\n React.useEffect(() => {\n if (wasModalOpenRef.current && !isModalOpen) {\n // modal was open, and now is closed\n if (typeof afterModalClose === 'function') {\n afterModalClose()\n }\n }\n\n if (!wasModalOpenRef.current && isModalOpen) {\n // modal was closed, and now is open\n if (typeof afterModalOpen === 'function') {\n afterModalOpen()\n }\n }\n wasModalOpenRef.current = isModalOpen\n }, [isModalOpen, onCancel, afterModalClose, afterModalOpen])\n\n if (!collectionConfig) {\n return null\n }\n\n return (\n <Modal\n className={baseClass}\n slug={assignTenantModalSlug}\n style={{\n zIndex: drawerZBase + editDepth,\n }}\n >\n <div className={`${baseClass}__bg`} />\n <div className={`${baseClass}__wrapper`}>\n <div className={`${baseClass}__header`}>\n <h3>\n {t('plugin-multi-tenant:assign-tenant-modal-title', {\n title,\n })}\n </h3>\n <Pill className={`${baseClass}__collection-pill`} size=\"small\">\n <>{collectionConfig.labels.singular}</>\n </Pill>\n </div>\n <div className={`${baseClass}__content`}>{children}</div>\n <div className={`${baseClass}__actions`}>\n <Button buttonStyle=\"secondary\" margin={false} onClick={onModalCancel}>\n {t('general:cancel')}\n </Button>\n <Button margin={false} onClick={onModalConfirm}>\n {t('general:confirm')}\n </Button>\n </div>\n </div>\n </Modal>\n )\n}\n"],"names":["Button","Modal","Pill","PopupList","useConfig","useDocumentInfo","useDocumentTitle","useModal","useTranslation","drawerZBase","useDrawerDepth","React","useTenantSelection","assignTenantModalSlug","baseClass","AssignTenantFieldTrigger","openModal","t","options","length","onClick","AssignTenantFieldModal","afterModalClose","afterModalOpen","children","onCancel","onConfirm","editDepth","collectionSlug","title","getEntityConfig","collectionConfig","closeModal","isModalOpen","isModalOpenFn","wasModalOpenRef","useRef","onModalConfirm","useCallback","onModalCancel","useEffect","current","className","slug","style","zIndex","div","h3","size","labels","singular","buttonStyle","margin"],"mappings":"AAAA;;AAIA,SACEA,MAAM,EACNC,KAAK,EACLC,IAAI,EACJC,SAAS,EACTC,SAAS,EACTC,eAAe,EACfC,gBAAgB,EAChBC,QAAQ,EACRC,cAAc,QACT,iBAAgB;AACvB,SAASC,WAAW,EAAEC,cAAc,QAAQ,iCAAgC;AAC5E,OAAOC,WAAW,QAAO;AAOzB,OAAO,eAAc;AACrB,SAASC,kBAAkB,QAAQ,0DAAyD;AAE5F,OAAO,MAAMC,wBAAwB,4BAA2B;AAChE,MAAMC,YAAY;AAElB,OAAO,MAAMC,2BAAqC;IAChD,MAAM,EAAEC,SAAS,EAAE,GAAGT;IACtB,MAAM,EAAEU,CAAC,EAAE,GAAGT;IACd,MAAM,EAAEU,OAAO,EAAE,GAAGN;IAEpB,IAAIM,QAAQC,MAAM,IAAI,GAAG;QACvB,OAAO;IACT;IAEA,qBACE;kBACE,cAAA,KAAChB,UAAUH,MAAM;YAACoB,SAAS,IAAMJ,UAAUH;sBACxCI,EAAE;;;AAIX,EAAC;AAED,OAAO,MAAMI,yBAMR,CAAC,EAAEC,eAAe,EAAEC,cAAc,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,SAAS,EAAE;IACtE,MAAMC,YAAYjB;IAClB,MAAM,EAAEO,CAAC,EAAE,GAAGT;IACd,MAAM,EAAEoB,cAAc,EAAE,GAAGvB;IAC3B,MAAM,EAAEwB,KAAK,EAAE,GAAGvB;IAClB,MAAM,EAAEwB,eAAe,EAAE,GAAG1B;IAC5B,MAAM2B,mBAAmBD,gBAAgB;QAAEF;IAAe;IAC1D,MAAM,EAAEI,UAAU,EAAEC,aAAaC,aAAa,EAAE,GAAG3B;IACnD,MAAM0B,cAAcC,cAAcrB;IAClC,MAAMsB,kBAAkBxB,MAAMyB,MAAM,CAAUH;IAE9C,MAAMI,iBAAiB1B,MAAM2B,WAAW,CAAC;QACvC,IAAI,OAAOZ,cAAc,YAAY;YACnCA;QACF;QACAM,WAAWnB;IACb,GAAG;QAACa;QAAWM;KAAW;IAE1B,MAAMO,gBAAgB5B,MAAM2B,WAAW,CAAC;QACtC,IAAI,OAAOb,aAAa,YAAY;YAClCA;QACF;QACAO,WAAWnB;IACb,GAAG;QAACY;QAAUO;KAAW;IAEzBrB,MAAM6B,SAAS,CAAC;QACd,IAAIL,gBAAgBM,OAAO,IAAI,CAACR,aAAa;YAC3C,oCAAoC;YACpC,IAAI,OAAOX,oBAAoB,YAAY;gBACzCA;YACF;QACF;QAEA,IAAI,CAACa,gBAAgBM,OAAO,IAAIR,aAAa;YAC3C,oCAAoC;YACpC,IAAI,OAAOV,mBAAmB,YAAY;gBACxCA;YACF;QACF;QACAY,gBAAgBM,OAAO,GAAGR;IAC5B,GAAG;QAACA;QAAaR;QAAUH;QAAiBC;KAAe;IAE3D,IAAI,CAACQ,kBAAkB;QACrB,OAAO;IACT;IAEA,qBACE,MAAC9B;QACCyC,WAAW5B;QACX6B,MAAM9B;QACN+B,OAAO;YACLC,QAAQpC,cAAckB;QACxB;;0BAEA,KAACmB;gBAAIJ,WAAW,GAAG5B,UAAU,IAAI,CAAC;;0BAClC,MAACgC;gBAAIJ,WAAW,GAAG5B,UAAU,SAAS,CAAC;;kCACrC,MAACgC;wBAAIJ,WAAW,GAAG5B,UAAU,QAAQ,CAAC;;0CACpC,KAACiC;0CACE9B,EAAE,iDAAiD;oCAClDY;gCACF;;0CAEF,KAAC3B;gCAAKwC,WAAW,GAAG5B,UAAU,iBAAiB,CAAC;gCAAEkC,MAAK;0CACrD,cAAA;8CAAGjB,iBAAiBkB,MAAM,CAACC,QAAQ;;;;;kCAGvC,KAACJ;wBAAIJ,WAAW,GAAG5B,UAAU,SAAS,CAAC;kCAAGU;;kCAC1C,MAACsB;wBAAIJ,WAAW,GAAG5B,UAAU,SAAS,CAAC;;0CACrC,KAACd;gCAAOmD,aAAY;gCAAYC,QAAQ;gCAAOhC,SAASmB;0CACrDtB,EAAE;;0CAEL,KAACjB;gCAAOoD,QAAQ;gCAAOhC,SAASiB;0CAC7BpB,EAAE;;;;;;;;AAMf,EAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
@layer payload-default {
|
|
2
|
+
.assign-tenant-field-modal {
|
|
3
|
+
pointer-events: none;
|
|
4
|
+
display: flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
justify-content: center;
|
|
7
|
+
height: 100%;
|
|
8
|
+
|
|
9
|
+
&[open] {
|
|
10
|
+
pointer-events: auto;
|
|
11
|
+
|
|
12
|
+
.assign-tenant-field-modal__wrapper {
|
|
13
|
+
display: flex;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
&__bg {
|
|
18
|
+
z-index: -1;
|
|
19
|
+
|
|
20
|
+
&:before {
|
|
21
|
+
content: ' ';
|
|
22
|
+
position: absolute;
|
|
23
|
+
top: 0;
|
|
24
|
+
right: 0;
|
|
25
|
+
bottom: 0;
|
|
26
|
+
left: 0;
|
|
27
|
+
background: var(--theme-bg);
|
|
28
|
+
opacity: 0.8;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
&__wrapper {
|
|
33
|
+
z-index: 1;
|
|
34
|
+
position: relative;
|
|
35
|
+
display: none;
|
|
36
|
+
flex-direction: column;
|
|
37
|
+
max-width: calc(var(--base) * 30);
|
|
38
|
+
min-width: min(500px, calc(100% - (var(--base) * 2)));
|
|
39
|
+
border-radius: var(--style-radius-m);
|
|
40
|
+
border: 1px solid var(--theme-elevation-100);
|
|
41
|
+
background-color: var(--theme-bg);
|
|
42
|
+
justify-content: center;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
&__header {
|
|
46
|
+
padding: calc(var(--base) * 0.75) var(--base);
|
|
47
|
+
border-bottom: 1px solid var(--theme-elevation-100);
|
|
48
|
+
display: flex;
|
|
49
|
+
flex-direction: row;
|
|
50
|
+
justify-content: space-between;
|
|
51
|
+
gap: calc(var(--base) * 2);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
&__collection-pill {
|
|
55
|
+
align-self: flex-start;
|
|
56
|
+
flex-shrink: 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
&__content {
|
|
60
|
+
display: flex;
|
|
61
|
+
flex-direction: column;
|
|
62
|
+
gap: calc(var(--base) * 0.5);
|
|
63
|
+
padding: var(--base) var(--base) 0 var(--base);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
&__controls {
|
|
67
|
+
display: flex;
|
|
68
|
+
gap: calc(var(--base) * 0.5);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
&__actions {
|
|
72
|
+
display: flex;
|
|
73
|
+
justify-content: flex-end;
|
|
74
|
+
gap: calc(var(--base) * 0.4);
|
|
75
|
+
padding: var(--base);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -5,6 +5,6 @@ type Props = {
|
|
|
5
5
|
debug?: boolean;
|
|
6
6
|
unique?: boolean;
|
|
7
7
|
} & RelationshipFieldClientProps;
|
|
8
|
-
export declare const TenantField: (
|
|
8
|
+
export declare const TenantField: ({ debug, unique, ...fieldArgs }: Props) => React.JSX.Element | null;
|
|
9
9
|
export {};
|
|
10
10
|
//# sourceMappingURL=index.client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/components/TenantField/index.client.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,4BAA4B,
|
|
1
|
+
{"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/components/TenantField/index.client.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAA;AAW3D,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,OAAO,cAAc,CAAA;AAIrB,KAAK,KAAK,GAAG;IACX,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,GAAG,4BAA4B,CAAA;AAEhC,eAAO,MAAM,WAAW,oCAAqC,KAAK,6BAwHjE,CAAA"}
|
|
@@ -1,21 +1,85 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs
|
|
3
|
-
import {
|
|
4
|
-
import { ConfirmationModal, RelationshipField, Translation, useField, useForm, useFormModified, useModal, useTranslation } from '@payloadcms/ui';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Pill, RelationshipField, useDocumentInfo, useField, useForm, useFormModified, useModal } from '@payloadcms/ui';
|
|
5
4
|
import React from 'react';
|
|
6
|
-
import './index.scss';
|
|
7
5
|
import { useTenantSelection } from '../../providers/TenantSelectionProvider/index.client.js';
|
|
6
|
+
import { AssignTenantFieldModal, assignTenantModalSlug } from '../AssignTenantFieldModal/index.client.js';
|
|
7
|
+
import './index.scss';
|
|
8
8
|
const baseClass = 'tenantField';
|
|
9
|
-
export const TenantField = (
|
|
9
|
+
export const TenantField = ({ debug, unique, ...fieldArgs })=>{
|
|
10
10
|
const { entityType, options, selectedTenantID, setEntityType, setTenant } = useTenantSelection();
|
|
11
|
-
const { value } = useField();
|
|
11
|
+
const { setValue, showError, value } = useField();
|
|
12
|
+
const modified = useFormModified();
|
|
13
|
+
const { isValid: isFormValid, setModified } = useForm();
|
|
14
|
+
const { id: docID } = useDocumentInfo();
|
|
15
|
+
const { openModal } = useModal();
|
|
16
|
+
const isConfirmingRef = React.useRef(false);
|
|
17
|
+
const prevModified = React.useRef(modified);
|
|
18
|
+
const prevValue = React.useRef(value);
|
|
19
|
+
const showField = options.length > 1 && !fieldArgs.field.admin?.hidden && !fieldArgs.field.hidden || debug;
|
|
20
|
+
const onConfirm = React.useCallback(()=>{
|
|
21
|
+
isConfirmingRef.current = true;
|
|
22
|
+
}, []);
|
|
23
|
+
const afterModalOpen = React.useCallback(()=>{
|
|
24
|
+
prevModified.current = modified;
|
|
25
|
+
prevValue.current = value;
|
|
26
|
+
}, [
|
|
27
|
+
modified,
|
|
28
|
+
value
|
|
29
|
+
]);
|
|
30
|
+
const afterModalClose = React.useCallback(()=>{
|
|
31
|
+
let didChange = true;
|
|
32
|
+
if (isConfirmingRef.current) {
|
|
33
|
+
// did the values actually change?
|
|
34
|
+
if (fieldArgs.field.hasMany) {
|
|
35
|
+
const prev = prevValue.current || [];
|
|
36
|
+
const newValue = value || [];
|
|
37
|
+
if (prev.length !== newValue.length) {
|
|
38
|
+
didChange = true;
|
|
39
|
+
} else {
|
|
40
|
+
const allMatch = newValue.every((val)=>prev.includes(val));
|
|
41
|
+
if (allMatch) {
|
|
42
|
+
didChange = false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
} else if (value === prevValue.current) {
|
|
46
|
+
didChange = false;
|
|
47
|
+
}
|
|
48
|
+
if (didChange) {
|
|
49
|
+
prevModified.current = true;
|
|
50
|
+
prevValue.current = value;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
setValue(prevValue.current, true);
|
|
54
|
+
setModified(prevModified.current);
|
|
55
|
+
isConfirmingRef.current = false;
|
|
56
|
+
}, [
|
|
57
|
+
setValue,
|
|
58
|
+
setModified,
|
|
59
|
+
value,
|
|
60
|
+
fieldArgs.field.hasMany
|
|
61
|
+
]);
|
|
12
62
|
React.useEffect(()=>{
|
|
13
63
|
if (!entityType) {
|
|
14
|
-
setEntityType(
|
|
64
|
+
setEntityType(unique ? 'global' : 'document');
|
|
15
65
|
} else {
|
|
16
66
|
// unique documents are controlled from the global TenantSelector
|
|
17
|
-
if (!
|
|
18
|
-
if (
|
|
67
|
+
if (!unique && value) {
|
|
68
|
+
if (Array.isArray(value)) {
|
|
69
|
+
if (value.length) {
|
|
70
|
+
if (!selectedTenantID) {
|
|
71
|
+
setTenant({
|
|
72
|
+
id: value[0],
|
|
73
|
+
refresh: false
|
|
74
|
+
});
|
|
75
|
+
} else if (!value.includes(selectedTenantID)) {
|
|
76
|
+
setTenant({
|
|
77
|
+
id: value[0],
|
|
78
|
+
refresh: false
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
} else if (selectedTenantID !== value) {
|
|
19
83
|
setTenant({
|
|
20
84
|
id: value,
|
|
21
85
|
refresh: false
|
|
@@ -29,7 +93,7 @@ export const TenantField = (args)=>{
|
|
|
29
93
|
}
|
|
30
94
|
};
|
|
31
95
|
}, [
|
|
32
|
-
|
|
96
|
+
unique,
|
|
33
97
|
options,
|
|
34
98
|
selectedTenantID,
|
|
35
99
|
setTenant,
|
|
@@ -37,113 +101,74 @@ export const TenantField = (args)=>{
|
|
|
37
101
|
setEntityType,
|
|
38
102
|
entityType
|
|
39
103
|
]);
|
|
40
|
-
if (options.length > 1 && !args.field.admin?.hidden && !args.field.hidden) {
|
|
41
|
-
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
42
|
-
children: [
|
|
43
|
-
/*#__PURE__*/ _jsx("div", {
|
|
44
|
-
className: baseClass,
|
|
45
|
-
children: /*#__PURE__*/ _jsx("div", {
|
|
46
|
-
className: `${baseClass}__wrapper`,
|
|
47
|
-
children: /*#__PURE__*/ _jsx(RelationshipField, {
|
|
48
|
-
...args,
|
|
49
|
-
field: {
|
|
50
|
-
...args.field,
|
|
51
|
-
required: true
|
|
52
|
-
},
|
|
53
|
-
readOnly: args.readOnly || args.field.admin?.readOnly || args.unique
|
|
54
|
-
})
|
|
55
|
-
})
|
|
56
|
-
}),
|
|
57
|
-
args.unique ? /*#__PURE__*/ _jsx(SyncFormModified, {}) : /*#__PURE__*/ _jsx(ConfirmTenantChange, {
|
|
58
|
-
fieldLabel: args.field.label,
|
|
59
|
-
fieldPath: args.path
|
|
60
|
-
})
|
|
61
|
-
]
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
return null;
|
|
65
|
-
};
|
|
66
|
-
const confirmSwitchTenantSlug = 'confirm-switch-tenant';
|
|
67
|
-
const ConfirmTenantChange = ({ fieldLabel, fieldPath })=>{
|
|
68
|
-
const { options, selectedTenantID, setTenant } = useTenantSelection();
|
|
69
|
-
const { setValue: setTenantFormValue, value: tenantFormValue } = useField({
|
|
70
|
-
path: fieldPath
|
|
71
|
-
});
|
|
72
|
-
const { setModified } = useForm();
|
|
73
|
-
const modified = useFormModified();
|
|
74
|
-
const { i18n, t } = useTranslation();
|
|
75
|
-
const { isModalOpen, openModal } = useModal();
|
|
76
|
-
const prevTenantValueRef = React.useRef(tenantFormValue || null);
|
|
77
|
-
const [tenantToConfirm, setTenantToConfirm] = React.useState(tenantFormValue || null);
|
|
78
|
-
const fromTenantOption = React.useMemo(()=>{
|
|
79
|
-
if (tenantFormValue) {
|
|
80
|
-
return options.find((option)=>option.value === tenantFormValue);
|
|
81
|
-
}
|
|
82
|
-
return undefined;
|
|
83
|
-
}, [
|
|
84
|
-
options,
|
|
85
|
-
tenantFormValue
|
|
86
|
-
]);
|
|
87
|
-
const toTenantOption = React.useMemo(()=>{
|
|
88
|
-
if (tenantToConfirm) {
|
|
89
|
-
return options.find((option)=>option.value === tenantToConfirm);
|
|
90
|
-
}
|
|
91
|
-
return undefined;
|
|
92
|
-
}, [
|
|
93
|
-
options,
|
|
94
|
-
tenantToConfirm
|
|
95
|
-
]);
|
|
96
|
-
const modalIsOpen = isModalOpen(confirmSwitchTenantSlug);
|
|
97
|
-
const testRef = React.useRef(false);
|
|
98
104
|
React.useEffect(()=>{
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
setTenantToConfirm(tenantFormValue);
|
|
105
|
-
// open confirmation modal
|
|
106
|
-
openModal(confirmSwitchTenantSlug);
|
|
105
|
+
if (unique) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (!isFormValid && showError && showField || !value && !selectedTenantID) {
|
|
109
|
+
openModal(assignTenantModalSlug);
|
|
107
110
|
}
|
|
108
111
|
}, [
|
|
109
|
-
|
|
110
|
-
|
|
112
|
+
isFormValid,
|
|
113
|
+
showError,
|
|
114
|
+
showField,
|
|
111
115
|
openModal,
|
|
112
|
-
|
|
116
|
+
value,
|
|
117
|
+
docID,
|
|
113
118
|
selectedTenantID,
|
|
114
|
-
|
|
115
|
-
modified
|
|
119
|
+
unique
|
|
116
120
|
]);
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
},
|
|
142
|
-
onConfirm: ()=>{
|
|
143
|
-
// set the form value to the tenant to confirm
|
|
144
|
-
prevTenantValueRef.current = tenantToConfirm;
|
|
145
|
-
setTenantFormValue(tenantToConfirm);
|
|
121
|
+
if (showField) {
|
|
122
|
+
if (debug) {
|
|
123
|
+
return /*#__PURE__*/ _jsx(TenantFieldInModal, {
|
|
124
|
+
debug: debug,
|
|
125
|
+
fieldArgs: fieldArgs,
|
|
126
|
+
unique: unique
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
if (!unique) {
|
|
130
|
+
/** Editing a non-global tenant document */ return /*#__PURE__*/ _jsx(AssignTenantFieldModal, {
|
|
131
|
+
afterModalClose: afterModalClose,
|
|
132
|
+
afterModalOpen: afterModalOpen,
|
|
133
|
+
onConfirm: onConfirm,
|
|
134
|
+
children: /*#__PURE__*/ _jsx(TenantFieldInModal, {
|
|
135
|
+
debug: debug,
|
|
136
|
+
fieldArgs: {
|
|
137
|
+
...fieldArgs,
|
|
138
|
+
field: {
|
|
139
|
+
...fieldArgs.field
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
unique: unique
|
|
143
|
+
})
|
|
144
|
+
});
|
|
146
145
|
}
|
|
146
|
+
return /*#__PURE__*/ _jsx(SyncFormModified, {});
|
|
147
|
+
}
|
|
148
|
+
return null;
|
|
149
|
+
};
|
|
150
|
+
const TenantFieldInModal = ({ debug, fieldArgs, unique })=>{
|
|
151
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
152
|
+
className: baseClass,
|
|
153
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
154
|
+
className: `${baseClass}__wrapper`,
|
|
155
|
+
children: [
|
|
156
|
+
debug && /*#__PURE__*/ _jsx(Pill, {
|
|
157
|
+
className: `${baseClass}__debug-pill`,
|
|
158
|
+
pillStyle: "success",
|
|
159
|
+
size: "small",
|
|
160
|
+
children: "Multi-Tenant Debug Enabled"
|
|
161
|
+
}),
|
|
162
|
+
/*#__PURE__*/ _jsx(RelationshipField, {
|
|
163
|
+
...fieldArgs,
|
|
164
|
+
field: {
|
|
165
|
+
...fieldArgs.field,
|
|
166
|
+
required: true
|
|
167
|
+
},
|
|
168
|
+
readOnly: fieldArgs.readOnly || fieldArgs.field.admin?.readOnly || unique
|
|
169
|
+
})
|
|
170
|
+
]
|
|
171
|
+
})
|
|
147
172
|
});
|
|
148
173
|
};
|
|
149
174
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/TenantField/index.client.tsx"],"sourcesContent":["'use client'\n\nimport type { RelationshipFieldClientProps
|
|
1
|
+
{"version":3,"sources":["../../../src/components/TenantField/index.client.tsx"],"sourcesContent":["'use client'\n\nimport type { RelationshipFieldClientProps } from 'payload'\n\nimport {\n Pill,\n RelationshipField,\n useDocumentInfo,\n useField,\n useForm,\n useFormModified,\n useModal,\n} from '@payloadcms/ui'\nimport React from 'react'\n\nimport { useTenantSelection } from '../../providers/TenantSelectionProvider/index.client.js'\nimport {\n AssignTenantFieldModal,\n assignTenantModalSlug,\n} from '../AssignTenantFieldModal/index.client.js'\nimport './index.scss'\n\nconst baseClass = 'tenantField'\n\ntype Props = {\n debug?: boolean\n unique?: boolean\n} & RelationshipFieldClientProps\n\nexport const TenantField = ({ debug, unique, ...fieldArgs }: Props) => {\n const { entityType, options, selectedTenantID, setEntityType, setTenant } = useTenantSelection()\n const { setValue, showError, value } = useField<(number | string)[] | (number | string)>()\n const modified = useFormModified()\n const { isValid: isFormValid, setModified } = useForm()\n const { id: docID } = useDocumentInfo()\n const { openModal } = useModal()\n const isConfirmingRef = React.useRef<boolean>(false)\n const prevModified = React.useRef(modified)\n const prevValue = React.useRef<typeof value>(value)\n const showField =\n (options.length > 1 && !fieldArgs.field.admin?.hidden && !fieldArgs.field.hidden) || debug\n\n const onConfirm = React.useCallback(() => {\n isConfirmingRef.current = true\n }, [])\n\n const afterModalOpen = React.useCallback(() => {\n prevModified.current = modified\n prevValue.current = value\n }, [modified, value])\n\n const afterModalClose = React.useCallback(() => {\n let didChange = true\n if (isConfirmingRef.current) {\n // did the values actually change?\n if (fieldArgs.field.hasMany) {\n const prev = (prevValue.current || []) as (number | string)[]\n const newValue = (value || []) as (number | string)[]\n if (prev.length !== newValue.length) {\n didChange = true\n } else {\n const allMatch = newValue.every((val) => prev.includes(val))\n if (allMatch) {\n didChange = false\n }\n }\n } else if (value === prevValue.current) {\n didChange = false\n }\n\n if (didChange) {\n prevModified.current = true\n prevValue.current = value\n }\n }\n\n setValue(prevValue.current, true)\n setModified(prevModified.current)\n\n isConfirmingRef.current = false\n }, [setValue, setModified, value, fieldArgs.field.hasMany])\n\n React.useEffect(() => {\n if (!entityType) {\n setEntityType(unique ? 'global' : 'document')\n } else {\n // unique documents are controlled from the global TenantSelector\n if (!unique && value) {\n if (Array.isArray(value)) {\n if (value.length) {\n if (!selectedTenantID) {\n setTenant({ id: value[0], refresh: false })\n } else if (!value.includes(selectedTenantID)) {\n setTenant({ id: value[0], refresh: false })\n }\n }\n } else if (selectedTenantID !== value) {\n setTenant({ id: value, refresh: false })\n }\n }\n }\n\n return () => {\n if (entityType) {\n setEntityType(undefined)\n }\n }\n }, [unique, options, selectedTenantID, setTenant, value, setEntityType, entityType])\n\n React.useEffect(() => {\n if (unique) {\n return\n }\n if ((!isFormValid && showError && showField) || (!value && !selectedTenantID)) {\n openModal(assignTenantModalSlug)\n }\n }, [isFormValid, showError, showField, openModal, value, docID, selectedTenantID, unique])\n\n if (showField) {\n if (debug) {\n return <TenantFieldInModal debug={debug} fieldArgs={fieldArgs} unique={unique} />\n }\n\n if (!unique) {\n /** Editing a non-global tenant document */\n return (\n <AssignTenantFieldModal\n afterModalClose={afterModalClose}\n afterModalOpen={afterModalOpen}\n onConfirm={onConfirm}\n >\n <TenantFieldInModal\n debug={debug}\n fieldArgs={{\n ...fieldArgs,\n field: {\n ...fieldArgs.field,\n },\n }}\n unique={unique}\n />\n </AssignTenantFieldModal>\n )\n }\n\n return <SyncFormModified />\n }\n\n return null\n}\n\nconst TenantFieldInModal: React.FC<{\n debug?: boolean\n fieldArgs: RelationshipFieldClientProps\n unique?: boolean\n}> = ({ debug, fieldArgs, unique }) => {\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__wrapper`}>\n {debug && (\n <Pill className={`${baseClass}__debug-pill`} pillStyle=\"success\" size=\"small\">\n Multi-Tenant Debug Enabled\n </Pill>\n )}\n <RelationshipField\n {...fieldArgs}\n field={{\n ...fieldArgs.field,\n required: true,\n }}\n readOnly={fieldArgs.readOnly || fieldArgs.field.admin?.readOnly || unique}\n />\n </div>\n </div>\n )\n}\n\n/**\n * Tells the global selector when the form has been modified\n * so it can display the \"Leave without saving\" confirmation modal\n * if modified and attempting to change the tenant\n */\nconst SyncFormModified = () => {\n const modified = useFormModified()\n const { setModified } = useTenantSelection()\n\n React.useEffect(() => {\n setModified(modified)\n }, [modified, setModified])\n\n return null\n}\n"],"names":["Pill","RelationshipField","useDocumentInfo","useField","useForm","useFormModified","useModal","React","useTenantSelection","AssignTenantFieldModal","assignTenantModalSlug","baseClass","TenantField","debug","unique","fieldArgs","entityType","options","selectedTenantID","setEntityType","setTenant","setValue","showError","value","modified","isValid","isFormValid","setModified","id","docID","openModal","isConfirmingRef","useRef","prevModified","prevValue","showField","length","field","admin","hidden","onConfirm","useCallback","current","afterModalOpen","afterModalClose","didChange","hasMany","prev","newValue","allMatch","every","val","includes","useEffect","Array","isArray","refresh","undefined","TenantFieldInModal","SyncFormModified","div","className","pillStyle","size","required","readOnly"],"mappings":"AAAA;;AAIA,SACEA,IAAI,EACJC,iBAAiB,EACjBC,eAAe,EACfC,QAAQ,EACRC,OAAO,EACPC,eAAe,EACfC,QAAQ,QACH,iBAAgB;AACvB,OAAOC,WAAW,QAAO;AAEzB,SAASC,kBAAkB,QAAQ,0DAAyD;AAC5F,SACEC,sBAAsB,EACtBC,qBAAqB,QAChB,4CAA2C;AAClD,OAAO,eAAc;AAErB,MAAMC,YAAY;AAOlB,OAAO,MAAMC,cAAc,CAAC,EAAEC,KAAK,EAAEC,MAAM,EAAE,GAAGC,WAAkB;IAChE,MAAM,EAAEC,UAAU,EAAEC,OAAO,EAAEC,gBAAgB,EAAEC,aAAa,EAAEC,SAAS,EAAE,GAAGZ;IAC5E,MAAM,EAAEa,QAAQ,EAAEC,SAAS,EAAEC,KAAK,EAAE,GAAGpB;IACvC,MAAMqB,WAAWnB;IACjB,MAAM,EAAEoB,SAASC,WAAW,EAAEC,WAAW,EAAE,GAAGvB;IAC9C,MAAM,EAAEwB,IAAIC,KAAK,EAAE,GAAG3B;IACtB,MAAM,EAAE4B,SAAS,EAAE,GAAGxB;IACtB,MAAMyB,kBAAkBxB,MAAMyB,MAAM,CAAU;IAC9C,MAAMC,eAAe1B,MAAMyB,MAAM,CAACR;IAClC,MAAMU,YAAY3B,MAAMyB,MAAM,CAAeT;IAC7C,MAAMY,YACJ,AAAClB,QAAQmB,MAAM,GAAG,KAAK,CAACrB,UAAUsB,KAAK,CAACC,KAAK,EAAEC,UAAU,CAACxB,UAAUsB,KAAK,CAACE,MAAM,IAAK1B;IAEvF,MAAM2B,YAAYjC,MAAMkC,WAAW,CAAC;QAClCV,gBAAgBW,OAAO,GAAG;IAC5B,GAAG,EAAE;IAEL,MAAMC,iBAAiBpC,MAAMkC,WAAW,CAAC;QACvCR,aAAaS,OAAO,GAAGlB;QACvBU,UAAUQ,OAAO,GAAGnB;IACtB,GAAG;QAACC;QAAUD;KAAM;IAEpB,MAAMqB,kBAAkBrC,MAAMkC,WAAW,CAAC;QACxC,IAAII,YAAY;QAChB,IAAId,gBAAgBW,OAAO,EAAE;YAC3B,kCAAkC;YAClC,IAAI3B,UAAUsB,KAAK,CAACS,OAAO,EAAE;gBAC3B,MAAMC,OAAQb,UAAUQ,OAAO,IAAI,EAAE;gBACrC,MAAMM,WAAYzB,SAAS,EAAE;gBAC7B,IAAIwB,KAAKX,MAAM,KAAKY,SAASZ,MAAM,EAAE;oBACnCS,YAAY;gBACd,OAAO;oBACL,MAAMI,WAAWD,SAASE,KAAK,CAAC,CAACC,MAAQJ,KAAKK,QAAQ,CAACD;oBACvD,IAAIF,UAAU;wBACZJ,YAAY;oBACd;gBACF;YACF,OAAO,IAAItB,UAAUW,UAAUQ,OAAO,EAAE;gBACtCG,YAAY;YACd;YAEA,IAAIA,WAAW;gBACbZ,aAAaS,OAAO,GAAG;gBACvBR,UAAUQ,OAAO,GAAGnB;YACtB;QACF;QAEAF,SAASa,UAAUQ,OAAO,EAAE;QAC5Bf,YAAYM,aAAaS,OAAO;QAEhCX,gBAAgBW,OAAO,GAAG;IAC5B,GAAG;QAACrB;QAAUM;QAAaJ;QAAOR,UAAUsB,KAAK,CAACS,OAAO;KAAC;IAE1DvC,MAAM8C,SAAS,CAAC;QACd,IAAI,CAACrC,YAAY;YACfG,cAAcL,SAAS,WAAW;QACpC,OAAO;YACL,iEAAiE;YACjE,IAAI,CAACA,UAAUS,OAAO;gBACpB,IAAI+B,MAAMC,OAAO,CAAChC,QAAQ;oBACxB,IAAIA,MAAMa,MAAM,EAAE;wBAChB,IAAI,CAAClB,kBAAkB;4BACrBE,UAAU;gCAAEQ,IAAIL,KAAK,CAAC,EAAE;gCAAEiC,SAAS;4BAAM;wBAC3C,OAAO,IAAI,CAACjC,MAAM6B,QAAQ,CAAClC,mBAAmB;4BAC5CE,UAAU;gCAAEQ,IAAIL,KAAK,CAAC,EAAE;gCAAEiC,SAAS;4BAAM;wBAC3C;oBACF;gBACF,OAAO,IAAItC,qBAAqBK,OAAO;oBACrCH,UAAU;wBAAEQ,IAAIL;wBAAOiC,SAAS;oBAAM;gBACxC;YACF;QACF;QAEA,OAAO;YACL,IAAIxC,YAAY;gBACdG,cAAcsC;YAChB;QACF;IACF,GAAG;QAAC3C;QAAQG;QAASC;QAAkBE;QAAWG;QAAOJ;QAAeH;KAAW;IAEnFT,MAAM8C,SAAS,CAAC;QACd,IAAIvC,QAAQ;YACV;QACF;QACA,IAAI,AAAC,CAACY,eAAeJ,aAAaa,aAAe,CAACZ,SAAS,CAACL,kBAAmB;YAC7EY,UAAUpB;QACZ;IACF,GAAG;QAACgB;QAAaJ;QAAWa;QAAWL;QAAWP;QAAOM;QAAOX;QAAkBJ;KAAO;IAEzF,IAAIqB,WAAW;QACb,IAAItB,OAAO;YACT,qBAAO,KAAC6C;gBAAmB7C,OAAOA;gBAAOE,WAAWA;gBAAWD,QAAQA;;QACzE;QAEA,IAAI,CAACA,QAAQ;YACX,yCAAyC,GACzC,qBACE,KAACL;gBACCmC,iBAAiBA;gBACjBD,gBAAgBA;gBAChBH,WAAWA;0BAEX,cAAA,KAACkB;oBACC7C,OAAOA;oBACPE,WAAW;wBACT,GAAGA,SAAS;wBACZsB,OAAO;4BACL,GAAGtB,UAAUsB,KAAK;wBACpB;oBACF;oBACAvB,QAAQA;;;QAIhB;QAEA,qBAAO,KAAC6C;IACV;IAEA,OAAO;AACT,EAAC;AAED,MAAMD,qBAID,CAAC,EAAE7C,KAAK,EAAEE,SAAS,EAAED,MAAM,EAAE;IAChC,qBACE,KAAC8C;QAAIC,WAAWlD;kBACd,cAAA,MAACiD;YAAIC,WAAW,GAAGlD,UAAU,SAAS,CAAC;;gBACpCE,uBACC,KAACb;oBAAK6D,WAAW,GAAGlD,UAAU,YAAY,CAAC;oBAAEmD,WAAU;oBAAUC,MAAK;8BAAQ;;8BAIhF,KAAC9D;oBACE,GAAGc,SAAS;oBACbsB,OAAO;wBACL,GAAGtB,UAAUsB,KAAK;wBAClB2B,UAAU;oBACZ;oBACAC,UAAUlD,UAAUkD,QAAQ,IAAIlD,UAAUsB,KAAK,CAACC,KAAK,EAAE2B,YAAYnD;;;;;AAK7E;AAEA;;;;CAIC,GACD,MAAM6C,mBAAmB;IACvB,MAAMnC,WAAWnB;IACjB,MAAM,EAAEsB,WAAW,EAAE,GAAGnB;IAExBD,MAAM8C,SAAS,CAAC;QACd1B,YAAYH;IACd,GAAG;QAACA;QAAUG;KAAY;IAE1B,OAAO;AACT"}
|
package/dist/exports/client.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { AssignTenantFieldTrigger } from '../components/AssignTenantFieldModal/index.client.js';
|
|
1
2
|
export { TenantField } from '../components/TenantField/index.client.js';
|
|
2
3
|
export { WatchTenantCollection } from '../components/WatchTenantCollection/index.js';
|
|
3
4
|
export { useTenantSelection } from '../providers/TenantSelectionProvider/index.client.js';
|
|
@@ -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,qBAAqB,EAAE,MAAM,8CAA8C,CAAA;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sDAAsD,CAAA"}
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAA;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAA;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAA;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sDAAsD,CAAA"}
|