@webiny/app-headless-cms 5.25.0 → 5.26.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/HeadlessCMS.js +2 -1
- package/HeadlessCMS.js.map +1 -1
- package/admin/contexts/Cms/index.d.ts +2 -2
- package/admin/contexts/Cms/index.js +0 -8
- package/admin/contexts/Cms/index.js.map +1 -1
- package/admin/hooks/useCms.d.ts +2 -2
- package/admin/hooks/useCms.js.map +1 -1
- package/admin/plugins/fieldRenderers/dateTime/utils.js +1 -1
- package/admin/plugins/fieldRenderers/dateTime/utils.js.map +1 -1
- package/admin/plugins/index.d.ts +1 -1
- package/admin/plugins/routes.js +2 -4
- package/admin/plugins/routes.js.map +1 -1
- package/admin/plugins/transformers/dateTransformer.js +2 -2
- package/admin/plugins/transformers/dateTransformer.js.map +1 -1
- package/admin/views/contentEntries/ContentEntriesContext.d.ts +1 -1
- package/admin/views/contentEntries/ContentEntriesContext.js +34 -22
- package/admin/views/contentEntries/ContentEntriesContext.js.map +1 -1
- package/admin/views/contentEntries/ContentEntriesList.js +40 -43
- package/admin/views/contentEntries/ContentEntriesList.js.map +1 -1
- package/admin/views/contentEntries/ContentEntry/cache.js +1 -1
- package/admin/views/contentEntries/ContentEntry/cache.js.map +1 -1
- package/admin/views/contentEntries/experiment/ContentEntriesModule.d.ts +1 -0
- package/admin/views/contentEntries/experiment/ContentEntriesModule.js +50 -0
- package/admin/views/contentEntries/experiment/ContentEntriesModule.js.map +1 -0
- package/admin/views/contentEntries/experiment/ContentEntriesRenderer.d.ts +2 -0
- package/admin/views/contentEntries/experiment/ContentEntriesRenderer.js +12 -0
- package/admin/views/contentEntries/experiment/ContentEntriesRenderer.js.map +1 -0
- package/admin/views/contentEntries/experiment/ContentEntriesViewConfig.d.ts +35 -0
- package/admin/views/contentEntries/experiment/ContentEntriesViewConfig.js +130 -0
- package/admin/views/contentEntries/experiment/ContentEntriesViewConfig.js.map +1 -0
- package/admin/views/contentEntries/experiment/Property.d.ts +34 -0
- package/admin/views/contentEntries/experiment/Property.js +232 -0
- package/admin/views/contentEntries/experiment/Property.js.map +1 -0
- package/admin/views/contentEntries/hooks/useContentEntriesList.js +2 -1
- package/admin/views/contentEntries/hooks/useContentEntriesList.js.map +1 -1
- package/admin/views/contentModels/NewContentModelDialog.js +8 -5
- package/admin/views/contentModels/NewContentModelDialog.js.map +1 -1
- package/index.d.ts +10 -0
- package/index.js +11 -1
- package/index.js.map +1 -1
- package/package.json +23 -22
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
3
|
+
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
4
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
5
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
6
|
+
var _excluded = ["children", "name", "value"];
|
|
7
|
+
// @ts-nocheck
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Note by @pavel910:
|
|
11
|
+
*
|
|
12
|
+
* TS is disabled in this file, as this is a wild experiment, and I need to come back and fix some types, which are not very
|
|
13
|
+
* obvious. I don't have time to do it right now. If the experiment is successful, I'll come back and clean this up, and
|
|
14
|
+
* extract this whole logic into a separate package, as this is a tiny framework for building data objects using React, and
|
|
15
|
+
* we might want to use it in many more places (all views, Page Builder Editor, etc.).
|
|
16
|
+
*
|
|
17
|
+
* More on this a bit later, if the experiment is successful.
|
|
18
|
+
*/
|
|
19
|
+
import React, { createContext, useContext, useMemo, useRef, useState } from "react";
|
|
20
|
+
import { nanoid } from "nanoid";
|
|
21
|
+
import useDeepCompareEffect from "use-deep-compare-effect";
|
|
22
|
+
export function toObject(property) {
|
|
23
|
+
if (property.value !== undefined) {
|
|
24
|
+
return _defineProperty({}, property.name, property.value);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var obj = {};
|
|
28
|
+
property.properties.forEach(function (prop) {
|
|
29
|
+
// Check if this is a single occurrence of this property
|
|
30
|
+
var isSingle = property.properties.filter(function (p) {
|
|
31
|
+
return p.name === prop.name;
|
|
32
|
+
}).length === 1;
|
|
33
|
+
|
|
34
|
+
if (prop.value !== undefined) {
|
|
35
|
+
obj[prop.name] = isSingle ? prop.value : [].concat(_toConsumableArray(obj[prop.name] || []), [prop.value]);
|
|
36
|
+
} else {
|
|
37
|
+
var asObject = toObject(prop);
|
|
38
|
+
|
|
39
|
+
if (!isSingle) {
|
|
40
|
+
obj[prop.name] = [].concat(_toConsumableArray(obj[prop.name] || []), [asObject[prop.name]]);
|
|
41
|
+
} else {
|
|
42
|
+
obj[prop.name] = asObject[prop.name];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
return obj;
|
|
47
|
+
}
|
|
48
|
+
export function toArray(objects) {
|
|
49
|
+
return objects.map(function (obj) {
|
|
50
|
+
return obj.properties.reduce(function (acc, item) {
|
|
51
|
+
return _objectSpread(_objectSpread({}, acc), toObject(item));
|
|
52
|
+
}, {});
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function mergeProperties(properties1, properties2) {
|
|
57
|
+
var temp = [].concat(_toConsumableArray(properties1), _toConsumableArray(properties2));
|
|
58
|
+
return Object.values(temp.reduce(function (acc, item) {
|
|
59
|
+
return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, item.id, item));
|
|
60
|
+
}, {}));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
var PropertyContext = /*#__PURE__*/createContext(null);
|
|
64
|
+
PropertyContext.displayName = "PropertyContext";
|
|
65
|
+
|
|
66
|
+
var useProperty = function useProperty() {
|
|
67
|
+
return useContext(PropertyContext);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
var PropertyContainerContext = /*#__PURE__*/createContext();
|
|
71
|
+
|
|
72
|
+
function cleanup(properties) {
|
|
73
|
+
return properties.map(function (property) {
|
|
74
|
+
if ("$remove" in property) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return _objectSpread(_objectSpread({}, property), {}, {
|
|
79
|
+
properties: cleanup(property.properties)
|
|
80
|
+
});
|
|
81
|
+
}).filter(Boolean);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
var store = new Map();
|
|
85
|
+
export var PropertyContainer = function PropertyContainer(_ref2) {
|
|
86
|
+
var name = _ref2.name,
|
|
87
|
+
onChange = _ref2.onChange,
|
|
88
|
+
children = _ref2.children;
|
|
89
|
+
var ref = useRef(store);
|
|
90
|
+
var context = useMemo(function () {
|
|
91
|
+
return {
|
|
92
|
+
updateContainer: function updateContainer(updater) {
|
|
93
|
+
var current = store.get(name) || [];
|
|
94
|
+
var properties = cleanup(updater(current));
|
|
95
|
+
store.set(name, properties);
|
|
96
|
+
onChange(properties);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}, [ref]);
|
|
100
|
+
return /*#__PURE__*/React.createElement(PropertyContainerContext.Provider, {
|
|
101
|
+
value: context
|
|
102
|
+
}, children);
|
|
103
|
+
};
|
|
104
|
+
export var Property = function Property(_ref3) {
|
|
105
|
+
var children = _ref3.children,
|
|
106
|
+
name = _ref3.name,
|
|
107
|
+
value = _ref3.value,
|
|
108
|
+
props = _objectWithoutProperties(_ref3, _excluded);
|
|
109
|
+
|
|
110
|
+
var id = useRef(props.id || nanoid());
|
|
111
|
+
|
|
112
|
+
var _useState = useState([]),
|
|
113
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
114
|
+
properties = _useState2[0],
|
|
115
|
+
setProperties = _useState2[1];
|
|
116
|
+
|
|
117
|
+
var _useContext = useContext(PropertyContainerContext),
|
|
118
|
+
updateContainer = _useContext.updateContainer;
|
|
119
|
+
|
|
120
|
+
var parentProperty = useProperty();
|
|
121
|
+
var context = {
|
|
122
|
+
removeProperty: function removeProperty(id) {
|
|
123
|
+
setProperties(function (properties) {
|
|
124
|
+
var index = properties.findIndex(function (p) {
|
|
125
|
+
return p.id === id;
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
if (index > -1) {
|
|
129
|
+
return [].concat(_toConsumableArray(properties.slice(0, index)), [_objectSpread(_objectSpread({}, properties[index]), {}, {
|
|
130
|
+
$remove: true
|
|
131
|
+
})], _toConsumableArray(properties.slice(index + 1)));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return properties;
|
|
135
|
+
});
|
|
136
|
+
},
|
|
137
|
+
updateProperty: function updateProperty(property) {
|
|
138
|
+
setProperties(function (properties) {
|
|
139
|
+
var index = properties.findIndex(function (p) {
|
|
140
|
+
return p.id === property.id;
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
if (index > -1) {
|
|
144
|
+
return [].concat(_toConsumableArray(properties.slice(0, index)), [_objectSpread(_objectSpread({}, properties[index]), property)], _toConsumableArray(properties.slice(index + 1)));
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return [].concat(_toConsumableArray(properties), [property]);
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
var indexById = function indexById(p) {
|
|
153
|
+
return p.id === props.id;
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
var indexByName = function indexByName(p) {
|
|
157
|
+
return p.name === name;
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
var updateParentContainer = function updateParentContainer(property) {
|
|
161
|
+
updateContainer(function (properties) {
|
|
162
|
+
// Check if this property already exists in the parent container.
|
|
163
|
+
var index = properties.findIndex(props.id ? indexById : indexByName);
|
|
164
|
+
|
|
165
|
+
if (props.remove) {
|
|
166
|
+
if (index > -1) {
|
|
167
|
+
return [].concat(_toConsumableArray(properties.slice(0, index)), [_objectSpread(_objectSpread({}, properties[index]), {}, {
|
|
168
|
+
$remove: true
|
|
169
|
+
})], _toConsumableArray(properties.slice(index + 1)));
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return properties;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if (props.replace) {
|
|
176
|
+
if (index > -1) {
|
|
177
|
+
return [].concat(_toConsumableArray(properties.slice(0, index)), [_objectSpread({}, property)], _toConsumableArray(properties.slice(index + 1)));
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return [].concat(_toConsumableArray(properties), [property]);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
if (props.merge) {
|
|
184
|
+
if (index > -1) {
|
|
185
|
+
return [].concat(_toConsumableArray(properties.slice(0, index)), [_objectSpread(_objectSpread(_objectSpread({}, properties[index]), property), {}, {
|
|
186
|
+
properties: mergeProperties(properties[index].properties, property.properties)
|
|
187
|
+
})], _toConsumableArray(properties.slice(index + 1)));
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
return [].concat(_toConsumableArray(properties), [property]);
|
|
192
|
+
});
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
useDeepCompareEffect(function () {
|
|
196
|
+
var property = {
|
|
197
|
+
id: id.current,
|
|
198
|
+
name: name,
|
|
199
|
+
value: value,
|
|
200
|
+
properties: properties
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
if (!parentProperty) {
|
|
204
|
+
return updateParentContainer(property);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
parentProperty.updateProperty(property);
|
|
208
|
+
}, [properties]);
|
|
209
|
+
useDeepCompareEffect(function () {
|
|
210
|
+
// On mount, we need to report to our parent.
|
|
211
|
+
if (parentProperty) {
|
|
212
|
+
if (props.remove) {
|
|
213
|
+
parentProperty.removeProperty(id.current);
|
|
214
|
+
} else {
|
|
215
|
+
parentProperty.updateProperty({
|
|
216
|
+
id: id.current,
|
|
217
|
+
name: name,
|
|
218
|
+
value: value,
|
|
219
|
+
properties: properties
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}, [props.remove, properties]);
|
|
224
|
+
|
|
225
|
+
if (!children) {
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
return /*#__PURE__*/React.createElement(PropertyContext.Provider, {
|
|
230
|
+
value: context
|
|
231
|
+
}, children);
|
|
232
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["Property.tsx"],"names":["React","createContext","useContext","useMemo","useRef","useState","nanoid","useDeepCompareEffect","toObject","property","value","undefined","name","obj","properties","forEach","prop","isSingle","filter","p","length","asObject","toArray","objects","map","reduce","acc","item","mergeProperties","properties1","properties2","temp","Object","values","id","PropertyContext","displayName","useProperty","PropertyContainerContext","cleanup","Boolean","store","Map","PropertyContainer","onChange","children","ref","context","updateContainer","updater","current","get","set","Property","props","setProperties","parentProperty","removeProperty","index","findIndex","slice","$remove","updateProperty","indexById","indexByName","updateParentContainer","remove","replace","merge"],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * Note by @pavel910:\n *\n * TS is disabled in this file, as this is a wild experiment, and I need to come back and fix some types, which are not very\n * obvious. I don't have time to do it right now. If the experiment is successful, I'll come back and clean this up, and\n * extract this whole logic into a separate package, as this is a tiny framework for building data objects using React, and\n * we might want to use it in many more places (all views, Page Builder Editor, etc.).\n *\n * More on this a bit later, if the experiment is successful.\n */\nimport React, { createContext, FC, useContext, useMemo, useRef, useState } from \"react\";\nimport { nanoid } from \"nanoid\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\n\nexport function toObject<T = unknown>(property: Property): T {\n if (property.value !== undefined) {\n return { [property.name]: property.value };\n }\n\n const obj = {};\n property.properties.forEach(prop => {\n // Check if this is a single occurrence of this property\n const isSingle = property.properties.filter(p => p.name === prop.name).length === 1;\n if (prop.value !== undefined) {\n obj[prop.name] = isSingle ? prop.value : [...(obj[prop.name] || []), prop.value];\n } else {\n const asObject = toObject(prop);\n\n if (!isSingle) {\n obj[prop.name] = [...(obj[prop.name] || []), asObject[prop.name]];\n } else {\n obj[prop.name] = asObject[prop.name];\n }\n }\n });\n\n return obj;\n}\n\nexport function toArray(objects: Property[]) {\n return objects.map(obj =>\n obj.properties.reduce((acc, item) => {\n return { ...acc, ...toObject(item) };\n }, {})\n );\n}\n\nfunction mergeProperties(properties1: Property[], properties2: Property[]) {\n const temp: Property[] = [...properties1, ...properties2];\n\n return Object.values(\n temp.reduce((acc, item) => {\n return { ...acc, [item.id]: item };\n }, {})\n );\n}\n\ninterface PropertyContext {\n removeProperty(id: string): void;\n updateProperty(property: Property): void;\n}\n\nconst PropertyContext = createContext<PropertyContext>(null);\nPropertyContext.displayName = \"PropertyContext\";\n\nconst useProperty = () => {\n return useContext(PropertyContext);\n};\n\ninterface PropertyContainerContext {\n updateContainer(update): void;\n}\n\nexport interface Property<TValue = unknown> {\n id?: string;\n name: string;\n value?: TValue;\n properties?: Property[];\n}\n\nconst PropertyContainerContext = createContext<PropertyContainerContext>();\n\nfunction cleanup(properties: Property[]): Property[] {\n return properties\n .map(property => {\n if (\"$remove\" in property) {\n return null;\n }\n\n return {\n ...property,\n properties: cleanup(property.properties)\n };\n })\n .filter(Boolean);\n}\n\nconst store = new Map<string, any>();\n\ninterface PropertyContainerProps {\n name: string;\n // TODO: create a proper type\n onChange: any;\n}\n\nexport const PropertyContainer: FC<PropertyContainerProps> = ({ name, onChange, children }) => {\n const ref = useRef(store);\n const context = useMemo(\n () => ({\n updateContainer(updater) {\n const current = store.get(name) || [];\n const properties = cleanup(updater(current));\n store.set(name, properties);\n onChange(properties);\n }\n }),\n [ref]\n );\n\n return (\n <PropertyContainerContext.Provider value={context}>\n {children}\n </PropertyContainerContext.Provider>\n );\n};\n\ninterface PropertyProps {\n id?: string;\n name: string;\n value?: unknown;\n merge?: boolean;\n replace?: boolean;\n remove?: boolean;\n}\n\nexport const Property: FC<PropertyProps> = ({ children, name, value, ...props }) => {\n const id = useRef(props.id || nanoid());\n const [properties, setProperties] = useState([]);\n const { updateContainer } = useContext(PropertyContainerContext);\n const parentProperty = useProperty();\n\n const context: PropertyContext = {\n removeProperty(id: string) {\n setProperties(properties => {\n const index = properties.findIndex(p => p.id === id);\n if (index > -1) {\n return [\n ...properties.slice(0, index),\n { ...properties[index], $remove: true },\n ...properties.slice(index + 1)\n ];\n }\n return properties;\n });\n },\n updateProperty(property) {\n setProperties(properties => {\n const index = properties.findIndex(p => p.id === property.id);\n if (index > -1) {\n return [\n ...properties.slice(0, index),\n { ...properties[index], ...property },\n ...properties.slice(index + 1)\n ];\n }\n return [...properties, property];\n });\n }\n };\n\n const indexById = p => p.id === props.id;\n const indexByName = p => p.name === name;\n\n const updateParentContainer = property => {\n updateContainer((properties: Property[]) => {\n // Check if this property already exists in the parent container.\n const index = properties.findIndex(props.id ? indexById : indexByName);\n\n if (props.remove) {\n if (index > -1) {\n return [\n ...properties.slice(0, index),\n { ...properties[index], $remove: true },\n ...properties.slice(index + 1)\n ];\n }\n\n return properties;\n }\n\n if (props.replace) {\n if (index > -1) {\n return [\n ...properties.slice(0, index),\n { ...property },\n ...properties.slice(index + 1)\n ];\n }\n\n return [...properties, property];\n }\n\n if (props.merge) {\n if (index > -1) {\n return [\n ...properties.slice(0, index),\n {\n ...properties[index],\n ...property,\n properties: mergeProperties(\n properties[index].properties,\n property.properties\n )\n },\n ...properties.slice(index + 1)\n ];\n }\n }\n\n return [...properties, property];\n });\n };\n\n useDeepCompareEffect(() => {\n const property = { id: id.current, name, value, properties };\n\n if (!parentProperty) {\n return updateParentContainer(property);\n }\n\n parentProperty.updateProperty(property);\n }, [properties]);\n\n useDeepCompareEffect(() => {\n // On mount, we need to report to our parent.\n if (parentProperty) {\n if (props.remove) {\n parentProperty.removeProperty(id.current);\n } else {\n parentProperty.updateProperty({ id: id.current, name, value, properties });\n }\n }\n }, [props.remove, properties]);\n\n if (!children) {\n return null;\n }\n\n return <PropertyContext.Provider value={context}>{children}</PropertyContext.Provider>;\n};\n"]}
|
|
@@ -84,7 +84,8 @@ export function useContentEntriesList() {
|
|
|
84
84
|
}, [contentModel.modelId]);
|
|
85
85
|
|
|
86
86
|
var _useQuery = useQuery(LIST_QUERY, {
|
|
87
|
-
variables: listQueryVariables
|
|
87
|
+
variables: listQueryVariables,
|
|
88
|
+
fetchPolicy: "network-only"
|
|
88
89
|
}),
|
|
89
90
|
data = _useQuery.data,
|
|
90
91
|
loading = _useQuery.loading,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useContentEntriesList.ts"],"names":["useCallback","useEffect","useMemo","useState","get","set","unset","cloneDeep","debounce","useRouter","createListQuery","useQuery","useContentEntries","useContentEntriesList","contentModel","listQueryVariables","setListQueryVariables","sorters","canCreate","loadMoreLoading","setLoadMoreLoading","filter","setFilter","history","baseUrl","modelId","query","URLSearchParams","location","search","id","searchQuery","updateSearch","searchField","titleFieldId","prev","next","push","toString","LIST_QUERY","variables","data","loading","fetchMore","onCreate","filterByStatus","entries","status","item","meta","loadMore","hasMoreItems","after","cursor","updateQuery","result","fetchMoreResult","content","editEntry","entry","encodeURIComponent"],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport get from \"lodash/get\";\nimport set from \"lodash/set\";\nimport unset from \"lodash/unset\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport debounce from \"lodash/debounce\";\nimport { useRouter } from \"@webiny/react-router\";\nimport {\n createListQuery,\n CmsEntriesListQueryVariables,\n CmsEntriesListQueryResponse\n} from \"~/admin/graphql/contentEntries\";\nimport { useQuery } from \"~/admin/hooks\";\nimport { useContentEntries } from \"./useContentEntries\";\nimport { CmsEditorContentEntry, CmsMetaResponse } from \"~/types\";\n\ninterface UpdateSearchCallableParams {\n filter: string;\n query: URLSearchParams;\n}\ninterface UpdateSearchCallable {\n (params: UpdateSearchCallableParams): void;\n}\n\nexport function useContentEntriesList() {\n const { contentModel, listQueryVariables, setListQueryVariables, sorters, canCreate } =\n useContentEntries();\n\n const [loadMoreLoading, setLoadMoreLoading] = useState<boolean>(false);\n const [filter, setFilter] = useState<string>(\"\");\n\n const { history } = useRouter();\n const baseUrl = `/cms/content-entries/${contentModel.modelId}`;\n\n // Get entry ID and search query (if any)\n const query = new URLSearchParams(location.search);\n const id = query.get(\"id\");\n const searchQuery = query.get(\"search\");\n const updateSearch = useCallback(\n debounce<UpdateSearchCallable>(({ filter, query }) => {\n const search = query.get(\"search\");\n if (typeof search !== \"string\" && !filter) {\n return;\n }\n\n // We use the title field with the \"contains\" operator for doing basic searches.\n const searchField = contentModel.titleFieldId + \"_contains\";\n setListQueryVariables(prev => {\n const next = cloneDeep(prev);\n if (filter) {\n set(next, `where.${searchField}`, filter);\n } else {\n unset(next, `where.${searchField}`);\n }\n\n return next;\n });\n\n if (search !== filter) {\n query.set(\"search\", filter);\n history.push(`${baseUrl}?${query.toString()}`);\n }\n }, 250),\n [baseUrl]\n );\n\n // Set \"filter\" from search \"query\" on page load.\n useEffect(() => {\n if (searchQuery) {\n setFilter(searchQuery);\n }\n }, [baseUrl, searchQuery]);\n\n // When filter changes, run GQL query\n useEffect(() => updateSearch({ filter, query }), [baseUrl, filter]);\n\n // Generate a query based on current content model\n const LIST_QUERY = useMemo(() => createListQuery(contentModel), [contentModel.modelId]);\n const { data, loading, fetchMore } = useQuery<\n CmsEntriesListQueryResponse,\n CmsEntriesListQueryVariables\n >(LIST_QUERY, { variables: listQueryVariables });\n\n const onCreate = useCallback(() => {\n history.push(`/cms/content-entries/${contentModel.modelId}?new=true`);\n }, [contentModel]);\n\n const filterByStatus = useCallback((entries: CmsEditorContentEntry[], status?: string) => {\n if (!status || status === \"all\") {\n return entries;\n }\n return entries.filter(item => item.meta.status === status);\n }, []);\n\n // Load more entries on scroll\n const loadMore = useCallback((): void => {\n const meta: CmsMetaResponse = get(data, \"content.meta\", {});\n if (meta.hasMoreItems) {\n setLoadMoreLoading(true);\n fetchMore({\n variables: {\n after: meta.cursor\n },\n updateQuery: (prev: CmsEntriesListQueryResponse, result) => {\n if (!result || !result.fetchMoreResult) {\n return prev;\n }\n const fetchMoreResult = result.fetchMoreResult;\n\n const next = { ...fetchMoreResult };\n\n next.content.data = [...prev.content.data, ...fetchMoreResult.content.data];\n setLoadMoreLoading(false);\n return next;\n }\n });\n }\n }, [data]);\n\n const editEntry = useCallback(\n (entry: CmsEditorContentEntry) => () => {\n history.push(\n `/cms/content-entries/${contentModel.modelId}?id=${encodeURIComponent(entry.id)}`\n );\n },\n [contentModel.modelId]\n );\n\n return {\n contentModel,\n listQueryVariables,\n setListQueryVariables,\n sorters,\n id,\n loading,\n data: filterByStatus(get(data, \"content.data\", []), listQueryVariables.status),\n loadMore,\n loadMoreLoading,\n canCreate,\n onCreate,\n filter,\n setFilter,\n editEntry\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["useContentEntriesList.ts"],"names":["useCallback","useEffect","useMemo","useState","get","set","unset","cloneDeep","debounce","useRouter","createListQuery","useQuery","useContentEntries","useContentEntriesList","contentModel","listQueryVariables","setListQueryVariables","sorters","canCreate","loadMoreLoading","setLoadMoreLoading","filter","setFilter","history","baseUrl","modelId","query","URLSearchParams","location","search","id","searchQuery","updateSearch","searchField","titleFieldId","prev","next","push","toString","LIST_QUERY","variables","fetchPolicy","data","loading","fetchMore","onCreate","filterByStatus","entries","status","item","meta","loadMore","hasMoreItems","after","cursor","updateQuery","result","fetchMoreResult","content","editEntry","entry","encodeURIComponent"],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport get from \"lodash/get\";\nimport set from \"lodash/set\";\nimport unset from \"lodash/unset\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport debounce from \"lodash/debounce\";\nimport { useRouter } from \"@webiny/react-router\";\nimport {\n createListQuery,\n CmsEntriesListQueryVariables,\n CmsEntriesListQueryResponse\n} from \"~/admin/graphql/contentEntries\";\nimport { useQuery } from \"~/admin/hooks\";\nimport { useContentEntries } from \"./useContentEntries\";\nimport { CmsEditorContentEntry, CmsMetaResponse } from \"~/types\";\n\ninterface UpdateSearchCallableParams {\n filter: string;\n query: URLSearchParams;\n}\ninterface UpdateSearchCallable {\n (params: UpdateSearchCallableParams): void;\n}\n\nexport function useContentEntriesList() {\n const { contentModel, listQueryVariables, setListQueryVariables, sorters, canCreate } =\n useContentEntries();\n\n const [loadMoreLoading, setLoadMoreLoading] = useState<boolean>(false);\n const [filter, setFilter] = useState<string>(\"\");\n\n const { history } = useRouter();\n const baseUrl = `/cms/content-entries/${contentModel.modelId}`;\n\n // Get entry ID and search query (if any)\n const query = new URLSearchParams(location.search);\n const id = query.get(\"id\");\n const searchQuery = query.get(\"search\");\n const updateSearch = useCallback(\n debounce<UpdateSearchCallable>(({ filter, query }) => {\n const search = query.get(\"search\");\n if (typeof search !== \"string\" && !filter) {\n return;\n }\n\n // We use the title field with the \"contains\" operator for doing basic searches.\n const searchField = contentModel.titleFieldId + \"_contains\";\n setListQueryVariables(prev => {\n const next = cloneDeep(prev);\n if (filter) {\n set(next, `where.${searchField}`, filter);\n } else {\n unset(next, `where.${searchField}`);\n }\n\n return next;\n });\n\n if (search !== filter) {\n query.set(\"search\", filter);\n history.push(`${baseUrl}?${query.toString()}`);\n }\n }, 250),\n [baseUrl]\n );\n\n // Set \"filter\" from search \"query\" on page load.\n useEffect(() => {\n if (searchQuery) {\n setFilter(searchQuery);\n }\n }, [baseUrl, searchQuery]);\n\n // When filter changes, run GQL query\n useEffect(() => updateSearch({ filter, query }), [baseUrl, filter]);\n\n // Generate a query based on current content model\n const LIST_QUERY = useMemo(() => createListQuery(contentModel), [contentModel.modelId]);\n const { data, loading, fetchMore } = useQuery<\n CmsEntriesListQueryResponse,\n CmsEntriesListQueryVariables\n >(LIST_QUERY, { variables: listQueryVariables, fetchPolicy: \"network-only\" });\n\n const onCreate = useCallback(() => {\n history.push(`/cms/content-entries/${contentModel.modelId}?new=true`);\n }, [contentModel]);\n\n const filterByStatus = useCallback((entries: CmsEditorContentEntry[], status?: string) => {\n if (!status || status === \"all\") {\n return entries;\n }\n return entries.filter(item => item.meta.status === status);\n }, []);\n\n // Load more entries on scroll\n const loadMore = useCallback((): void => {\n const meta: CmsMetaResponse = get(data, \"content.meta\", {});\n if (meta.hasMoreItems) {\n setLoadMoreLoading(true);\n fetchMore({\n variables: {\n after: meta.cursor\n },\n updateQuery: (prev: CmsEntriesListQueryResponse, result) => {\n if (!result || !result.fetchMoreResult) {\n return prev;\n }\n const fetchMoreResult = result.fetchMoreResult;\n\n const next = { ...fetchMoreResult };\n\n next.content.data = [...prev.content.data, ...fetchMoreResult.content.data];\n setLoadMoreLoading(false);\n return next;\n }\n });\n }\n }, [data]);\n\n const editEntry = useCallback(\n (entry: CmsEditorContentEntry) => () => {\n history.push(\n `/cms/content-entries/${contentModel.modelId}?id=${encodeURIComponent(entry.id)}`\n );\n },\n [contentModel.modelId]\n );\n\n return {\n contentModel,\n listQueryVariables,\n setListQueryVariables,\n sorters,\n id,\n loading,\n data: filterByStatus(get(data, \"content.data\", []), listQueryVariables.status),\n loadMore,\n loadMoreLoading,\n canCreate,\n onCreate,\n filter,\n setFilter,\n editEntry\n };\n}\n"]}
|
|
@@ -24,6 +24,8 @@ import * as UID from "@webiny/ui/Dialog";
|
|
|
24
24
|
import { Grid, Cell } from "@webiny/ui/Grid";
|
|
25
25
|
import { addModelToGroupCache, addModelToListCache } from "./cache";
|
|
26
26
|
import * as GQL from "../../viewsGraphql";
|
|
27
|
+
import lodashUpperFirst from "lodash/upperFirst";
|
|
28
|
+
import lodashCamelCase from "lodash/camelCase";
|
|
27
29
|
var t = i18n.ns("app-headless-cms/admin/views/content-models/new-content-model-dialog");
|
|
28
30
|
var narrowDialog = /*#__PURE__*/css({
|
|
29
31
|
".mdc-dialog__surface": {
|
|
@@ -98,7 +100,7 @@ var NewContentModelDialog = function NewContentModelDialog(_ref) {
|
|
|
98
100
|
});
|
|
99
101
|
var nameValidator = useCallback( /*#__PURE__*/function () {
|
|
100
102
|
var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(name) {
|
|
101
|
-
var target, _iterator, _step, ending, re, matched, _yield$client$query, data, types;
|
|
103
|
+
var target, _iterator, _step, ending, re, matched, _yield$client$query, data, types, modelId;
|
|
102
104
|
|
|
103
105
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
104
106
|
while (1) {
|
|
@@ -173,18 +175,19 @@ var NewContentModelDialog = function NewContentModelDialog(_ref) {
|
|
|
173
175
|
types = data.__schema.types.map(function (t) {
|
|
174
176
|
return t.name;
|
|
175
177
|
});
|
|
178
|
+
modelId = lodashUpperFirst(lodashCamelCase(name));
|
|
176
179
|
|
|
177
|
-
if (!types.includes(
|
|
178
|
-
_context.next =
|
|
180
|
+
if (!types.includes(modelId)) {
|
|
181
|
+
_context.next = 31;
|
|
179
182
|
break;
|
|
180
183
|
}
|
|
181
184
|
|
|
182
185
|
throw new Error("\"".concat(name, "\" type already exists in the GraphQL schema. Please pick a different name."));
|
|
183
186
|
|
|
184
|
-
case
|
|
187
|
+
case 31:
|
|
185
188
|
return _context.abrupt("return", true);
|
|
186
189
|
|
|
187
|
-
case
|
|
190
|
+
case 32:
|
|
188
191
|
case "end":
|
|
189
192
|
return _context.stop();
|
|
190
193
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["NewContentModelDialog.tsx"],"names":["React","useCallback","gql","css","get","useRouter","Form","Input","Select","useSnackbar","CircularProgress","validation","useQuery","useMutation","useApolloClient","i18n","ButtonPrimary","UID","Grid","Cell","addModelToGroupCache","addModelToListCache","GQL","t","ns","narrowDialog","width","minWidth","noPadding","padding","disallowedModelIdEndingList","SCHEMA_TYPES","NewContentModelDialog","open","onClose","useState","loading","setLoading","showSnackbar","history","client","CREATE_CONTENT_MODEL","update","cache","data","createContentModel","model","error","message","push","modelId","listMenuGroupsQuery","LIST_MENU_CONTENT_GROUPS_MODELS","skip","contentModelGroups","map","item","value","id","label","name","nameValidator","target","trim","charAt","match","Error","ending","re","RegExp","matched","query","fetchPolicy","types","__schema","includes","group","length","onSubmit","variables","Bind","submit","create","props","ev"],"mappings":"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","sourcesContent":["import React, { useCallback } from \"react\";\nimport gql from \"graphql-tag\";\nimport { css } from \"emotion\";\nimport get from \"lodash/get\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { Form } from \"@webiny/form\";\nimport { Input } from \"@webiny/ui/Input\";\nimport { Select } from \"@webiny/ui/Select\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { validation } from \"@webiny/validation\";\nimport { useQuery, useMutation, useApolloClient } from \"../../hooks\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { ButtonPrimary } from \"@webiny/ui/Button\";\nimport * as UID from \"@webiny/ui/Dialog\";\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { addModelToGroupCache, addModelToListCache } from \"./cache\";\nimport * as GQL from \"../../viewsGraphql\";\nimport {\n CreateCmsModelMutationResponse,\n CreateCmsModelMutationVariables,\n ListMenuCmsGroupsQueryResponse\n} from \"../../viewsGraphql\";\nimport { CmsGroup } from \"~/types\";\nimport { CmsGroupOption } from \"./types\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/views/content-models/new-content-model-dialog\");\n\nconst narrowDialog = css({\n \".mdc-dialog__surface\": {\n width: 600,\n minWidth: 600\n }\n});\n\nconst noPadding = css({\n padding: \"5px !important\"\n});\n\n/**\n * This list is to disallow creating models that might interfere with GraphQL schema creation.\n * Add more if required.\n */\nconst disallowedModelIdEndingList: string[] = [\"Response\", \"List\", \"Meta\", \"Input\", \"Sorter\"];\n\nexport interface NewContentModelDialogProps {\n open: boolean;\n onClose: UID.DialogOnClose;\n}\n\nconst SCHEMA_TYPES = gql`\n query ListSchemaTypes {\n __schema {\n types {\n name\n }\n }\n }\n`;\n\ninterface SchemaTypes {\n __schema: {\n types: { name: string }[];\n };\n}\n\ninterface CmsModelData {\n name: string;\n description: string;\n group: string;\n}\n\nconst NewContentModelDialog: React.FC<NewContentModelDialogProps> = ({ open, onClose }) => {\n const [loading, setLoading] = React.useState(false);\n const { showSnackbar } = useSnackbar();\n const { history } = useRouter();\n const client = useApolloClient();\n\n const [createContentModel] = useMutation<\n CreateCmsModelMutationResponse,\n CreateCmsModelMutationVariables\n >(GQL.CREATE_CONTENT_MODEL, {\n update(cache, { data }) {\n if (!data) {\n setLoading(false);\n showSnackbar(\"Missing data on Create Content Model Mutation Response.\");\n return;\n }\n const { data: model, error } = data.createContentModel;\n\n if (error) {\n setLoading(false);\n showSnackbar(error.message);\n return;\n }\n\n addModelToListCache(cache, model);\n addModelToGroupCache(cache, model);\n\n history.push(\"/cms/content-models/\" + model.modelId);\n }\n });\n\n const listMenuGroupsQuery = useQuery<ListMenuCmsGroupsQueryResponse>(\n GQL.LIST_MENU_CONTENT_GROUPS_MODELS,\n {\n skip: !open\n }\n );\n\n const contentModelGroups = get(listMenuGroupsQuery, \"data.listContentModelGroups.data\", []).map(\n (item: CmsGroup): CmsGroupOption => {\n return {\n value: item.id,\n label: item.name\n };\n }\n );\n\n const nameValidator = useCallback(\n async (name: string): Promise<boolean> => {\n const target = (name || \"\").trim();\n if (!target.charAt(0).match(/[a-zA-Z]/)) {\n throw new Error(\"Model name can't start with a number.\");\n }\n\n for (const ending of disallowedModelIdEndingList) {\n const re = new RegExp(`${ending}$`, \"i\");\n const matched = target.match(re);\n if (matched === null) {\n continue;\n }\n throw new Error(`Model must not end with \"${ending}\".`);\n }\n\n // Validate GraphQL Schema type\n const { data } = await client.query<SchemaTypes>({\n query: SCHEMA_TYPES,\n fetchPolicy: \"network-only\"\n });\n\n const types = data.__schema.types.map(t => t.name);\n\n if (types.includes(name)) {\n throw new Error(\n `\"${name}\" type already exists in the GraphQL schema. Please pick a different name.`\n );\n }\n\n return true;\n },\n [client]\n );\n\n const group = contentModelGroups?.length > 0 ? contentModelGroups[0].value : null;\n\n const onSubmit = async (data: CmsModelData) => {\n setLoading(true);\n await createContentModel({\n variables: { data }\n });\n };\n\n return (\n <UID.Dialog\n open={open}\n onClose={onClose}\n className={narrowDialog}\n data-testid=\"cms-new-content-model-modal\"\n >\n {open && (\n <Form\n data={{ group }}\n onSubmit={data => {\n /**\n * We are positive that data is CmsModelData.\n */\n onSubmit(data as unknown as CmsModelData);\n }}\n >\n {({ Bind, submit }) => (\n <>\n {loading && <CircularProgress label={\"Creating content model...\"} />}\n <UID.DialogTitle>{t`New Content Model`}</UID.DialogTitle>\n <UID.DialogContent>\n <Grid className={noPadding}>\n <Cell span={12}>\n <Bind\n name={\"name\"}\n validators={[\n validation.create(\"required,maxLength:100\"),\n nameValidator\n ]}\n >\n <Input\n label={t`Name`}\n description={t`The name of the content model. Use the singular form, e.g. Person, not Persons.`}\n />\n </Bind>\n </Cell>\n <Cell span={12}>\n <Bind\n name={\"group\"}\n validators={validation.create(\"required\")}\n >\n <Select\n description={t`Choose a content model group`}\n label={t`Content model group`}\n options={contentModelGroups}\n />\n </Bind>\n </Cell>\n <Cell span={12}>\n <Bind name=\"description\">\n {props => (\n <Input\n {...props}\n rows={4}\n maxLength={200}\n characterCount\n label={t`Description`}\n />\n )}\n </Bind>\n </Cell>\n </Grid>\n </UID.DialogContent>\n <UID.DialogActions>\n <ButtonPrimary\n onClick={ev => {\n submit(ev);\n }}\n >\n + {t`Create Model`}\n </ButtonPrimary>\n </UID.DialogActions>\n </>\n )}\n </Form>\n )}\n </UID.Dialog>\n );\n};\n\nexport default NewContentModelDialog;\n"]}
|
|
1
|
+
{"version":3,"sources":["NewContentModelDialog.tsx"],"names":["React","useCallback","gql","css","get","useRouter","Form","Input","Select","useSnackbar","CircularProgress","validation","useQuery","useMutation","useApolloClient","i18n","ButtonPrimary","UID","Grid","Cell","addModelToGroupCache","addModelToListCache","GQL","lodashUpperFirst","lodashCamelCase","t","ns","narrowDialog","width","minWidth","noPadding","padding","disallowedModelIdEndingList","SCHEMA_TYPES","NewContentModelDialog","open","onClose","useState","loading","setLoading","showSnackbar","history","client","CREATE_CONTENT_MODEL","update","cache","data","createContentModel","model","error","message","push","modelId","listMenuGroupsQuery","LIST_MENU_CONTENT_GROUPS_MODELS","skip","contentModelGroups","map","item","value","id","label","name","nameValidator","target","trim","charAt","match","Error","ending","re","RegExp","matched","query","fetchPolicy","types","__schema","includes","group","length","onSubmit","variables","Bind","submit","create","props","ev"],"mappings":"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","sourcesContent":["import React, { useCallback } from \"react\";\nimport gql from \"graphql-tag\";\nimport { css } from \"emotion\";\nimport get from \"lodash/get\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { Form } from \"@webiny/form\";\nimport { Input } from \"@webiny/ui/Input\";\nimport { Select } from \"@webiny/ui/Select\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { validation } from \"@webiny/validation\";\nimport { useQuery, useMutation, useApolloClient } from \"../../hooks\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { ButtonPrimary } from \"@webiny/ui/Button\";\nimport * as UID from \"@webiny/ui/Dialog\";\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { addModelToGroupCache, addModelToListCache } from \"./cache\";\nimport * as GQL from \"../../viewsGraphql\";\nimport {\n CreateCmsModelMutationResponse,\n CreateCmsModelMutationVariables,\n ListMenuCmsGroupsQueryResponse\n} from \"../../viewsGraphql\";\nimport { CmsGroup } from \"~/types\";\nimport { CmsGroupOption } from \"./types\";\nimport lodashUpperFirst from \"lodash/upperFirst\";\nimport lodashCamelCase from \"lodash/camelCase\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/views/content-models/new-content-model-dialog\");\n\nconst narrowDialog = css({\n \".mdc-dialog__surface\": {\n width: 600,\n minWidth: 600\n }\n});\n\nconst noPadding = css({\n padding: \"5px !important\"\n});\n\n/**\n * This list is to disallow creating models that might interfere with GraphQL schema creation.\n * Add more if required.\n */\nconst disallowedModelIdEndingList: string[] = [\"Response\", \"List\", \"Meta\", \"Input\", \"Sorter\"];\n\nexport interface NewContentModelDialogProps {\n open: boolean;\n onClose: UID.DialogOnClose;\n}\n\nconst SCHEMA_TYPES = gql`\n query ListSchemaTypes {\n __schema {\n types {\n name\n }\n }\n }\n`;\n\ninterface SchemaTypes {\n __schema: {\n types: { name: string }[];\n };\n}\n\ninterface CmsModelData {\n name: string;\n description: string;\n group: string;\n}\n\nconst NewContentModelDialog: React.FC<NewContentModelDialogProps> = ({ open, onClose }) => {\n const [loading, setLoading] = React.useState(false);\n const { showSnackbar } = useSnackbar();\n const { history } = useRouter();\n const client = useApolloClient();\n\n const [createContentModel] = useMutation<\n CreateCmsModelMutationResponse,\n CreateCmsModelMutationVariables\n >(GQL.CREATE_CONTENT_MODEL, {\n update(cache, { data }) {\n if (!data) {\n setLoading(false);\n showSnackbar(\"Missing data on Create Content Model Mutation Response.\");\n return;\n }\n const { data: model, error } = data.createContentModel;\n\n if (error) {\n setLoading(false);\n showSnackbar(error.message);\n return;\n }\n\n addModelToListCache(cache, model);\n addModelToGroupCache(cache, model);\n\n history.push(\"/cms/content-models/\" + model.modelId);\n }\n });\n\n const listMenuGroupsQuery = useQuery<ListMenuCmsGroupsQueryResponse>(\n GQL.LIST_MENU_CONTENT_GROUPS_MODELS,\n {\n skip: !open\n }\n );\n\n const contentModelGroups = get(listMenuGroupsQuery, \"data.listContentModelGroups.data\", []).map(\n (item: CmsGroup): CmsGroupOption => {\n return {\n value: item.id,\n label: item.name\n };\n }\n );\n\n const nameValidator = useCallback(\n async (name: string): Promise<boolean> => {\n const target = (name || \"\").trim();\n if (!target.charAt(0).match(/[a-zA-Z]/)) {\n throw new Error(\"Model name can't start with a number.\");\n }\n\n for (const ending of disallowedModelIdEndingList) {\n const re = new RegExp(`${ending}$`, \"i\");\n const matched = target.match(re);\n if (matched === null) {\n continue;\n }\n throw new Error(`Model must not end with \"${ending}\".`);\n }\n\n // Validate GraphQL Schema type\n const { data } = await client.query<SchemaTypes>({\n query: SCHEMA_TYPES,\n fetchPolicy: \"network-only\"\n });\n\n const types = data.__schema.types.map(t => t.name);\n\n const modelId = lodashUpperFirst(lodashCamelCase(name));\n\n if (types.includes(modelId)) {\n throw new Error(\n `\"${name}\" type already exists in the GraphQL schema. Please pick a different name.`\n );\n }\n\n return true;\n },\n [client]\n );\n\n const group = contentModelGroups?.length > 0 ? contentModelGroups[0].value : null;\n\n const onSubmit = async (data: CmsModelData) => {\n setLoading(true);\n await createContentModel({\n variables: { data }\n });\n };\n\n return (\n <UID.Dialog\n open={open}\n onClose={onClose}\n className={narrowDialog}\n data-testid=\"cms-new-content-model-modal\"\n >\n {open && (\n <Form\n data={{ group }}\n onSubmit={data => {\n /**\n * We are positive that data is CmsModelData.\n */\n onSubmit(data as unknown as CmsModelData);\n }}\n >\n {({ Bind, submit }) => (\n <>\n {loading && <CircularProgress label={\"Creating content model...\"} />}\n <UID.DialogTitle>{t`New Content Model`}</UID.DialogTitle>\n <UID.DialogContent>\n <Grid className={noPadding}>\n <Cell span={12}>\n <Bind\n name={\"name\"}\n validators={[\n validation.create(\"required,maxLength:100\"),\n nameValidator\n ]}\n >\n <Input\n label={t`Name`}\n description={t`The name of the content model. Use the singular form, e.g. Person, not Persons.`}\n />\n </Bind>\n </Cell>\n <Cell span={12}>\n <Bind\n name={\"group\"}\n validators={validation.create(\"required\")}\n >\n <Select\n description={t`Choose a content model group`}\n label={t`Content model group`}\n options={contentModelGroups}\n />\n </Bind>\n </Cell>\n <Cell span={12}>\n <Bind name=\"description\">\n {props => (\n <Input\n {...props}\n rows={4}\n maxLength={200}\n characterCount\n label={t`Description`}\n />\n )}\n </Bind>\n </Cell>\n </Grid>\n </UID.DialogContent>\n <UID.DialogActions>\n <ButtonPrimary\n onClick={ev => {\n submit(ev);\n }}\n >\n + {t`Create Model`}\n </ButtonPrimary>\n </UID.DialogActions>\n </>\n )}\n </Form>\n )}\n </UID.Dialog>\n );\n};\n\nexport default NewContentModelDialog;\n"]}
|
package/index.d.ts
CHANGED
|
@@ -1 +1,11 @@
|
|
|
1
1
|
export * from "./HeadlessCMS";
|
|
2
|
+
/**
|
|
3
|
+
* DANGER!
|
|
4
|
+
* The following exports are experimental and can change in the future!
|
|
5
|
+
* You CAN use them, but the API may change in the future. Migration instructions will be included
|
|
6
|
+
* with the release that breaks them, so you won't be left alone in the dark :)
|
|
7
|
+
*
|
|
8
|
+
* These exports contain components to experiment with configurable views (currently only ContentEntries view).
|
|
9
|
+
*/
|
|
10
|
+
export { ContentEntriesViewConfig } from "./admin/views/contentEntries/experiment/ContentEntriesViewConfig";
|
|
11
|
+
export type { ContentEntriesViewConfigFilterProps, ContentEntriesViewConfigSorterProps } from "./admin/views/contentEntries/experiment/ContentEntriesViewConfig";
|
package/index.js
CHANGED
|
@@ -1 +1,11 @@
|
|
|
1
|
-
export * from "./HeadlessCMS";
|
|
1
|
+
export * from "./HeadlessCMS";
|
|
2
|
+
/**
|
|
3
|
+
* DANGER!
|
|
4
|
+
* The following exports are experimental and can change in the future!
|
|
5
|
+
* You CAN use them, but the API may change in the future. Migration instructions will be included
|
|
6
|
+
* with the release that breaks them, so you won't be left alone in the dark :)
|
|
7
|
+
*
|
|
8
|
+
* These exports contain components to experiment with configurable views (currently only ContentEntries view).
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export { ContentEntriesViewConfig } from "./admin/views/contentEntries/experiment/ContentEntriesViewConfig";
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"names":[],"mappings":"AAAA","sourcesContent":["export * from \"./HeadlessCMS\";\n"]}
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":["ContentEntriesViewConfig"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASA,wBAAT","sourcesContent":["export * from \"./HeadlessCMS\";\n/**\n * DANGER!\n * The following exports are experimental and can change in the future!\n * You CAN use them, but the API may change in the future. Migration instructions will be included\n * with the release that breaks them, so you won't be left alone in the dark :)\n *\n * These exports contain components to experiment with configurable views (currently only ContentEntries view).\n */\nexport { ContentEntriesViewConfig } from \"./admin/views/contentEntries/experiment/ContentEntriesViewConfig\";\n\nexport type {\n ContentEntriesViewConfigFilterProps,\n ContentEntriesViewConfigSorterProps\n} from \"./admin/views/contentEntries/experiment/ContentEntriesViewConfig\";\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-headless-cms",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.26.0-beta.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -15,30 +15,30 @@
|
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@apollo/react-common": "3.1.4",
|
|
17
17
|
"@apollo/react-hooks": "3.1.5",
|
|
18
|
-
"@babel/runtime": "7.
|
|
18
|
+
"@babel/runtime": "7.16.7",
|
|
19
19
|
"@emotion/core": "10.3.1",
|
|
20
20
|
"@emotion/styled": "10.3.0",
|
|
21
21
|
"@fortawesome/fontawesome-common-types": "0.3.0",
|
|
22
22
|
"@fortawesome/fontawesome-svg-core": "1.3.0",
|
|
23
|
-
"@fortawesome/free-brands-svg-icons": "6.
|
|
24
|
-
"@fortawesome/free-regular-svg-icons": "6.
|
|
25
|
-
"@fortawesome/free-solid-svg-icons": "6.
|
|
26
|
-
"@fortawesome/react-fontawesome": "0.1.
|
|
23
|
+
"@fortawesome/free-brands-svg-icons": "6.0.0",
|
|
24
|
+
"@fortawesome/free-regular-svg-icons": "6.0.0",
|
|
25
|
+
"@fortawesome/free-solid-svg-icons": "6.0.0",
|
|
26
|
+
"@fortawesome/react-fontawesome": "0.1.17",
|
|
27
27
|
"@svgr/webpack": "6.2.1",
|
|
28
28
|
"@types/react": "16.14.2",
|
|
29
|
-
"@webiny/app": "5.
|
|
30
|
-
"@webiny/app-admin": "5.
|
|
31
|
-
"@webiny/app-graphql-playground": "5.
|
|
32
|
-
"@webiny/app-i18n": "5.
|
|
33
|
-
"@webiny/app-plugin-admin-welcome-screen": "5.
|
|
34
|
-
"@webiny/app-security": "5.
|
|
35
|
-
"@webiny/error": "5.
|
|
36
|
-
"@webiny/form": "5.
|
|
37
|
-
"@webiny/plugins": "5.
|
|
38
|
-
"@webiny/react-router": "5.
|
|
39
|
-
"@webiny/ui": "5.
|
|
40
|
-
"@webiny/utils": "5.
|
|
41
|
-
"@webiny/validation": "5.
|
|
29
|
+
"@webiny/app": "5.26.0-beta.0",
|
|
30
|
+
"@webiny/app-admin": "5.26.0-beta.0",
|
|
31
|
+
"@webiny/app-graphql-playground": "5.26.0-beta.0",
|
|
32
|
+
"@webiny/app-i18n": "5.26.0-beta.0",
|
|
33
|
+
"@webiny/app-plugin-admin-welcome-screen": "5.26.0-beta.0",
|
|
34
|
+
"@webiny/app-security": "5.26.0-beta.0",
|
|
35
|
+
"@webiny/error": "5.26.0-beta.0",
|
|
36
|
+
"@webiny/form": "5.26.0-beta.0",
|
|
37
|
+
"@webiny/plugins": "5.26.0-beta.0",
|
|
38
|
+
"@webiny/react-router": "5.26.0-beta.0",
|
|
39
|
+
"@webiny/ui": "5.26.0-beta.0",
|
|
40
|
+
"@webiny/utils": "5.26.0-beta.0",
|
|
41
|
+
"@webiny/validation": "5.26.0-beta.0",
|
|
42
42
|
"apollo-cache": "1.3.5",
|
|
43
43
|
"apollo-client": "2.6.10",
|
|
44
44
|
"apollo-link": "1.2.14",
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
"graphql-tag": "2.12.6",
|
|
52
52
|
"invariant": "2.2.4",
|
|
53
53
|
"lodash": "4.17.21",
|
|
54
|
+
"nanoid": "3.3.4",
|
|
54
55
|
"pluralize": "8.0.0",
|
|
55
56
|
"prop-types": "15.8.1",
|
|
56
57
|
"raw.macro": "0.4.2",
|
|
@@ -72,8 +73,8 @@
|
|
|
72
73
|
"@babel/preset-env": "^7.16.4",
|
|
73
74
|
"@babel/preset-react": "^7.16.0",
|
|
74
75
|
"@babel/preset-typescript": "^7.16.0",
|
|
75
|
-
"@webiny/cli": "^5.
|
|
76
|
-
"@webiny/project-utils": "^5.
|
|
76
|
+
"@webiny/cli": "^5.26.0-beta.0",
|
|
77
|
+
"@webiny/project-utils": "^5.26.0-beta.0",
|
|
77
78
|
"babel-plugin-emotion": "^9.2.8",
|
|
78
79
|
"babel-plugin-lodash": "^3.3.4",
|
|
79
80
|
"babel-plugin-module-resolver": "^4.1.0",
|
|
@@ -105,5 +106,5 @@
|
|
|
105
106
|
]
|
|
106
107
|
}
|
|
107
108
|
},
|
|
108
|
-
"gitHead": "
|
|
109
|
+
"gitHead": "4ce1afe0630101262047a016a4b00e4e01f47095"
|
|
109
110
|
}
|