@webiny/app-headless-cms 5.29.0 → 5.30.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 (107) hide show
  1. package/HeadlessCMS.js +5 -1
  2. package/HeadlessCMS.js.map +1 -1
  3. package/admin/components/ContentEntryForm/useBind.js +23 -1
  4. package/admin/components/ContentEntryForm/useBind.js.map +1 -1
  5. package/admin/components/ContentModelEditor/Editor.js +1 -1
  6. package/admin/components/ContentModelEditor/Editor.js.map +1 -1
  7. package/admin/components/FieldEditor/EditFieldDialog/AppearanceTab.js +1 -1
  8. package/admin/components/FieldEditor/EditFieldDialog/AppearanceTab.js.map +1 -1
  9. package/admin/components/FieldEditor/EditFieldDialog/GeneralTab.js +10 -5
  10. package/admin/components/FieldEditor/EditFieldDialog/GeneralTab.js.map +1 -1
  11. package/admin/components/FieldEditor/EditFieldDialog/ValidatorsTab.js +1 -0
  12. package/admin/components/FieldEditor/EditFieldDialog/ValidatorsTab.js.map +1 -1
  13. package/admin/components/FieldEditor/EditFieldDialog.js +8 -7
  14. package/admin/components/FieldEditor/EditFieldDialog.js.map +1 -1
  15. package/admin/contexts/Cms/index.d.ts +60 -0
  16. package/admin/contexts/Cms/index.js +107 -9
  17. package/admin/contexts/Cms/index.js.map +1 -1
  18. package/admin/plugins/editor/defaultBar/SaveContentModelButton.js +1 -0
  19. package/admin/plugins/editor/defaultBar/SaveContentModelButton.js.map +1 -1
  20. package/admin/plugins/entry/DefaultOnEntryDelete.d.ts +2 -0
  21. package/admin/plugins/entry/DefaultOnEntryDelete.js +204 -0
  22. package/admin/plugins/entry/DefaultOnEntryDelete.js.map +1 -0
  23. package/admin/plugins/entry/DefaultOnEntryPublish.d.ts +2 -0
  24. package/admin/plugins/entry/DefaultOnEntryPublish.js +176 -0
  25. package/admin/plugins/entry/DefaultOnEntryPublish.js.map +1 -0
  26. package/admin/plugins/fieldRenderers/Accordion.js +3 -0
  27. package/admin/plugins/fieldRenderers/Accordion.js.map +1 -1
  28. package/admin/plugins/fieldRenderers/DynamicSection.d.ts +11 -8
  29. package/admin/plugins/fieldRenderers/DynamicSection.js +0 -3
  30. package/admin/plugins/fieldRenderers/DynamicSection.js.map +1 -1
  31. package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js +2 -1
  32. package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js.map +1 -1
  33. package/admin/plugins/fieldRenderers/checkboxes.js +2 -1
  34. package/admin/plugins/fieldRenderers/checkboxes.js.map +1 -1
  35. package/admin/plugins/fieldRenderers/dateTime/Input.js +2 -1
  36. package/admin/plugins/fieldRenderers/dateTime/Input.js.map +1 -1
  37. package/admin/plugins/fieldRenderers/dateTime/Select.js +2 -1
  38. package/admin/plugins/fieldRenderers/dateTime/Select.js.map +1 -1
  39. package/admin/plugins/fieldRenderers/dateTime/utils.d.ts +3 -3
  40. package/admin/plugins/fieldRenderers/file/fileField.js +2 -1
  41. package/admin/plugins/fieldRenderers/file/fileField.js.map +1 -1
  42. package/admin/plugins/fieldRenderers/file/fileFields.js +4 -2
  43. package/admin/plugins/fieldRenderers/file/fileFields.js.map +1 -1
  44. package/admin/plugins/fieldRenderers/longText/longText.js +2 -1
  45. package/admin/plugins/fieldRenderers/longText/longText.js.map +1 -1
  46. package/admin/plugins/fieldRenderers/number/numberInput.js +2 -1
  47. package/admin/plugins/fieldRenderers/number/numberInput.js.map +1 -1
  48. package/admin/plugins/fieldRenderers/object/StyledComponents.d.ts +2 -0
  49. package/admin/plugins/fieldRenderers/object/StyledComponents.js +37 -2
  50. package/admin/plugins/fieldRenderers/object/StyledComponents.js.map +1 -1
  51. package/admin/plugins/fieldRenderers/object/arrow_drop_down.svg +1 -0
  52. package/admin/plugins/fieldRenderers/object/arrow_drop_up.svg +1 -0
  53. package/admin/plugins/fieldRenderers/object/multipleObjects.js +101 -47
  54. package/admin/plugins/fieldRenderers/object/multipleObjects.js.map +1 -1
  55. package/admin/plugins/fieldRenderers/radioButtons.js +2 -1
  56. package/admin/plugins/fieldRenderers/radioButtons.js.map +1 -1
  57. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js +5 -5
  58. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js.map +1 -1
  59. package/admin/plugins/fieldRenderers/ref/components/useReference.js +6 -1
  60. package/admin/plugins/fieldRenderers/ref/components/useReference.js.map +1 -1
  61. package/admin/plugins/fieldRenderers/richText/richTextInput.js +2 -1
  62. package/admin/plugins/fieldRenderers/richText/richTextInput.js.map +1 -1
  63. package/admin/plugins/fieldRenderers/richText/richTextInputs.js +2 -2
  64. package/admin/plugins/fieldRenderers/richText/richTextInputs.js.map +1 -1
  65. package/admin/plugins/fieldRenderers/select.js +2 -1
  66. package/admin/plugins/fieldRenderers/select.js.map +1 -1
  67. package/admin/plugins/fieldRenderers/text/textInput.js +2 -1
  68. package/admin/plugins/fieldRenderers/text/textInput.js.map +1 -1
  69. package/admin/plugins/fieldValidators/date/availableValidators.d.ts +1 -1
  70. package/admin/plugins/index.d.ts +1 -1
  71. package/admin/plugins/validators/unique.d.ts +1 -1
  72. package/admin/views/contentEntries/ContentEntriesList.js +7 -2
  73. package/admin/views/contentEntries/ContentEntriesList.js.map +1 -1
  74. package/admin/views/contentEntries/ContentEntry/ContentEntryContext.d.ts +4 -6
  75. package/admin/views/contentEntries/ContentEntry/ContentEntryContext.js +12 -71
  76. package/admin/views/contentEntries/ContentEntry/ContentEntryContext.js.map +1 -1
  77. package/admin/views/contentEntries/ContentEntry/PublishEntryRevisionListItem.d.ts +1 -0
  78. package/admin/views/contentEntries/ContentEntry/PublishEntryRevisionListItem.js +35 -0
  79. package/admin/views/contentEntries/ContentEntry/PublishEntryRevisionListItem.js.map +1 -0
  80. package/admin/views/contentEntries/ContentEntry/RevisionListItem.js +9 -11
  81. package/admin/views/contentEntries/ContentEntry/RevisionListItem.js.map +1 -1
  82. package/admin/views/contentEntries/ContentEntry/cache.js +47 -21
  83. package/admin/views/contentEntries/ContentEntry/cache.js.map +1 -1
  84. package/admin/views/contentEntries/ContentEntry/header/contentFormOptionsMenu/ContentFormOptionsMenu.js +32 -46
  85. package/admin/views/contentEntries/ContentEntry/header/contentFormOptionsMenu/ContentFormOptionsMenu.js.map +1 -1
  86. package/admin/views/contentEntries/ContentEntry/header/index.js +6 -6
  87. package/admin/views/contentEntries/ContentEntry/header/index.js.map +1 -1
  88. package/admin/views/contentEntries/ContentEntry/header/requestChanges/RequestChanges.d.ts +1 -2
  89. package/admin/views/contentEntries/ContentEntry/header/requestChanges/RequestChanges.js +6 -4
  90. package/admin/views/contentEntries/ContentEntry/header/requestChanges/RequestChanges.js.map +1 -1
  91. package/admin/views/contentEntries/ContentEntry/header/requestReview/RequestReview.d.ts +1 -3
  92. package/admin/views/contentEntries/ContentEntry/header/requestReview/RequestReview.js +6 -4
  93. package/admin/views/contentEntries/ContentEntry/header/requestReview/RequestReview.js.map +1 -1
  94. package/admin/views/contentEntries/ContentEntry/header/saveAndPublishContent/SaveAndPublishContent.d.ts +1 -3
  95. package/admin/views/contentEntries/ContentEntry/header/saveAndPublishContent/SaveAndPublishContent.js +45 -38
  96. package/admin/views/contentEntries/ContentEntry/header/saveAndPublishContent/SaveAndPublishContent.js.map +1 -1
  97. package/admin/views/contentEntries/ContentEntry/useRevision.js +57 -70
  98. package/admin/views/contentEntries/ContentEntry/useRevision.js.map +1 -1
  99. package/admin/views/contentEntries/ContentEntry.js +2 -4
  100. package/admin/views/contentEntries/ContentEntry.js.map +1 -1
  101. package/admin/views/contentEntries/hooks/useContentEntry.js +7 -1
  102. package/admin/views/contentEntries/hooks/useContentEntry.js.map +1 -1
  103. package/admin/views/contentModels/NewContentModelDialog.js +6 -3
  104. package/admin/views/contentModels/NewContentModelDialog.js.map +1 -1
  105. package/package.json +21 -20
  106. package/types.d.ts +10 -7
  107. package/types.js.map +1 -1
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.DefaultOnEntryPublish = void 0;
11
+
12
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
13
+
14
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
15
+
16
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
17
+
18
+ var _react = _interopRequireWildcard(require("react"));
19
+
20
+ var _contentEntries = require("../../graphql/contentEntries");
21
+
22
+ var _hooks = require("../../hooks");
23
+
24
+ var GQLCache = _interopRequireWildcard(require("../../views/contentEntries/ContentEntry/cache"));
25
+
26
+ var createMutationKey = function createMutationKey(params) {
27
+ var model = params.model,
28
+ locale = params.locale;
29
+ return "".concat(model.modelId, "_").concat(locale, "_").concat(model.savedOn);
30
+ };
31
+
32
+ var OnEntryPublish = function OnEntryPublish() {
33
+ var _useCms = (0, _hooks.useCms)(),
34
+ onEntryRevisionPublish = _useCms.onEntryRevisionPublish;
35
+
36
+ var mutations = (0, _react.useRef)({});
37
+ var getMutation = (0, _react.useCallback)(function (model, locale) {
38
+ var key = createMutationKey({
39
+ model: model,
40
+ locale: locale
41
+ });
42
+
43
+ if (!mutations.current[key]) {
44
+ mutations.current[key] = (0, _contentEntries.createPublishMutation)(model);
45
+ }
46
+
47
+ return mutations.current[key];
48
+ }, [mutations.current]);
49
+
50
+ var handleOnPublish = /*#__PURE__*/function () {
51
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(_ref) {
52
+ var model, id, client, locale, mutation, response, _error, _response$data$conten, data, error;
53
+
54
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
55
+ while (1) {
56
+ switch (_context.prev = _context.next) {
57
+ case 0:
58
+ model = _ref.model, id = _ref.id, client = _ref.client, locale = _ref.locale;
59
+ mutation = getMutation(model, locale);
60
+ _context.next = 4;
61
+ return client.mutate({
62
+ mutation: mutation,
63
+ variables: {
64
+ revision: id
65
+ },
66
+ update: function update(cache, result) {
67
+ var _result$data;
68
+
69
+ var content = (_result$data = result.data) === null || _result$data === void 0 ? void 0 : _result$data.content;
70
+
71
+ if (!content || !content.data || content.error) {
72
+ return;
73
+ }
74
+
75
+ GQLCache.unpublishPreviouslyPublishedRevision(model, cache, id);
76
+ }
77
+ });
78
+
79
+ case 4:
80
+ response = _context.sent;
81
+
82
+ if (response.data) {
83
+ _context.next = 8;
84
+ break;
85
+ }
86
+
87
+ _error = {
88
+ message: "Missing response data on Publish Entry Mutation.",
89
+ code: "MISSING_RESPONSE_DATA",
90
+ data: {}
91
+ };
92
+ return _context.abrupt("return", {
93
+ error: _error
94
+ });
95
+
96
+ case 8:
97
+ _response$data$conten = response.data.content, data = _response$data$conten.data, error = _response$data$conten.error;
98
+
99
+ if (!error) {
100
+ _context.next = 11;
101
+ break;
102
+ }
103
+
104
+ return _context.abrupt("return", {
105
+ error: error
106
+ });
107
+
108
+ case 11:
109
+ return _context.abrupt("return", {
110
+ entry: data,
111
+ error: null
112
+ });
113
+
114
+ case 12:
115
+ case "end":
116
+ return _context.stop();
117
+ }
118
+ }
119
+ }, _callee);
120
+ }));
121
+
122
+ return function handleOnPublish(_x) {
123
+ return _ref2.apply(this, arguments);
124
+ };
125
+ }();
126
+
127
+ (0, _react.useEffect)(function () {
128
+ return onEntryRevisionPublish(function (next) {
129
+ return /*#__PURE__*/function () {
130
+ var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee2(params) {
131
+ var result, response;
132
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee2$(_context2) {
133
+ while (1) {
134
+ switch (_context2.prev = _context2.next) {
135
+ case 0:
136
+ _context2.next = 2;
137
+ return next(params);
138
+
139
+ case 2:
140
+ result = _context2.sent;
141
+
142
+ if (!result.error) {
143
+ _context2.next = 5;
144
+ break;
145
+ }
146
+
147
+ return _context2.abrupt("return", result);
148
+
149
+ case 5:
150
+ _context2.next = 7;
151
+ return handleOnPublish(params);
152
+
153
+ case 7:
154
+ response = _context2.sent;
155
+ return _context2.abrupt("return", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, result), response));
156
+
157
+ case 9:
158
+ case "end":
159
+ return _context2.stop();
160
+ }
161
+ }
162
+ }, _callee2);
163
+ }));
164
+
165
+ return function (_x2) {
166
+ return _ref3.apply(this, arguments);
167
+ };
168
+ }();
169
+ });
170
+ }, []);
171
+ return null;
172
+ };
173
+
174
+ var DefaultOnEntryPublish = /*#__PURE__*/_react.default.memo(OnEntryPublish);
175
+
176
+ exports.DefaultOnEntryPublish = DefaultOnEntryPublish;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createMutationKey","params","model","locale","modelId","savedOn","OnEntryPublish","useCms","onEntryRevisionPublish","mutations","useRef","getMutation","useCallback","key","current","createPublishMutation","handleOnPublish","id","client","mutation","mutate","variables","revision","update","cache","result","content","data","error","GQLCache","unpublishPreviouslyPublishedRevision","response","message","code","entry","useEffect","next","DefaultOnEntryPublish","React","memo"],"sources":["DefaultOnEntryPublish.ts"],"sourcesContent":["import React, { useCallback, useEffect, useRef } from \"react\";\nimport { DocumentNode } from \"graphql\";\nimport {\n CmsEntryPublishMutationResponse,\n CmsEntryPublishMutationVariables,\n createPublishMutation\n} from \"~/admin/graphql/contentEntries\";\nimport { CmsErrorResponse, CmsModel } from \"~/types\";\nimport { useCms } from \"~/admin/hooks\";\nimport { OnEntryPublishResponse } from \"~/admin/contexts/Cms\";\nimport * as GQLCache from \"~/admin/views/contentEntries/ContentEntry/cache\";\n\ninterface Mutations {\n [key: string]: DocumentNode;\n}\n\ninterface CreateMutationKeyParams {\n model: CmsModel;\n locale: string;\n}\n\nconst createMutationKey = (params: CreateMutationKeyParams): string => {\n const { model, locale } = params;\n return `${model.modelId}_${locale}_${model.savedOn}`;\n};\n\nconst OnEntryPublish: React.FC = () => {\n const { onEntryRevisionPublish } = useCms();\n\n const mutations = useRef<Mutations>({});\n\n const getMutation = useCallback(\n (model: CmsModel, locale: string): DocumentNode => {\n const key = createMutationKey({ model, locale });\n if (!mutations.current[key]) {\n mutations.current[key] = createPublishMutation(model);\n }\n return mutations.current[key];\n },\n [mutations.current]\n );\n\n const handleOnPublish = async ({ model, id, client, locale }: OnEntryPublishResponse) => {\n const mutation = getMutation(model, locale);\n\n const response = await client.mutate<\n CmsEntryPublishMutationResponse,\n CmsEntryPublishMutationVariables\n >({\n mutation,\n variables: {\n revision: id\n },\n update: (cache, result) => {\n const content = result.data?.content;\n if (!content || !content.data || content.error) {\n return;\n }\n GQLCache.unpublishPreviouslyPublishedRevision(model, cache, id);\n }\n });\n\n if (!response.data) {\n const error: CmsErrorResponse = {\n message: \"Missing response data on Publish Entry Mutation.\",\n code: \"MISSING_RESPONSE_DATA\",\n data: {}\n };\n return {\n error\n };\n }\n const { data, error } = response.data.content;\n if (error) {\n return {\n error\n };\n }\n\n return {\n entry: data,\n error: null\n };\n };\n\n useEffect(() => {\n return onEntryRevisionPublish(next => async params => {\n const result = await next(params);\n\n if (result.error) {\n return result;\n }\n\n const response = await handleOnPublish(params);\n\n return {\n ...result,\n ...response\n };\n });\n }, []);\n\n return null;\n};\n\nexport const DefaultOnEntryPublish = React.memo(OnEntryPublish);\n"],"mappings":"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"}
@@ -90,6 +90,9 @@ var classes = {
90
90
  "&.collapsed": {
91
91
  maxHeight: 0,
92
92
  transition: "max-height 0.35s cubic-bezier(0, 1, 0, 1)"
93
+ },
94
+ ".accordion-content": {
95
+ paddingBottom: 10
93
96
  }
94
97
  }, "label:accordionItem;")
