@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.
Files changed (41) hide show
  1. package/HeadlessCMS.js +2 -1
  2. package/HeadlessCMS.js.map +1 -1
  3. package/admin/contexts/Cms/index.d.ts +2 -2
  4. package/admin/contexts/Cms/index.js +0 -8
  5. package/admin/contexts/Cms/index.js.map +1 -1
  6. package/admin/hooks/useCms.d.ts +2 -2
  7. package/admin/hooks/useCms.js.map +1 -1
  8. package/admin/plugins/fieldRenderers/dateTime/utils.js +1 -1
  9. package/admin/plugins/fieldRenderers/dateTime/utils.js.map +1 -1
  10. package/admin/plugins/index.d.ts +1 -1
  11. package/admin/plugins/routes.js +2 -4
  12. package/admin/plugins/routes.js.map +1 -1
  13. package/admin/plugins/transformers/dateTransformer.js +2 -2
  14. package/admin/plugins/transformers/dateTransformer.js.map +1 -1
  15. package/admin/views/contentEntries/ContentEntriesContext.d.ts +1 -1
  16. package/admin/views/contentEntries/ContentEntriesContext.js +34 -22
  17. package/admin/views/contentEntries/ContentEntriesContext.js.map +1 -1
  18. package/admin/views/contentEntries/ContentEntriesList.js +40 -43
  19. package/admin/views/contentEntries/ContentEntriesList.js.map +1 -1
  20. package/admin/views/contentEntries/ContentEntry/cache.js +1 -1
  21. package/admin/views/contentEntries/ContentEntry/cache.js.map +1 -1
  22. package/admin/views/contentEntries/experiment/ContentEntriesModule.d.ts +1 -0
  23. package/admin/views/contentEntries/experiment/ContentEntriesModule.js +50 -0
  24. package/admin/views/contentEntries/experiment/ContentEntriesModule.js.map +1 -0
  25. package/admin/views/contentEntries/experiment/ContentEntriesRenderer.d.ts +2 -0
  26. package/admin/views/contentEntries/experiment/ContentEntriesRenderer.js +12 -0
  27. package/admin/views/contentEntries/experiment/ContentEntriesRenderer.js.map +1 -0
  28. package/admin/views/contentEntries/experiment/ContentEntriesViewConfig.d.ts +35 -0
  29. package/admin/views/contentEntries/experiment/ContentEntriesViewConfig.js +130 -0
  30. package/admin/views/contentEntries/experiment/ContentEntriesViewConfig.js.map +1 -0
  31. package/admin/views/contentEntries/experiment/Property.d.ts +34 -0
  32. package/admin/views/contentEntries/experiment/Property.js +232 -0
  33. package/admin/views/contentEntries/experiment/Property.js.map +1 -0
  34. package/admin/views/contentEntries/hooks/useContentEntriesList.js +2 -1
  35. package/admin/views/contentEntries/hooks/useContentEntriesList.js.map +1 -1
  36. package/admin/views/contentModels/NewContentModelDialog.js +8 -5
  37. package/admin/views/contentModels/NewContentModelDialog.js.map +1 -1
  38. package/index.d.ts +10 -0
  39. package/index.js +11 -1
  40. package/index.js.map +1 -1
  41. 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":";;;;;;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,KAAP,IAAgBC,aAAhB,EAAmCC,UAAnC,EAA+CC,OAA/C,EAAwDC,MAAxD,EAAgEC,QAAhE,QAAgF,OAAhF;AACA,SAASC,MAAT,QAAuB,QAAvB;AACA,OAAOC,oBAAP,MAAiC,yBAAjC;AAEA,OAAO,SAASC,QAAT,CAA+BC,QAA/B,EAAsD;AACzD,MAAIA,QAAQ,CAACC,KAAT,KAAmBC,SAAvB,EAAkC;AAC9B,+BAAUF,QAAQ,CAACG,IAAnB,EAA0BH,QAAQ,CAACC,KAAnC;AACH;;AAED,MAAMG,GAAG,GAAG,EAAZ;AACAJ,EAAAA,QAAQ,CAACK,UAAT,CAAoBC,OAApB,CAA4B,UAAAC,IAAI,EAAI;AAChC;AACA,QAAMC,QAAQ,GAAGR,QAAQ,CAACK,UAAT,CAAoBI,MAApB,CAA2B,UAAAC,CAAC;AAAA,aAAIA,CAAC,CAACP,IAAF,KAAWI,IAAI,CAACJ,IAApB;AAAA,KAA5B,EAAsDQ,MAAtD,KAAiE,CAAlF;;AACA,QAAIJ,IAAI,CAACN,KAAL,KAAeC,SAAnB,EAA8B;AAC1BE,MAAAA,GAAG,CAACG,IAAI,CAACJ,IAAN,CAAH,GAAiBK,QAAQ,GAAGD,IAAI,CAACN,KAAR,gCAAqBG,GAAG,CAACG,IAAI,CAACJ,IAAN,CAAH,IAAkB,EAAvC,IAA4CI,IAAI,CAACN,KAAjD,EAAzB;AACH,KAFD,MAEO;AACH,UAAMW,QAAQ,GAAGb,QAAQ,CAACQ,IAAD,CAAzB;;AAEA,UAAI,CAACC,QAAL,EAAe;AACXJ,QAAAA,GAAG,CAACG,IAAI,CAACJ,IAAN,CAAH,gCAAsBC,GAAG,CAACG,IAAI,CAACJ,IAAN,CAAH,IAAkB,EAAxC,IAA6CS,QAAQ,CAACL,IAAI,CAACJ,IAAN,CAArD;AACH,OAFD,MAEO;AACHC,QAAAA,GAAG,CAACG,IAAI,CAACJ,IAAN,CAAH,GAAiBS,QAAQ,CAACL,IAAI,CAACJ,IAAN,CAAzB;AACH;AACJ;AACJ,GAdD;AAgBA,SAAOC,GAAP;AACH;AAED,OAAO,SAASS,OAAT,CAAiBC,OAAjB,EAAsC;AACzC,SAAOA,OAAO,CAACC,GAAR,CAAY,UAAAX,GAAG;AAAA,WAClBA,GAAG,CAACC,UAAJ,CAAeW,MAAf,CAAsB,UAACC,GAAD,EAAMC,IAAN,EAAe;AACjC,6CAAYD,GAAZ,GAAoBlB,QAAQ,CAACmB,IAAD,CAA5B;AACH,KAFD,EAEG,EAFH,CADkB;AAAA,GAAf,CAAP;AAKH;;AAED,SAASC,eAAT,CAAyBC,WAAzB,EAAkDC,WAAlD,EAA2E;AACvE,MAAMC,IAAgB,gCAAOF,WAAP,sBAAuBC,WAAvB,EAAtB;AAEA,SAAOE,MAAM,CAACC,MAAP,CACHF,IAAI,CAACN,MAAL,CAAY,UAACC,GAAD,EAAMC,IAAN,EAAe;AACvB,2CAAYD,GAAZ,2BAAkBC,IAAI,CAACO,EAAvB,EAA4BP,IAA5B;AACH,GAFD,EAEG,EAFH,CADG,CAAP;AAKH;;AAOD,IAAMQ,eAAe,gBAAGlC,aAAa,CAAkB,IAAlB,CAArC;AACAkC,eAAe,CAACC,WAAhB,GAA8B,iBAA9B;;AAEA,IAAMC,WAAW,GAAG,SAAdA,WAAc,GAAM;AACtB,SAAOnC,UAAU,CAACiC,eAAD,CAAjB;AACH,CAFD;;AAeA,IAAMG,wBAAwB,gBAAGrC,aAAa,EAA9C;;AAEA,SAASsC,OAAT,CAAiBzB,UAAjB,EAAqD;AACjD,SAAOA,UAAU,CACZU,GADE,CACE,UAAAf,QAAQ,EAAI;AACb,QAAI,aAAaA,QAAjB,EAA2B;AACvB,aAAO,IAAP;AACH;;AAED,2CACOA,QADP;AAEIK,MAAAA,UAAU,EAAEyB,OAAO,CAAC9B,QAAQ,CAACK,UAAV;AAFvB;AAIH,GAVE,EAWFI,MAXE,CAWKsB,OAXL,CAAP;AAYH;;AAED,IAAMC,KAAK,GAAG,IAAIC,GAAJ,EAAd;AAQA,OAAO,IAAMC,iBAA6C,GAAG,SAAhDA,iBAAgD,QAAkC;AAAA,MAA/B/B,IAA+B,SAA/BA,IAA+B;AAAA,MAAzBgC,QAAyB,SAAzBA,QAAyB;AAAA,MAAfC,QAAe,SAAfA,QAAe;AAC3F,MAAMC,GAAG,GAAG1C,MAAM,CAACqC,KAAD,CAAlB;AACA,MAAMM,OAAO,GAAG5C,OAAO,CACnB;AAAA,WAAO;AACH6C,MAAAA,eADG,2BACaC,OADb,EACsB;AACrB,YAAMC,OAAO,GAAGT,KAAK,CAACU,GAAN,CAAUvC,IAAV,KAAmB,EAAnC;AACA,YAAME,UAAU,GAAGyB,OAAO,CAACU,OAAO,CAACC,OAAD,CAAR,CAA1B;AACAT,QAAAA,KAAK,CAACW,GAAN,CAAUxC,IAAV,EAAgBE,UAAhB;AACA8B,QAAAA,QAAQ,CAAC9B,UAAD,CAAR;AACH;AANE,KAAP;AAAA,GADmB,EASnB,CAACgC,GAAD,CATmB,CAAvB;AAYA,sBACI,oBAAC,wBAAD,CAA0B,QAA1B;AAAmC,IAAA,KAAK,EAAEC;AAA1C,KACKF,QADL,CADJ;AAKH,CAnBM;AA8BP,OAAO,IAAMQ,QAA2B,GAAG,SAA9BA,QAA8B,QAAyC;AAAA,MAAtCR,QAAsC,SAAtCA,QAAsC;AAAA,MAA5BjC,IAA4B,SAA5BA,IAA4B;AAAA,MAAtBF,KAAsB,SAAtBA,KAAsB;AAAA,MAAZ4C,KAAY;;AAChF,MAAMpB,EAAE,GAAG9B,MAAM,CAACkD,KAAK,CAACpB,EAAN,IAAY5B,MAAM,EAAnB,CAAjB;;AACA,kBAAoCD,QAAQ,CAAC,EAAD,CAA5C;AAAA;AAAA,MAAOS,UAAP;AAAA,MAAmByC,aAAnB;;AACA,oBAA4BrD,UAAU,CAACoC,wBAAD,CAAtC;AAAA,MAAQU,eAAR,eAAQA,eAAR;;AACA,MAAMQ,cAAc,GAAGnB,WAAW,EAAlC;AAEA,MAAMU,OAAwB,GAAG;AAC7BU,IAAAA,cAD6B,0BACdvB,EADc,EACF;AACvBqB,MAAAA,aAAa,CAAC,UAAAzC,UAAU,EAAI;AACxB,YAAM4C,KAAK,GAAG5C,UAAU,CAAC6C,SAAX,CAAqB,UAAAxC,CAAC;AAAA,iBAAIA,CAAC,CAACe,EAAF,KAASA,EAAb;AAAA,SAAtB,CAAd;;AACA,YAAIwB,KAAK,GAAG,CAAC,CAAb,EAAgB;AACZ,8CACO5C,UAAU,CAAC8C,KAAX,CAAiB,CAAjB,EAAoBF,KAApB,CADP,oCAES5C,UAAU,CAAC4C,KAAD,CAFnB;AAE4BG,YAAAA,OAAO,EAAE;AAFrC,kCAGO/C,UAAU,CAAC8C,KAAX,CAAiBF,KAAK,GAAG,CAAzB,CAHP;AAKH;;AACD,eAAO5C,UAAP;AACH,OAVY,CAAb;AAWH,KAb4B;AAc7BgD,IAAAA,cAd6B,0BAcdrD,QAdc,EAcJ;AACrB8C,MAAAA,aAAa,CAAC,UAAAzC,UAAU,EAAI;AACxB,YAAM4C,KAAK,GAAG5C,UAAU,CAAC6C,SAAX,CAAqB,UAAAxC,CAAC;AAAA,iBAAIA,CAAC,CAACe,EAAF,KAASzB,QAAQ,CAACyB,EAAtB;AAAA,SAAtB,CAAd;;AACA,YAAIwB,KAAK,GAAG,CAAC,CAAb,EAAgB;AACZ,8CACO5C,UAAU,CAAC8C,KAAX,CAAiB,CAAjB,EAAoBF,KAApB,CADP,oCAES5C,UAAU,CAAC4C,KAAD,CAFnB,GAE+BjD,QAF/B,uBAGOK,UAAU,CAAC8C,KAAX,CAAiBF,KAAK,GAAG,CAAzB,CAHP;AAKH;;AACD,4CAAW5C,UAAX,IAAuBL,QAAvB;AACH,OAVY,CAAb;AAWH;AA1B4B,GAAjC;;AA6BA,MAAMsD,SAAS,GAAG,SAAZA,SAAY,CAAA5C,CAAC;AAAA,WAAIA,CAAC,CAACe,EAAF,KAASoB,KAAK,CAACpB,EAAnB;AAAA,GAAnB;;AACA,MAAM8B,WAAW,GAAG,SAAdA,WAAc,CAAA7C,CAAC;AAAA,WAAIA,CAAC,CAACP,IAAF,KAAWA,IAAf;AAAA,GAArB;;AAEA,MAAMqD,qBAAqB,GAAG,SAAxBA,qBAAwB,CAAAxD,QAAQ,EAAI;AACtCuC,IAAAA,eAAe,CAAC,UAAClC,UAAD,EAA4B;AACxC;AACA,UAAM4C,KAAK,GAAG5C,UAAU,CAAC6C,SAAX,CAAqBL,KAAK,CAACpB,EAAN,GAAW6B,SAAX,GAAuBC,WAA5C,CAAd;;AAEA,UAAIV,KAAK,CAACY,MAAV,EAAkB;AACd,YAAIR,KAAK,GAAG,CAAC,CAAb,EAAgB;AACZ,8CACO5C,UAAU,CAAC8C,KAAX,CAAiB,CAAjB,EAAoBF,KAApB,CADP,oCAES5C,UAAU,CAAC4C,KAAD,CAFnB;AAE4BG,YAAAA,OAAO,EAAE;AAFrC,kCAGO/C,UAAU,CAAC8C,KAAX,CAAiBF,KAAK,GAAG,CAAzB,CAHP;AAKH;;AAED,eAAO5C,UAAP;AACH;;AAED,UAAIwC,KAAK,CAACa,OAAV,EAAmB;AACf,YAAIT,KAAK,GAAG,CAAC,CAAb,EAAgB;AACZ,8CACO5C,UAAU,CAAC8C,KAAX,CAAiB,CAAjB,EAAoBF,KAApB,CADP,sBAESjD,QAFT,uBAGOK,UAAU,CAAC8C,KAAX,CAAiBF,KAAK,GAAG,CAAzB,CAHP;AAKH;;AAED,4CAAW5C,UAAX,IAAuBL,QAAvB;AACH;;AAED,UAAI6C,KAAK,CAACc,KAAV,EAAiB;AACb,YAAIV,KAAK,GAAG,CAAC,CAAb,EAAgB;AACZ,8CACO5C,UAAU,CAAC8C,KAAX,CAAiB,CAAjB,EAAoBF,KAApB,CADP,kDAGW5C,UAAU,CAAC4C,KAAD,CAHrB,GAIWjD,QAJX;AAKQK,YAAAA,UAAU,EAAEc,eAAe,CACvBd,UAAU,CAAC4C,KAAD,CAAV,CAAkB5C,UADK,EAEvBL,QAAQ,CAACK,UAFc;AALnC,kCAUOA,UAAU,CAAC8C,KAAX,CAAiBF,KAAK,GAAG,CAAzB,CAVP;AAYH;AACJ;;AAED,0CAAW5C,UAAX,IAAuBL,QAAvB;AACH,KA9Cc,CAAf;AA+CH,GAhDD;;AAkDAF,EAAAA,oBAAoB,CAAC,YAAM;AACvB,QAAME,QAAQ,GAAG;AAAEyB,MAAAA,EAAE,EAAEA,EAAE,CAACgB,OAAT;AAAkBtC,MAAAA,IAAI,EAAJA,IAAlB;AAAwBF,MAAAA,KAAK,EAALA,KAAxB;AAA+BI,MAAAA,UAAU,EAAVA;AAA/B,KAAjB;;AAEA,QAAI,CAAC0C,cAAL,EAAqB;AACjB,aAAOS,qBAAqB,CAACxD,QAAD,CAA5B;AACH;;AAED+C,IAAAA,cAAc,CAACM,cAAf,CAA8BrD,QAA9B;AACH,GARmB,EAQjB,CAACK,UAAD,CARiB,CAApB;AAUAP,EAAAA,oBAAoB,CAAC,YAAM;AACvB;AACA,QAAIiD,cAAJ,EAAoB;AAChB,UAAIF,KAAK,CAACY,MAAV,EAAkB;AACdV,QAAAA,cAAc,CAACC,cAAf,CAA8BvB,EAAE,CAACgB,OAAjC;AACH,OAFD,MAEO;AACHM,QAAAA,cAAc,CAACM,cAAf,CAA8B;AAAE5B,UAAAA,EAAE,EAAEA,EAAE,CAACgB,OAAT;AAAkBtC,UAAAA,IAAI,EAAJA,IAAlB;AAAwBF,UAAAA,KAAK,EAALA,KAAxB;AAA+BI,UAAAA,UAAU,EAAVA;AAA/B,SAA9B;AACH;AACJ;AACJ,GATmB,EASjB,CAACwC,KAAK,CAACY,MAAP,EAAepD,UAAf,CATiB,CAApB;;AAWA,MAAI,CAAC+B,QAAL,EAAe;AACX,WAAO,IAAP;AACH;;AAED,sBAAO,oBAAC,eAAD,CAAiB,QAAjB;AAA0B,IAAA,KAAK,EAAEE;AAAjC,KAA2CF,QAA3C,CAAP;AACH,CAlHM","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(name)) {
178
- _context.next = 30;
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 30:
187
+ case 31:
185
188
  return _context.abrupt("return", true);
186
189
 
187
- case 31:
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.25.0",
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.17.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.1.0",
24
- "@fortawesome/free-regular-svg-icons": "6.1.0",
25
- "@fortawesome/free-solid-svg-icons": "6.1.0",
26
- "@fortawesome/react-fontawesome": "0.1.18",
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.25.0",
30
- "@webiny/app-admin": "5.25.0",
31
- "@webiny/app-graphql-playground": "5.25.0",
32
- "@webiny/app-i18n": "5.25.0",
33
- "@webiny/app-plugin-admin-welcome-screen": "5.25.0",
34
- "@webiny/app-security": "5.25.0",
35
- "@webiny/error": "5.25.0",
36
- "@webiny/form": "5.25.0",
37
- "@webiny/plugins": "5.25.0",
38
- "@webiny/react-router": "5.25.0",
39
- "@webiny/ui": "5.25.0",
40
- "@webiny/utils": "5.25.0",
41
- "@webiny/validation": "5.25.0",
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.25.0",
76
- "@webiny/project-utils": "^5.25.0",
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": "4622d2aafbbecea051ab404859ced09a0a97434e"
109
+ "gitHead": "4ce1afe0630101262047a016a4b00e4e01f47095"
109
110
  }