payload 1.1.20 → 1.1.22
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 -55
- 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 +1 -2
- 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/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,54 +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
|
-
...
|
|
62
|
+
...state[path],
|
|
63
|
+
value: rows.length,
|
|
91
64
|
disableFormData: true,
|
|
92
65
|
},
|
|
93
|
-
...(
|
|
66
|
+
...flattenRows(path, rows),
|
|
94
67
|
};
|
|
95
68
|
return newState;
|
|
96
69
|
}
|
|
97
70
|
case 'DUPLICATE_ROW': {
|
|
98
71
|
const { rowIndex, path, } = action;
|
|
99
|
-
const {
|
|
100
|
-
const duplicate = deepCopyObject(
|
|
72
|
+
const { remainingFields, rows } = separateRows(path, state);
|
|
73
|
+
const duplicate = deepCopyObject(rows[rowIndex]);
|
|
101
74
|
if (duplicate.id)
|
|
102
75
|
delete duplicate.id;
|
|
103
76
|
// If there are subfields
|
|
104
77
|
if (Object.keys(duplicate).length > 0) {
|
|
105
78
|
// Add new object containing subfield names to unflattenedRows array
|
|
106
|
-
|
|
79
|
+
rows.splice(rowIndex + 1, 0, duplicate);
|
|
107
80
|
}
|
|
108
81
|
const newState = {
|
|
109
|
-
...
|
|
82
|
+
...remainingFields,
|
|
110
83
|
[path]: {
|
|
111
|
-
...
|
|
84
|
+
...state[path],
|
|
85
|
+
value: rows.length,
|
|
112
86
|
disableFormData: true,
|
|
113
87
|
},
|
|
114
|
-
...(
|
|
88
|
+
...flattenRows(path, rows),
|
|
115
89
|
};
|
|
116
90
|
return newState;
|
|
117
91
|
}
|
|
118
92
|
case 'MOVE_ROW': {
|
|
119
93
|
const { moveFromIndex, moveToIndex, path } = action;
|
|
120
|
-
const {
|
|
94
|
+
const { remainingFields, rows } = separateRows(path, state);
|
|
121
95
|
// copy the row to move
|
|
122
|
-
const copyOfMovingRow =
|
|
96
|
+
const copyOfMovingRow = rows[moveFromIndex];
|
|
123
97
|
// delete the row by index
|
|
124
|
-
|
|
98
|
+
rows.splice(moveFromIndex, 1);
|
|
125
99
|
// insert row copyOfMovingRow back in
|
|
126
|
-
|
|
100
|
+
rows.splice(moveToIndex, 0, copyOfMovingRow);
|
|
127
101
|
const newState = {
|
|
128
|
-
...
|
|
129
|
-
...(
|
|
102
|
+
...remainingFields,
|
|
103
|
+
...flattenRows(path, rows),
|
|
130
104
|
};
|
|
131
105
|
return newState;
|
|
132
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
|
+
};
|
|
@@ -81,7 +81,7 @@ const useField = (options) => {
|
|
|
81
81
|
action.valid = validationResult;
|
|
82
82
|
action.errorMessage = undefined;
|
|
83
83
|
}
|
|
84
|
-
if (
|
|
84
|
+
if (typeof dispatchField === 'function') {
|
|
85
85
|
dispatchField(action);
|
|
86
86
|
}
|
|
87
87
|
};
|
|
@@ -98,7 +98,6 @@ const useField = (options) => {
|
|
|
98
98
|
path,
|
|
99
99
|
user,
|
|
100
100
|
validate,
|
|
101
|
-
valid,
|
|
102
101
|
]);
|
|
103
102
|
return result;
|
|
104
103
|
};
|
|
@@ -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==
|
|
@@ -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;
|