95
98
  };
@@ -1 +1 @@
1
- {"version":3,"names":["classes","accordionWrapper","css","position","width","borderBottom","accordionHeader","color","cursor","padding","minHeight","display","alignItems","justifyContent","span","marginLeft","fill","height","top","left","content","borderTop","borderLeft","transform","accordionItem","overflow","transition","maxHeight","Accordion","title","children","action","icon","defaultValue","useState","isOpen","setOpen","toggleOpen","useCallback","classNames","open","collapsed","MemoizedAccordion","React","memo"],"sources":["Accordion.tsx"],"sourcesContent":["import React, { ReactElement, useCallback, useState } from \"react\";\nimport { css } from \"emotion\";\nimport classNames from \"classnames\";\nimport { Typography } from \"@webiny/ui/Typography\";\n\nconst classes = {\n accordionWrapper: css({\n /**\n * We're using position: \"relative\" here for \"Popping Out of Hidden Overflow\" https://css-tricks.com/popping-hidden-overflow/\n * so that, we can use absolute positioned element inside without \"overflow: hidden\" being a problem\n */\n position: \"relative\",\n width: \"100%\",\n borderBottom: `1px solid var(--mdc-theme-on-secondary)`\n }),\n accordionHeader: css({\n position: \"relative\",\n color: \"var(--mdc-theme-text-secondary-on-background)\",\n cursor: \"pointer\",\n padding: \"0px\",\n minHeight: 48, // To have same height as the remove value action button.\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n\n \"& .accordion-header--left\": {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n \"& .accordion-title\": {\n span: {\n marginLeft: 16\n }\n }\n },\n \"& .accordion-header--right\": {\n display: \"flex\",\n \"& .icon-container\": {\n display: \"flex\",\n alignItems: \"center\",\n\n \"& span\": {\n display: \"flex\"\n },\n \"& svg\": {\n fill: \"currentColor\",\n width: 14,\n height: 14\n }\n }\n },\n\n \"&::before\": {\n position: \"absolute\",\n top: \"calc(50% - 5px)\",\n left: 0,\n content: '\"\"',\n width: 0,\n height: 0,\n\n // Arrow right.\n borderTop: \"5px solid transparent\",\n borderBottom: \"5px solid transparent\",\n borderLeft: \"5px solid currentColor\"\n },\n\n \"&.open\": {\n \"&::before\": {\n transform: \"translateY(3px) rotate(90deg)\"\n }\n }\n }),\n accordionItem: css({\n overflow: \"hidden\",\n transition: \"max-height 0.3s cubic-bezier(1, 0, 1, 0)\",\n height: \"auto\",\n maxHeight: \"9999px\",\n\n \"&.collapsed\": {\n maxHeight: 0,\n transition: \"max-height 0.35s cubic-bezier(0, 1, 0, 1)\"\n }\n })\n};\n\ninterface AccordionProps {\n title: string;\n action?: ReactElement | null;\n icon?: ReactElement;\n defaultValue?: boolean;\n}\n\nconst Accordion: React.FC<AccordionProps> = ({\n title,\n children,\n action,\n icon,\n defaultValue = false\n}) => {\n const [isOpen, setOpen] = useState(defaultValue);\n const toggleOpen = useCallback(() => setOpen(!isOpen), [isOpen]);\n\n return (\n <div className={classes.accordionWrapper}>\n <div\n className={classNames(classes.accordionHeader, { open: isOpen })}\n onClick={toggleOpen}\n >\n <div className=\"accordion-header--left\">\n <div className={\"accordion-title\"}>\n <Typography use={\"subtitle1\"}>{title}</Typography>\n </div>\n </div>\n <div className=\"accordion-header--right\">\n {action && <div className={\"action-container\"}>{action}</div>}\n <div className={\"icon-container\"}>{icon}</div>\n </div>\n </div>\n <div className={classNames(classes.accordionItem, { collapsed: !isOpen })}>\n <div className=\"accordion-content\">{children}</div>\n </div>\n </div>\n );\n};\nconst MemoizedAccordion: React.FC<AccordionProps> = React.memo(Accordion);\nexport default MemoizedAccordion;\n"],"mappings":"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"}
1
+ {"version":3,"names":["classes","accordionWrapper","css","position","width","borderBottom","accordionHeader","color","cursor","padding","minHeight","display","alignItems","justifyContent","span","marginLeft","fill","height","top","left","content","borderTop","borderLeft","transform","accordionItem","overflow","transition","maxHeight","paddingBottom","Accordion","title","children","action","icon","defaultValue","useState","isOpen","setOpen","toggleOpen","useCallback","classNames","open","collapsed","MemoizedAccordion","React","memo"],"sources":["Accordion.tsx"],"sourcesContent":["import React, { ReactElement, useCallback, useState } from \"react\";\nimport { css } from \"emotion\";\nimport classNames from \"classnames\";\nimport { Typography } from \"@webiny/ui/Typography\";\n\nconst classes = {\n accordionWrapper: css({\n /**\n * We're using position: \"relative\" here for \"Popping Out of Hidden Overflow\" https://css-tricks.com/popping-hidden-overflow/\n * so that, we can use absolute positioned element inside without \"overflow: hidden\" being a problem\n */\n position: \"relative\",\n width: \"100%\",\n borderBottom: `1px solid var(--mdc-theme-on-secondary)`\n }),\n accordionHeader: css({\n position: \"relative\",\n color: \"var(--mdc-theme-text-secondary-on-background)\",\n cursor: \"pointer\",\n padding: \"0px\",\n minHeight: 48, // To have same height as the remove value action button.\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n\n \"& .accordion-header--left\": {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n \"& .accordion-title\": {\n span: {\n marginLeft: 16\n }\n }\n },\n \"& .accordion-header--right\": {\n display: \"flex\",\n \"& .icon-container\": {\n display: \"flex\",\n alignItems: \"center\",\n\n \"& span\": {\n display: \"flex\"\n },\n \"& svg\": {\n fill: \"currentColor\",\n width: 14,\n height: 14\n }\n }\n },\n\n \"&::before\": {\n position: \"absolute\",\n top: \"calc(50% - 5px)\",\n left: 0,\n content: '\"\"',\n width: 0,\n height: 0,\n\n // Arrow right.\n borderTop: \"5px solid transparent\",\n borderBottom: \"5px solid transparent\",\n borderLeft: \"5px solid currentColor\"\n },\n\n \"&.open\": {\n \"&::before\": {\n transform: \"translateY(3px) rotate(90deg)\"\n }\n }\n }),\n accordionItem: css({\n overflow: \"hidden\",\n transition: \"max-height 0.3s cubic-bezier(1, 0, 1, 0)\",\n height: \"auto\",\n maxHeight: \"9999px\",\n\n \"&.collapsed\": {\n maxHeight: 0,\n transition: \"max-height 0.35s cubic-bezier(0, 1, 0, 1)\"\n },\n \".accordion-content\": {\n paddingBottom: 10\n }\n })\n};\n\ninterface AccordionProps {\n title: string;\n action?: ReactElement | null;\n icon?: ReactElement;\n defaultValue?: boolean;\n}\n\nconst Accordion: React.FC<AccordionProps> = ({\n title,\n children,\n action,\n icon,\n defaultValue = false\n}) => {\n const [isOpen, setOpen] = useState(defaultValue);\n const toggleOpen = useCallback(() => setOpen(!isOpen), [isOpen]);\n\n return (\n <div className={classes.accordionWrapper}>\n <div\n className={classNames(classes.accordionHeader, { open: isOpen })}\n onClick={toggleOpen}\n >\n <div className=\"accordion-header--left\">\n <div className={\"accordion-title\"}>\n <Typography use={\"subtitle1\"}>{title}</Typography>\n </div>\n </div>\n <div className=\"accordion-header--right\">\n {action && <div className={\"action-container\"}>{action}</div>}\n <div className={\"icon-container\"}>{icon}</div>\n </div>\n </div>\n <div className={classNames(classes.accordionItem, { collapsed: !isOpen })}>\n <div className=\"accordion-content\">{children}</div>\n </div>\n </div>\n );\n};\nconst MemoizedAccordion: React.FC<AccordionProps> = React.memo(Accordion);\nexport default MemoizedAccordion;\n"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA,IAAMA,OAAO,GAAG;EACZC,gBAAgB,eAAE,IAAAC,YAAA,EAAI;IAClB;AACR;AACA;AACA;IACQC,QAAQ,EAAE,UALQ;IAMlBC,KAAK,EAAE,MANW;IAOlBC,YAAY;EAPM,CAAJ,4BADN;EAUZC,eAAe,eAAE,IAAAJ,YAAA,EAAI;IACjBC,QAAQ,EAAE,UADO;IAEjBI,KAAK,EAAE,+CAFU;IAGjBC,MAAM,EAAE,SAHS;IAIjBC,OAAO,EAAE,KAJQ;IAKjBC,SAAS,EAAE,EALM;IAKF;IACfC,OAAO,EAAE,MANQ;IAOjBC,UAAU,EAAE,QAPK;IAQjBC,cAAc,EAAE,eARC;IAUjB,6BAA6B;MACzBF,OAAO,EAAE,MADgB;MAEzBC,UAAU,EAAE,QAFa;MAGzBC,cAAc,EAAE,eAHS;MAIzB,sBAAsB;QAClBC,IAAI,EAAE;UACFC,UAAU,EAAE;QADV;MADY;IAJG,CAVZ;IAoBjB,8BAA8B;MAC1BJ,OAAO,EAAE,MADiB;MAE1B,qBAAqB;QACjBA,OAAO,EAAE,MADQ;QAEjBC,UAAU,EAAE,QAFK;QAIjB,UAAU;UACND,OAAO,EAAE;QADH,CAJO;QAOjB,SAAS;UACLK,IAAI,EAAE,cADD;UAELZ,KAAK,EAAE,EAFF;UAGLa,MAAM,EAAE;QAHH;MAPQ;IAFK,CApBb;IAqCjB,aAAa;MACTd,QAAQ,EAAE,UADD;MAETe,GAAG,EAAE,iBAFI;MAGTC,IAAI,EAAE,CAHG;MAITC,OAAO,EAAE,IAJA;MAKThB,KAAK,EAAE,CALE;MAMTa,MAAM,EAAE,CANC;MAQT;MACAI,SAAS,EAAE,uBATF;MAUThB,YAAY,EAAE,uBAVL;MAWTiB,UAAU,EAAE;IAXH,CArCI;IAmDjB,UAAU;MACN,aAAa;QACTC,SAAS,EAAE;MADF;IADP;EAnDO,CAAJ,2BAVL;EAmEZC,aAAa,eAAE,IAAAtB,YAAA,EAAI;IACfuB,QAAQ,EAAE,QADK;IAEfC,UAAU,EAAE,0CAFG;IAGfT,MAAM,EAAE,MAHO;IAIfU,SAAS,EAAE,QAJI;IAMf,eAAe;MACXA,SAAS,EAAE,CADA;MAEXD,UAAU,EAAE;IAFD,CANA;IAUf,sBAAsB;MAClBE,aAAa,EAAE;IADG;EAVP,CAAJ;AAnEH,CAAhB;;AA0FA,IAAMC,SAAmC,GAAG,SAAtCA,SAAsC,OAMtC;EAAA,IALFC,KAKE,QALFA,KAKE;EAAA,IAJFC,QAIE,QAJFA,QAIE;EAAA,IAHFC,MAGE,QAHFA,MAGE;EAAA,IAFFC,IAEE,QAFFA,IAEE;EAAA,6BADFC,YACE;EAAA,IADFA,YACE,kCADa,KACb;;EACF,gBAA0B,IAAAC,eAAA,EAASD,YAAT,CAA1B;EAAA;EAAA,IAAOE,MAAP;EAAA,IAAeC,OAAf;;EACA,IAAMC,UAAU,GAAG,IAAAC,kBAAA,EAAY;IAAA,OAAMF,OAAO,CAAC,CAACD,MAAF,CAAb;EAAA,CAAZ,EAAoC,CAACA,MAAD,CAApC,CAAnB;EAEA,oBACI;IAAK,SAAS,EAAEpC,OAAO,CAACC;EAAxB,gBACI;IACI,SAAS,EAAE,IAAAuC,mBAAA,EAAWxC,OAAO,CAACM,eAAnB,EAAoC;MAAEmC,IAAI,EAAEL;IAAR,CAApC,CADf;IAEI,OAAO,EAAEE;EAFb,gBAII;IAAK,SAAS,EAAC;EAAf,gBACI;IAAK,SAAS,EAAE;EAAhB,gBACI,6BAAC,sBAAD;IAAY,GAAG,EAAE;EAAjB,GAA+BR,KAA/B,CADJ,CADJ,CAJJ,eASI;IAAK,SAAS,EAAC;EAAf,GACKE,MAAM,iBAAI;IAAK,SAAS,EAAE;EAAhB,GAAqCA,MAArC,CADf,eAEI;IAAK,SAAS,EAAE;EAAhB,GAAmCC,IAAnC,CAFJ,CATJ,CADJ,eAeI;IAAK,SAAS,EAAE,IAAAO,mBAAA,EAAWxC,OAAO,CAACwB,aAAnB,EAAkC;MAAEkB,SAAS,EAAE,CAACN;IAAd,CAAlC;EAAhB,gBACI;IAAK,SAAS,EAAC;EAAf,GAAoCL,QAApC,CADJ,CAfJ,CADJ;AAqBH,CA/BD;;AAgCA,IAAMY,iBAA2C,gBAAGC,cAAA,CAAMC,IAAN,CAAWhB,SAAX,CAApD;;eACec,iB"}
@@ -1,18 +1,21 @@
1
1
  import React from "react";
2
- import { CmsEditorField } from "../../../types";
2
+ import { BindComponent, BindComponentRenderProp, CmsEditorField } from "../../../types";
3
3
  import { GetBindCallable } from "../../components/ContentEntryForm/useBind";
4
- /**
5
- * TODO @ts-refactor figure out correct types
6
- */
7
- interface DynamicSectionPropsChildrenParams {
8
- [key: string]: any;
4
+ export interface DynamicSectionPropsChildrenParams {
5
+ Bind: BindComponent;
6
+ field: CmsEditorField;
7
+ bind: {
8
+ index: BindComponentRenderProp;
9
+ field: BindComponentRenderProp;
10
+ };
11
+ index: number;
9
12
  }
10
- interface DynamicSectionProps {
13
+ export interface DynamicSectionProps {
11
14
  field: CmsEditorField;
12
15
  getBind: GetBindCallable;
13
16
  showLabel?: boolean;
14
17
  Label: React.ComponentType<any>;
15
- children: (params: DynamicSectionPropsChildrenParams) => React.ReactElement;
18
+ children: (params: DynamicSectionPropsChildrenParams) => JSX.Element;
16
19
  emptyValue?: any;
17
20
  renderTitle?: (value: any[]) => React.ReactElement;
18
21
  gridClassName?: string;
@@ -34,9 +34,6 @@ var style = {
34
34
  paddingTop: 8
35
35
  }, "label:addButton;")
36
36
  };
37
- /**
38
- * TODO @ts-refactor figure out correct types
39
- */
40
37
 
41
38
  var DynamicSection = function DynamicSection(_ref) {
42
39
  var field = _ref.field,
@@ -1 +1 @@
1
- {"version":3,"names":["t","i18n","ns","style","addButton","css","width","borderTop","paddingTop","DynamicSection","field","getBind","Label","children","showLabel","emptyValue","renderTitle","gridClassName","Bind","FirstFieldBind","bindField","value","appendValue","bindFieldValue","label","bindProps","bind","index","slice","map","_","realIndex","BindField","validation","isValid","message","undefined"],"sources":["DynamicSection.tsx"],"sourcesContent":["import React from \"react\";\nimport { css } from \"emotion\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Cell, Grid } from \"@webiny/ui/Grid\";\nimport { ButtonDefault, ButtonIcon } from \"@webiny/ui/Button\";\nimport { CmsEditorField } from \"~/types\";\nimport { FormElementMessage } from \"@webiny/ui/FormElementMessage\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport { GetBindCallable } from \"~/admin/components/ContentEntryForm/useBind\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/text\");\n\nconst style = {\n addButton: css({\n width: \"100%\",\n borderTop: \"1px solid var(--mdc-theme-background)\",\n paddingTop: 8\n })\n};\n\n/**\n * TODO @ts-refactor figure out correct types\n */\ninterface DynamicSectionPropsChildrenParams {\n // bind: BindComponentRenderProp;\n // index: number;\n [key: string]: any;\n}\ninterface DynamicSectionProps {\n field: CmsEditorField;\n getBind: GetBindCallable;\n showLabel?: boolean;\n Label: React.ComponentType<any>;\n children: (params: DynamicSectionPropsChildrenParams) => React.ReactElement;\n emptyValue?: any;\n renderTitle?: (value: any[]) => React.ReactElement;\n gridClassName?: string;\n}\n\nconst DynamicSection: React.FC<DynamicSectionProps> = ({\n field,\n getBind,\n Label,\n children,\n showLabel = true,\n emptyValue = \"\",\n renderTitle,\n gridClassName\n}) => {\n const Bind = getBind();\n const FirstFieldBind = getBind(0);\n\n return (\n /* First we mount the top level field, for example: \"items\" */\n <Bind>\n {bindField => {\n /**\n * \"value\" -> an array of items\n * \"appendValue\" -> a callback to add a new value to the top level \"items\" array\n */\n const { value, appendValue } = bindField;\n\n const bindFieldValue: string[] = value || [];\n return (\n <Grid className={gridClassName}>\n {typeof renderTitle === \"function\" && renderTitle(bindFieldValue)}\n <Cell span={12}>\n {/* We always render the first item, for better UX */}\n {showLabel && field.label && <Label>{field.label}</Label>}\n <FirstFieldBind>\n {bindProps =>\n /* We bind it to index \"0\", so when you start typing, that index in parent array will be populated */\n children({\n Bind: FirstFieldBind,\n field,\n // \"index\" contains Bind props for this particular item in the array\n // \"field\" contains Bind props for the main (parent) field.\n bind: {\n index: bindProps,\n field: bindField\n },\n index: 0 // Binds to \"items.0\" in the <Form>.\n })\n }\n </FirstFieldBind>\n </Cell>\n\n {/* Now we skip the first item, because we already rendered it above, and proceed with all other items. */}\n {bindFieldValue.slice(1).map((_, index) => {\n /* We simply increase index, and as you type, the appropriate indexes in the parent array will be updated. */\n const realIndex = index + 1;\n const BindField = getBind(realIndex);\n return (\n <Cell span={12} key={realIndex}>\n <BindField>\n {bindProps =>\n children({\n Bind: BindField,\n field,\n bind: {\n index: bindProps,\n field: bindField\n },\n index: realIndex\n })\n }\n </BindField>\n </Cell>\n );\n })}\n\n {bindField.validation.isValid === false && (\n <Cell span={12}>\n <FormElementMessage error>\n {bindField.validation.message}\n </FormElementMessage>\n </Cell>\n )}\n <Cell span={12} className={style.addButton}>\n <ButtonDefault\n disabled={bindFieldValue[0] === undefined}\n onClick={() => appendValue(emptyValue)}\n >\n <ButtonIcon icon={<AddIcon />} />\n {t`Add value`}\n </ButtonDefault>\n </Cell>\n </Grid>\n );\n }}\n </Bind>\n );\n};\n\nexport default DynamicSection;\n"],"mappings":"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"}
1
+ {"version":3,"names":["t","i18n","ns","style","addButton","css","width","borderTop","paddingTop","DynamicSection","field","getBind","Label","children","showLabel","emptyValue","renderTitle","gridClassName","Bind","FirstFieldBind","bindField","value","appendValue","bindFieldValue","label","bindProps","bind","index","slice","map","_","realIndex","BindField","validation","isValid","message","undefined"],"sources":["DynamicSection.tsx"],"sourcesContent":["import React from \"react\";\nimport { css } from \"emotion\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Cell, Grid } from \"@webiny/ui/Grid\";\nimport { ButtonDefault, ButtonIcon } from \"@webiny/ui/Button\";\nimport { BindComponent, BindComponentRenderProp, CmsEditorField } from \"~/types\";\nimport { FormElementMessage } from \"@webiny/ui/FormElementMessage\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport { GetBindCallable } from \"~/admin/components/ContentEntryForm/useBind\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/text\");\n\nconst style = {\n addButton: css({\n width: \"100%\",\n borderTop: \"1px solid var(--mdc-theme-background)\",\n paddingTop: 8\n })\n};\n\nexport interface DynamicSectionPropsChildrenParams {\n Bind: BindComponent;\n field: CmsEditorField;\n bind: {\n index: BindComponentRenderProp;\n field: BindComponentRenderProp;\n };\n index: number;\n}\n\nexport interface DynamicSectionProps {\n field: CmsEditorField;\n getBind: GetBindCallable;\n showLabel?: boolean;\n Label: React.ComponentType<any>;\n children: (params: DynamicSectionPropsChildrenParams) => JSX.Element;\n emptyValue?: any;\n renderTitle?: (value: any[]) => React.ReactElement;\n gridClassName?: string;\n}\n\nconst DynamicSection: React.FC<DynamicSectionProps> = ({\n field,\n getBind,\n Label,\n children,\n showLabel = true,\n emptyValue = \"\",\n renderTitle,\n gridClassName\n}) => {\n const Bind = getBind();\n const FirstFieldBind = getBind(0);\n\n return (\n /* First we mount the top level field, for example: \"items\" */\n <Bind>\n {bindField => {\n /**\n * \"value\" -> an array of items\n * \"appendValue\" -> a callback to add a new value to the top level \"items\" array\n */\n const { value, appendValue } = bindField;\n\n const bindFieldValue: string[] = value || [];\n return (\n <Grid className={gridClassName}>\n {typeof renderTitle === \"function\" && renderTitle(bindFieldValue)}\n <Cell span={12}>\n {/* We always render the first item, for better UX */}\n {showLabel && field.label && <Label>{field.label}</Label>}\n <FirstFieldBind>\n {bindProps =>\n /* We bind it to index \"0\", so when you start typing, that index in parent array will be populated */\n children({\n Bind: FirstFieldBind,\n field,\n // \"index\" contains Bind props for this particular item in the array\n // \"field\" contains Bind props for the main (parent) field.\n bind: {\n index: bindProps,\n field: bindField\n },\n index: 0 // Binds to \"items.0\" in the <Form>.\n })\n }\n </FirstFieldBind>\n </Cell>\n\n {/* Now we skip the first item, because we already rendered it above, and proceed with all other items. */}\n {bindFieldValue.slice(1).map((_, index) => {\n /* We simply increase index, and as you type, the appropriate indexes in the parent array will be updated. */\n const realIndex = index + 1;\n const BindField = getBind(realIndex);\n return (\n <Cell span={12} key={realIndex}>\n <BindField>\n {bindProps =>\n children({\n Bind: BindField,\n field,\n bind: {\n index: bindProps,\n field: bindField\n },\n index: realIndex\n })\n }\n </BindField>\n </Cell>\n );\n })}\n\n {bindField.validation.isValid === false && (\n <Cell span={12}>\n <FormElementMessage error>\n {bindField.validation.message}\n </FormElementMessage>\n </Cell>\n )}\n <Cell span={12} className={style.addButton}>\n <ButtonDefault\n disabled={bindFieldValue[0] === undefined}\n onClick={() => appendValue(emptyValue)}\n >\n <ButtonIcon icon={<AddIcon />} />\n {t`Add value`}\n </ButtonDefault>\n </Cell>\n </Grid>\n );\n }}\n </Bind>\n );\n};\n\nexport default DynamicSection;\n"],"mappings":"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"}
@@ -39,7 +39,8 @@ var plugin = {
39
39
  return /*#__PURE__*/_react.default.createElement(Bind, null, function (bindProps) {
40
40
  return /*#__PURE__*/_react.default.createElement(_Switch.Switch, Object.assign({}, bindProps, {
41
41
  label: field.label,
42
- description: field.helpText
42
+ description: field.helpText,
43
+ "data-testid": "fr.input.boolean.".concat(field.label)
43
44
  }));
44
45
  });
45
46
  }
@@ -1 +1 @@
1
- {"version":3,"names":["t","i18n","ns","plugin","type","name","renderer","rendererName","description","canUse","field","multipleValues","get","render","getBind","Bind","bindProps","label","helpText"],"sources":["booleanSwitch.tsx"],"sourcesContent":["import React from \"react\";\nimport get from \"lodash/get\";\nimport { CmsEditorFieldRendererPlugin } from \"~/types\";\nimport { Switch } from \"@webiny/ui/Switch\";\nimport { i18n } from \"@webiny/app/i18n\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/boolean\");\n\nconst plugin: CmsEditorFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-boolean\",\n renderer: {\n rendererName: \"boolean-input\",\n name: t`Boolean Input`,\n description: t`Renders a simple switch button.`,\n canUse({ field }) {\n return (\n field.type === \"boolean\" &&\n !field.multipleValues &&\n !get(field, \"predefinedValues.enabled\")\n );\n },\n render({ field, getBind }) {\n const Bind = getBind();\n\n return (\n <Bind>\n {bindProps => (\n <Switch {...bindProps} label={field.label} description={field.helpText} />\n )}\n </Bind>\n );\n }\n }\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;;;AAEA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,uCAAR,CAAV;;AAEA,IAAMC,MAAoC,GAAG;EACzCC,IAAI,EAAE,2BADmC;EAEzCC,IAAI,EAAE,mCAFmC;EAGzCC,QAAQ,EAAE;IACNC,YAAY,EAAE,eADR;IAENF,IAAI,EAAEL,CAAF,gGAFE;IAGNQ,WAAW,EAAER,CAAF,oHAHL;IAINS,MAJM,wBAIY;MAAA,IAATC,KAAS,QAATA,KAAS;MACd,OACIA,KAAK,CAACN,IAAN,KAAe,SAAf,IACA,CAACM,KAAK,CAACC,cADP,IAEA,CAAC,IAAAC,YAAA,EAAIF,KAAJ,EAAW,0BAAX,CAHL;IAKH,CAVK;IAWNG,MAXM,yBAWqB;MAAA,IAAlBH,KAAkB,SAAlBA,KAAkB;MAAA,IAAXI,OAAW,SAAXA,OAAW;MACvB,IAAMC,IAAI,GAAGD,OAAO,EAApB;MAEA,oBACI,6BAAC,IAAD,QACK,UAAAE,SAAS;QAAA,oBACN,6BAAC,cAAD,oBAAYA,SAAZ;UAAuB,KAAK,EAAEN,KAAK,CAACO,KAApC;UAA2C,WAAW,EAAEP,KAAK,CAACQ;QAA9D,GADM;MAAA,CADd,CADJ;IAOH;EArBK;AAH+B,CAA7C;eA4Bef,M"}
1
+ {"version":3,"names":["t","i18n","ns","plugin","type","name","renderer","rendererName","description","canUse","field","multipleValues","get","render","getBind","Bind","bindProps","label","helpText"],"sources":["booleanSwitch.tsx"],"sourcesContent":["import React from \"react\";\nimport get from \"lodash/get\";\nimport { CmsEditorFieldRendererPlugin } from \"~/types\";\nimport { Switch } from \"@webiny/ui/Switch\";\nimport { i18n } from \"@webiny/app/i18n\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/boolean\");\n\nconst plugin: CmsEditorFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-boolean\",\n renderer: {\n rendererName: \"boolean-input\",\n name: t`Boolean Input`,\n description: t`Renders a simple switch button.`,\n canUse({ field }) {\n return (\n field.type === \"boolean\" &&\n !field.multipleValues &&\n !get(field, \"predefinedValues.enabled\")\n );\n },\n render({ field, getBind }) {\n const Bind = getBind();\n\n return (\n <Bind>\n {bindProps => (\n <Switch\n {...bindProps}\n label={field.label}\n description={field.helpText}\n data-testid={`fr.input.boolean.${field.label}`}\n />\n )}\n </Bind>\n );\n }\n }\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;;;AAEA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,uCAAR,CAAV;;AAEA,IAAMC,MAAoC,GAAG;EACzCC,IAAI,EAAE,2BADmC;EAEzCC,IAAI,EAAE,mCAFmC;EAGzCC,QAAQ,EAAE;IACNC,YAAY,EAAE,eADR;IAENF,IAAI,EAAEL,CAAF,gGAFE;IAGNQ,WAAW,EAAER,CAAF,oHAHL;IAINS,MAJM,wBAIY;MAAA,IAATC,KAAS,QAATA,KAAS;MACd,OACIA,KAAK,CAACN,IAAN,KAAe,SAAf,IACA,CAACM,KAAK,CAACC,cADP,IAEA,CAAC,IAAAC,YAAA,EAAIF,KAAJ,EAAW,0BAAX,CAHL;IAKH,CAVK;IAWNG,MAXM,yBAWqB;MAAA,IAAlBH,KAAkB,SAAlBA,KAAkB;MAAA,IAAXI,OAAW,SAAXA,OAAW;MACvB,IAAMC,IAAI,GAAGD,OAAO,EAApB;MAEA,oBACI,6BAAC,IAAD,QACK,UAAAE,SAAS;QAAA,oBACN,6BAAC,cAAD,oBACQA,SADR;UAEI,KAAK,EAAEN,KAAK,CAACO,KAFjB;UAGI,WAAW,EAAEP,KAAK,CAACQ,QAHvB;UAII,0CAAiCR,KAAK,CAACO,KAAvC;QAJJ,GADM;MAAA,CADd,CADJ;IAYH;EA1BK;AAH+B,CAA7C;eAiCed,M"}
@@ -57,7 +57,8 @@ var plugin = {
57
57
  }, /*#__PURE__*/_react.default.createElement(_Checkbox.Checkbox, {
58
58
  label: option.label,
59
59
  value: getValue(value),
60
- onChange: onChange(value)
60
+ onChange: onChange(value),
61
+ "data-testid": "fr.input.".concat(field.label)
61
62
  }));
62
63
  }));
63
64
  });
