@payloadcms/ui 3.89.0 → 3.90.1
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/elements/BulkUpload/FormsManager/createFormData.d.ts +1 -1
- package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/createFormData.js +7 -3
- package/dist/elements/BulkUpload/FormsManager/createFormData.js.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/index.js +4 -2
- package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
- package/dist/elements/Spinner/index.d.ts +19 -0
- package/dist/elements/Spinner/index.d.ts.map +1 -0
- package/dist/elements/Spinner/index.js +51 -0
- package/dist/elements/Spinner/index.js.map +1 -0
- package/dist/elements/Spinner/index.scss +23 -0
- package/dist/exports/client/index.d.ts +4 -1
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +12 -12
- package/dist/exports/client/index.js.map +4 -4
- package/dist/fields/Tabs/index.d.ts.map +1 -1
- package/dist/fields/Tabs/index.js +109 -234
- package/dist/fields/Tabs/index.js.map +1 -1
- package/dist/fields/Tabs/resolveRestoredTabIndex.d.ts +19 -0
- package/dist/fields/Tabs/resolveRestoredTabIndex.d.ts.map +1 -0
- package/dist/fields/Tabs/resolveRestoredTabIndex.js +20 -0
- package/dist/fields/Tabs/resolveRestoredTabIndex.js.map +1 -0
- package/dist/fields/Tabs/resolveRestoredTabIndex.spec.js +53 -0
- package/dist/fields/Tabs/resolveRestoredTabIndex.spec.js.map +1 -0
- package/dist/forms/Form/index.d.ts.map +1 -1
- package/dist/forms/Form/index.js +6 -2
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.js +3 -2
- package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.d.ts +12 -0
- package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.d.ts.map +1 -0
- package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.js +32 -0
- package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.js.map +1 -0
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.d.ts +8 -6
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js +25 -9
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.spec.js +179 -0
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.spec.js.map +1 -0
- package/dist/forms/fieldSchemasToFormState/types.d.ts +1 -0
- package/dist/forms/fieldSchemasToFormState/types.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/types.js.map +1 -1
- package/dist/icons/Eye/index.scss +1 -1
- package/dist/icons/Refresh/index.d.ts +7 -0
- package/dist/icons/Refresh/index.d.ts.map +1 -0
- package/dist/icons/Refresh/index.js +35 -0
- package/dist/icons/Refresh/index.js.map +1 -0
- package/dist/icons/Refresh/index.scss +11 -0
- package/dist/icons/Spinner/index.d.ts +8 -0
- package/dist/icons/Spinner/index.d.ts.map +1 -0
- package/dist/icons/Spinner/index.js +34 -0
- package/dist/icons/Spinner/index.js.map +1 -0
- package/dist/icons/Spinner/index.scss +12 -0
- package/dist/styles.css +1 -1
- package/dist/utilities/buildFormState.d.ts.map +1 -1
- package/dist/utilities/buildFormState.js +6 -2
- package/dist/utilities/buildFormState.js.map +1 -1
- package/dist/utilities/schedulePublishHandler.d.ts.map +1 -1
- package/dist/utilities/schedulePublishHandler.js +4 -1
- package/dist/utilities/schedulePublishHandler.js.map +1 -1
- package/dist/views/Edit/Auth/APIKey.d.ts +1 -1
- package/dist/views/Edit/Auth/APIKey.d.ts.map +1 -1
- package/dist/views/Edit/Auth/APIKey.js +216 -59
- package/dist/views/Edit/Auth/APIKey.js.map +1 -1
- package/dist/views/Edit/Auth/APIKeyGenerationModal.d.ts +11 -0
- package/dist/views/Edit/Auth/APIKeyGenerationModal.d.ts.map +1 -0
- package/dist/views/Edit/Auth/APIKeyGenerationModal.js +113 -0
- package/dist/views/Edit/Auth/APIKeyGenerationModal.js.map +1 -0
- package/dist/views/Edit/Auth/index.d.ts.map +1 -1
- package/dist/views/Edit/Auth/index.js +10 -30
- package/dist/views/Edit/Auth/index.js.map +1 -1
- package/dist/views/Edit/Auth/index.scss +73 -36
- package/dist/views/Edit/Auth/types.d.ts +1 -1
- package/dist/views/Edit/Auth/types.d.ts.map +1 -1
- package/dist/views/Edit/Auth/types.js.map +1 -1
- package/package.json +5 -5
- package/dist/elements/GenerateConfirmation/index.d.ts +0 -7
- package/dist/elements/GenerateConfirmation/index.d.ts.map +0 -1
- package/dist/elements/GenerateConfirmation/index.js +0 -95
- package/dist/elements/GenerateConfirmation/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Tabs/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EAMrB,MAAM,SAAS,CAAA;AAIhB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Tabs/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EAMrB,MAAM,SAAS,CAAA;AAIhB,OAAO,KAAmD,MAAM,OAAO,CAAA;AAavE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG5C,OAAO,cAAc,CAAA;AAIrB,OAAO,EAAE,YAAY,EAAE,CAAA;AA+LvB,eAAO,MAAM,SAAS;;6DAAoC,CAAA"}
|
|
@@ -4,7 +4,7 @@ import { c as _c } from "react/compiler-runtime";
|
|
|
4
4
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { getTranslation } from '@payloadcms/translations';
|
|
6
6
|
import { getFieldPaths, toKebabCase } from 'payload/shared';
|
|
7
|
-
import React, { useCallback, useEffect, useState } from 'react';
|
|
7
|
+
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
8
8
|
import { useCollapsible } from '../../elements/Collapsible/provider.js';
|
|
9
9
|
import { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js';
|
|
10
10
|
import { useFormFields } from '../../forms/Form/index.js';
|
|
@@ -17,53 +17,28 @@ import { useTranslation } from '../../providers/Translation/index.js';
|
|
|
17
17
|
import { FieldDescription } from '../FieldDescription/index.js';
|
|
18
18
|
import { fieldBaseClass } from '../shared/index.js';
|
|
19
19
|
import { TabsProvider } from './provider.js';
|
|
20
|
+
import { resolveRestoredTabIndex } from './resolveRestoredTabIndex.js';
|
|
20
21
|
import { TabComponent } from './Tab/index.js';
|
|
21
22
|
import './index.scss';
|
|
22
23
|
const baseClass = 'tabs-field';
|
|
23
24
|
export { TabsProvider };
|
|
24
25
|
const TabsFieldComponent = props => {
|
|
25
|
-
const $ = _c(44);
|
|
26
26
|
const {
|
|
27
|
-
field:
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
field: {
|
|
28
|
+
admin: {
|
|
29
|
+
className
|
|
30
|
+
} = {},
|
|
31
|
+
tabs = []
|
|
32
|
+
},
|
|
33
|
+
forceRender = false,
|
|
34
|
+
indexPath = '',
|
|
35
|
+
parentPath = '',
|
|
36
|
+
parentSchemaPath = '',
|
|
37
|
+
path = '',
|
|
33
38
|
permissions,
|
|
34
39
|
readOnly,
|
|
35
|
-
schemaPath
|
|
40
|
+
schemaPath = ''
|
|
36
41
|
} = props;
|
|
37
|
-
const {
|
|
38
|
-
admin: t7,
|
|
39
|
-
tabs: t8
|
|
40
|
-
} = t0;
|
|
41
|
-
let t9;
|
|
42
|
-
if ($[0] !== t7) {
|
|
43
|
-
t9 = t7 === undefined ? {} : t7;
|
|
44
|
-
$[0] = t7;
|
|
45
|
-
$[1] = t9;
|
|
46
|
-
} else {
|
|
47
|
-
t9 = $[1];
|
|
48
|
-
}
|
|
49
|
-
const {
|
|
50
|
-
className
|
|
51
|
-
} = t9;
|
|
52
|
-
let t10;
|
|
53
|
-
if ($[2] !== t8) {
|
|
54
|
-
t10 = t8 === undefined ? [] : t8;
|
|
55
|
-
$[2] = t8;
|
|
56
|
-
$[3] = t10;
|
|
57
|
-
} else {
|
|
58
|
-
t10 = $[3];
|
|
59
|
-
}
|
|
60
|
-
const tabs = t10;
|
|
61
|
-
const forceRender = t1 === undefined ? false : t1;
|
|
62
|
-
const indexPath = t2 === undefined ? "" : t2;
|
|
63
|
-
const parentPath = t3 === undefined ? "" : t3;
|
|
64
|
-
const parentSchemaPath = t4 === undefined ? "" : t4;
|
|
65
|
-
const path = t5 === undefined ? "" : t5;
|
|
66
|
-
const schemaPath = t6 === undefined ? "" : t6;
|
|
67
42
|
const {
|
|
68
43
|
getPreference,
|
|
69
44
|
setPreference
|
|
@@ -77,205 +52,123 @@ const TabsFieldComponent = props => {
|
|
|
77
52
|
const {
|
|
78
53
|
isWithinCollapsible
|
|
79
54
|
} = useCollapsible();
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
$[5] = t11;
|
|
95
|
-
} else {
|
|
96
|
-
t11 = $[5];
|
|
97
|
-
}
|
|
98
|
-
const tabStates = useFormFields(t11);
|
|
99
|
-
let t12;
|
|
100
|
-
if ($[6] !== tabStates) {
|
|
101
|
-
t12 = () => tabStates.filter(_temp)?.[0]?.index ?? 0;
|
|
102
|
-
$[6] = tabStates;
|
|
103
|
-
$[7] = t12;
|
|
104
|
-
} else {
|
|
105
|
-
t12 = $[7];
|
|
106
|
-
}
|
|
107
|
-
const [activeTabIndex, setActiveTabIndex] = useState(t12);
|
|
55
|
+
const tabStates = useFormFields(([fields]) => {
|
|
56
|
+
return tabs.map((tab, index) => {
|
|
57
|
+
const id = tab?.id;
|
|
58
|
+
return {
|
|
59
|
+
index,
|
|
60
|
+
passesCondition: fields?.[id]?.passesCondition ?? true,
|
|
61
|
+
tab
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
const [activeTabIndex, setActiveTabIndex] = useState(() => tabStates.filter(({
|
|
66
|
+
passesCondition
|
|
67
|
+
}) => passesCondition)?.[0]?.index ?? 0);
|
|
68
|
+
const hasUserSelectedTab = useRef(false);
|
|
108
69
|
const tabsPrefKey = `tabs-${indexPath}`;
|
|
109
70
|
const activeTabInfo = tabStates[activeTabIndex];
|
|
110
71
|
const activeTabConfig = activeTabInfo?.tab;
|
|
111
72
|
const activeTabDescription = activeTabConfig?.admin?.description ?? activeTabConfig?.description;
|
|
112
|
-
const activeTabStaticDescription = typeof activeTabDescription ===
|
|
73
|
+
const activeTabStaticDescription = typeof activeTabDescription === 'function' ? activeTabDescription({
|
|
113
74
|
i18n,
|
|
114
75
|
t: i18n.t
|
|
115
76
|
}) : activeTabDescription;
|
|
116
|
-
const hasVisibleTabs = tabStates.some(
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
}
|
|
77
|
+
const hasVisibleTabs = tabStates.some(({
|
|
78
|
+
passesCondition: passesCondition_0
|
|
79
|
+
}) => passesCondition_0);
|
|
80
|
+
const handleTabChange = useCallback(async incomingTabIndex => {
|
|
81
|
+
setActiveTabIndex(incomingTabIndex);
|
|
82
|
+
const existingPreferences = await getPreference(preferencesKey);
|
|
83
|
+
if (preferencesKey) {
|
|
84
|
+
void setPreference(preferencesKey, {
|
|
85
|
+
...existingPreferences,
|
|
86
|
+
...(path ? {
|
|
87
|
+
fields: {
|
|
88
|
+
...(existingPreferences?.fields || {}),
|
|
89
|
+
[path]: {
|
|
90
|
+
...existingPreferences?.fields?.[path],
|
|
91
|
+
tabIndex: incomingTabIndex
|
|
132
92
|
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
93
|
+
}
|
|
94
|
+
} : {
|
|
95
|
+
fields: {
|
|
96
|
+
...existingPreferences?.fields,
|
|
97
|
+
[tabsPrefKey]: {
|
|
98
|
+
...existingPreferences?.fields?.[tabsPrefKey],
|
|
99
|
+
tabIndex: incomingTabIndex
|
|
140
100
|
}
|
|
141
|
-
}
|
|
101
|
+
}
|
|
102
|
+
})
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}, [getPreference, preferencesKey, setPreference, path, tabsPrefKey]);
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
if (preferencesKey) {
|
|
108
|
+
const restoreTabFromPreferences = async () => {
|
|
109
|
+
const existingPreferences_0 = await getPreference(preferencesKey);
|
|
110
|
+
// A tab selected while this read was in flight wins. Restoring afterwards
|
|
111
|
+
// would move the user off the tab they just opened
|
|
112
|
+
if (hasUserSelectedTab.current) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const storedTabIndex = path ? existingPreferences_0?.fields?.[path]?.tabIndex : existingPreferences_0?.fields?.[tabsPrefKey]?.tabIndex;
|
|
116
|
+
const restoredTabIndex = resolveRestoredTabIndex({
|
|
117
|
+
storedTabIndex,
|
|
118
|
+
tabCount: tabStates.length
|
|
142
119
|
});
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
$[8] = getPreference;
|
|
146
|
-
$[9] = path;
|
|
147
|
-
$[10] = preferencesKey;
|
|
148
|
-
$[11] = setPreference;
|
|
149
|
-
$[12] = tabsPrefKey;
|
|
150
|
-
$[13] = t13;
|
|
151
|
-
} else {
|
|
152
|
-
t13 = $[13];
|
|
153
|
-
}
|
|
154
|
-
const handleTabChange = t13;
|
|
155
|
-
let t14;
|
|
156
|
-
if ($[14] !== getPreference || $[15] !== path || $[16] !== preferencesKey || $[17] !== tabStates.length || $[18] !== tabsPrefKey) {
|
|
157
|
-
t14 = () => {
|
|
158
|
-
if (preferencesKey) {
|
|
159
|
-
const getInitialPref = async () => {
|
|
160
|
-
const existingPreferences_0 = await getPreference(preferencesKey);
|
|
161
|
-
const initialIndex = path ? existingPreferences_0?.fields?.[path]?.tabIndex : existingPreferences_0?.fields?.[tabsPrefKey]?.tabIndex;
|
|
162
|
-
const newIndex = typeof initialIndex === "number" && initialIndex < tabStates.length ? initialIndex : 0;
|
|
163
|
-
setActiveTabIndex(newIndex);
|
|
164
|
-
};
|
|
165
|
-
getInitialPref();
|
|
166
|
-
}
|
|
167
|
-
};
|
|
168
|
-
$[14] = getPreference;
|
|
169
|
-
$[15] = path;
|
|
170
|
-
$[16] = preferencesKey;
|
|
171
|
-
$[17] = tabStates.length;
|
|
172
|
-
$[18] = tabsPrefKey;
|
|
173
|
-
$[19] = t14;
|
|
174
|
-
} else {
|
|
175
|
-
t14 = $[19];
|
|
176
|
-
}
|
|
177
|
-
let t15;
|
|
178
|
-
if ($[20] !== getPreference || $[21] !== parentPath || $[22] !== parentSchemaPath || $[23] !== path || $[24] !== preferencesKey || $[25] !== tabs || $[26] !== tabsPrefKey) {
|
|
179
|
-
t15 = [path, getPreference, preferencesKey, tabsPrefKey, tabs, parentPath, parentSchemaPath];
|
|
180
|
-
$[20] = getPreference;
|
|
181
|
-
$[21] = parentPath;
|
|
182
|
-
$[22] = parentSchemaPath;
|
|
183
|
-
$[23] = path;
|
|
184
|
-
$[24] = preferencesKey;
|
|
185
|
-
$[25] = tabs;
|
|
186
|
-
$[26] = tabsPrefKey;
|
|
187
|
-
$[27] = t15;
|
|
188
|
-
} else {
|
|
189
|
-
t15 = $[27];
|
|
190
|
-
}
|
|
191
|
-
useEffect(t14, t15);
|
|
192
|
-
let t16;
|
|
193
|
-
if ($[28] !== activeTabInfo?.passesCondition || $[29] !== handleTabChange || $[30] !== tabStates) {
|
|
194
|
-
t16 = () => {
|
|
195
|
-
if (activeTabInfo?.passesCondition === false) {
|
|
196
|
-
const nextTab = tabStates.find(_temp3);
|
|
197
|
-
if (nextTab) {
|
|
198
|
-
handleTabChange(nextTab.index);
|
|
120
|
+
if (typeof restoredTabIndex === 'number') {
|
|
121
|
+
setActiveTabIndex(restoredTabIndex);
|
|
199
122
|
}
|
|
123
|
+
};
|
|
124
|
+
void restoreTabFromPreferences();
|
|
125
|
+
}
|
|
126
|
+
}, [path, getPreference, preferencesKey, tabsPrefKey, tabs, tabStates.length, parentPath, parentSchemaPath]);
|
|
127
|
+
useEffect(() => {
|
|
128
|
+
if (activeTabInfo?.passesCondition === false) {
|
|
129
|
+
const nextTab = tabStates.find(({
|
|
130
|
+
passesCondition: passesCondition_1
|
|
131
|
+
}) => passesCondition_1);
|
|
132
|
+
if (nextTab) {
|
|
133
|
+
void handleTabChange(nextTab.index);
|
|
200
134
|
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
t16 = $[31];
|
|
208
|
-
}
|
|
209
|
-
let t17;
|
|
210
|
-
if ($[32] !== activeTabInfo || $[33] !== handleTabChange || $[34] !== tabStates) {
|
|
211
|
-
t17 = [activeTabInfo, tabStates, handleTabChange];
|
|
212
|
-
$[32] = activeTabInfo;
|
|
213
|
-
$[33] = handleTabChange;
|
|
214
|
-
$[34] = tabStates;
|
|
215
|
-
$[35] = t17;
|
|
216
|
-
} else {
|
|
217
|
-
t17 = $[35];
|
|
218
|
-
}
|
|
219
|
-
useEffect(t16, t17);
|
|
220
|
-
const t18 = isWithinCollapsible && `${baseClass}--within-collapsible`;
|
|
221
|
-
const t19 = !hasVisibleTabs && `${baseClass}--hidden`;
|
|
222
|
-
let t20;
|
|
223
|
-
if ($[36] !== className || $[37] !== t18 || $[38] !== t19) {
|
|
224
|
-
t20 = [fieldBaseClass, className, baseClass, t18, t19].filter(Boolean);
|
|
225
|
-
$[36] = className;
|
|
226
|
-
$[37] = t18;
|
|
227
|
-
$[38] = t19;
|
|
228
|
-
$[39] = t20;
|
|
229
|
-
} else {
|
|
230
|
-
t20 = $[39];
|
|
231
|
-
}
|
|
232
|
-
let t21;
|
|
233
|
-
if ($[40] !== activeTabIndex || $[41] !== handleTabChange || $[42] !== path) {
|
|
234
|
-
t21 = t22 => {
|
|
235
|
-
const {
|
|
236
|
-
index: index_0,
|
|
237
|
-
passesCondition: passesCondition_2,
|
|
238
|
-
tab: tab_0
|
|
239
|
-
} = t22;
|
|
240
|
-
return _jsx(TabComponent, {
|
|
241
|
-
hidden: !passesCondition_2,
|
|
242
|
-
isActive: activeTabIndex === index_0,
|
|
243
|
-
parentPath: path,
|
|
244
|
-
setIsActive: () => {
|
|
245
|
-
handleTabChange(index_0);
|
|
246
|
-
},
|
|
247
|
-
tab: tab_0
|
|
248
|
-
}, index_0);
|
|
249
|
-
};
|
|
250
|
-
$[40] = activeTabIndex;
|
|
251
|
-
$[41] = handleTabChange;
|
|
252
|
-
$[42] = path;
|
|
253
|
-
$[43] = t21;
|
|
254
|
-
} else {
|
|
255
|
-
t21 = $[43];
|
|
256
|
-
}
|
|
257
|
-
return _jsx("div", {
|
|
258
|
-
className: t20.join(" "),
|
|
259
|
-
children: _jsxs(TabsProvider, {
|
|
260
|
-
children: [_jsx("div", {
|
|
135
|
+
}
|
|
136
|
+
}, [activeTabInfo, tabStates, handleTabChange]);
|
|
137
|
+
return /*#__PURE__*/_jsx("div", {
|
|
138
|
+
className: [fieldBaseClass, className, baseClass, isWithinCollapsible && `${baseClass}--within-collapsible`, !hasVisibleTabs && `${baseClass}--hidden`].filter(Boolean).join(' '),
|
|
139
|
+
children: /*#__PURE__*/_jsxs(TabsProvider, {
|
|
140
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
261
141
|
className: `${baseClass}__tabs-wrap`,
|
|
262
|
-
children: _jsx("div", {
|
|
142
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
263
143
|
className: `${baseClass}__tabs`,
|
|
264
|
-
children: tabStates.map(
|
|
144
|
+
children: tabStates.map(({
|
|
145
|
+
index: index_0,
|
|
146
|
+
passesCondition: passesCondition_2,
|
|
147
|
+
tab: tab_0
|
|
148
|
+
}) => /*#__PURE__*/_jsx(TabComponent, {
|
|
149
|
+
hidden: !passesCondition_2,
|
|
150
|
+
isActive: activeTabIndex === index_0,
|
|
151
|
+
parentPath: path,
|
|
152
|
+
setIsActive: () => {
|
|
153
|
+
hasUserSelectedTab.current = true;
|
|
154
|
+
void handleTabChange(index_0);
|
|
155
|
+
},
|
|
156
|
+
tab: tab_0
|
|
157
|
+
}, index_0))
|
|
265
158
|
})
|
|
266
|
-
}), _jsx("div", {
|
|
159
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
267
160
|
className: `${baseClass}__content-wrap`,
|
|
268
|
-
children: activeTabConfig && _jsx(TabContent, {
|
|
161
|
+
children: activeTabConfig && /*#__PURE__*/_jsx(TabContent, {
|
|
269
162
|
description: activeTabStaticDescription,
|
|
270
163
|
field: activeTabConfig,
|
|
271
|
-
forceRender,
|
|
164
|
+
forceRender: forceRender,
|
|
272
165
|
hidden: false,
|
|
273
166
|
parentIndexPath: indexPath,
|
|
274
167
|
parentPath: path,
|
|
275
168
|
parentSchemaPath: schemaPath,
|
|
276
|
-
path,
|
|
277
|
-
permissions: permissions && typeof permissions ===
|
|
278
|
-
readOnly,
|
|
169
|
+
path: path,
|
|
170
|
+
permissions: permissions && typeof permissions === 'object' && 'name' in activeTabConfig ? permissions[activeTabConfig.name] && typeof permissions[activeTabConfig.name] === 'object' && 'fields' in permissions[activeTabConfig.name] ? permissions[activeTabConfig.name].fields : permissions[activeTabConfig.name] : permissions,
|
|
171
|
+
readOnly: readOnly,
|
|
279
172
|
tabIndex: activeTabIndex
|
|
280
173
|
})
|
|
281
174
|
})]
|
|
@@ -393,22 +286,4 @@ function TabContent(t0) {
|
|
|
393
286
|
}
|
|
394
287
|
return t2;
|
|
395
288
|
}
|
|
396
|
-
function _temp(t0) {
|
|
397
|
-
const {
|
|
398
|
-
passesCondition
|
|
399
|
-
} = t0;
|
|
400
|
-
return passesCondition;
|
|
401
|
-
}
|
|
402
|
-
function _temp2(t0) {
|
|
403
|
-
const {
|
|
404
|
-
passesCondition: passesCondition_0
|
|
405
|
-
} = t0;
|
|
406
|
-
return passesCondition_0;
|
|
407
|
-
}
|
|
408
|
-
function _temp3(t0) {
|
|
409
|
-
const {
|
|
410
|
-
passesCondition: passesCondition_1
|
|
411
|
-
} = t0;
|
|
412
|
-
return passesCondition_1;
|
|
413
|
-
}
|
|
414
289
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","getTranslation","getFieldPaths","toKebabCase","React","useCallback","useEffect","useState","useCollapsible","RenderCustomComponent","useFormFields","RenderFields","useField","withCondition","useDocumentInfo","usePreferences","useTranslation","FieldDescription","fieldBaseClass","TabsProvider","TabComponent","baseClass","TabsFieldComponent","props","$","field","t0","forceRender","t1","indexPath","t2","parentPath","t3","parentSchemaPath","t4","path","t5","permissions","readOnly","schemaPath","t6","admin","t7","tabs","t8","t9","undefined","className","t10","getPreference","setPreference","preferencesKey","i18n","isWithinCollapsible","t11","t12","fields","map","tab","index","id","passesCondition","tabStates","filter","_temp","activeTabIndex","setActiveTabIndex","tabsPrefKey","activeTabInfo","activeTabConfig","activeTabDescription","description","activeTabStaticDescription","t","hasVisibleTabs","some","_temp2","t13","incomingTabIndex","existingPreferences","tabIndex","handleTabChange","t14","length","getInitialPref","existingPreferences_0","initialIndex","newIndex","t15","t16","nextTab","find","_temp3","t17","t18","t19","t20","Boolean","t21","t22","index_0","passesCondition_2","tab_0","_jsx","hidden","isActive","setIsActive","join","children","_jsxs","TabContent","parentIndexPath","name","TabsField","label","customComponents","Field","bb0","AfterInput","BeforeInput","Description","CustomComponent","Fallback","marginPlacement","passesCondition_0","passesCondition_1"],"sources":["../../../src/fields/Tabs/index.tsx"],"sourcesContent":["'use client'\nimport type {\n ClientComponentProps,\n ClientTab,\n DocumentPreferences,\n SanitizedFieldPermissions,\n StaticDescription,\n TabsFieldClientComponent,\n} from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { getFieldPaths, toKebabCase } from 'payload/shared'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { useCollapsible } from '../../elements/Collapsible/provider.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { useFormFields } from '../../forms/Form/index.js'\nimport { RenderFields } from '../../forms/RenderFields/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { usePreferences } from '../../providers/Preferences/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { FieldDescription } from '../FieldDescription/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { TabsProvider } from './provider.js'\nimport { TabComponent } from './Tab/index.js'\nimport './index.scss'\n\nconst baseClass = 'tabs-field'\n\nexport { TabsProvider }\n\nconst TabsFieldComponent: TabsFieldClientComponent = (props) => {\n const {\n field: { admin: { className } = {}, tabs = [] },\n forceRender = false,\n indexPath = '',\n parentPath = '',\n parentSchemaPath = '',\n path = '',\n permissions,\n readOnly,\n schemaPath = '',\n } = props\n\n const { getPreference, setPreference } = usePreferences()\n const { preferencesKey } = useDocumentInfo()\n const { i18n } = useTranslation()\n const { isWithinCollapsible } = useCollapsible()\n\n const tabStates = useFormFields(([fields]) => {\n return tabs.map((tab, index) => {\n const id = tab?.id\n\n return {\n index,\n passesCondition: fields?.[id]?.passesCondition ?? true,\n tab,\n }\n })\n })\n\n const [activeTabIndex, setActiveTabIndex] = useState<number>(\n () => tabStates.filter(({ passesCondition }) => passesCondition)?.[0]?.index ?? 0,\n )\n\n const tabsPrefKey = `tabs-${indexPath}`\n\n const activeTabInfo = tabStates[activeTabIndex]\n const activeTabConfig = activeTabInfo?.tab\n const activeTabDescription = activeTabConfig?.admin?.description ?? activeTabConfig?.description\n\n const activeTabStaticDescription =\n typeof activeTabDescription === 'function'\n ? activeTabDescription({ i18n, t: i18n.t })\n : activeTabDescription\n\n const hasVisibleTabs = tabStates.some(({ passesCondition }) => passesCondition)\n\n const handleTabChange = useCallback(\n async (incomingTabIndex: number): Promise<void> => {\n setActiveTabIndex(incomingTabIndex)\n\n const existingPreferences: DocumentPreferences = await getPreference(preferencesKey)\n\n if (preferencesKey) {\n void setPreference(preferencesKey, {\n ...existingPreferences,\n ...(path\n ? {\n fields: {\n ...(existingPreferences?.fields || {}),\n [path]: {\n ...existingPreferences?.fields?.[path],\n tabIndex: incomingTabIndex,\n },\n },\n }\n : {\n fields: {\n ...existingPreferences?.fields,\n [tabsPrefKey]: {\n ...existingPreferences?.fields?.[tabsPrefKey],\n tabIndex: incomingTabIndex,\n },\n },\n }),\n })\n }\n },\n [getPreference, preferencesKey, setPreference, path, tabsPrefKey],\n )\n\n useEffect(() => {\n if (preferencesKey) {\n const getInitialPref = async () => {\n const existingPreferences: DocumentPreferences = await getPreference(preferencesKey)\n const initialIndex = path\n ? existingPreferences?.fields?.[path]?.tabIndex\n : existingPreferences?.fields?.[tabsPrefKey]?.tabIndex\n\n const newIndex = typeof initialIndex === 'number' && initialIndex < tabStates.length ? initialIndex : 0\n setActiveTabIndex(newIndex)\n }\n void getInitialPref()\n }\n }, [path, getPreference, preferencesKey, tabsPrefKey, tabs, parentPath, parentSchemaPath])\n\n useEffect(() => {\n if (activeTabInfo?.passesCondition === false) {\n const nextTab = tabStates.find(({ passesCondition }) => passesCondition)\n if (nextTab) {\n void handleTabChange(nextTab.index)\n }\n }\n }, [activeTabInfo, tabStates, handleTabChange])\n\n return (\n <div\n className={[\n fieldBaseClass,\n className,\n baseClass,\n isWithinCollapsible && `${baseClass}--within-collapsible`,\n !hasVisibleTabs && `${baseClass}--hidden`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <TabsProvider>\n <div className={`${baseClass}__tabs-wrap`}>\n <div className={`${baseClass}__tabs`}>\n {tabStates.map(({ index, passesCondition, tab }) => (\n <TabComponent\n hidden={!passesCondition}\n isActive={activeTabIndex === index}\n key={index}\n parentPath={path}\n setIsActive={() => {\n void handleTabChange(index)\n }}\n tab={tab}\n />\n ))}\n </div>\n </div>\n <div className={`${baseClass}__content-wrap`}>\n {activeTabConfig && (\n <TabContent\n description={activeTabStaticDescription}\n field={activeTabConfig}\n forceRender={forceRender}\n hidden={false}\n parentIndexPath={indexPath}\n parentPath={path}\n parentSchemaPath={schemaPath}\n path={path}\n permissions={\n permissions && typeof permissions === 'object' && 'name' in activeTabConfig\n ? permissions[activeTabConfig.name] &&\n typeof permissions[activeTabConfig.name] === 'object' &&\n 'fields' in permissions[activeTabConfig.name]\n ? permissions[activeTabConfig.name].fields\n : permissions[activeTabConfig.name]\n : permissions\n }\n readOnly={readOnly}\n tabIndex={activeTabIndex}\n />\n )}\n </div>\n </TabsProvider>\n </div>\n )\n}\n\nexport const TabsField = withCondition(TabsFieldComponent)\n\ntype ActiveTabProps = {\n readonly description: StaticDescription\n readonly field: ClientTab\n readonly hidden: boolean\n readonly label?: string\n readonly parentIndexPath: string\n readonly parentPath: string\n readonly parentSchemaPath: string\n readonly path: string\n readonly permissions: SanitizedFieldPermissions\n readonly readOnly: boolean\n readonly tabIndex: number\n} & Pick<ClientComponentProps, 'forceRender'>\n\nfunction TabContent({\n description,\n field,\n forceRender,\n hidden,\n label,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n permissions,\n readOnly,\n tabIndex,\n}: ActiveTabProps) {\n const { i18n } = useTranslation()\n\n const { customComponents: { AfterInput, BeforeInput, Description, Field } = {} } = useField()\n\n if (Field) {\n return Field\n }\n\n const { indexPath, path, schemaPath } = getFieldPaths({\n field,\n index: tabIndex,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n })\n\n return (\n <div\n className={[\n hidden && `${baseClass}__tab--hidden`,\n `${baseClass}__tab`,\n label && `${baseClass}__tabConfigLabel-${toKebabCase(getTranslation(label, i18n))}`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={\n <FieldDescription description={description} marginPlacement=\"bottom\" path={parentPath} />\n }\n />\n {BeforeInput}\n <RenderFields\n fields={field.fields}\n forceRender={forceRender}\n parentIndexPath={indexPath}\n parentPath={path}\n parentSchemaPath={schemaPath}\n permissions={permissions}\n readOnly={readOnly}\n />\n {AfterInput}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","getTranslation","getFieldPaths","toKebabCase","React","useCallback","useEffect","useRef","useState","useCollapsible","RenderCustomComponent","useFormFields","RenderFields","useField","withCondition","useDocumentInfo","usePreferences","useTranslation","FieldDescription","fieldBaseClass","TabsProvider","resolveRestoredTabIndex","TabComponent","baseClass","TabsFieldComponent","props","field","admin","className","tabs","forceRender","indexPath","parentPath","parentSchemaPath","path","permissions","readOnly","schemaPath","getPreference","setPreference","preferencesKey","i18n","isWithinCollapsible","tabStates","fields","map","tab","index","id","passesCondition","activeTabIndex","setActiveTabIndex","filter","hasUserSelectedTab","tabsPrefKey","activeTabInfo","activeTabConfig","activeTabDescription","description","activeTabStaticDescription","t","hasVisibleTabs","some","handleTabChange","incomingTabIndex","existingPreferences","tabIndex","restoreTabFromPreferences","current","storedTabIndex","restoredTabIndex","tabCount","length","nextTab","find","_jsx","Boolean","join","_jsxs","hidden","isActive","setIsActive","TabContent","parentIndexPath","name","TabsField","t0","$","label","customComponents","t1","t2","t3","Field","bb0","AfterInput","BeforeInput","Description","undefined","t4","t5","t6","children","CustomComponent","Fallback","marginPlacement"],"sources":["../../../src/fields/Tabs/index.tsx"],"sourcesContent":["'use client'\nimport type {\n ClientComponentProps,\n ClientTab,\n DocumentPreferences,\n SanitizedFieldPermissions,\n StaticDescription,\n TabsFieldClientComponent,\n} from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { getFieldPaths, toKebabCase } from 'payload/shared'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport { useCollapsible } from '../../elements/Collapsible/provider.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { useFormFields } from '../../forms/Form/index.js'\nimport { RenderFields } from '../../forms/RenderFields/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { usePreferences } from '../../providers/Preferences/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { FieldDescription } from '../FieldDescription/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { TabsProvider } from './provider.js'\nimport { resolveRestoredTabIndex } from './resolveRestoredTabIndex.js'\nimport { TabComponent } from './Tab/index.js'\nimport './index.scss'\n\nconst baseClass = 'tabs-field'\n\nexport { TabsProvider }\n\nconst TabsFieldComponent: TabsFieldClientComponent = (props) => {\n const {\n field: { admin: { className } = {}, tabs = [] },\n forceRender = false,\n indexPath = '',\n parentPath = '',\n parentSchemaPath = '',\n path = '',\n permissions,\n readOnly,\n schemaPath = '',\n } = props\n\n const { getPreference, setPreference } = usePreferences()\n const { preferencesKey } = useDocumentInfo()\n const { i18n } = useTranslation()\n const { isWithinCollapsible } = useCollapsible()\n\n const tabStates = useFormFields(([fields]) => {\n return tabs.map((tab, index) => {\n const id = tab?.id\n\n return {\n index,\n passesCondition: fields?.[id]?.passesCondition ?? true,\n tab,\n }\n })\n })\n\n const [activeTabIndex, setActiveTabIndex] = useState<number>(\n () => tabStates.filter(({ passesCondition }) => passesCondition)?.[0]?.index ?? 0,\n )\n\n const hasUserSelectedTab = useRef(false)\n\n const tabsPrefKey = `tabs-${indexPath}`\n\n const activeTabInfo = tabStates[activeTabIndex]\n const activeTabConfig = activeTabInfo?.tab\n const activeTabDescription = activeTabConfig?.admin?.description ?? activeTabConfig?.description\n\n const activeTabStaticDescription =\n typeof activeTabDescription === 'function'\n ? activeTabDescription({ i18n, t: i18n.t })\n : activeTabDescription\n\n const hasVisibleTabs = tabStates.some(({ passesCondition }) => passesCondition)\n\n const handleTabChange = useCallback(\n async (incomingTabIndex: number): Promise<void> => {\n setActiveTabIndex(incomingTabIndex)\n\n const existingPreferences: DocumentPreferences = await getPreference(preferencesKey)\n\n if (preferencesKey) {\n void setPreference(preferencesKey, {\n ...existingPreferences,\n ...(path\n ? {\n fields: {\n ...(existingPreferences?.fields || {}),\n [path]: {\n ...existingPreferences?.fields?.[path],\n tabIndex: incomingTabIndex,\n },\n },\n }\n : {\n fields: {\n ...existingPreferences?.fields,\n [tabsPrefKey]: {\n ...existingPreferences?.fields?.[tabsPrefKey],\n tabIndex: incomingTabIndex,\n },\n },\n }),\n })\n }\n },\n [getPreference, preferencesKey, setPreference, path, tabsPrefKey],\n )\n\n useEffect(() => {\n if (preferencesKey) {\n const restoreTabFromPreferences = async () => {\n const existingPreferences: DocumentPreferences = await getPreference(preferencesKey)\n\n // A tab selected while this read was in flight wins. Restoring afterwards\n // would move the user off the tab they just opened\n if (hasUserSelectedTab.current) {\n return\n }\n\n const storedTabIndex = path\n ? existingPreferences?.fields?.[path]?.tabIndex\n : existingPreferences?.fields?.[tabsPrefKey]?.tabIndex\n\n const restoredTabIndex = resolveRestoredTabIndex({\n storedTabIndex,\n tabCount: tabStates.length,\n })\n\n if (typeof restoredTabIndex === 'number') {\n setActiveTabIndex(restoredTabIndex)\n }\n }\n void restoreTabFromPreferences()\n }\n }, [\n path,\n getPreference,\n preferencesKey,\n tabsPrefKey,\n tabs,\n tabStates.length,\n parentPath,\n parentSchemaPath,\n ])\n\n useEffect(() => {\n if (activeTabInfo?.passesCondition === false) {\n const nextTab = tabStates.find(({ passesCondition }) => passesCondition)\n if (nextTab) {\n void handleTabChange(nextTab.index)\n }\n }\n }, [activeTabInfo, tabStates, handleTabChange])\n\n return (\n <div\n className={[\n fieldBaseClass,\n className,\n baseClass,\n isWithinCollapsible && `${baseClass}--within-collapsible`,\n !hasVisibleTabs && `${baseClass}--hidden`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <TabsProvider>\n <div className={`${baseClass}__tabs-wrap`}>\n <div className={`${baseClass}__tabs`}>\n {tabStates.map(({ index, passesCondition, tab }) => (\n <TabComponent\n hidden={!passesCondition}\n isActive={activeTabIndex === index}\n key={index}\n parentPath={path}\n setIsActive={() => {\n hasUserSelectedTab.current = true\n void handleTabChange(index)\n }}\n tab={tab}\n />\n ))}\n </div>\n </div>\n <div className={`${baseClass}__content-wrap`}>\n {activeTabConfig && (\n <TabContent\n description={activeTabStaticDescription}\n field={activeTabConfig}\n forceRender={forceRender}\n hidden={false}\n parentIndexPath={indexPath}\n parentPath={path}\n parentSchemaPath={schemaPath}\n path={path}\n permissions={\n permissions && typeof permissions === 'object' && 'name' in activeTabConfig\n ? permissions[activeTabConfig.name] &&\n typeof permissions[activeTabConfig.name] === 'object' &&\n 'fields' in permissions[activeTabConfig.name]\n ? permissions[activeTabConfig.name].fields\n : permissions[activeTabConfig.name]\n : permissions\n }\n readOnly={readOnly}\n tabIndex={activeTabIndex}\n />\n )}\n </div>\n </TabsProvider>\n </div>\n )\n}\n\nexport const TabsField = withCondition(TabsFieldComponent)\n\ntype ActiveTabProps = {\n readonly description: StaticDescription\n readonly field: ClientTab\n readonly hidden: boolean\n readonly label?: string\n readonly parentIndexPath: string\n readonly parentPath: string\n readonly parentSchemaPath: string\n readonly path: string\n readonly permissions: SanitizedFieldPermissions\n readonly readOnly: boolean\n readonly tabIndex: number\n} & Pick<ClientComponentProps, 'forceRender'>\n\nfunction TabContent({\n description,\n field,\n forceRender,\n hidden,\n label,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n permissions,\n readOnly,\n tabIndex,\n}: ActiveTabProps) {\n const { i18n } = useTranslation()\n\n const { customComponents: { AfterInput, BeforeInput, Description, Field } = {} } = useField()\n\n if (Field) {\n return Field\n }\n\n const { indexPath, path, schemaPath } = getFieldPaths({\n field,\n index: tabIndex,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n })\n\n return (\n <div\n className={[\n hidden && `${baseClass}__tab--hidden`,\n `${baseClass}__tab`,\n label && `${baseClass}__tabConfigLabel-${toKebabCase(getTranslation(label, i18n))}`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={\n <FieldDescription description={description} marginPlacement=\"bottom\" path={parentPath} />\n }\n />\n {BeforeInput}\n <RenderFields\n fields={field.fields}\n forceRender={forceRender}\n parentIndexPath={indexPath}\n parentPath={path}\n parentSchemaPath={schemaPath}\n permissions={permissions}\n readOnly={readOnly}\n />\n {AfterInput}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
type Args = {
|
|
2
|
+
/**
|
|
3
|
+
* The `tabIndex` read back from the document's stored preferences. Untyped
|
|
4
|
+
* because preferences are user data and may hold anything.
|
|
5
|
+
*/
|
|
6
|
+
storedTabIndex: unknown;
|
|
7
|
+
tabCount: number;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Resolves which tab a document's stored preferences ask for.
|
|
11
|
+
*
|
|
12
|
+
* Returns `undefined` when there is nothing valid to restore, so the caller
|
|
13
|
+
* leaves the current tab alone rather than falling back to the first tab. A
|
|
14
|
+
* fallback would move the user off a tab they had already selected, because the
|
|
15
|
+
* preference read is asynchronous and can land after the selection.
|
|
16
|
+
*/
|
|
17
|
+
export declare const resolveRestoredTabIndex: ({ storedTabIndex, tabCount }: Args) => number | undefined;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=resolveRestoredTabIndex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveRestoredTabIndex.d.ts","sourceRoot":"","sources":["../../../src/fields/Tabs/resolveRestoredTabIndex.ts"],"names":[],"mappings":"AAAA,KAAK,IAAI,GAAG;IACV;;;OAGG;IACH,cAAc,EAAE,OAAO,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,iCAAkC,IAAI,KAAG,MAAM,GAAG,SAUrF,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves which tab a document's stored preferences ask for.
|
|
3
|
+
*
|
|
4
|
+
* Returns `undefined` when there is nothing valid to restore, so the caller
|
|
5
|
+
* leaves the current tab alone rather than falling back to the first tab. A
|
|
6
|
+
* fallback would move the user off a tab they had already selected, because the
|
|
7
|
+
* preference read is asynchronous and can land after the selection.
|
|
8
|
+
*/export const resolveRestoredTabIndex = ({
|
|
9
|
+
storedTabIndex,
|
|
10
|
+
tabCount
|
|
11
|
+
}) => {
|
|
12
|
+
if (typeof storedTabIndex !== 'number' || !Number.isInteger(storedTabIndex)) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
if (storedTabIndex < 0 || storedTabIndex >= tabCount) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
return storedTabIndex;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=resolveRestoredTabIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveRestoredTabIndex.js","names":["resolveRestoredTabIndex","storedTabIndex","tabCount","Number","isInteger","undefined"],"sources":["../../../src/fields/Tabs/resolveRestoredTabIndex.ts"],"sourcesContent":["type Args = {\n /**\n * The `tabIndex` read back from the document's stored preferences. Untyped\n * because preferences are user data and may hold anything.\n */\n storedTabIndex: unknown\n tabCount: number\n}\n\n/**\n * Resolves which tab a document's stored preferences ask for.\n *\n * Returns `undefined` when there is nothing valid to restore, so the caller\n * leaves the current tab alone rather than falling back to the first tab. A\n * fallback would move the user off a tab they had already selected, because the\n * preference read is asynchronous and can land after the selection.\n */\nexport const resolveRestoredTabIndex = ({ storedTabIndex, tabCount }: Args): number | undefined => {\n if (typeof storedTabIndex !== 'number' || !Number.isInteger(storedTabIndex)) {\n return undefined\n }\n\n if (storedTabIndex < 0 || storedTabIndex >= tabCount) {\n return undefined\n }\n\n return storedTabIndex\n}\n"],"mappings":"AASA;;;;;;;GAQA,OAAO,MAAMA,uBAAA,GAA0BA,CAAC;EAAEC,cAAc;EAAEC;AAAQ,CAAQ;EACxE,IAAI,OAAOD,cAAA,KAAmB,YAAY,CAACE,MAAA,CAAOC,SAAS,CAACH,cAAA,GAAiB;IAC3E,OAAOI,SAAA;EACT;EAEA,IAAIJ,cAAA,GAAiB,KAAKA,cAAA,IAAkBC,QAAA,EAAU;IACpD,OAAOG,SAAA;EACT;EAEA,OAAOJ,cAAA;AACT","ignoreList":[]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { resolveRestoredTabIndex } from './resolveRestoredTabIndex.js';
|
|
3
|
+
describe('resolveRestoredTabIndex', () => {
|
|
4
|
+
it('should restore a stored index that is within range', () => {
|
|
5
|
+
expect(resolveRestoredTabIndex({
|
|
6
|
+
storedTabIndex: 2,
|
|
7
|
+
tabCount: 5
|
|
8
|
+
})).toBe(2);
|
|
9
|
+
});
|
|
10
|
+
it('should restore the first tab when it is the stored index', () => {
|
|
11
|
+
expect(resolveRestoredTabIndex({
|
|
12
|
+
storedTabIndex: 0,
|
|
13
|
+
tabCount: 5
|
|
14
|
+
})).toBe(0);
|
|
15
|
+
});
|
|
16
|
+
it('should restore nothing when no index is stored', () => {
|
|
17
|
+
expect(resolveRestoredTabIndex({
|
|
18
|
+
storedTabIndex: undefined,
|
|
19
|
+
tabCount: 5
|
|
20
|
+
})).toBeUndefined();
|
|
21
|
+
});
|
|
22
|
+
it('should restore nothing when the stored index is null', () => {
|
|
23
|
+
expect(resolveRestoredTabIndex({
|
|
24
|
+
storedTabIndex: null,
|
|
25
|
+
tabCount: 5
|
|
26
|
+
})).toBeUndefined();
|
|
27
|
+
});
|
|
28
|
+
it('should restore nothing when the stored index is not a number', () => {
|
|
29
|
+
expect(resolveRestoredTabIndex({
|
|
30
|
+
storedTabIndex: '2',
|
|
31
|
+
tabCount: 5
|
|
32
|
+
})).toBeUndefined();
|
|
33
|
+
});
|
|
34
|
+
it('should restore nothing when the stored index exceeds the tab count', () => {
|
|
35
|
+
expect(resolveRestoredTabIndex({
|
|
36
|
+
storedTabIndex: 5,
|
|
37
|
+
tabCount: 5
|
|
38
|
+
})).toBeUndefined();
|
|
39
|
+
});
|
|
40
|
+
it('should restore nothing when the stored index is negative', () => {
|
|
41
|
+
expect(resolveRestoredTabIndex({
|
|
42
|
+
storedTabIndex: -1,
|
|
43
|
+
tabCount: 5
|
|
44
|
+
})).toBeUndefined();
|
|
45
|
+
});
|
|
46
|
+
it('should restore nothing when there are no tabs', () => {
|
|
47
|
+
expect(resolveRestoredTabIndex({
|
|
48
|
+
storedTabIndex: 0,
|
|
49
|
+
tabCount: 0
|
|
50
|
+
})).toBeUndefined();
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=resolveRestoredTabIndex.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveRestoredTabIndex.spec.js","names":["describe","expect","it","resolveRestoredTabIndex","storedTabIndex","tabCount","toBe","undefined","toBeUndefined"],"sources":["../../../src/fields/Tabs/resolveRestoredTabIndex.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { resolveRestoredTabIndex } from './resolveRestoredTabIndex.js'\n\ndescribe('resolveRestoredTabIndex', () => {\n it('should restore a stored index that is within range', () => {\n expect(resolveRestoredTabIndex({ storedTabIndex: 2, tabCount: 5 })).toBe(2)\n })\n\n it('should restore the first tab when it is the stored index', () => {\n expect(resolveRestoredTabIndex({ storedTabIndex: 0, tabCount: 5 })).toBe(0)\n })\n\n it('should restore nothing when no index is stored', () => {\n expect(resolveRestoredTabIndex({ storedTabIndex: undefined, tabCount: 5 })).toBeUndefined()\n })\n\n it('should restore nothing when the stored index is null', () => {\n expect(resolveRestoredTabIndex({ storedTabIndex: null, tabCount: 5 })).toBeUndefined()\n })\n\n it('should restore nothing when the stored index is not a number', () => {\n expect(resolveRestoredTabIndex({ storedTabIndex: '2', tabCount: 5 })).toBeUndefined()\n })\n\n it('should restore nothing when the stored index exceeds the tab count', () => {\n expect(resolveRestoredTabIndex({ storedTabIndex: 5, tabCount: 5 })).toBeUndefined()\n })\n\n it('should restore nothing when the stored index is negative', () => {\n expect(resolveRestoredTabIndex({ storedTabIndex: -1, tabCount: 5 })).toBeUndefined()\n })\n\n it('should restore nothing when there are no tabs', () => {\n expect(resolveRestoredTabIndex({ storedTabIndex: 0, tabCount: 0 })).toBeUndefined()\n })\n})\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ;AAErC,SAASC,uBAAuB,QAAQ;AAExCH,QAAA,CAAS,2BAA2B;EAClCE,EAAA,CAAG,sDAAsD;IACvDD,MAAA,CAAOE,uBAAA,CAAwB;MAAEC,cAAA,EAAgB;MAAGC,QAAA,EAAU;IAAE,IAAIC,IAAI,CAAC;EAC3E;EAEAJ,EAAA,CAAG,4DAA4D;IAC7DD,MAAA,CAAOE,uBAAA,CAAwB;MAAEC,cAAA,EAAgB;MAAGC,QAAA,EAAU;IAAE,IAAIC,IAAI,CAAC;EAC3E;EAEAJ,EAAA,CAAG,kDAAkD;IACnDD,MAAA,CAAOE,uBAAA,CAAwB;MAAEC,cAAA,EAAgBG,SAAA;MAAWF,QAAA,EAAU;IAAE,IAAIG,aAAa;EAC3F;EAEAN,EAAA,CAAG,wDAAwD;IACzDD,MAAA,CAAOE,uBAAA,CAAwB;MAAEC,cAAA,EAAgB;MAAMC,QAAA,EAAU;IAAE,IAAIG,aAAa;EACtF;EAEAN,EAAA,CAAG,gEAAgE;IACjED,MAAA,CAAOE,uBAAA,CAAwB;MAAEC,cAAA,EAAgB;MAAKC,QAAA,EAAU;IAAE,IAAIG,aAAa;EACrF;EAEAN,EAAA,CAAG,sEAAsE;IACvED,MAAA,CAAOE,uBAAA,CAAwB;MAAEC,cAAA,EAAgB;MAAGC,QAAA,EAAU;IAAE,IAAIG,aAAa;EACnF;EAEAN,EAAA,CAAG,4DAA4D;IAC7DD,MAAA,CAAOE,uBAAA,CAAwB;MAAEC,cAAA,EAAgB,CAAC;MAAGC,QAAA,EAAU;IAAE,IAAIG,aAAa;EACpF;EAEAN,EAAA,CAAG,iDAAiD;IAClDD,MAAA,CAAOE,uBAAA,CAAwB;MAAEC,cAAA,EAAgB;MAAGC,QAAA,EAAU;IAAE,IAAIG,aAAa;EACnF;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/index.tsx"],"names":[],"mappings":"AAcA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAGnF,OAAO,KAAK,EAGV,SAAS,EAIV,MAAM,YAAY,CAAA;AAoCnB,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAs2BpC,CAAA;AAED,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,OAAO,EACP,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,SAAS,EAAE,CAAA"}
|
package/dist/forms/Form/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
4
4
|
import { dequal } from 'dequal/lite'; // lite: no need for Map and Set support
|
|
5
5
|
import { useRouter } from 'next/navigation.js';
|
|
6
6
|
import { serialize } from 'object-to-formdata';
|
|
7
|
-
import { deepCopyObjectSimpleWithoutReactComponents, getDataByPath as getDataByPathFunc, getSiblingData as getSiblingDataFunc, hasDraftValidationEnabled, reduceFieldsToValues, wait } from 'payload/shared';
|
|
7
|
+
import { deepCopyObjectSimpleWithoutReactComponents, getDataByPath as getDataByPathFunc, getSiblingData as getSiblingDataFunc, hasDraftValidationEnabled, reduceFieldsToValues, uploadRequiresServerValidation, wait } from 'payload/shared';
|
|
8
8
|
import React, { useCallback, useEffect, useReducer, useRef, useState } from 'react';
|
|
9
9
|
import { toast } from 'sonner';
|
|
10
10
|
import { FieldErrorsToast } from '../../elements/Toasts/fieldErrors.js';
|
|
@@ -446,7 +446,11 @@ export const Form = props => {
|
|
|
446
446
|
const handler = getUploadHandler({
|
|
447
447
|
collectionSlug
|
|
448
448
|
});
|
|
449
|
-
if (typeof handler === 'function'
|
|
449
|
+
if (typeof handler === 'function' && !uploadRequiresServerValidation({
|
|
450
|
+
allowRestrictedFileTypes: docConfig.upload.allowRestrictedFileTypes,
|
|
451
|
+
filename: file.name,
|
|
452
|
+
mimeType: file.type
|
|
453
|
+
})) {
|
|
450
454
|
let filename = file.name;
|
|
451
455
|
const clientUploadContext = await handler({
|
|
452
456
|
docPrefix: typeof data_5?.prefix === 'string' ? data_5.prefix : undefined,
|