payload 1.1.21 → 1.1.23
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/components/utilities.ts +1 -0
- package/dist/admin/components/elements/ListControls/getTextFieldsToBeSearched.d.ts +2 -0
- package/dist/admin/components/elements/ListControls/getTextFieldsToBeSearched.js +9 -0
- package/dist/admin/components/elements/ListControls/index.js +2 -1
- package/dist/admin/components/elements/ReactSelect/index.js +2 -2
- package/dist/admin/components/forms/Form/fieldReducer.js +29 -57
- package/dist/admin/components/forms/Form/index.js +1 -8
- package/dist/admin/components/forms/Form/rows.d.ts +8 -0
- package/dist/admin/components/forms/Form/rows.js +31 -0
- package/dist/admin/components/forms/useField/index.js +19 -9
- package/dist/admin/components/utilities/Auth/index.js +2 -2
- package/dist/auth/graphql/resolvers/access.d.ts +1 -1
- package/dist/auth/graphql/resolvers/access.js +7 -5
- package/dist/auth/strategies/jwt.js +3 -5
- package/dist/globals/config/schema.js +6 -1
- package/dist/graphql/registerSchema.js +2 -2
- package/docs/admin/hooks.mdx +18 -0
- package/docs/hooks/fields.mdx +2 -2
- package/docs/local-api/overview.mdx +2 -2
- package/package.json +1 -1
- package/dist/admin/components/forms/Form/flattenFilters.d.ts +0 -4
- package/dist/admin/components/forms/Form/flattenFilters.js +0 -8
package/components/utilities.ts
CHANGED
|
@@ -3,3 +3,4 @@ export { useLocale } from '../dist/admin/components/utilities/Locale';
|
|
|
3
3
|
export { useDocumentInfo } from '../dist/admin/components/utilities/DocumentInfo';
|
|
4
4
|
export { useConfig } from '../dist/admin/components/utilities/Config';
|
|
5
5
|
export { useAuth } from '../dist/admin/components/utilities/Auth';
|
|
6
|
+
export { useEditDepth } from '../dist/admin/components/utilities/EditDepth';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { fieldAffectsData } from '../../../../fields/config/types';
|
|
2
|
+
import flattenFields from '../../../../utilities/flattenTopLevelFields';
|
|
3
|
+
export const getTextFieldsToBeSearched = (listSearchableFields, fields) => () => {
|
|
4
|
+
if (listSearchableFields) {
|
|
5
|
+
const flattenedFields = flattenFields(fields);
|
|
6
|
+
return flattenedFields.filter((field) => fieldAffectsData(field) && listSearchableFields.includes(field.name));
|
|
7
|
+
}
|
|
8
|
+
return null;
|
|
9
|
+
};
|
|
@@ -8,6 +8,7 @@ import SortComplex from '../SortComplex';
|
|
|
8
8
|
import Button from '../Button';
|
|
9
9
|
import { useSearchParams } from '../../utilities/SearchParams';
|
|
10
10
|
import validateWhereQuery from '../WhereBuilder/validateWhereQuery';
|
|
11
|
+
import { getTextFieldsToBeSearched } from './getTextFieldsToBeSearched';
|
|
11
12
|
import './index.scss';
|
|
12
13
|
const baseClass = 'list-controls';
|
|
13
14
|
const ListControls = (props) => {
|
|
@@ -15,7 +16,7 @@ const ListControls = (props) => {
|
|
|
15
16
|
const params = useSearchParams();
|
|
16
17
|
const shouldInitializeWhereOpened = validateWhereQuery(params === null || params === void 0 ? void 0 : params.where);
|
|
17
18
|
const [titleField] = useState(() => fields.find((field) => fieldAffectsData(field) && field.name === useAsTitle));
|
|
18
|
-
const [textFieldsToBeSearched] = useState(listSearchableFields
|
|
19
|
+
const [textFieldsToBeSearched] = useState(getTextFieldsToBeSearched(listSearchableFields, fields));
|
|
19
20
|
const [visibleDrawer, setVisibleDrawer] = useState(shouldInitializeWhereOpened ? 'where' : undefined);
|
|
20
21
|
return (React.createElement("div", { className: baseClass },
|
|
21
22
|
React.createElement("div", { className: `${baseClass}__wrap` },
|
|
@@ -44,7 +44,7 @@ const ReactSelect = (props) => {
|
|
|
44
44
|
// small fix for https://github.com/clauderic/react-sortable-hoc/pull/352:
|
|
45
45
|
getHelperDimensions: ({ node }) => node.getBoundingClientRect(),
|
|
46
46
|
// react-select props:
|
|
47
|
-
placeholder: placeholder, ...props, value: value, onChange: onChange, disabled: disabled ? 'disabled' : undefined, className: classes, classNamePrefix: "rs", options: options, isSearchable: isSearchable, isClearable: isClearable, components: {
|
|
47
|
+
placeholder: placeholder, ...props, value: value, onChange: onChange, disabled: disabled ? 'disabled' : undefined, className: classes, classNamePrefix: "rs", captureMenuScroll: true, options: options, isSearchable: isSearchable, isClearable: isClearable, components: {
|
|
48
48
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
49
49
|
// @ts-ignore We're failing to provide a required index prop to SortableElement
|
|
50
50
|
MultiValue: SortableMultiValue,
|
|
@@ -52,6 +52,6 @@ const ReactSelect = (props) => {
|
|
|
52
52
|
DropdownIndicator: Chevron,
|
|
53
53
|
}, filterOption: filterOption }));
|
|
54
54
|
}
|
|
55
|
-
return (React.createElement(Select, { placeholder: placeholder, ...props, value: value, onChange: onChange, disabled: disabled ? 'disabled' : undefined, components: { DropdownIndicator: Chevron }, className: classes, classNamePrefix: "rs", options: options, isSearchable: isSearchable, isClearable: isClearable, filterOption: filterOption }));
|
|
55
|
+
return (React.createElement(Select, { placeholder: placeholder, captureMenuScroll: true, ...props, value: value, onChange: onChange, disabled: disabled ? 'disabled' : undefined, components: { DropdownIndicator: Chevron }, className: classes, classNamePrefix: "rs", options: options, isSearchable: isSearchable, isClearable: isClearable, filterOption: filterOption }));
|
|
56
56
|
};
|
|
57
57
|
export default ReactSelect;
|
|
@@ -1,33 +1,8 @@
|
|
|
1
1
|
import equal from 'deep-equal';
|
|
2
|
-
import { unflatten, flatten } from 'flatley';
|
|
3
|
-
import flattenFilters from './flattenFilters';
|
|
4
2
|
import getSiblingData from './getSiblingData';
|
|
5
3
|
import reduceFieldsToValues from './reduceFieldsToValues';
|
|
6
4
|
import deepCopyObject from '../../../../utilities/deepCopyObject';
|
|
7
|
-
|
|
8
|
-
// Take a copy of state
|
|
9
|
-
const remainingFlattenedState = { ...state };
|
|
10
|
-
const rowsFromStateObject = {};
|
|
11
|
-
const pathPrefixToRemove = path.substring(0, path.lastIndexOf('.') + 1);
|
|
12
|
-
// Loop over all keys from state
|
|
13
|
-
// If the key begins with the name of the parent field,
|
|
14
|
-
// Add value to rowsFromStateObject and delete it from remaining state
|
|
15
|
-
Object.keys(state).forEach((key) => {
|
|
16
|
-
if (key.indexOf(`${path}.`) === 0) {
|
|
17
|
-
if (!state[key].disableFormData) {
|
|
18
|
-
const name = key.replace(pathPrefixToRemove, '');
|
|
19
|
-
rowsFromStateObject[name] = state[key];
|
|
20
|
-
rowsFromStateObject[name].initialValue = rowsFromStateObject[name].value;
|
|
21
|
-
}
|
|
22
|
-
delete remainingFlattenedState[key];
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
const unflattenedRows = unflatten(rowsFromStateObject);
|
|
26
|
-
return {
|
|
27
|
-
unflattenedRows: unflattenedRows[path.replace(pathPrefixToRemove, '')] || [],
|
|
28
|
-
remainingFlattenedState,
|
|
29
|
-
};
|
|
30
|
-
};
|
|
5
|
+
import { flattenRows, separateRows } from './rows';
|
|
31
6
|
function fieldReducer(state, action) {
|
|
32
7
|
switch (action.type) {
|
|
33
8
|
case 'REPLACE_STATE': {
|
|
@@ -57,21 +32,21 @@ function fieldReducer(state, action) {
|
|
|
57
32
|
}
|
|
58
33
|
case 'REMOVE_ROW': {
|
|
59
34
|
const { rowIndex, path } = action;
|
|
60
|
-
const {
|
|
61
|
-
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
...remainingFlattenedState,
|
|
35
|
+
const { remainingFields, rows } = separateRows(path, state);
|
|
36
|
+
rows.splice(rowIndex, 1);
|
|
37
|
+
const newState = {
|
|
38
|
+
...remainingFields,
|
|
65
39
|
[path]: {
|
|
66
|
-
...
|
|
67
|
-
|
|
40
|
+
...state[path],
|
|
41
|
+
value: rows.length,
|
|
42
|
+
disableFormData: rows.length > 0,
|
|
68
43
|
},
|
|
69
|
-
...
|
|
44
|
+
...flattenRows(path, rows),
|
|
70
45
|
};
|
|
46
|
+
return newState;
|
|
71
47
|
}
|
|
72
48
|
case 'ADD_ROW': {
|
|
73
49
|
const { rowIndex, path, subFieldState, blockType, } = action;
|
|
74
|
-
const { unflattenedRows, remainingFlattenedState } = unflattenRowsFromState(state, path);
|
|
75
50
|
if (blockType) {
|
|
76
51
|
subFieldState.blockType = {
|
|
77
52
|
value: blockType,
|
|
@@ -79,56 +54,53 @@ function fieldReducer(state, action) {
|
|
|
79
54
|
valid: true,
|
|
80
55
|
};
|
|
81
56
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
// Add new object containing subfield names to unflattenedRows array
|
|
85
|
-
unflattenedRows.splice(rowIndex + 1, 0, subFieldState);
|
|
86
|
-
}
|
|
57
|
+
const { remainingFields, rows } = separateRows(path, state);
|
|
58
|
+
rows.splice(rowIndex + 1, 0, subFieldState);
|
|
87
59
|
const newState = {
|
|
88
|
-
...
|
|
60
|
+
...remainingFields,
|
|
89
61
|
[path]: {
|
|
90
|
-
...
|
|
91
|
-
value:
|
|
62
|
+
...state[path],
|
|
63
|
+
value: rows.length,
|
|
92
64
|
disableFormData: true,
|
|
93
65
|
},
|
|
94
|
-
...(
|
|
66
|
+
...flattenRows(path, rows),
|
|
95
67
|
};
|
|
96
68
|
return newState;
|
|
97
69
|
}
|
|
98
70
|
case 'DUPLICATE_ROW': {
|
|
99
71
|
const { rowIndex, path, } = action;
|
|
100
|
-
const {
|
|
101
|
-
const duplicate = deepCopyObject(
|
|
72
|
+
const { remainingFields, rows } = separateRows(path, state);
|
|
73
|
+
const duplicate = deepCopyObject(rows[rowIndex]);
|
|
102
74
|
if (duplicate.id)
|
|
103
75
|
delete duplicate.id;
|
|
104
76
|
// If there are subfields
|
|
105
77
|
if (Object.keys(duplicate).length > 0) {
|
|
106
78
|
// Add new object containing subfield names to unflattenedRows array
|
|
107
|
-
|
|
79
|
+
rows.splice(rowIndex + 1, 0, duplicate);
|
|
108
80
|
}
|
|
109
81
|
const newState = {
|
|
110
|
-
...
|
|
82
|
+
...remainingFields,
|
|
111
83
|
[path]: {
|
|
112
|
-
...
|
|
113
|
-
value:
|
|
84
|
+
...state[path],
|
|
85
|
+
value: rows.length,
|
|
114
86
|
disableFormData: true,
|
|
115
87
|
},
|
|
116
|
-
...(
|
|
88
|
+
...flattenRows(path, rows),
|
|
117
89
|
};
|
|
118
90
|
return newState;
|
|
119
91
|
}
|
|
120
92
|
case 'MOVE_ROW': {
|
|
121
93
|
const { moveFromIndex, moveToIndex, path } = action;
|
|
122
|
-
const {
|
|
94
|
+
const { remainingFields, rows } = separateRows(path, state);
|
|
123
95
|
// copy the row to move
|
|
124
|
-
const copyOfMovingRow =
|
|
96
|
+
const copyOfMovingRow = rows[moveFromIndex];
|
|
125
97
|
// delete the row by index
|
|
126
|
-
|
|
98
|
+
rows.splice(moveFromIndex, 1);
|
|
127
99
|
// insert row copyOfMovingRow back in
|
|
128
|
-
|
|
100
|
+
rows.splice(moveToIndex, 0, copyOfMovingRow);
|
|
129
101
|
const newState = {
|
|
130
|
-
...
|
|
131
|
-
...(
|
|
102
|
+
...remainingFields,
|
|
103
|
+
...flattenRows(path, rows),
|
|
132
104
|
};
|
|
133
105
|
return newState;
|
|
134
106
|
}
|
|
@@ -201,7 +201,7 @@ const Form = (props) => {
|
|
|
201
201
|
});
|
|
202
202
|
return;
|
|
203
203
|
}
|
|
204
|
-
const message = errorMessages[res.status] || 'An unknown error
|
|
204
|
+
const message = errorMessages[res.status] || 'An unknown error occurred.';
|
|
205
205
|
toast.error(message);
|
|
206
206
|
}
|
|
207
207
|
return;
|
|
@@ -283,13 +283,6 @@ const Form = (props) => {
|
|
|
283
283
|
useThrottledEffect(() => {
|
|
284
284
|
refreshCookie();
|
|
285
285
|
}, 15000, [fields]);
|
|
286
|
-
// Re-run form validation every second
|
|
287
|
-
// as fields change, because field validations can
|
|
288
|
-
// potentially rely on OTHER field values to determine
|
|
289
|
-
// if they are valid or not (siblingData, data)
|
|
290
|
-
useThrottledEffect(() => {
|
|
291
|
-
validateForm();
|
|
292
|
-
}, 1000, [validateForm, fields]);
|
|
293
286
|
useEffect(() => {
|
|
294
287
|
contextRef.current = { ...contextRef.current }; // triggers rerender of all components that subscribe to form
|
|
295
288
|
setModified(false);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Fields } from './types';
|
|
2
|
+
declare type Result = {
|
|
3
|
+
remainingFields: Fields;
|
|
4
|
+
rows: Fields[];
|
|
5
|
+
};
|
|
6
|
+
export declare const separateRows: (path: string, fields: Fields) => Result;
|
|
7
|
+
export declare const flattenRows: (path: string, rows: Fields[]) => Fields;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export const separateRows = (path, fields) => {
|
|
2
|
+
const remainingFields = {};
|
|
3
|
+
const rows = Object.entries(fields).reduce((incomingRows, [fieldPath, field]) => {
|
|
4
|
+
const newRows = incomingRows;
|
|
5
|
+
if (fieldPath.indexOf(`${path}.`) === 0) {
|
|
6
|
+
const index = Number(fieldPath.replace(`${path}.`, '').split('.')[0]);
|
|
7
|
+
if (!newRows[index])
|
|
8
|
+
newRows[index] = {};
|
|
9
|
+
newRows[index][fieldPath.replace(`${path}.${String(index)}.`, '')] = field;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
remainingFields[fieldPath] = field;
|
|
13
|
+
}
|
|
14
|
+
return newRows;
|
|
15
|
+
}, []);
|
|
16
|
+
return {
|
|
17
|
+
remainingFields,
|
|
18
|
+
rows,
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export const flattenRows = (path, rows) => {
|
|
22
|
+
return rows.reduce((fields, row, i) => ({
|
|
23
|
+
...fields,
|
|
24
|
+
...Object.entries(row).reduce((subFields, [subPath, subField]) => {
|
|
25
|
+
return {
|
|
26
|
+
...subFields,
|
|
27
|
+
[`${path}.${i}.${subPath}`]: subField,
|
|
28
|
+
};
|
|
29
|
+
}, {}),
|
|
30
|
+
}), {});
|
|
31
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useCallback, useMemo } from 'react';
|
|
1
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
2
2
|
import { useAuth } from '../../utilities/Auth';
|
|
3
3
|
import { useFormProcessing, useFormSubmitted, useFormModified, useForm, useFormFields } from '../Form/context';
|
|
4
4
|
import { useDocumentInfo } from '../../utilities/DocumentInfo';
|
|
@@ -15,10 +15,14 @@ const useField = (options) => {
|
|
|
15
15
|
const field = useFormFields(([fields]) => fields[path]);
|
|
16
16
|
const dispatchField = useFormFields(([_, dispatch]) => dispatch);
|
|
17
17
|
const { getData, getSiblingData, setModified } = useForm();
|
|
18
|
-
const value = field === null || field === void 0 ? void 0 : field.value;
|
|
19
18
|
const initialValue = field === null || field === void 0 ? void 0 : field.initialValue;
|
|
20
19
|
const valid = typeof (field === null || field === void 0 ? void 0 : field.valid) === 'boolean' ? field.valid : true;
|
|
21
20
|
const showError = valid === false && submitted;
|
|
21
|
+
// We store internal value to ensure that components react immediately
|
|
22
|
+
// to any value changes, therefore preventing "cursor jump" that can be seen
|
|
23
|
+
// if a user types quickly in an input
|
|
24
|
+
const [internalValue, setInternalValue] = useState(() => field === null || field === void 0 ? void 0 : field.value);
|
|
25
|
+
const [internalInitialValue, setInternalInitialValue] = useState(() => field === null || field === void 0 ? void 0 : field.initialValue);
|
|
22
26
|
// Method to return from `useField`, used to
|
|
23
27
|
// update field values from field component(s)
|
|
24
28
|
const setValue = useCallback((e, disableModifyingForm = false) => {
|
|
@@ -28,6 +32,7 @@ const useField = (options) => {
|
|
|
28
32
|
setModified(true);
|
|
29
33
|
}
|
|
30
34
|
}
|
|
35
|
+
setInternalValue(val);
|
|
31
36
|
dispatchField({
|
|
32
37
|
type: 'UPDATE',
|
|
33
38
|
path,
|
|
@@ -46,12 +51,12 @@ const useField = (options) => {
|
|
|
46
51
|
const result = useMemo(() => ({
|
|
47
52
|
showError,
|
|
48
53
|
errorMessage: field === null || field === void 0 ? void 0 : field.errorMessage,
|
|
49
|
-
value,
|
|
54
|
+
value: internalValue,
|
|
50
55
|
formSubmitted: submitted,
|
|
51
56
|
formProcessing: processing,
|
|
52
57
|
setValue,
|
|
53
58
|
initialValue,
|
|
54
|
-
}), [field, processing, setValue, showError, submitted,
|
|
59
|
+
}), [field, processing, setValue, showError, submitted, internalValue, initialValue]);
|
|
55
60
|
// Throttle the validate function
|
|
56
61
|
useThrottledEffect(() => {
|
|
57
62
|
const validateField = async () => {
|
|
@@ -61,7 +66,7 @@ const useField = (options) => {
|
|
|
61
66
|
disableFormData,
|
|
62
67
|
validate,
|
|
63
68
|
condition,
|
|
64
|
-
value,
|
|
69
|
+
value: internalValue,
|
|
65
70
|
valid: false,
|
|
66
71
|
errorMessage: undefined,
|
|
67
72
|
};
|
|
@@ -72,7 +77,7 @@ const useField = (options) => {
|
|
|
72
77
|
siblingData: getSiblingData(path),
|
|
73
78
|
operation,
|
|
74
79
|
};
|
|
75
|
-
const validationResult = typeof validate === 'function' ? await validate(
|
|
80
|
+
const validationResult = typeof validate === 'function' ? await validate(internalValue, validateOptions) : true;
|
|
76
81
|
if (typeof validationResult === 'string') {
|
|
77
82
|
action.errorMessage = validationResult;
|
|
78
83
|
action.valid = false;
|
|
@@ -81,13 +86,13 @@ const useField = (options) => {
|
|
|
81
86
|
action.valid = validationResult;
|
|
82
87
|
action.errorMessage = undefined;
|
|
83
88
|
}
|
|
84
|
-
if (
|
|
89
|
+
if (typeof dispatchField === 'function') {
|
|
85
90
|
dispatchField(action);
|
|
86
91
|
}
|
|
87
92
|
};
|
|
88
93
|
validateField();
|
|
89
94
|
}, 150, [
|
|
90
|
-
|
|
95
|
+
internalValue,
|
|
91
96
|
condition,
|
|
92
97
|
disableFormData,
|
|
93
98
|
dispatchField,
|
|
@@ -98,8 +103,13 @@ const useField = (options) => {
|
|
|
98
103
|
path,
|
|
99
104
|
user,
|
|
100
105
|
validate,
|
|
101
|
-
valid,
|
|
102
106
|
]);
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
if (initialValue !== internalInitialValue) {
|
|
109
|
+
setInternalValue(initialValue);
|
|
110
|
+
setInternalInitialValue(initialValue);
|
|
111
|
+
}
|
|
112
|
+
}, [initialValue, internalInitialValue]);
|
|
103
113
|
return result;
|
|
104
114
|
};
|
|
105
115
|
export default useField;
|
|
@@ -42,11 +42,11 @@ export const AuthProvider = ({ children }) => {
|
|
|
42
42
|
setUser(decoded);
|
|
43
43
|
setTokenInMemory(token);
|
|
44
44
|
}, []);
|
|
45
|
-
const logOut = () => {
|
|
45
|
+
const logOut = useCallback(() => {
|
|
46
46
|
setUser(null);
|
|
47
47
|
setTokenInMemory(undefined);
|
|
48
48
|
requests.post(`${serverURL}${api}/${userSlug}/logout`);
|
|
49
|
-
};
|
|
49
|
+
}, [serverURL, api, userSlug]);
|
|
50
50
|
// On mount, get user and set
|
|
51
51
|
useEffect(() => {
|
|
52
52
|
const fetchMe = async () => {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Payload } from '../../..';
|
|
2
|
-
declare function accessResolver(payload: Payload): (_: any, args: any, context: any) => Promise<
|
|
2
|
+
declare function accessResolver(payload: Payload): (_: any, args: any, context: any) => Promise<any>;
|
|
3
3
|
export default accessResolver;
|
|
@@ -19,12 +19,14 @@ function accessResolver(payload) {
|
|
|
19
19
|
const options = {
|
|
20
20
|
req: context.req,
|
|
21
21
|
};
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
const accessResults = await (0, access_1.default)(options);
|
|
23
|
+
return {
|
|
24
|
+
...accessResults,
|
|
25
|
+
...formatConfigNames(accessResults.collections, payload.config.collections),
|
|
26
|
+
...formatConfigNames(accessResults.globals, payload.config.globals)
|
|
27
|
+
};
|
|
26
28
|
}
|
|
27
29
|
return resolver;
|
|
28
30
|
}
|
|
29
31
|
exports.default = accessResolver;
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F1dGgvZ3JhcGhxbC9yZXNvbHZlcnMvYWNjZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsdUZBQStEO0FBQy9ELHFFQUE2QztBQUc3QyxNQUFNLGlCQUFpQixHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQzdDLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO0lBRXhDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7UUFDM0IsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNyRCxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLGdCQUFnQixDQUFDLElBQUEsb0JBQVUsRUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sZ0JBQWdCLENBQUM7QUFDMUIsQ0FBQyxDQUFDO0FBRUYsU0FBUyxjQUFjLENBQUMsT0FBZ0I7SUFDdEMsS0FBSyxVQUFVLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU87UUFDdEMsTUFBTSxPQUFPLEdBQUc7WUFDZCxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7U0FDakIsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBQSxnQkFBTSxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTVDLE9BQU87WUFDTCxHQUFHLGFBQWE7WUFDaEIsR0FBRyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1lBQzNFLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztTQUNwRSxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxrQkFBZSxjQUFjLENBQUMifQ==
|
|
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const url_1 = __importDefault(require("url"));
|
|
7
7
|
const passport_jwt_1 = __importDefault(require("passport-jwt"));
|
|
8
|
-
const findByID_1 = __importDefault(require("../../collections/operations/findByID"));
|
|
9
8
|
const getExtractJWT_1 = __importDefault(require("../getExtractJWT"));
|
|
10
9
|
const JwtStrategy = passport_jwt_1.default.Strategy;
|
|
11
10
|
exports.default = ({ secret, config, collections }) => {
|
|
@@ -22,11 +21,10 @@ exports.default = ({ secret, config, collections }) => {
|
|
|
22
21
|
const collection = collections[token.collection];
|
|
23
22
|
const parsedURL = url_1.default.parse(req.url);
|
|
24
23
|
const isGraphQL = parsedURL.pathname === config.routes.graphQL;
|
|
25
|
-
const user = await
|
|
24
|
+
const user = await req.payload.findByID({
|
|
26
25
|
id: token.id,
|
|
27
|
-
collection,
|
|
26
|
+
collection: token.collection,
|
|
28
27
|
req,
|
|
29
|
-
overrideAccess: true,
|
|
30
28
|
depth: isGraphQL ? 0 : collection.config.auth.depth,
|
|
31
29
|
});
|
|
32
30
|
if (user && (!collection.config.auth.verify || user._verified)) {
|
|
@@ -43,4 +41,4 @@ exports.default = ({ secret, config, collections }) => {
|
|
|
43
41
|
}
|
|
44
42
|
});
|
|
45
43
|
};
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F1dGgvc3RyYXRlZ2llcy9qd3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4Q0FBc0I7QUFDdEIsZ0VBQTREO0FBRzVELHFFQUE2QztBQUU3QyxNQUFNLFdBQVcsR0FBRyxzQkFBVyxDQUFDLFFBQVEsQ0FBQztBQUV6QyxrQkFBZSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQVcsRUFBb0IsRUFBRTtJQUM1RSxNQUFNLElBQUksR0FBb0I7UUFDNUIsaUJBQWlCLEVBQUUsSUFBSTtRQUN2QixjQUFjLEVBQUUsSUFBQSx1QkFBYSxFQUFDLE1BQU0sQ0FBQztRQUNyQyxXQUFXLEVBQUUsTUFBTTtLQUNwQixDQUFDO0lBRUYsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDdEQsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFO1lBQ1osSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEI7UUFFRCxJQUFJO1lBQ0YsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUVqRCxNQUFNLFNBQVMsR0FBRyxhQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBRS9ELE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7Z0JBQ3RDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDWixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7Z0JBQzVCLEdBQUc7Z0JBQ0gsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLO2FBQ3BELENBQUMsQ0FBQztZQUVILElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUM5RCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNsQjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ25CO1NBQ0Y7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbkI7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyJ9
|
|
@@ -13,6 +13,11 @@ const globalSchema = joi_1.default.object().keys({
|
|
|
13
13
|
group: joi_1.default.string(),
|
|
14
14
|
hideAPIURL: joi_1.default.boolean(),
|
|
15
15
|
description: joi_1.default.alternatives().try(joi_1.default.string(), componentSchema_1.componentSchema),
|
|
16
|
+
components: joi_1.default.object({
|
|
17
|
+
views: joi_1.default.object({
|
|
18
|
+
Edit: componentSchema_1.componentSchema,
|
|
19
|
+
}),
|
|
20
|
+
}),
|
|
16
21
|
}),
|
|
17
22
|
hooks: joi_1.default.object({
|
|
18
23
|
beforeValidate: joi_1.default.array().items(joi_1.default.func()),
|
|
@@ -38,4 +43,4 @@ const globalSchema = joi_1.default.object().keys({
|
|
|
38
43
|
}), joi_1.default.boolean()),
|
|
39
44
|
}).unknown();
|
|
40
45
|
exports.default = globalSchema;
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dsb2JhbHMvY29uZmlnL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDhDQUFzQjtBQUN0QixxRUFBa0U7QUFDbEUsZ0RBQXNEO0FBRXRELE1BQU0sWUFBWSxHQUFHLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckMsSUFBSSxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDN0IsS0FBSyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7SUFDbkIsS0FBSyxFQUFFLGFBQUcsQ0FBQyxNQUFNLENBQUM7UUFDaEIsS0FBSyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7UUFDbkIsVUFBVSxFQUFFLGFBQUcsQ0FBQyxPQUFPLEVBQUU7UUFDekIsV0FBVyxFQUFFLGFBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQ2pDLGFBQUcsQ0FBQyxNQUFNLEVBQUUsRUFDWixpQ0FBZSxDQUNoQjtRQUNELFVBQVUsRUFBRSxhQUFHLENBQUMsTUFBTSxDQUFDO1lBQ3JCLEtBQUssRUFBRSxhQUFHLENBQUMsTUFBTSxDQUFDO2dCQUNoQixJQUFJLEVBQUUsaUNBQWU7YUFDdEIsQ0FBQztTQUNILENBQUM7S0FDSCxDQUFDO0lBQ0YsS0FBSyxFQUFFLGFBQUcsQ0FBQyxNQUFNLENBQUM7UUFDaEIsY0FBYyxFQUFFLGFBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdDLFlBQVksRUFBRSxhQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQyxXQUFXLEVBQUUsYUFBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUMsVUFBVSxFQUFFLGFBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pDLFNBQVMsRUFBRSxhQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztLQUN6QyxDQUFDO0lBQ0YsU0FBUyxFQUFFLHdCQUFlO0lBQzFCLE1BQU0sRUFBRSxhQUFHLENBQUMsTUFBTSxDQUFDO1FBQ2pCLElBQUksRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFO1FBQ2hCLFlBQVksRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFO1FBQ3hCLE1BQU0sRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFO0tBQ25CLENBQUM7SUFDRixNQUFNLEVBQUUsYUFBRyxDQUFDLEtBQUssRUFBRTtJQUNuQixRQUFRLEVBQUUsYUFBRyxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FDOUIsYUFBRyxDQUFDLE1BQU0sQ0FBQztRQUNULEdBQUcsRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO1FBQ2pCLE1BQU0sRUFBRSxhQUFHLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUM1QixhQUFHLENBQUMsTUFBTSxDQUFDO1lBQ1QsUUFBUSxFQUFFLGFBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQzlCLGFBQUcsQ0FBQyxPQUFPLEVBQUUsRUFDYixhQUFHLENBQUMsTUFBTSxDQUFDO2dCQUNULFFBQVEsRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO2FBQ3ZCLENBQUMsQ0FDSDtTQUNGLENBQUMsRUFDRixhQUFHLENBQUMsT0FBTyxFQUFFLENBQ2Q7S0FDRixDQUFDLEVBQ0YsYUFBRyxDQUFDLE9BQU8sRUFBRSxDQUNkO0NBQ0YsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBRWIsa0JBQWUsWUFBWSxDQUFDIn0=
|
|
@@ -60,7 +60,7 @@ function registerSchema(payload) {
|
|
|
60
60
|
(0, init_3.default)(payload);
|
|
61
61
|
payload.Query.fields.Access = {
|
|
62
62
|
type: (0, buildPoliciesType_1.default)(payload),
|
|
63
|
-
resolve: access_1.default,
|
|
63
|
+
resolve: (0, access_1.default)(payload),
|
|
64
64
|
};
|
|
65
65
|
if (typeof payload.config.graphQL.queries === 'function') {
|
|
66
66
|
const customQueries = payload.config.graphQL.queries(GraphQL, payload);
|
|
@@ -119,4 +119,4 @@ function registerSchema(payload) {
|
|
|
119
119
|
]);
|
|
120
120
|
}
|
|
121
121
|
exports.default = registerSchema;
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXJTY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ3JhcGhxbC9yZWdpc3RlclNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0NBQXNDO0FBQ3RDLGlEQUFtQztBQUNuQyxxQ0FBMkQ7QUFDM0QscUZBQXNHO0FBRXRHLHlGQUFpRTtBQUNqRSx5R0FBaUY7QUFDakYsdUVBQTBEO0FBQzFELG1FQUFrRDtBQUNsRCx1RUFBMEQ7QUFDMUQsbUZBQTJEO0FBQzNELDhFQUE4RDtBQUM5RCxrRUFBMEM7QUFFMUMsU0FBd0IsY0FBYyxDQUFDLE9BQWdCO0lBQ3JELE9BQU8sQ0FBQyxLQUFLLEdBQUc7UUFDZCxVQUFVLEVBQUUsRUFBRTtRQUNkLGVBQWUsRUFBRSxFQUFFO0tBQ3BCLENBQUM7SUFFRixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFO1FBQy9CLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLElBQUEsOEJBQW9CLEVBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRixPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixHQUFHLElBQUEsc0NBQTRCLEVBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUNuRztJQUVELE9BQU8sQ0FBQyxLQUFLLEdBQUc7UUFDZCxJQUFJLEVBQUUsT0FBTztRQUNiLE1BQU0sRUFBRSxFQUFFO0tBQ1gsQ0FBQztJQUVGLE9BQU8sQ0FBQyxRQUFRLEdBQUc7UUFDakIsSUFBSSxFQUFFLFVBQVU7UUFDaEIsTUFBTSxFQUFFLEVBQUU7S0FDWCxDQUFDO0lBRUYsSUFBQSxjQUFlLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFDekIsSUFBQSxjQUFXLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFDckIsSUFBQSxjQUFlLEVBQUMsT0FBTyxDQUFDLENBQUM7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
|
package/docs/admin/hooks.mdx
CHANGED
|
@@ -266,6 +266,24 @@ const MyComponent: React.FC = () => {
|
|
|
266
266
|
};
|
|
267
267
|
```
|
|
268
268
|
|
|
269
|
+
### useEditDepth
|
|
270
|
+
|
|
271
|
+
Sends back how many editing levels "deep" the current component is. Edit depth is relevant while adding new documents / editing documents in modal windows and other cases.
|
|
272
|
+
|
|
273
|
+
```tsx
|
|
274
|
+
import { useEditDepth } from 'payload/components/utilities';
|
|
275
|
+
|
|
276
|
+
const MyComponent: React.FC = () => {
|
|
277
|
+
// highlight-start
|
|
278
|
+
const editDepth = useEditDepth();
|
|
279
|
+
// highlight-end
|
|
280
|
+
|
|
281
|
+
return (
|
|
282
|
+
<span>My component is {editDepth} levels deep</span>
|
|
283
|
+
)
|
|
284
|
+
}
|
|
285
|
+
```
|
|
286
|
+
|
|
269
287
|
### usePreferences
|
|
270
288
|
|
|
271
289
|
Returns methods to set and get user preferences. More info can be found [here](https://payloadcms.com/docs/admin/preferences).
|
package/docs/hooks/fields.mdx
CHANGED
|
@@ -27,9 +27,9 @@ Field-level hooks offer incredible potential for encapsulating your logic. They
|
|
|
27
27
|
|
|
28
28
|
Example field configuration:
|
|
29
29
|
```ts
|
|
30
|
-
import {
|
|
30
|
+
import { Field } from 'payload/types';
|
|
31
31
|
|
|
32
|
-
const
|
|
32
|
+
const ExampleField: Field = {
|
|
33
33
|
name: 'name',
|
|
34
34
|
type: 'text',
|
|
35
35
|
// highlight-start
|
|
@@ -63,8 +63,8 @@ You can specify more options within the Local API vs. REST or GraphQL due to the
|
|
|
63
63
|
| `depth` | [Control auto-population](/docs/getting-started/concepts#depth) of nested relationship and upload fields. |
|
|
64
64
|
| `locale` | Specify [locale](/docs/configuration/localization) for any returned documents. |
|
|
65
65
|
| `fallbackLocale` | Specify a [fallback locale](/docs/configuration/localization) to use for any returned documents. |
|
|
66
|
-
| `overrideAccess` | Skip access control. By default, this property is set to
|
|
67
|
-
| `user` | If you
|
|
66
|
+
| `overrideAccess` | Skip access control. By default, this property is set to true within all Local API operations. |
|
|
67
|
+
| `user` | If you set `overrideAccess` to `false`, you can pass a user to use against the access control checks. |
|
|
68
68
|
| `showHiddenFields` | Opt-in to receiving hidden fields. By default, they are hidden from returned documents in accordance to your config. |
|
|
69
69
|
| `pagination` | Set to false to return all documents and avoid querying for document counts. |
|
|
70
70
|
|
package/package.json
CHANGED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
const flattenFilters = [{
|
|
2
|
-
test: (_, value) => {
|
|
3
|
-
const hasValidProperty = Object.prototype.hasOwnProperty.call(value, 'valid');
|
|
4
|
-
const hasValueProperty = Object.prototype.hasOwnProperty.call(value, 'value');
|
|
5
|
-
return (hasValidProperty && hasValueProperty);
|
|
6
|
-
},
|
|
7
|
-
}];
|
|
8
|
-
export default flattenFilters;
|