@@ -1 +1 @@
1
- {"version":3,"names":["t","i18n","ns","plugin","type","name","renderer","rendererName","description","canUse","field","multipleValues","get","render","getBind","Bind","predefinedValues","values","options","bind","label","helpText","onChange","getValue","map","option","index","value","Number","String"],"sources":["checkboxes.tsx"],"sourcesContent":["import React from \"react\";\nimport get from \"lodash/get\";\nimport { CmsEditorFieldRendererPlugin } from \"~/types\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Checkbox, CheckboxGroup } from \"@webiny/ui/Checkbox\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/text\");\n\nconst plugin: CmsEditorFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-checkboxes-buttons\",\n renderer: {\n rendererName: \"checkboxes\",\n name: t`Checkboxes`,\n description: t`Renders checkboxes, allowing selection of multiple values.`,\n canUse({ field }) {\n return !!field.multipleValues && !!get(field, \"predefinedValues.enabled\");\n },\n render({ field, getBind }) {\n const Bind = getBind();\n\n const { values: options = [] } = field.predefinedValues || {\n values: []\n };\n\n return (\n <Bind>\n {bind => {\n return (\n <CheckboxGroup\n {...bind}\n label={field.label}\n description={field.helpText}\n >\n {({ onChange, getValue }) => (\n <React.Fragment>\n {options.map((option, index) => {\n const value =\n field.type === \"number\"\n ? Number(option.value)\n : option.value;\n return (\n <div key={String(option.value) + index}>\n <Checkbox\n label={option.label}\n value={getValue(value)}\n onChange={onChange(value)}\n />\n </div>\n );\n })}\n </React.Fragment>\n )}\n </CheckboxGroup>\n );\n }}\n </Bind>\n );\n }\n }\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;;;AAEA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,oCAAR,CAAV;;AAEA,IAAMC,MAAoC,GAAG;EACzCC,IAAI,EAAE,2BADmC;EAEzCC,IAAI,EAAE,8CAFmC;EAGzCC,QAAQ,EAAE;IACNC,YAAY,EAAE,YADR;IAENF,IAAI,EAAEL,CAAF,6FAFE;IAGNQ,WAAW,EAAER,CAAF,+IAHL;IAINS,MAJM,wBAIY;MAAA,IAATC,KAAS,QAATA,KAAS;MACd,OAAO,CAAC,CAACA,KAAK,CAACC,cAAR,IAA0B,CAAC,CAAC,IAAAC,YAAA,EAAIF,KAAJ,EAAW,0BAAX,CAAnC;IACH,CANK;IAONG,MAPM,yBAOqB;MAAA,IAAlBH,KAAkB,SAAlBA,KAAkB;MAAA,IAAXI,OAAW,SAAXA,OAAW;MACvB,IAAMC,IAAI,GAAGD,OAAO,EAApB;;MAEA,YAAiCJ,KAAK,CAACM,gBAAN,IAA0B;QACvDC,MAAM,EAAE;MAD+C,CAA3D;MAAA,yBAAQA,MAAR;MAAA,IAAgBC,OAAhB,6BAA0B,EAA1B;;MAIA,oBACI,6BAAC,IAAD,QACK,UAAAC,IAAI,EAAI;QACL,oBACI,6BAAC,uBAAD,oBACQA,IADR;UAEI,KAAK,EAAET,KAAK,CAACU,KAFjB;UAGI,WAAW,EAAEV,KAAK,CAACW;QAHvB,IAKK;UAAA,IAAGC,QAAH,SAAGA,QAAH;UAAA,IAAaC,QAAb,SAAaA,QAAb;UAAA,oBACG,6BAAC,cAAD,CAAO,QAAP,QACKL,OAAO,CAACM,GAAR,CAAY,UAACC,MAAD,EAASC,KAAT,EAAmB;YAC5B,IAAMC,KAAK,GACPjB,KAAK,CAACN,IAAN,KAAe,QAAf,GACMwB,MAAM,CAACH,MAAM,CAACE,KAAR,CADZ,GAEMF,MAAM,CAACE,KAHjB;YAIA,oBACI;cAAK,GAAG,EAAEE,MAAM,CAACJ,MAAM,CAACE,KAAR,CAAN,GAAuBD;YAAjC,gBACI,6BAAC,kBAAD;cACI,KAAK,EAAED,MAAM,CAACL,KADlB;cAEI,KAAK,EAAEG,QAAQ,CAACI,KAAD,CAFnB;cAGI,QAAQ,EAAEL,QAAQ,CAACK,KAAD;YAHtB,EADJ,CADJ;UASH,CAdA,CADL,CADH;QAAA,CALL,CADJ;MA2BH,CA7BL,CADJ;IAiCH;EA/CK;AAH+B,CAA7C;eAsDexB,M"}
1
+ {"version":3,"names":["t","i18n","ns","plugin","type","name","renderer","rendererName","description","canUse","field","multipleValues","get","render","getBind","Bind","predefinedValues","values","options","bind","label","helpText","onChange","getValue","map","option","index","value","Number","String"],"sources":["checkboxes.tsx"],"sourcesContent":["import React from \"react\";\nimport get from \"lodash/get\";\nimport { CmsEditorFieldRendererPlugin } from \"~/types\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Checkbox, CheckboxGroup } from \"@webiny/ui/Checkbox\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/text\");\n\nconst plugin: CmsEditorFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-checkboxes-buttons\",\n renderer: {\n rendererName: \"checkboxes\",\n name: t`Checkboxes`,\n description: t`Renders checkboxes, allowing selection of multiple values.`,\n canUse({ field }) {\n return !!field.multipleValues && !!get(field, \"predefinedValues.enabled\");\n },\n render({ field, getBind }) {\n const Bind = getBind();\n\n const { values: options = [] } = field.predefinedValues || {\n values: []\n };\n\n return (\n <Bind>\n {bind => {\n return (\n <CheckboxGroup\n {...bind}\n label={field.label}\n description={field.helpText}\n >\n {({ onChange, getValue }) => (\n <React.Fragment>\n {options.map((option, index) => {\n const value =\n field.type === \"number\"\n ? Number(option.value)\n : option.value;\n return (\n <div key={String(option.value) + index}>\n <Checkbox\n label={option.label}\n value={getValue(value)}\n onChange={onChange(value)}\n data-testid={`fr.input.${field.label}`}\n />\n </div>\n );\n })}\n </React.Fragment>\n )}\n </CheckboxGroup>\n );\n }}\n </Bind>\n );\n }\n }\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;;;AAEA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,oCAAR,CAAV;;AAEA,IAAMC,MAAoC,GAAG;EACzCC,IAAI,EAAE,2BADmC;EAEzCC,IAAI,EAAE,8CAFmC;EAGzCC,QAAQ,EAAE;IACNC,YAAY,EAAE,YADR;IAENF,IAAI,EAAEL,CAAF,6FAFE;IAGNQ,WAAW,EAAER,CAAF,+IAHL;IAINS,MAJM,wBAIY;MAAA,IAATC,KAAS,QAATA,KAAS;MACd,OAAO,CAAC,CAACA,KAAK,CAACC,cAAR,IAA0B,CAAC,CAAC,IAAAC,YAAA,EAAIF,KAAJ,EAAW,0BAAX,CAAnC;IACH,CANK;IAONG,MAPM,yBAOqB;MAAA,IAAlBH,KAAkB,SAAlBA,KAAkB;MAAA,IAAXI,OAAW,SAAXA,OAAW;MACvB,IAAMC,IAAI,GAAGD,OAAO,EAApB;;MAEA,YAAiCJ,KAAK,CAACM,gBAAN,IAA0B;QACvDC,MAAM,EAAE;MAD+C,CAA3D;MAAA,yBAAQA,MAAR;MAAA,IAAgBC,OAAhB,6BAA0B,EAA1B;;MAIA,oBACI,6BAAC,IAAD,QACK,UAAAC,IAAI,EAAI;QACL,oBACI,6BAAC,uBAAD,oBACQA,IADR;UAEI,KAAK,EAAET,KAAK,CAACU,KAFjB;UAGI,WAAW,EAAEV,KAAK,CAACW;QAHvB,IAKK;UAAA,IAAGC,QAAH,SAAGA,QAAH;UAAA,IAAaC,QAAb,SAAaA,QAAb;UAAA,oBACG,6BAAC,cAAD,CAAO,QAAP,QACKL,OAAO,CAACM,GAAR,CAAY,UAACC,MAAD,EAASC,KAAT,EAAmB;YAC5B,IAAMC,KAAK,GACPjB,KAAK,CAACN,IAAN,KAAe,QAAf,GACMwB,MAAM,CAACH,MAAM,CAACE,KAAR,CADZ,GAEMF,MAAM,CAACE,KAHjB;YAIA,oBACI;cAAK,GAAG,EAAEE,MAAM,CAACJ,MAAM,CAACE,KAAR,CAAN,GAAuBD;YAAjC,gBACI,6BAAC,kBAAD;cACI,KAAK,EAAED,MAAM,CAACL,KADlB;cAEI,KAAK,EAAEG,QAAQ,CAACI,KAAD,CAFnB;cAGI,QAAQ,EAAEL,QAAQ,CAACK,KAAD,CAHtB;cAII,kCAAyBjB,KAAK,CAACU,KAA/B;YAJJ,EADJ,CADJ;UAUH,CAfA,CADL,CADH;QAAA,CALL,CADJ;MA4BH,CA9BL,CADJ;IAkCH;EAhDK;AAH+B,CAA7C;eAuDejB,M"}
@@ -32,7 +32,8 @@ var Input = function Input(_ref) {
32
32
  placeholder: props.field.placeholderText,
33
33
  description: props.field.helpText,
34
34
  type: props.type,
35
- trailingIcon: props.trailingIcon
35
+ trailingIcon: props.trailingIcon,
36
+ "data-testid": "fr.input.".concat(props.field.label)
36
37
  }));
37
38
  };
38
39
 
@@ -1 +1 @@
1
- {"version":3,"names":["Input","bind","props","value","type","parseFloat","onChange","field","label","placeholderText","helpText","trailingIcon"],"sources":["Input.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { CmsEditorField } from \"~/types\";\nimport { BindComponentRenderProp } from \"@webiny/form\";\nimport { Input as UiInput } from \"@webiny/ui/Input\";\n\nexport interface TrailingIcon {\n icon: React.ReactNode;\n onClick: any;\n}\n\nexport interface InputProps {\n step?: number;\n type?: string;\n bind: BindComponentRenderProp;\n field: CmsEditorField;\n trailingIcon?: TrailingIcon;\n}\n\nexport const Input: React.FC<InputProps> = ({ bind, ...props }) => {\n return (\n <UiInput\n {...props}\n {...bind}\n onChange={value => {\n if (props.type === \"number\") {\n value = parseFloat(value);\n }\n return bind.onChange(value);\n }}\n label={props.field.label}\n placeholder={props.field.placeholderText}\n description={props.field.helpText}\n type={props.type}\n trailingIcon={props.trailingIcon}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;;AAAA;;AAGA;;;;AAeO,IAAMA,KAA2B,GAAG,SAA9BA,KAA8B,OAAwB;EAAA,IAArBC,IAAqB,QAArBA,IAAqB;EAAA,IAAZC,KAAY;EAC/D,oBACI,oBAAC,YAAD,oBACQA,KADR,EAEQD,IAFR;IAGI,QAAQ,EAAE,kBAAAE,KAAK,EAAI;MACf,IAAID,KAAK,CAACE,IAAN,KAAe,QAAnB,EAA6B;QACzBD,KAAK,GAAGE,UAAU,CAACF,KAAD,CAAlB;MACH;;MACD,OAAOF,IAAI,CAACK,QAAL,CAAcH,KAAd,CAAP;IACH,CARL;IASI,KAAK,EAAED,KAAK,CAACK,KAAN,CAAYC,KATvB;IAUI,WAAW,EAAEN,KAAK,CAACK,KAAN,CAAYE,eAV7B;IAWI,WAAW,EAAEP,KAAK,CAACK,KAAN,CAAYG,QAX7B;IAYI,IAAI,EAAER,KAAK,CAACE,IAZhB;IAaI,YAAY,EAAEF,KAAK,CAACS;EAbxB,GADJ;AAiBH,CAlBM"}
1
+ {"version":3,"names":["Input","bind","props","value","type","parseFloat","onChange","field","label","placeholderText","helpText","trailingIcon"],"sources":["Input.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { CmsEditorField } from \"~/types\";\nimport { BindComponentRenderProp } from \"@webiny/form\";\nimport { Input as UiInput } from \"@webiny/ui/Input\";\n\nexport interface TrailingIcon {\n icon: React.ReactNode;\n onClick: any;\n}\n\nexport interface InputProps {\n step?: number;\n type?: string;\n bind: BindComponentRenderProp;\n field: CmsEditorField;\n trailingIcon?: TrailingIcon;\n}\n\nexport const Input: React.FC<InputProps> = ({ bind, ...props }) => {\n return (\n <UiInput\n {...props}\n {...bind}\n onChange={value => {\n if (props.type === \"number\") {\n value = parseFloat(value);\n }\n return bind.onChange(value);\n }}\n label={props.field.label}\n placeholder={props.field.placeholderText}\n description={props.field.helpText}\n type={props.type}\n trailingIcon={props.trailingIcon}\n data-testid={`fr.input.${props.field.label}`}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;;AAAA;;AAGA;;;;AAeO,IAAMA,KAA2B,GAAG,SAA9BA,KAA8B,OAAwB;EAAA,IAArBC,IAAqB,QAArBA,IAAqB;EAAA,IAAZC,KAAY;EAC/D,oBACI,oBAAC,YAAD,oBACQA,KADR,EAEQD,IAFR;IAGI,QAAQ,EAAE,kBAAAE,KAAK,EAAI;MACf,IAAID,KAAK,CAACE,IAAN,KAAe,QAAnB,EAA6B;QACzBD,KAAK,GAAGE,UAAU,CAACF,KAAD,CAAlB;MACH;;MACD,OAAOF,IAAI,CAACK,QAAL,CAAcH,KAAd,CAAP;IACH,CARL;IASI,KAAK,EAAED,KAAK,CAACK,KAAN,CAAYC,KATvB;IAUI,WAAW,EAAEN,KAAK,CAACK,KAAN,CAAYE,eAV7B;IAWI,WAAW,EAAEP,KAAK,CAACK,KAAN,CAAYG,QAX7B;IAYI,IAAI,EAAER,KAAK,CAACE,IAZhB;IAaI,YAAY,EAAEF,KAAK,CAACS,YAbxB;IAcI,kCAAyBT,KAAK,CAACK,KAAN,CAAYC,KAArC;EAdJ,GADJ;AAkBH,CAnBM"}
@@ -15,7 +15,8 @@ var Select = function Select(props) {
15
15
  return /*#__PURE__*/React.createElement(_Select.Select, props, props.options.map(function (t) {
16
16
  return /*#__PURE__*/React.createElement("option", {
17
17
  key: t.value,
18
- value: t.value
18
+ value: t.value,
19
+ "data-testid": "fr.input.".concat(t.label)
19
20
  }, t.label);
20
21
  }));
21
22
  };
@@ -1 +1 @@
1
- {"version":3,"names":["Select","props","options","map","t","value","label"],"sources":["Select.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Select as UiSelect, SelectProps as BaseSelectProps } from \"@webiny/ui/Select\";\n\nexport interface Option {\n value: string;\n label: string;\n}\n\nexport interface SelectProps extends BaseSelectProps {\n options: Option[];\n}\nexport const Select: React.FC<SelectProps> = props => {\n return (\n <UiSelect {...props}>\n {props.options.map(t => {\n return (\n <option key={t.value} value={t.value}>\n {t.label}\n </option>\n );\n })}\n </UiSelect>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AAUO,IAAMA,MAA6B,GAAG,SAAhCA,MAAgC,CAAAC,KAAK,EAAI;EAClD,oBACI,oBAAC,cAAD,EAAcA,KAAd,EACKA,KAAK,CAACC,OAAN,CAAcC,GAAd,CAAkB,UAAAC,CAAC,EAAI;IACpB,oBACI;MAAQ,GAAG,EAAEA,CAAC,CAACC,KAAf;MAAsB,KAAK,EAAED,CAAC,CAACC;IAA/B,GACKD,CAAC,CAACE,KADP,CADJ;EAKH,CANA,CADL,CADJ;AAWH,CAZM"}
1
+ {"version":3,"names":["Select","props","options","map","t","value","label"],"sources":["Select.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Select as UiSelect, SelectProps as BaseSelectProps } from \"@webiny/ui/Select\";\n\nexport interface Option {\n value: string;\n label: string;\n}\n\nexport interface SelectProps extends BaseSelectProps {\n options: Option[];\n}\nexport const Select: React.FC<SelectProps> = props => {\n return (\n <UiSelect {...props}>\n {props.options.map(t => {\n return (\n <option key={t.value} value={t.value} data-testid={`fr.input.${t.label}`}>\n {t.label}\n </option>\n );\n })}\n </UiSelect>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AAUO,IAAMA,MAA6B,GAAG,SAAhCA,MAAgC,CAAAC,KAAK,EAAI;EAClD,oBACI,oBAAC,cAAD,EAAcA,KAAd,EACKA,KAAK,CAACC,OAAN,CAAcC,GAAd,CAAkB,UAAAC,CAAC,EAAI;IACpB,oBACI;MAAQ,GAAG,EAAEA,CAAC,CAACC,KAAf;MAAsB,KAAK,EAAED,CAAC,CAACC,KAA/B;MAAsC,kCAAyBD,CAAC,CAACE,KAA3B;IAAtC,GACKF,CAAC,CAACE,KADP,CADJ;EAKH,CANA,CADL,CADJ;AAWH,CAZM"}
@@ -8,9 +8,9 @@ export declare const DEFAULT_TIMEZONE = "+01:00";
8
8
  export declare const getDefaultFieldValue: (field: CmsEditorField, bind: {
9
9
  value: string | null | undefined;
10
10
  }, getCurrent: () => string) => string;
11
- export declare const getCurrentTimeZone: (date?: Date | undefined) => string | null;
12
- export declare const getCurrentLocalTime: (date?: Date | undefined) => string;
13
- export declare const getCurrentDate: (date?: Date | undefined) => string;
11
+ export declare const getCurrentTimeZone: (date?: Date) => string | null;
12
+ export declare const getCurrentLocalTime: (date?: Date) => string;
13
+ export declare const getCurrentDate: (date?: Date) => string;
14
14
  interface RemoveFieldButtonProps {
15
15
  trailingIcon: any;
16
16
  }
@@ -69,7 +69,8 @@ var plugin = {
69
69
  },
70
70
  showFileManager: selectFile,
71
71
  placeholder: field.placeholderText,
72
- description: field.helpText
72
+ description: field.helpText,
73
+ "data-testid": "fr.input.filefield.".concat(field.label)
73
74
  }));
74
75
  });
75
76
  })));
@@ -1 +1 @@
1
- {"version":3,"names":["t","i18n","ns","plugin","type","name","renderer","rendererName","description","canUse","field","multipleValues","render","getBind","Label","Bind","imagesOnly","settings","label","bind","value","onChange","showFileManager","selectFile","initialFile","Array","isArray","length","file","src","placeholderText","helpText"],"sources":["fileField.tsx"],"sourcesContent":["import React from \"react\";\nimport { CmsEditorFieldRendererPlugin } from \"~/types\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Cell, Grid } from \"@webiny/ui/Grid\";\nimport { FileManager } from \"@webiny/app-admin/components\";\nimport File from \"./File\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/file\");\n\nconst plugin: CmsEditorFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-file\",\n renderer: {\n rendererName: \"file-input\",\n name: t`File Input`,\n description: t`Enables selecting a single file via File Manager.`,\n canUse({ field }) {\n return field.type === \"file\" && !field.multipleValues;\n },\n render({ field, getBind, Label }) {\n const Bind = getBind();\n\n const imagesOnly = field.settings && field.settings.imagesOnly;\n return (\n <Grid>\n <Cell span={12}>\n <Label>{field.label}</Label>\n <Bind>\n {bind => {\n const { value, onChange } = bind;\n\n return (\n <FileManager multiple={false} images={imagesOnly}>\n {({ showFileManager }) => {\n const selectFile = () => {\n showFileManager(initialFile => {\n if (\n !initialFile ||\n (Array.isArray(initialFile) === true &&\n initialFile.length === 0)\n ) {\n return;\n }\n const file = Array.isArray(initialFile)\n ? initialFile[0]\n : initialFile;\n onChange(file.src);\n });\n };\n return (\n <File\n {...bind}\n url={value}\n onRemove={() => onChange(null)}\n showFileManager={selectFile}\n placeholder={field.placeholderText}\n description={field.helpText}\n />\n );\n }}\n </FileManager>\n );\n }}\n </Bind>\n </Cell>\n </Grid>\n );\n }\n }\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;;;AAEA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,oCAAR,CAAV;;AAEA,IAAMC,MAAoC,GAAG;EACzCC,IAAI,EAAE,2BADmC;EAEzCC,IAAI,EAAE,gCAFmC;EAGzCC,QAAQ,EAAE;IACNC,YAAY,EAAE,YADR;IAENF,IAAI,EAAEL,CAAF,6FAFE;IAGNQ,WAAW,EAAER,CAAF,sIAHL;IAINS,MAJM,wBAIY;MAAA,IAATC,KAAS,QAATA,KAAS;MACd,OAAOA,KAAK,CAACN,IAAN,KAAe,MAAf,IAAyB,CAACM,KAAK,CAACC,cAAvC;IACH,CANK;IAONC,MAPM,yBAO4B;MAAA,IAAzBF,KAAyB,SAAzBA,KAAyB;MAAA,IAAlBG,OAAkB,SAAlBA,OAAkB;MAAA,IAATC,KAAS,SAATA,KAAS;MAC9B,IAAMC,IAAI,GAAGF,OAAO,EAApB;MAEA,IAAMG,UAAU,GAAGN,KAAK,CAACO,QAAN,IAAkBP,KAAK,CAACO,QAAN,CAAeD,UAApD;MACA,oBACI,6BAAC,UAAD,qBACI,6BAAC,UAAD;QAAM,IAAI,EAAE;MAAZ,gBACI,6BAAC,KAAD,QAAQN,KAAK,CAACQ,KAAd,CADJ,eAEI,6BAAC,IAAD,QACK,UAAAC,IAAI,EAAI;QACL,IAAQC,KAAR,GAA4BD,IAA5B,CAAQC,KAAR;QAAA,IAAeC,QAAf,GAA4BF,IAA5B,CAAeE,QAAf;QAEA,oBACI,6BAAC,uBAAD;UAAa,QAAQ,EAAE,KAAvB;UAA8B,MAAM,EAAEL;QAAtC,GACK,iBAAyB;UAAA,IAAtBM,eAAsB,SAAtBA,eAAsB;;UACtB,IAAMC,UAAU,GAAG,SAAbA,UAAa,GAAM;YACrBD,eAAe,CAAC,UAAAE,WAAW,EAAI;cAC3B,IACI,CAACA,WAAD,IACCC,KAAK,CAACC,OAAN,CAAcF,WAAd,MAA+B,IAA/B,IACGA,WAAW,CAACG,MAAZ,KAAuB,CAH/B,EAIE;gBACE;cACH;;cACD,IAAMC,IAAI,GAAGH,KAAK,CAACC,OAAN,CAAcF,WAAd,IACPA,WAAW,CAAC,CAAD,CADJ,GAEPA,WAFN;cAGAH,QAAQ,CAACO,IAAI,CAACC,GAAN,CAAR;YACH,CAZc,CAAf;UAaH,CAdD;;UAeA,oBACI,6BAAC,aAAD,oBACQV,IADR;YAEI,GAAG,EAAEC,KAFT;YAGI,QAAQ,EAAE;cAAA,OAAMC,QAAQ,CAAC,IAAD,CAAd;YAAA,CAHd;YAII,eAAe,EAAEE,UAJrB;YAKI,WAAW,EAAEb,KAAK,CAACoB,eALvB;YAMI,WAAW,EAAEpB,KAAK,CAACqB;UANvB,GADJ;QAUH,CA3BL,CADJ;MA+BH,CAnCL,CAFJ,CADJ,CADJ;IA4CH;EAvDK;AAH+B,CAA7C;eA8De5B,M"}
1
+ {"version":3,"names":["t","i18n","ns","plugin","type","name","renderer","rendererName","description","canUse","field","multipleValues","render","getBind","Label","Bind","imagesOnly","settings","label","bind","value","onChange","showFileManager","selectFile","initialFile","Array","isArray","length","file","src","placeholderText","helpText"],"sources":["fileField.tsx"],"sourcesContent":["import React from \"react\";\nimport { CmsEditorFieldRendererPlugin } from \"~/types\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Cell, Grid } from \"@webiny/ui/Grid\";\nimport { FileManager } from \"@webiny/app-admin/components\";\nimport File from \"./File\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/file\");\n\nconst plugin: CmsEditorFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-file\",\n renderer: {\n rendererName: \"file-input\",\n name: t`File Input`,\n description: t`Enables selecting a single file via File Manager.`,\n canUse({ field }) {\n return field.type === \"file\" && !field.multipleValues;\n },\n render({ field, getBind, Label }) {\n const Bind = getBind();\n\n const imagesOnly = field.settings && field.settings.imagesOnly;\n return (\n <Grid>\n <Cell span={12}>\n <Label>{field.label}</Label>\n <Bind>\n {bind => {\n const { value, onChange } = bind;\n\n return (\n <FileManager multiple={false} images={imagesOnly}>\n {({ showFileManager }) => {\n const selectFile = () => {\n showFileManager(initialFile => {\n if (\n !initialFile ||\n (Array.isArray(initialFile) === true &&\n initialFile.length === 0)\n ) {\n return;\n }\n const file = Array.isArray(initialFile)\n ? initialFile[0]\n : initialFile;\n onChange(file.src);\n });\n };\n return (\n <File\n {...bind}\n url={value}\n onRemove={() => onChange(null)}\n showFileManager={selectFile}\n placeholder={field.placeholderText}\n description={field.helpText}\n data-testid={`fr.input.filefield.${field.label}`}\n />\n );\n }}\n </FileManager>\n );\n }}\n </Bind>\n </Cell>\n </Grid>\n );\n }\n }\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;;;AAEA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,oCAAR,CAAV;;AAEA,IAAMC,MAAoC,GAAG;EACzCC,IAAI,EAAE,2BADmC;EAEzCC,IAAI,EAAE,gCAFmC;EAGzCC,QAAQ,EAAE;IACNC,YAAY,EAAE,YADR;IAENF,IAAI,EAAEL,CAAF,6FAFE;IAGNQ,WAAW,EAAER,CAAF,sIAHL;IAINS,MAJM,wBAIY;MAAA,IAATC,KAAS,QAATA,KAAS;MACd,OAAOA,KAAK,CAACN,IAAN,KAAe,MAAf,IAAyB,CAACM,KAAK,CAACC,cAAvC;IACH,CANK;IAONC,MAPM,yBAO4B;MAAA,IAAzBF,KAAyB,SAAzBA,KAAyB;MAAA,IAAlBG,OAAkB,SAAlBA,OAAkB;MAAA,IAATC,KAAS,SAATA,KAAS;MAC9B,IAAMC,IAAI,GAAGF,OAAO,EAApB;MAEA,IAAMG,UAAU,GAAGN,KAAK,CAACO,QAAN,IAAkBP,KAAK,CAACO,QAAN,CAAeD,UAApD;MACA,oBACI,6BAAC,UAAD,qBACI,6BAAC,UAAD;QAAM,IAAI,EAAE;MAAZ,gBACI,6BAAC,KAAD,QAAQN,KAAK,CAACQ,KAAd,CADJ,eAEI,6BAAC,IAAD,QACK,UAAAC,IAAI,EAAI;QACL,IAAQC,KAAR,GAA4BD,IAA5B,CAAQC,KAAR;QAAA,IAAeC,QAAf,GAA4BF,IAA5B,CAAeE,QAAf;QAEA,oBACI,6BAAC,uBAAD;UAAa,QAAQ,EAAE,KAAvB;UAA8B,MAAM,EAAEL;QAAtC,GACK,iBAAyB;UAAA,IAAtBM,eAAsB,SAAtBA,eAAsB;;UACtB,IAAMC,UAAU,GAAG,SAAbA,UAAa,GAAM;YACrBD,eAAe,CAAC,UAAAE,WAAW,EAAI;cAC3B,IACI,CAACA,WAAD,IACCC,KAAK,CAACC,OAAN,CAAcF,WAAd,MAA+B,IAA/B,IACGA,WAAW,CAACG,MAAZ,KAAuB,CAH/B,EAIE;gBACE;cACH;;cACD,IAAMC,IAAI,GAAGH,KAAK,CAACC,OAAN,CAAcF,WAAd,IACPA,WAAW,CAAC,CAAD,CADJ,GAEPA,WAFN;cAGAH,QAAQ,CAACO,IAAI,CAACC,GAAN,CAAR;YACH,CAZc,CAAf;UAaH,CAdD;;UAeA,oBACI,6BAAC,aAAD,oBACQV,IADR;YAEI,GAAG,EAAEC,KAFT;YAGI,QAAQ,EAAE;cAAA,OAAMC,QAAQ,CAAC,IAAD,CAAd;YAAA,CAHd;YAII,eAAe,EAAEE,UAJrB;YAKI,WAAW,EAAEb,KAAK,CAACoB,eALvB;YAMI,WAAW,EAAEpB,KAAK,CAACqB,QANvB;YAOI,4CAAmCrB,KAAK,CAACQ,KAAzC;UAPJ,GADJ;QAWH,CA5BL,CADJ;MAgCH,CApCL,CAFJ,CADJ,CADJ;IA6CH;EAxDK;AAH+B,CAA7C;eA+Def,M"}
@@ -97,7 +97,8 @@ var FieldRenderer = function FieldRenderer(_ref) {
97
97
  onRemove: function onRemove() {
98
98
  return onChange(_dotPropImmutable.default.delete(value, index));
99
99
  },
100
- placeholder: t(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["Select a file\""])))
100
+ placeholder: t(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["Select a file\""]))),
101
+ "data-testid": "fr.input.file.".concat(field.label, ".").concat(index)
101
102
  }));
102
103
  })), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
103
104
  span: 3
@@ -110,7 +111,8 @@ var FieldRenderer = function FieldRenderer(_ref) {
110
111
  showFileManager: function showFileManager() {
111
112
  return selectFiles();
112
113
  },
113
- placeholder: t(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["Select a file\""])))
114
+ placeholder: t(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["Select a file\""]))),
115
+ "data-testid": "fr.input.file.".concat(field.label)
114
116
  }))));
115
117
  }));
116
118
  });
@@ -1 +1 @@
1
- {"version":3,"names":["t","i18n","ns","FileUploadWrapper","styled","position","opacity","pointerEvents","color","FieldRenderer","getBind","Label","field","Bind","imagesOnly","settings","bind","onChange","value","Array","isArray","filter","Boolean","imageWrapperStyles","showFileManager","selectFiles","index","initialFiles","length","files","urls","map","f","src","slice","label","url","dotProp","delete","defaultProps","validation","isValid","styles","width","height","plugin","type","name","renderer","rendererName","description","canUse","multipleValues","render"],"sources":["fileFields.tsx"],"sourcesContent":["import React from \"react\";\nimport dotProp from \"dot-prop-immutable\";\nimport { CmsEditorField, CmsEditorFieldRendererPlugin } from \"~/types\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Cell, GridInner } from \"@webiny/ui/Grid\";\nimport { imageWrapperStyles } from \"./utils\";\nimport { FileManager } from \"@webiny/app-admin/components\";\nimport styled from \"@emotion/styled\";\nimport File from \"./File\";\nimport { GetBindCallable } from \"~/admin/components/ContentEntryForm/useBind\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/file\");\n\nconst FileUploadWrapper = styled(\"div\")({\n position: \"relative\",\n \".disabled\": {\n opacity: 0.75,\n pointerEvents: \"none\"\n },\n \".mdc-text-field-helper-text\": {\n color: \"var(--mdc-theme-text-secondary-on-background)\"\n }\n});\n\ninterface FieldRendererProps {\n getBind: GetBindCallable;\n Label: React.FC;\n field: CmsEditorField;\n}\nconst FieldRenderer: React.FC<FieldRendererProps> = ({ getBind, Label, field }) => {\n const Bind = getBind();\n\n const imagesOnly = field.settings && field.settings.imagesOnly;\n\n return (\n <Bind>\n {bind => {\n const { onChange } = bind;\n\n // We need to make sure the value is an array, since this is a multi-value component.\n const value: string[] = (\n Array.isArray(bind.value) ? bind.value : [bind.value]\n ).filter(Boolean);\n\n return (\n <FileUploadWrapper className={imageWrapperStyles}>\n <FileManager multiple={true} images={imagesOnly}>\n {({ showFileManager }) => {\n const selectFiles = (index = -1) => {\n showFileManager(initialFiles => {\n if (!initialFiles || initialFiles.length === 0) {\n return;\n }\n const files = Array.isArray(initialFiles)\n ? initialFiles\n : [initialFiles];\n\n const urls = files.map(f => f.src);\n if (index === -1) {\n onChange([...value, ...urls]);\n } else {\n onChange([\n ...value.slice(0, index),\n ...urls,\n ...value.slice(index + 1)\n ]);\n }\n });\n };\n return (\n <GridInner>\n <Cell span={12}>\n <Label>{field.label}</Label>\n </Cell>\n\n <>\n {value.map((url: string, index: number) => (\n <Cell span={3} key={url}>\n <File\n url={url}\n showFileManager={() => selectFiles(index)}\n onRemove={() =>\n onChange(dotProp.delete(value, index))\n }\n placeholder={t`Select a file\"`}\n />\n </Cell>\n ))}\n </>\n\n <Cell span={3}>\n <File\n url={\"\"}\n onRemove={() => {\n return void 0;\n }}\n {...bind}\n showFileManager={() => selectFiles()}\n placeholder={t`Select a file\"`}\n />\n </Cell>\n </GridInner>\n );\n }}\n </FileManager>\n </FileUploadWrapper>\n );\n }}\n </Bind>\n );\n};\n/**\n * Not used?\n */\n// TODO @ts-refactor\nFieldRenderer.defaultProps = {\n validation: {\n isValid: null\n },\n styles: { width: \"100%\", height: \"auto\" }\n} as Partial<FieldRendererProps>;\n\nconst plugin: CmsEditorFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-files\",\n renderer: {\n rendererName: \"file-inputs\",\n name: t`File Inputs`,\n description: t`Enables selecting multiple files via File Manager.`,\n canUse({ field }) {\n return field.type === \"file\" && !!field.multipleValues;\n },\n render({ field, getBind, Label }) {\n return <FieldRenderer field={field} getBind={getBind} Label={Label} />;\n }\n }\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAGA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,oCAAR,CAAV;;AAEA,IAAMC,iBAAiB,oBAAGC,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACpCC,QAAQ,EAAE,UAD0B;EAEpC,aAAa;IACTC,OAAO,EAAE,IADA;IAETC,aAAa,EAAE;EAFN,CAFuB;EAMpC,+BAA+B;IAC3BC,KAAK,EAAE;EADoB;AANK,CAAjB,CAAvB;;AAgBA,IAAMC,aAA2C,GAAG,SAA9CA,aAA8C,OAA+B;EAAA,IAA5BC,OAA4B,QAA5BA,OAA4B;EAAA,IAAnBC,KAAmB,QAAnBA,KAAmB;EAAA,IAAZC,KAAY,QAAZA,KAAY;EAC/E,IAAMC,IAAI,GAAGH,OAAO,EAApB;EAEA,IAAMI,UAAU,GAAGF,KAAK,CAACG,QAAN,IAAkBH,KAAK,CAACG,QAAN,CAAeD,UAApD;EAEA,oBACI,6BAAC,IAAD,QACK,UAAAE,IAAI,EAAI;IACL,IAAQC,QAAR,GAAqBD,IAArB,CAAQC,QAAR,CADK,CAGL;;IACA,IAAMC,KAAe,GAAG,CACpBC,KAAK,CAACC,OAAN,CAAcJ,IAAI,CAACE,KAAnB,IAA4BF,IAAI,CAACE,KAAjC,GAAyC,CAACF,IAAI,CAACE,KAAN,CADrB,EAEtBG,MAFsB,CAEfC,OAFe,CAAxB;IAIA,oBACI,6BAAC,iBAAD;MAAmB,SAAS,EAAEC;IAA9B,gBACI,6BAAC,uBAAD;MAAa,QAAQ,EAAE,IAAvB;MAA6B,MAAM,EAAET;IAArC,GACK,iBAAyB;MAAA,IAAtBU,eAAsB,SAAtBA,eAAsB;;MACtB,IAAMC,WAAW,GAAG,SAAdA,WAAc,GAAgB;QAAA,IAAfC,KAAe,uEAAP,CAAC,CAAM;QAChCF,eAAe,CAAC,UAAAG,YAAY,EAAI;UAC5B,IAAI,CAACA,YAAD,IAAiBA,YAAY,CAACC,MAAb,KAAwB,CAA7C,EAAgD;YAC5C;UACH;;UACD,IAAMC,KAAK,GAAGV,KAAK,CAACC,OAAN,CAAcO,YAAd,IACRA,YADQ,GAER,CAACA,YAAD,CAFN;UAIA,IAAMG,IAAI,GAAGD,KAAK,CAACE,GAAN,CAAU,UAAAC,CAAC;YAAA,OAAIA,CAAC,CAACC,GAAN;UAAA,CAAX,CAAb;;UACA,IAAIP,KAAK,KAAK,CAAC,CAAf,EAAkB;YACdT,QAAQ,4CAAKC,KAAL,oCAAeY,IAAf,GAAR;UACH,CAFD,MAEO;YACHb,QAAQ,4CACDC,KAAK,CAACgB,KAAN,CAAY,CAAZ,EAAeR,KAAf,CADC,oCAEDI,IAFC,oCAGDZ,KAAK,CAACgB,KAAN,CAAYR,KAAK,GAAG,CAApB,CAHC,GAAR;UAKH;QACJ,CAlBc,CAAf;MAmBH,CApBD;;MAqBA,oBACI,6BAAC,eAAD,qBACI,6BAAC,UAAD;QAAM,IAAI,EAAE;MAAZ,gBACI,6BAAC,KAAD,QAAQd,KAAK,CAACuB,KAAd,CADJ,CADJ,eAKI,4DACKjB,KAAK,CAACa,GAAN,CAAU,UAACK,GAAD,EAAcV,KAAd;QAAA,oBACP,6BAAC,UAAD;UAAM,IAAI,EAAE,CAAZ;UAAe,GAAG,EAAEU;QAApB,gBACI,6BAAC,aAAD;UACI,GAAG,EAAEA,GADT;UAEI,eAAe,EAAE;YAAA,OAAMX,WAAW,CAACC,KAAD,CAAjB;UAAA,CAFrB;UAGI,QAAQ,EAAE;YAAA,OACNT,QAAQ,CAACoB,yBAAA,CAAQC,MAAR,CAAepB,KAAf,EAAsBQ,KAAtB,CAAD,CADF;UAAA,CAHd;UAMI,WAAW,EAAE1B,CAAF;QANf,EADJ,CADO;MAAA,CAAV,CADL,CALJ,eAoBI,6BAAC,UAAD;QAAM,IAAI,EAAE;MAAZ,gBACI,6BAAC,aAAD;QACI,GAAG,EAAE,EADT;QAEI,QAAQ,EAAE,oBAAM;UACZ,OAAO,KAAK,CAAZ;QACH;MAJL,GAKQgB,IALR;QAMI,eAAe,EAAE;UAAA,OAAMS,WAAW,EAAjB;QAAA,CANrB;QAOI,WAAW,EAAEzB,CAAF;MAPf,GADJ,CApBJ,CADJ;IAkCH,CAzDL,CADJ,CADJ;EA+DH,CAxEL,CADJ;AA4EH,CAjFD;AAkFA;AACA;AACA;AACA;;;AACAS,aAAa,CAAC8B,YAAd,GAA6B;EACzBC,UAAU,EAAE;IACRC,OAAO,EAAE;EADD,CADa;EAIzBC,MAAM,EAAE;IAAEC,KAAK,EAAE,MAAT;IAAiBC,MAAM,EAAE;EAAzB;AAJiB,CAA7B;AAOA,IAAMC,MAAoC,GAAG;EACzCC,IAAI,EAAE,2BADmC;EAEzCC,IAAI,EAAE,iCAFmC;EAGzCC,QAAQ,EAAE;IACNC,YAAY,EAAE,aADR;IAENF,IAAI,EAAE/C,CAAF,gGAFE;IAGNkD,WAAW,EAAElD,CAAF,uIAHL;IAINmD,MAJM,yBAIY;MAAA,IAATvC,KAAS,SAATA,KAAS;MACd,OAAOA,KAAK,CAACkC,IAAN,KAAe,MAAf,IAAyB,CAAC,CAAClC,KAAK,CAACwC,cAAxC;IACH,CANK;IAONC,MAPM,yBAO4B;MAAA,IAAzBzC,KAAyB,SAAzBA,KAAyB;MAAA,IAAlBF,OAAkB,SAAlBA,OAAkB;MAAA,IAATC,KAAS,SAATA,KAAS;MAC9B,oBAAO,6BAAC,aAAD;QAAe,KAAK,EAAEC,KAAtB;QAA6B,OAAO,EAAEF,OAAtC;QAA+C,KAAK,EAAEC;MAAtD,EAAP;IACH;EATK;AAH+B,CAA7C;eAgBekC,M"}
1
+ {"version":3,"names":["t","i18n","ns","FileUploadWrapper","styled","position","opacity","pointerEvents","color","FieldRenderer","getBind","Label","field","Bind","imagesOnly","settings","bind","onChange","value","Array","isArray","filter","Boolean","imageWrapperStyles","showFileManager","selectFiles","index","initialFiles","length","files","urls","map","f","src","slice","label","url","dotProp","delete","defaultProps","validation","isValid","styles","width","height","plugin","type","name","renderer","rendererName","description","canUse","multipleValues","render"],"sources":["fileFields.tsx"],"sourcesContent":["import React from \"react\";\nimport dotProp from \"dot-prop-immutable\";\nimport { CmsEditorField, CmsEditorFieldRendererPlugin } from \"~/types\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Cell, GridInner } from \"@webiny/ui/Grid\";\nimport { imageWrapperStyles } from \"./utils\";\nimport { FileManager } from \"@webiny/app-admin/components\";\nimport styled from \"@emotion/styled\";\nimport File from \"./File\";\nimport { GetBindCallable } from \"~/admin/components/ContentEntryForm/useBind\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/file\");\n\nconst FileUploadWrapper = styled(\"div\")({\n position: \"relative\",\n \".disabled\": {\n opacity: 0.75,\n pointerEvents: \"none\"\n },\n \".mdc-text-field-helper-text\": {\n color: \"var(--mdc-theme-text-secondary-on-background)\"\n }\n});\n\ninterface FieldRendererProps {\n getBind: GetBindCallable;\n Label: React.FC;\n field: CmsEditorField;\n}\nconst FieldRenderer: React.FC<FieldRendererProps> = ({ getBind, Label, field }) => {\n const Bind = getBind();\n\n const imagesOnly = field.settings && field.settings.imagesOnly;\n\n return (\n <Bind>\n {bind => {\n const { onChange } = bind;\n\n // We need to make sure the value is an array, since this is a multi-value component.\n const value: string[] = (\n Array.isArray(bind.value) ? bind.value : [bind.value]\n ).filter(Boolean);\n\n return (\n <FileUploadWrapper className={imageWrapperStyles}>\n <FileManager multiple={true} images={imagesOnly}>\n {({ showFileManager }) => {\n const selectFiles = (index = -1) => {\n showFileManager(initialFiles => {\n if (!initialFiles || initialFiles.length === 0) {\n return;\n }\n const files = Array.isArray(initialFiles)\n ? initialFiles\n : [initialFiles];\n\n const urls = files.map(f => f.src);\n if (index === -1) {\n onChange([...value, ...urls]);\n } else {\n onChange([\n ...value.slice(0, index),\n ...urls,\n ...value.slice(index + 1)\n ]);\n }\n });\n };\n return (\n <GridInner>\n <Cell span={12}>\n <Label>{field.label}</Label>\n </Cell>\n\n <>\n {value.map((url: string, index: number) => (\n <Cell span={3} key={url}>\n <File\n url={url}\n showFileManager={() => selectFiles(index)}\n onRemove={() =>\n onChange(dotProp.delete(value, index))\n }\n placeholder={t`Select a file\"`}\n data-testid={`fr.input.file.${field.label}.${index}`}\n />\n </Cell>\n ))}\n </>\n\n <Cell span={3}>\n <File\n url={\"\"}\n onRemove={() => {\n return void 0;\n }}\n {...bind}\n showFileManager={() => selectFiles()}\n placeholder={t`Select a file\"`}\n data-testid={`fr.input.file.${field.label}`}\n />\n </Cell>\n </GridInner>\n );\n }}\n </FileManager>\n </FileUploadWrapper>\n );\n }}\n </Bind>\n );\n};\n/**\n * Not used?\n */\n// TODO @ts-refactor\nFieldRenderer.defaultProps = {\n validation: {\n isValid: null\n },\n styles: { width: \"100%\", height: \"auto\" }\n} as Partial<FieldRendererProps>;\n\nconst plugin: CmsEditorFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-files\",\n renderer: {\n rendererName: \"file-inputs\",\n name: t`File Inputs`,\n description: t`Enables selecting multiple files via File Manager.`,\n canUse({ field }) {\n return field.type === \"file\" && !!field.multipleValues;\n },\n render({ field, getBind, Label }) {\n return <FieldRenderer field={field} getBind={getBind} Label={Label} />;\n }\n }\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAGA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,oCAAR,CAAV;;AAEA,IAAMC,iBAAiB,oBAAGC,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACpCC,QAAQ,EAAE,UAD0B;EAEpC,aAAa;IACTC,OAAO,EAAE,IADA;IAETC,aAAa,EAAE;EAFN,CAFuB;EAMpC,+BAA+B;IAC3BC,KAAK,EAAE;EADoB;AANK,CAAjB,CAAvB;;AAgBA,IAAMC,aAA2C,GAAG,SAA9CA,aAA8C,OAA+B;EAAA,IAA5BC,OAA4B,QAA5BA,OAA4B;EAAA,IAAnBC,KAAmB,QAAnBA,KAAmB;EAAA,IAAZC,KAAY,QAAZA,KAAY;EAC/E,IAAMC,IAAI,GAAGH,OAAO,EAApB;EAEA,IAAMI,UAAU,GAAGF,KAAK,CAACG,QAAN,IAAkBH,KAAK,CAACG,QAAN,CAAeD,UAApD;EAEA,oBACI,6BAAC,IAAD,QACK,UAAAE,IAAI,EAAI;IACL,IAAQC,QAAR,GAAqBD,IAArB,CAAQC,QAAR,CADK,CAGL;;IACA,IAAMC,KAAe,GAAG,CACpBC,KAAK,CAACC,OAAN,CAAcJ,IAAI,CAACE,KAAnB,IAA4BF,IAAI,CAACE,KAAjC,GAAyC,CAACF,IAAI,CAACE,KAAN,CADrB,EAEtBG,MAFsB,CAEfC,OAFe,CAAxB;IAIA,oBACI,6BAAC,iBAAD;MAAmB,SAAS,EAAEC;IAA9B,gBACI,6BAAC,uBAAD;MAAa,QAAQ,EAAE,IAAvB;MAA6B,MAAM,EAAET;IAArC,GACK,iBAAyB;MAAA,IAAtBU,eAAsB,SAAtBA,eAAsB;;MACtB,IAAMC,WAAW,GAAG,SAAdA,WAAc,GAAgB;QAAA,IAAfC,KAAe,uEAAP,CAAC,CAAM;QAChCF,eAAe,CAAC,UAAAG,YAAY,EAAI;UAC5B,IAAI,CAACA,YAAD,IAAiBA,YAAY,CAACC,MAAb,KAAwB,CAA7C,EAAgD;YAC5C;UACH;;UACD,IAAMC,KAAK,GAAGV,KAAK,CAACC,OAAN,CAAcO,YAAd,IACRA,YADQ,GAER,CAACA,YAAD,CAFN;UAIA,IAAMG,IAAI,GAAGD,KAAK,CAACE,GAAN,CAAU,UAAAC,CAAC;YAAA,OAAIA,CAAC,CAACC,GAAN;UAAA,CAAX,CAAb;;UACA,IAAIP,KAAK,KAAK,CAAC,CAAf,EAAkB;YACdT,QAAQ,4CAAKC,KAAL,oCAAeY,IAAf,GAAR;UACH,CAFD,MAEO;YACHb,QAAQ,4CACDC,KAAK,CAACgB,KAAN,CAAY,CAAZ,EAAeR,KAAf,CADC,oCAEDI,IAFC,oCAGDZ,KAAK,CAACgB,KAAN,CAAYR,KAAK,GAAG,CAApB,CAHC,GAAR;UAKH;QACJ,CAlBc,CAAf;MAmBH,CApBD;;MAqBA,oBACI,6BAAC,eAAD,qBACI,6BAAC,UAAD;QAAM,IAAI,EAAE;MAAZ,gBACI,6BAAC,KAAD,QAAQd,KAAK,CAACuB,KAAd,CADJ,CADJ,eAKI,4DACKjB,KAAK,CAACa,GAAN,CAAU,UAACK,GAAD,EAAcV,KAAd;QAAA,oBACP,6BAAC,UAAD;UAAM,IAAI,EAAE,CAAZ;UAAe,GAAG,EAAEU;QAApB,gBACI,6BAAC,aAAD;UACI,GAAG,EAAEA,GADT;UAEI,eAAe,EAAE;YAAA,OAAMX,WAAW,CAACC,KAAD,CAAjB;UAAA,CAFrB;UAGI,QAAQ,EAAE;YAAA,OACNT,QAAQ,CAACoB,yBAAA,CAAQC,MAAR,CAAepB,KAAf,EAAsBQ,KAAtB,CAAD,CADF;UAAA,CAHd;UAMI,WAAW,EAAE1B,CAAF,kGANf;UAOI,uCAA8BY,KAAK,CAACuB,KAApC,cAA6CT,KAA7C;QAPJ,EADJ,CADO;MAAA,CAAV,CADL,CALJ,eAqBI,6BAAC,UAAD;QAAM,IAAI,EAAE;MAAZ,gBACI,6BAAC,aAAD;QACI,GAAG,EAAE,EADT;QAEI,QAAQ,EAAE,oBAAM;UACZ,OAAO,KAAK,CAAZ;QACH;MAJL,GAKQV,IALR;QAMI,eAAe,EAAE;UAAA,OAAMS,WAAW,EAAjB;QAAA,CANrB;QAOI,WAAW,EAAEzB,CAAF,oGAPf;QAQI,uCAA8BY,KAAK,CAACuB,KAApC;MARJ,GADJ,CArBJ,CADJ;IAoCH,CA3DL,CADJ,CADJ;EAiEH,CA1EL,CADJ;AA8EH,CAnFD;AAoFA;AACA;AACA;AACA;;;AACA1B,aAAa,CAAC8B,YAAd,GAA6B;EACzBC,UAAU,EAAE;IACRC,OAAO,EAAE;EADD,CADa;EAIzBC,MAAM,EAAE;IAAEC,KAAK,EAAE,MAAT;IAAiBC,MAAM,EAAE;EAAzB;AAJiB,CAA7B;AAOA,IAAMC,MAAoC,GAAG;EACzCC,IAAI,EAAE,2BADmC;EAEzCC,IAAI,EAAE,iCAFmC;EAGzCC,QAAQ,EAAE;IACNC,YAAY,EAAE,aADR;IAENF,IAAI,EAAE/C,CAAF,gGAFE;IAGNkD,WAAW,EAAElD,CAAF,uIAHL;IAINmD,MAJM,yBAIY;MAAA,IAATvC,KAAS,SAATA,KAAS;MACd,OAAOA,KAAK,CAACkC,IAAN,KAAe,MAAf,IAAyB,CAAC,CAAClC,KAAK,CAACwC,cAAxC;IACH,CANK;IAONC,MAPM,yBAO4B;MAAA,IAAzBzC,KAAyB,SAAzBA,KAAyB;MAAA,IAAlBF,OAAkB,SAAlBA,OAAkB;MAAA,IAATC,KAAS,SAATA,KAAS;MAC9B,oBAAO,6BAAC,aAAD;QAAe,KAAK,EAAEC,KAAtB;QAA6B,OAAO,EAAEF,OAAtC;QAA+C,KAAK,EAAEC;MAAtD,EAAP;IACH;EATK;AAH+B,CAA7C;eAgBekC,M"}
@@ -41,7 +41,8 @@ var plugin = {
41
41
  rows: 5,
42
42
  label: field.label,
43
43
  placeholder: field.placeholderText,
44
- description: field.helpText
44
+ description: field.helpText,
45
+ "data-testid": "fr.input.longtext.".concat(field.label)
45
46
  }));
46
47
  });
47
48
  }
@@ -1 +1 @@
1
- {"version":3,"names":["t","i18n","ns","plugin","type","name","renderer","rendererName","description","canUse","field","multipleValues","get","render","getBind","Bind","bind","label","placeholderText","helpText"],"sources":["longText.tsx"],"sourcesContent":["import React from \"react\";\nimport get from \"lodash/get\";\nimport { CmsEditorFieldRendererPlugin } from \"~/types\";\nimport { Input } from \"@webiny/ui/Input\";\nimport { i18n } from \"@webiny/app/i18n\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/text\");\n\nconst plugin: CmsEditorFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-long-text-textarea\",\n renderer: {\n rendererName: \"long-text-text-area\",\n name: t`Text Area`,\n description: t`Renders a simple text area, suitable for larger amounts of text.`,\n canUse({ field }) {\n return (\n field.type === \"long-text\" &&\n !field.multipleValues &&\n !get(field, \"predefinedValues.enabled\")\n );\n },\n render({ field, getBind }) {\n const Bind = getBind();\n\n return (\n <Bind>\n {bind => (\n <Input\n {...bind}\n rows={5}\n label={field.label}\n placeholder={field.placeholderText}\n description={field.helpText}\n />\n )}\n </Bind>\n );\n }\n }\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;;;AAEA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,oCAAR,CAAV;;AAEA,IAAMC,MAAoC,GAAG;EACzCC,IAAI,EAAE,2BADmC;EAEzCC,IAAI,EAAE,8CAFmC;EAGzCC,QAAQ,EAAE;IACNC,YAAY,EAAE,qBADR;IAENF,IAAI,EAAEL,CAAF,4FAFE;IAGNQ,WAAW,EAAER,CAAF,qJAHL;IAINS,MAJM,wBAIY;MAAA,IAATC,KAAS,QAATA,KAAS;MACd,OACIA,KAAK,CAACN,IAAN,KAAe,WAAf,IACA,CAACM,KAAK,CAACC,cADP,IAEA,CAAC,IAAAC,YAAA,EAAIF,KAAJ,EAAW,0BAAX,CAHL;IAKH,CAVK;IAWNG,MAXM,yBAWqB;MAAA,IAAlBH,KAAkB,SAAlBA,KAAkB;MAAA,IAAXI,OAAW,SAAXA,OAAW;MACvB,IAAMC,IAAI,GAAGD,OAAO,EAApB;MAEA,oBACI,6BAAC,IAAD,QACK,UAAAE,IAAI;QAAA,oBACD,6BAAC,YAAD,oBACQA,IADR;UAEI,IAAI,EAAE,CAFV;UAGI,KAAK,EAAEN,KAAK,CAACO,KAHjB;UAII,WAAW,EAAEP,KAAK,CAACQ,eAJvB;UAKI,WAAW,EAAER,KAAK,CAACS;QALvB,GADC;MAAA,CADT,CADJ;IAaH;EA3BK;AAH+B,CAA7C;eAkCehB,M"}
1
+ {"version":3,"names":["t","i18n","ns","plugin","type","name","renderer","rendererName","description","canUse","field","multipleValues","get","render","getBind","Bind","bind","label","placeholderText","helpText"],"sources":["longText.tsx"],"sourcesContent":["import React from \"react\";\nimport get from \"lodash/get\";\nimport { CmsEditorFieldRendererPlugin } from \"~/types\";\nimport { Input } from \"@webiny/ui/Input\";\nimport { i18n } from \"@webiny/app/i18n\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/text\");\n\nconst plugin: CmsEditorFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-long-text-textarea\",\n renderer: {\n rendererName: \"long-text-text-area\",\n name: t`Text Area`,\n description: t`Renders a simple text area, suitable for larger amounts of text.`,\n canUse({ field }) {\n return (\n field.type === \"long-text\" &&\n !field.multipleValues &&\n !get(field, \"predefinedValues.enabled\")\n );\n },\n render({ field, getBind }) {\n const Bind = getBind();\n\n return (\n <Bind>\n {bind => (\n <Input\n {...bind}\n rows={5}\n label={field.label}\n placeholder={field.placeholderText}\n description={field.helpText}\n data-testid={`fr.input.longtext.${field.label}`}\n />\n )}\n </Bind>\n );\n }\n }\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;;;AAEA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,oCAAR,CAAV;;AAEA,IAAMC,MAAoC,GAAG;EACzCC,IAAI,EAAE,2BADmC;EAEzCC,IAAI,EAAE,8CAFmC;EAGzCC,QAAQ,EAAE;IACNC,YAAY,EAAE,qBADR;IAENF,IAAI,EAAEL,CAAF,4FAFE;IAGNQ,WAAW,EAAER,CAAF,qJAHL;IAINS,MAJM,wBAIY;MAAA,IAATC,KAAS,QAATA,KAAS;MACd,OACIA,KAAK,CAACN,IAAN,KAAe,WAAf,IACA,CAACM,KAAK,CAACC,cADP,IAEA,CAAC,IAAAC,YAAA,EAAIF,KAAJ,EAAW,0BAAX,CAHL;IAKH,CAVK;IAWNG,MAXM,yBAWqB;MAAA,IAAlBH,KAAkB,SAAlBA,KAAkB;MAAA,IAAXI,OAAW,SAAXA,OAAW;MACvB,IAAMC,IAAI,GAAGD,OAAO,EAApB;MAEA,oBACI,6BAAC,IAAD,QACK,UAAAE,IAAI;QAAA,oBACD,6BAAC,YAAD,oBACQA,IADR;UAEI,IAAI,EAAE,CAFV;UAGI,KAAK,EAAEN,KAAK,CAACO,KAHjB;UAII,WAAW,EAAEP,KAAK,CAACQ,eAJvB;UAKI,WAAW,EAAER,KAAK,CAACS,QALvB;UAMI,2CAAkCT,KAAK,CAACO,KAAxC;QANJ,GADC;MAAA,CADT,CADJ;IAcH;EA5BK;AAH+B,CAA7C;eAmCed,M"}
@@ -44,7 +44,8 @@ var plugin = {
44
44
  label: field.label,
45
45
  placeholder: field.placeholderText,
46
46
  description: field.helpText,
47
- type: "number"
47
+ type: "number",
48
+ "data-testid": "fr.input.number.".concat(field.label)
48
49
  }));
49
50
  });
50
51
  }