@bigbinary/neeto-message-templates-frontend 2.0.6 → 2.0.8

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 (84) hide show
  1. package/README.md +0 -2
  2. package/app/javascript/src/translations/hu.json +119 -0
  3. package/dist/.ready +1 -0
  4. package/dist/ApiTemplates.js +14 -13
  5. package/dist/ApiTemplates.js.map +1 -1
  6. package/dist/JsonEditor-BHy4s0Bo.js +402 -0
  7. package/dist/JsonEditor-BHy4s0Bo.js.map +1 -0
  8. package/dist/JsonEditor-BMMyHPxh.js +434 -0
  9. package/dist/JsonEditor-BMMyHPxh.js.map +1 -0
  10. package/dist/{JsonEditor-CGNPIMpX.js → JsonEditor-DEKfDX8p.js} +2 -5
  11. package/dist/{JsonEditor-CGNPIMpX.js.map → JsonEditor-DEKfDX8p.js.map} +1 -1
  12. package/dist/{JsonEditor-CLHGjppr.js → JsonEditor-DihhWMI5.js} +2 -5
  13. package/dist/{JsonEditor-CLHGjppr.js.map → JsonEditor-DihhWMI5.js.map} +1 -1
  14. package/dist/MessageTemplates.js +33 -43
  15. package/dist/MessageTemplates.js.map +1 -1
  16. package/dist/SendMessagePane.js +5 -5
  17. package/dist/SendMessagePane.js.map +1 -1
  18. package/dist/SendToApiPane.js +5 -4
  19. package/dist/SendToApiPane.js.map +1 -1
  20. package/dist/adaptive_input-BpXdshqg.js +17 -0
  21. package/dist/adaptive_input-BpXdshqg.js.map +1 -0
  22. package/dist/adaptive_input-Cd_EArae.js +19 -0
  23. package/dist/adaptive_input-Cd_EArae.js.map +1 -0
  24. package/dist/cjs/ApiTemplates.js +13 -12
  25. package/dist/cjs/ApiTemplates.js.map +1 -1
  26. package/dist/cjs/MessageTemplates.js +35 -45
  27. package/dist/cjs/MessageTemplates.js.map +1 -1
  28. package/dist/cjs/SendMessagePane.js +4 -4
  29. package/dist/cjs/SendMessagePane.js.map +1 -1
  30. package/dist/cjs/SendToApiPane.js +5 -4
  31. package/dist/cjs/SendToApiPane.js.map +1 -1
  32. package/dist/cjs/index.js +5 -4
  33. package/dist/cjs/index.js.map +1 -1
  34. package/dist/cjs/v2/ApiTemplates.js +461 -0
  35. package/dist/cjs/v2/ApiTemplates.js.map +1 -0
  36. package/dist/cjs/v2/MessageTemplates.js +849 -0
  37. package/dist/cjs/v2/MessageTemplates.js.map +1 -0
  38. package/dist/cjs/v2/SendMessagePane.js +451 -0
  39. package/dist/cjs/v2/SendMessagePane.js.map +1 -0
  40. package/dist/cjs/v2/SendToApiPane.js +244 -0
  41. package/dist/cjs/v2/SendToApiPane.js.map +1 -0
  42. package/dist/cjs/v2/index.js +57 -0
  43. package/dist/cjs/v2/index.js.map +1 -0
  44. package/dist/{constants-D4v0xTUu.js → constants-B2GWdy9V.js} +2 -2
  45. package/dist/{constants-D4v0xTUu.js.map → constants-B2GWdy9V.js.map} +1 -1
  46. package/dist/constants-CX95xIS-.js +44 -0
  47. package/dist/constants-CX95xIS-.js.map +1 -0
  48. package/dist/constants-Cvnks2UE.js +49 -0
  49. package/dist/constants-Cvnks2UE.js.map +1 -0
  50. package/dist/index.js +6 -5
  51. package/dist/index.js.map +1 -1
  52. package/dist/inject-css-B6qYtOJe.js +6 -0
  53. package/dist/inject-css-B6qYtOJe.js.map +1 -0
  54. package/dist/inject-css-C2dztUxs.js +4 -0
  55. package/dist/inject-css-C2dztUxs.js.map +1 -0
  56. package/dist/json_editor-Co5e3Chh.js +5 -0
  57. package/dist/json_editor-Co5e3Chh.js.map +1 -0
  58. package/dist/json_editor-CvRhtSA3.js +7 -0
  59. package/dist/json_editor-CvRhtSA3.js.map +1 -0
  60. package/dist/{useTemplatesApi-BBQsbYMK.js → useTemplatesApi-CMkDeBa9.js} +2 -2
  61. package/dist/{useTemplatesApi-BBQsbYMK.js.map → useTemplatesApi-CMkDeBa9.js.map} +1 -1
  62. package/dist/{useTemplatesApi-DHrOrdXb.js → useTemplatesApi-byHuEDTl.js} +2 -2
  63. package/dist/{useTemplatesApi-DHrOrdXb.js.map → useTemplatesApi-byHuEDTl.js.map} +1 -1
  64. package/dist/utils-BGEmI_om.js +49 -0
  65. package/dist/utils-BGEmI_om.js.map +1 -0
  66. package/dist/utils-CLc_-Ysi.js +52 -0
  67. package/dist/utils-CLc_-Ysi.js.map +1 -0
  68. package/dist/utils-Cz5W3I3l.js.map +1 -1
  69. package/dist/utils-DddrNhQe.js.map +1 -1
  70. package/dist/v2/ApiTemplates.js +459 -0
  71. package/dist/v2/ApiTemplates.js.map +1 -0
  72. package/dist/v2/MessageTemplates.js +828 -0
  73. package/dist/v2/MessageTemplates.js.map +1 -0
  74. package/dist/v2/SendMessagePane.js +430 -0
  75. package/dist/v2/SendMessagePane.js.map +1 -0
  76. package/dist/v2/SendToApiPane.js +223 -0
  77. package/dist/v2/SendToApiPane.js.map +1 -0
  78. package/dist/v2/index.js +48 -0
  79. package/dist/v2/index.js.map +1 -0
  80. package/package.json +45 -36
  81. package/dist/inject-css-DmrvuTKK.js +0 -4
  82. package/dist/inject-css-DmrvuTKK.js.map +0 -1
  83. package/dist/inject-css-vQvjPR2x.js +0 -6
  84. package/dist/inject-css-vQvjPR2x.js.map +0 -1
@@ -0,0 +1,402 @@
1
+ import { t } from 'i18next';
2
+ import { isNotPresent, isNotEmpty, hyphenate } from '@bigbinary/neeto-cist';
3
+ import * as yup from 'yup';
4
+ import { map, unless, path, omit, reject, whereAny, isEmpty, mergeDeepLeft } from 'ramda';
5
+ import { useEffect, useRef } from 'react';
6
+ import { Input, Switch } from '@bigbinary/neeto-atoms/formik';
7
+ import { FieldArray, useFormikContext, useField } from 'formik';
8
+ import { useTranslation } from 'react-i18next';
9
+ import { Button, Label } from '@bigbinary/neeto-atoms';
10
+ import { withT } from '@bigbinary/neeto-commons-frontend/v2/react-utils';
11
+ import Delete from '@bigbinary/neeto-icons/Delete';
12
+ import { jsx, jsxs } from 'react/jsx-runtime';
13
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
14
+ import Editor from '@monaco-editor/react';
15
+ import Help from '@bigbinary/neeto-icons/Help';
16
+ import DynamicVariables from '@bigbinary/neeto-molecules/v2/DynamicVariables';
17
+ import './json_editor-Co5e3Chh.js';
18
+
19
+ var VALID_URL_REGEX = /^(https?):\/\/([a-zA-Z0-9-]+\.){1,}[a-zA-Z]{2,}\/?[^\s]*$/;
20
+ var CUSTOM_HEADERS_INITIAL_VALUE = {
21
+ key: "",
22
+ value: ""
23
+ };
24
+ var API_TEMPLATE_TYPE = "api_template";
25
+ var API_TEMPLATES_HELP_POPOVER_PROPS = {
26
+ apiTemplates: {
27
+ description: t("neetoMessageTemplate.api.helpPopovers.apiTemplates.description"),
28
+ helpLinkProps: {
29
+ "data-testid": "help-popover-link-button"
30
+ },
31
+ popoverProps: {
32
+ position: "top"
33
+ }
34
+ },
35
+ sendToApi: {
36
+ description: t("neetoMessageTemplate.api.helpPopovers.sendToApi.description"),
37
+ helpLinkProps: {
38
+ "data-testid": "send-to-api-action-help-link"
39
+ },
40
+ popoverProps: {
41
+ position: "top"
42
+ }
43
+ },
44
+ customHeaders: {
45
+ description: t("neetoMessageTemplate.api.helpPopovers.customHeaders.description"),
46
+ helpLinkProps: {
47
+ label: t("neetoMessageTemplate.template.viewHelpArticle"),
48
+ "data-testid": "api-templates-custom-headers-help-link"
49
+ },
50
+ position: "top"
51
+ },
52
+ body: {
53
+ description: t("neetoMessageTemplate.api.helpPopovers.body.description"),
54
+ helpLinkProps: {
55
+ label: t("neetoMessageTemplate.template.viewHelpArticle"),
56
+ "data-testid": "api-templates-body-help-link"
57
+ },
58
+ position: "top"
59
+ }
60
+ };
61
+ var JSON_LANGUAGE = "json";
62
+ var EDITOR_CONFIG = {
63
+ formatOnType: true,
64
+ formatOnPaste: true,
65
+ automaticLayout: true,
66
+ tabSize: 2,
67
+ minimap: {
68
+ enabled: false
69
+ },
70
+ scrollBeyondLastLine: false,
71
+ autoIndent: "full"
72
+ };
73
+
74
+ [{
75
+ dataIndex: "name",
76
+ key: "name",
77
+ title: t("neetoMessageTemplate.template.name")
78
+ }, {
79
+ dataIndex: "status",
80
+ key: "status",
81
+ title: t("neetoMessageTemplate.template.active"),
82
+ render: function render(status) {
83
+ return status === "active" ? t("neetoMessageTemplate.yes") : t("neetoMessageTemplate.no");
84
+ },
85
+ width: "20%"
86
+ }];
87
+ var FILTER_COLUMNS = [{
88
+ key: "name",
89
+ node: "name",
90
+ label: t("neetoMessageTemplate.template.name"),
91
+ type: "text"
92
+ }, {
93
+ key: "status",
94
+ node: "status",
95
+ label: t("neetoMessageTemplate.template.active"),
96
+ type: "single_option",
97
+ values: [{
98
+ label: t("neetoMessageTemplate.yes"),
99
+ value: "active"
100
+ }, {
101
+ label: t("neetoMessageTemplate.no"),
102
+ value: "inactive"
103
+ }]
104
+ }];
105
+ var API_TEMPLATE_INITIAL_VALUES = {
106
+ name: "",
107
+ endpoint: "",
108
+ enableCustomHeaders: false,
109
+ customHeaders: [CUSTOM_HEADERS_INITIAL_VALUE],
110
+ body: "{}"
111
+ };
112
+ var SAMPLE_URL = "https://example.com";
113
+ var API_TEMPLATE_FORM_VALIDATION_SCHEMA = yup.object({
114
+ name: yup.string().trim().required(t("neetoMessageTemplate.validations.requiredEntity", {
115
+ entity: t("neetoMessageTemplate.template.name")
116
+ })),
117
+ endpoint: yup.string().trim().required(t("neetoMessageTemplate.validations.requiredEntity", {
118
+ entity: t("neetoMessageTemplate.api.endpoint")
119
+ })).matches(VALID_URL_REGEX, t("neetoMessageTemplate.api.validation.validEndpoint")),
120
+ body: yup.string().trim().required(t("neetoMessageTemplate.validations.requiredEntity", {
121
+ entity: t("neetoMessageTemplate.template.body")
122
+ })).test("is-valid-json-and-not-empty", function (value, context) {
123
+ if (!value) return true;
124
+ try {
125
+ var parsedValue = JSON.parse(value);
126
+ if (isNotPresent(parsedValue)) {
127
+ return context.createError({
128
+ message: t("neetoMessageTemplate.validations.requiredEntity", {
129
+ entity: t("neetoMessageTemplate.template.body")
130
+ })
131
+ });
132
+ }
133
+ return true;
134
+ } catch (_unused) {
135
+ return context.createError({
136
+ message: t("neetoMessageTemplate.api.validation.invalidJsonBody")
137
+ });
138
+ }
139
+ })
140
+ });
141
+ var TEMPLATE_STATUS = {
142
+ ACTIVE: "active",
143
+ INACTIVE: "inactive"
144
+ };
145
+
146
+ var sanitizeHelpPopoverProps = map(unless(path(["helpLinkProps", "href"]), omit(["helpLinkProps"])));
147
+ var buildHelpPopoverProps = function buildHelpPopoverProps(popoverProps) {
148
+ var combinedProps = mergeDeepLeft(popoverProps, API_TEMPLATES_HELP_POPOVER_PROPS);
149
+ return sanitizeHelpPopoverProps(combinedProps);
150
+ };
151
+ var rejectEmptyKeyValuePairs = reject(whereAny({
152
+ key: isEmpty,
153
+ value: isEmpty
154
+ }));
155
+
156
+ var removeOption = function removeOption(_ref) {
157
+ var arrayHelpers = _ref.arrayHelpers,
158
+ index = _ref.index,
159
+ data = _ref.data;
160
+ if (data.length === 1) {
161
+ arrayHelpers.remove(index);
162
+ arrayHelpers.push(CUSTOM_HEADERS_INITIAL_VALUE);
163
+ return;
164
+ }
165
+ arrayHelpers.remove(index);
166
+ };
167
+ var addOption = function addOption(arrayHelpers) {
168
+ return arrayHelpers.push(CUSTOM_HEADERS_INITIAL_VALUE);
169
+ };
170
+ var isKeyOrValueNotEmpty = whereAny({
171
+ key: isNotEmpty,
172
+ value: isNotEmpty
173
+ });
174
+
175
+ var KeyValuePairs = withT(function (_ref) {
176
+ var t = _ref.t,
177
+ name = _ref.name,
178
+ entity = _ref.entity;
179
+ return /*#__PURE__*/jsx(FieldArray, {
180
+ name: name,
181
+ children: function children(arrayHelpers) {
182
+ var data = arrayHelpers.form.values[name] || [CUSTOM_HEADERS_INITIAL_VALUE];
183
+ var showDeleteButton = data.length > 1 || isKeyOrValueNotEmpty(data[0]);
184
+ return /*#__PURE__*/jsxs("div", {
185
+ className: "flex flex-col space-y-2",
186
+ children: [data.map(function (_, index) {
187
+ return /*#__PURE__*/jsxs("div", {
188
+ className: "flex h-8 space-x-3",
189
+ children: [/*#__PURE__*/jsx(Input, {
190
+ className: "w-1/3",
191
+ "data-testid": "key-input-".concat(index),
192
+ name: "".concat(name, ".").concat(index, ".key"),
193
+ placeholder: t("neetoMessageTemplate.api.key")
194
+ }), /*#__PURE__*/jsx(Input, {
195
+ className: "w-2/3",
196
+ "data-testid": "value-input-".concat(index),
197
+ name: "".concat(name, ".").concat(index, ".value"),
198
+ placeholder: t("neetoMessageTemplate.api.value"),
199
+ suffix: showDeleteButton && /*#__PURE__*/jsx(Button, {
200
+ "data-testid": "delete-key-value-pair-".concat(index),
201
+ icon: Delete,
202
+ size: "sm",
203
+ variant: "ghost",
204
+ onClick: function onClick() {
205
+ return removeOption({
206
+ arrayHelpers: arrayHelpers,
207
+ index: index,
208
+ data: data
209
+ });
210
+ }
211
+ })
212
+ })]
213
+ }, index);
214
+ }), /*#__PURE__*/jsx(Button, {
215
+ className: "w-30 ms-auto",
216
+ "data-testid": "add-key-value-pair-button",
217
+ label: t("neetoMessageTemplate.api.addEntity", {
218
+ entity: entity
219
+ }),
220
+ variant: "outline",
221
+ onClick: function onClick() {
222
+ return addOption(arrayHelpers);
223
+ }
224
+ })]
225
+ });
226
+ }
227
+ });
228
+ });
229
+
230
+ var CustomHeaders = function CustomHeaders(_ref) {
231
+ var _ref$helpPopoverProps = _ref.helpPopoverProps,
232
+ helpPopoverProps = _ref$helpPopoverProps === void 0 ? {} : _ref$helpPopoverProps;
233
+ var _useFormikContext = useFormikContext(),
234
+ enableCustomHeaders = _useFormikContext.values.enableCustomHeaders,
235
+ setFieldValue = _useFormikContext.setFieldValue;
236
+ var _useTranslation = useTranslation(),
237
+ t = _useTranslation.t;
238
+ useEffect(function () {
239
+ return function () {
240
+ setFieldValue("enableCustomHeaders", false);
241
+ setFieldValue("customHeaders", [CUSTOM_HEADERS_INITIAL_VALUE]);
242
+ };
243
+ }, []);
244
+ var handleCheckedChange = function handleCheckedChange(checked) {
245
+ if (!checked) {
246
+ setFieldValue("customHeaders", [CUSTOM_HEADERS_INITIAL_VALUE]);
247
+ }
248
+ setFieldValue("enableCustomHeaders", checked);
249
+ };
250
+ var label = t("neetoMessageTemplate.api.includeHeaders");
251
+ return /*#__PURE__*/jsxs("div", {
252
+ className: "flex flex-col space-y-4",
253
+ children: [/*#__PURE__*/jsx(Switch, {
254
+ label: label,
255
+ "data-testid": "neeto-message-template-".concat(hyphenate(label), "-switch"),
256
+ name: "enableCustomHeaders",
257
+ labelProps: {
258
+ className: "ms-2",
259
+ helpIconProps: {
260
+ popoverProps: helpPopoverProps
261
+ }
262
+ },
263
+ onCheckedChange: handleCheckedChange
264
+ }), enableCustomHeaders && /*#__PURE__*/jsx(KeyValuePairs, {
265
+ entity: t("neetoMessageTemplate.api.headers"),
266
+ name: "customHeaders"
267
+ })]
268
+ });
269
+ };
270
+
271
+ var JsonEditor = function JsonEditor(_ref) {
272
+ var name = _ref.name,
273
+ _ref$helpPopoverProps = _ref.helpPopoverProps,
274
+ helpPopoverProps = _ref$helpPopoverProps === void 0 ? {} : _ref$helpPopoverProps,
275
+ _ref$initialValue = _ref.initialValue,
276
+ initialValue = _ref$initialValue === void 0 ? "{}" : _ref$initialValue,
277
+ _ref$templateVariable = _ref.templateVariables,
278
+ templateVariables = _ref$templateVariable === void 0 ? [] : _ref$templateVariable;
279
+ var editorRef = useRef(null);
280
+ var completionProviderRef = useRef(null);
281
+ var _useField = useField(name),
282
+ _useField2 = _slicedToArray(_useField, 3);
283
+ _useField2[0];
284
+ var _useField2$ = _useField2[1],
285
+ touched = _useField2$.touched,
286
+ error = _useField2$.error,
287
+ _useField2$2 = _useField2[2],
288
+ setValue = _useField2$2.setValue,
289
+ setTouched = _useField2$2.setTouched;
290
+ var _useTranslation = useTranslation(),
291
+ t = _useTranslation.t;
292
+ var handleEditorDidMount = function handleEditorDidMount(editor, monaco) {
293
+ editorRef.current = editor;
294
+ completionProviderRef.current = monaco.languages.registerCompletionItemProvider(JSON_LANGUAGE, {
295
+ triggerCharacters: ["{"],
296
+ provideCompletionItems: function provideCompletionItems(model, position) {
297
+ var lineContent = model.getLineContent(position.lineNumber);
298
+ var beforeCursor = lineContent.slice(0, position.column - 1);
299
+ if (!beforeCursor.endsWith('"{')) {
300
+ return {
301
+ suggestions: []
302
+ };
303
+ }
304
+ var suggestions = templateVariables.map(function (_ref2) {
305
+ var key = _ref2.key,
306
+ label = _ref2.label;
307
+ return {
308
+ label: label,
309
+ kind: monaco.languages.CompletionItemKind.Variable,
310
+ insertText: "{".concat(key, "}}"),
311
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
312
+ detail: t("neetoMessageTemplate.api.insertPlaceholder", {
313
+ label: label
314
+ })
315
+ };
316
+ });
317
+ return {
318
+ suggestions: suggestions
319
+ };
320
+ }
321
+ });
322
+ };
323
+ var insertVariable = function insertVariable(_ref3) {
324
+ var key = _ref3.key;
325
+ var editor = editorRef.current;
326
+ if (!editor) return;
327
+ var selection = editor.getSelection();
328
+ var range = {
329
+ startLineNumber: selection.startLineNumber,
330
+ startColumn: selection.startColumn,
331
+ endLineNumber: selection.endLineNumber,
332
+ endColumn: selection.endColumn
333
+ };
334
+ var text = "\"{{".concat(key, "}}\"");
335
+ editor.executeEdits("", [{
336
+ range: range,
337
+ text: text,
338
+ forceMoveMarkers: true
339
+ }]);
340
+ var position = editor.getPosition();
341
+ editor.setPosition({
342
+ lineNumber: position.lineNumber,
343
+ column: position.column + text.length
344
+ });
345
+ editor.focus();
346
+ };
347
+ var handleChange = function handleChange(value) {
348
+ setTouched(true);
349
+ setValue(value);
350
+ };
351
+ useEffect(function () {
352
+ var editor = editorRef.current;
353
+ if (!editor) return;
354
+ var currentValue = editor.getValue();
355
+ if (currentValue !== initialValue) {
356
+ editor.setValue(initialValue);
357
+ }
358
+ }, [initialValue]);
359
+ useEffect(function () {
360
+ return function () {
361
+ var _completionProviderRe;
362
+ (_completionProviderRe = completionProviderRef.current) === null || _completionProviderRe === void 0 || _completionProviderRe.dispose();
363
+ completionProviderRef.current = null;
364
+ };
365
+ }, []);
366
+ return /*#__PURE__*/jsxs("div", {
367
+ className: "space-y-2",
368
+ children: [/*#__PURE__*/jsx(Label, {
369
+ required: true,
370
+ "data-testid": "message-template-body",
371
+ helpIconProps: {
372
+ icon: Help,
373
+ popoverProps: helpPopoverProps
374
+ },
375
+ children: t("neetoMessageTemplate.template.body")
376
+ }), /*#__PURE__*/jsxs("div", {
377
+ className: "neeto-message-template-json-editor__wrapper",
378
+ children: [/*#__PURE__*/jsx("div", {
379
+ className: "neeto-message-template-json-editor__dynamic-variables",
380
+ children: /*#__PURE__*/jsx(DynamicVariables, {
381
+ variables: templateVariables,
382
+ onVariableClick: insertVariable
383
+ })
384
+ }), /*#__PURE__*/jsx(Editor, {
385
+ className: "neeto-message-template-json-editor__editor",
386
+ defaultLanguage: JSON_LANGUAGE,
387
+ defaultValue: initialValue,
388
+ height: "100%",
389
+ options: EDITOR_CONFIG,
390
+ theme: "vs-dark",
391
+ onChange: handleChange,
392
+ onMount: handleEditorDidMount
393
+ }), touched && error && /*#__PURE__*/jsx("div", {
394
+ className: "text-destructive mt-1 text-xs",
395
+ children: error
396
+ })]
397
+ })]
398
+ });
399
+ };
400
+
401
+ export { API_TEMPLATE_INITIAL_VALUES as A, CUSTOM_HEADERS_INITIAL_VALUE as C, FILTER_COLUMNS as F, JsonEditor as J, SAMPLE_URL as S, TEMPLATE_STATUS as T, VALID_URL_REGEX as V, API_TEMPLATE_TYPE as a, API_TEMPLATE_FORM_VALIDATION_SCHEMA as b, CustomHeaders as c, buildHelpPopoverProps as d, rejectEmptyKeyValuePairs as r };
402
+ //# sourceMappingURL=JsonEditor-BHy4s0Bo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonEditor-BHy4s0Bo.js","sources":["../app/javascript/src/v2/components/Api/constants.js","../app/javascript/src/v2/components/Api/ApiTemplates/constants.js","../app/javascript/src/v2/components/Api/utils.js","../app/javascript/src/v2/components/commons/KeyValuePairs/utils.js","../app/javascript/src/v2/components/commons/KeyValuePairs/index.jsx","../app/javascript/src/v2/components/Api/CustomHeaders.jsx","../app/javascript/src/v2/components/Api/JsonEditor.jsx"],"sourcesContent":["import { t } from \"i18next\";\n\nexport const VALID_URL_REGEX =\n /^(https?):\\/\\/([a-zA-Z0-9-]+\\.){1,}[a-zA-Z]{2,}\\/?[^\\s]*$/;\n\nexport const CUSTOM_HEADERS_INITIAL_VALUE = { key: \"\", value: \"\" };\n\nexport const API_TEMPLATE_TYPE = \"api_template\";\n\nexport const API_TEMPLATES_HELP_POPOVER_PROPS = {\n apiTemplates: {\n description: t(\n \"neetoMessageTemplate.api.helpPopovers.apiTemplates.description\"\n ),\n helpLinkProps: { \"data-testid\": \"help-popover-link-button\" },\n popoverProps: { position: \"top\" },\n },\n sendToApi: {\n description: t(\n \"neetoMessageTemplate.api.helpPopovers.sendToApi.description\"\n ),\n helpLinkProps: { \"data-testid\": \"send-to-api-action-help-link\" },\n popoverProps: { position: \"top\" },\n },\n customHeaders: {\n description: t(\n \"neetoMessageTemplate.api.helpPopovers.customHeaders.description\"\n ),\n helpLinkProps: {\n label: t(\"neetoMessageTemplate.template.viewHelpArticle\"),\n \"data-testid\": \"api-templates-custom-headers-help-link\",\n },\n position: \"top\",\n },\n body: {\n description: t(\"neetoMessageTemplate.api.helpPopovers.body.description\"),\n helpLinkProps: {\n label: t(\"neetoMessageTemplate.template.viewHelpArticle\"),\n \"data-testid\": \"api-templates-body-help-link\",\n },\n position: \"top\",\n },\n};\n\nexport const JSON_LANGUAGE = \"json\";\n\nexport const EDITOR_CONFIG = {\n formatOnType: true,\n formatOnPaste: true,\n automaticLayout: true,\n tabSize: 2,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n autoIndent: \"full\",\n};\n","import { t } from \"i18next\";\nimport { isNotPresent } from \"neetocist\";\nimport * as yup from \"yup\";\n\nimport {\n CUSTOM_HEADERS_INITIAL_VALUE,\n VALID_URL_REGEX,\n} from \"v2/components/Api/constants\";\n\nexport const TABLE_COLUMN_DATA = [\n {\n dataIndex: \"name\",\n key: \"name\",\n title: t(\"neetoMessageTemplate.template.name\"),\n },\n {\n dataIndex: \"status\",\n key: \"status\",\n title: t(\"neetoMessageTemplate.template.active\"),\n render: status =>\n status === \"active\"\n ? t(\"neetoMessageTemplate.yes\")\n : t(\"neetoMessageTemplate.no\"),\n width: \"20%\",\n },\n];\n\nexport const FILTER_COLUMNS = [\n {\n key: \"name\",\n node: \"name\",\n label: t(\"neetoMessageTemplate.template.name\"),\n type: \"text\",\n },\n {\n key: \"status\",\n node: \"status\",\n label: t(\"neetoMessageTemplate.template.active\"),\n type: \"single_option\",\n values: [\n { label: t(\"neetoMessageTemplate.yes\"), value: \"active\" },\n { label: t(\"neetoMessageTemplate.no\"), value: \"inactive\" },\n ],\n },\n];\n\nexport const API_TEMPLATE_INITIAL_VALUES = {\n name: \"\",\n endpoint: \"\",\n enableCustomHeaders: false,\n customHeaders: [CUSTOM_HEADERS_INITIAL_VALUE],\n body: \"{}\",\n};\n\nexport const SAMPLE_URL = \"https://example.com\";\n\nexport const API_TEMPLATE_FORM_VALIDATION_SCHEMA = yup.object({\n name: yup\n .string()\n .trim()\n .required(\n t(\"neetoMessageTemplate.validations.requiredEntity\", {\n entity: t(\"neetoMessageTemplate.template.name\"),\n })\n ),\n endpoint: yup\n .string()\n .trim()\n .required(\n t(\"neetoMessageTemplate.validations.requiredEntity\", {\n entity: t(\"neetoMessageTemplate.api.endpoint\"),\n })\n )\n .matches(\n VALID_URL_REGEX,\n t(\"neetoMessageTemplate.api.validation.validEndpoint\")\n ),\n body: yup\n .string()\n .trim()\n .required(\n t(\"neetoMessageTemplate.validations.requiredEntity\", {\n entity: t(\"neetoMessageTemplate.template.body\"),\n })\n )\n .test(\"is-valid-json-and-not-empty\", (value, context) => {\n if (!value) return true;\n\n try {\n const parsedValue = JSON.parse(value);\n\n if (isNotPresent(parsedValue)) {\n return context.createError({\n message: t(\"neetoMessageTemplate.validations.requiredEntity\", {\n entity: t(\"neetoMessageTemplate.template.body\"),\n }),\n });\n }\n\n return true;\n } catch {\n return context.createError({\n message: t(\"neetoMessageTemplate.api.validation.invalidJsonBody\"),\n });\n }\n }),\n});\n\nexport const TEMPLATE_STATUS = { ACTIVE: \"active\", INACTIVE: \"inactive\" };\n","import {\n isEmpty,\n reject,\n whereAny,\n map,\n mergeDeepLeft,\n omit,\n path,\n unless,\n} from \"ramda\";\n\nimport { API_TEMPLATES_HELP_POPOVER_PROPS } from \"./constants\";\n\nconst sanitizeHelpPopoverProps = map(\n unless(path([\"helpLinkProps\", \"href\"]), omit([\"helpLinkProps\"]))\n);\n\nexport const buildHelpPopoverProps = popoverProps => {\n const combinedProps = mergeDeepLeft(\n popoverProps,\n API_TEMPLATES_HELP_POPOVER_PROPS\n );\n\n return sanitizeHelpPopoverProps(combinedProps);\n};\n\nexport const rejectEmptyKeyValuePairs = reject(\n whereAny({ key: isEmpty, value: isEmpty })\n);\n","import { isNotEmpty } from \"neetocist\";\nimport { whereAny } from \"ramda\";\n\nimport { CUSTOM_HEADERS_INITIAL_VALUE } from \"v2/components/Api/constants\";\n\nexport const removeOption = ({ arrayHelpers, index, data }) => {\n if (data.length === 1) {\n arrayHelpers.remove(index);\n arrayHelpers.push(CUSTOM_HEADERS_INITIAL_VALUE);\n\n return;\n }\n\n arrayHelpers.remove(index);\n};\n\nexport const addOption = arrayHelpers =>\n arrayHelpers.push(CUSTOM_HEADERS_INITIAL_VALUE);\n\nexport const isKeyOrValueNotEmpty = whereAny({\n key: isNotEmpty,\n value: isNotEmpty,\n});\n","import { Button } from \"@bigbinary/neeto-atoms\";\nimport { Input } from \"@bigbinary/neeto-atoms/formik\";\nimport { FieldArray } from \"formik\";\nimport { withT } from \"neetocommons/v2/react-utils\";\nimport { Delete } from \"neetoicons\";\n\nimport { CUSTOM_HEADERS_INITIAL_VALUE } from \"v2/components/Api/constants\";\n\nimport { addOption, isKeyOrValueNotEmpty, removeOption } from \"./utils\";\n\nconst KeyValuePairs = withT(({ t, name, entity }) => (\n <FieldArray {...{ name }}>\n {arrayHelpers => {\n const data = arrayHelpers.form.values[name] || [\n CUSTOM_HEADERS_INITIAL_VALUE,\n ];\n\n const showDeleteButton = data.length > 1 || isKeyOrValueNotEmpty(data[0]);\n\n return (\n <div className=\"flex flex-col space-y-2\">\n {data.map((_, index) => (\n <div className=\"flex h-8 space-x-3\" key={index}>\n <Input\n className=\"w-1/3\"\n data-testid={`key-input-${index}`}\n name={`${name}.${index}.key`}\n placeholder={t(\"neetoMessageTemplate.api.key\")}\n />\n <Input\n className=\"w-2/3\"\n data-testid={`value-input-${index}`}\n name={`${name}.${index}.value`}\n placeholder={t(\"neetoMessageTemplate.api.value\")}\n suffix={\n showDeleteButton && (\n <Button\n data-testid={`delete-key-value-pair-${index}`}\n icon={Delete}\n size=\"sm\"\n variant=\"ghost\"\n onClick={() =>\n removeOption({ arrayHelpers, index, data })\n }\n />\n )\n }\n />\n </div>\n ))}\n <Button\n className=\"w-30 ms-auto\"\n data-testid=\"add-key-value-pair-button\"\n label={t(\"neetoMessageTemplate.api.addEntity\", { entity })}\n variant=\"outline\"\n onClick={() => addOption(arrayHelpers)}\n />\n </div>\n );\n }}\n </FieldArray>\n));\n\nexport default KeyValuePairs;\n","import { useEffect } from \"react\";\n\nimport { Switch } from \"@bigbinary/neeto-atoms/formik\";\nimport { useFormikContext } from \"formik\";\nimport { hyphenate } from \"neetocist\";\nimport { useTranslation } from \"react-i18next\";\n\nimport KeyValuePairs from \"v2/components/commons/KeyValuePairs\";\n\nimport { CUSTOM_HEADERS_INITIAL_VALUE } from \"./constants\";\n\nconst CustomHeaders = ({ helpPopoverProps = {} }) => {\n const {\n values: { enableCustomHeaders },\n setFieldValue,\n } = useFormikContext();\n\n const { t } = useTranslation();\n\n useEffect(\n () => () => {\n setFieldValue(\"enableCustomHeaders\", false);\n setFieldValue(\"customHeaders\", [CUSTOM_HEADERS_INITIAL_VALUE]);\n },\n []\n );\n\n const handleCheckedChange = checked => {\n if (!checked) {\n setFieldValue(\"customHeaders\", [CUSTOM_HEADERS_INITIAL_VALUE]);\n }\n\n setFieldValue(\"enableCustomHeaders\", checked);\n };\n\n const label = t(\"neetoMessageTemplate.api.includeHeaders\");\n\n return (\n <div className=\"flex flex-col space-y-4\">\n <Switch\n {...{ label }}\n data-testid={`neeto-message-template-${hyphenate(label)}-switch`}\n name=\"enableCustomHeaders\"\n labelProps={{\n className: \"ms-2\",\n helpIconProps: { popoverProps: helpPopoverProps },\n }}\n onCheckedChange={handleCheckedChange}\n />\n {enableCustomHeaders && (\n <KeyValuePairs\n entity={t(\"neetoMessageTemplate.api.headers\")}\n name=\"customHeaders\"\n />\n )}\n </div>\n );\n};\n\nexport default CustomHeaders;\n","import { useEffect, useRef } from \"react\";\n\nimport { Label } from \"@bigbinary/neeto-atoms\";\nimport Editor from \"@monaco-editor/react\";\nimport { useField } from \"formik\";\nimport { Help } from \"neetoicons\";\nimport DynamicVariables from \"neetomolecules/v2/DynamicVariables\";\nimport { useTranslation } from \"react-i18next\";\n\n// eslint-disable-next-line import/extensions\nimport \"stylesheets/components/json_editor.css\";\n\nimport { EDITOR_CONFIG, JSON_LANGUAGE } from \"./constants\";\n\nconst JsonEditor = ({\n name,\n helpPopoverProps = {},\n initialValue = \"{}\",\n templateVariables = [],\n}) => {\n const editorRef = useRef(null);\n const completionProviderRef = useRef(null);\n\n const [_, { touched, error }, { setValue, setTouched }] = useField(name);\n\n const { t } = useTranslation();\n\n const handleEditorDidMount = (editor, monaco) => {\n editorRef.current = editor;\n\n completionProviderRef.current =\n monaco.languages.registerCompletionItemProvider(JSON_LANGUAGE, {\n triggerCharacters: [\"{\"],\n provideCompletionItems: (model, position) => {\n const lineContent = model.getLineContent(position.lineNumber);\n const beforeCursor = lineContent.slice(0, position.column - 1);\n\n if (!beforeCursor.endsWith('\"{')) {\n return { suggestions: [] };\n }\n\n const suggestions = templateVariables.map(({ key, label }) => ({\n label,\n kind: monaco.languages.CompletionItemKind.Variable,\n insertText: `{${key}}}`,\n insertTextRules:\n monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,\n detail: t(\"neetoMessageTemplate.api.insertPlaceholder\", {\n label,\n }),\n }));\n\n return { suggestions };\n },\n });\n };\n\n const insertVariable = ({ key }) => {\n const editor = editorRef.current;\n if (!editor) return;\n\n const selection = editor.getSelection();\n const range = {\n startLineNumber: selection.startLineNumber,\n startColumn: selection.startColumn,\n endLineNumber: selection.endLineNumber,\n endColumn: selection.endColumn,\n };\n const text = `\"{{${key}}}\"`;\n\n editor.executeEdits(\"\", [{ range, text, forceMoveMarkers: true }]);\n\n const position = editor.getPosition();\n editor.setPosition({\n lineNumber: position.lineNumber,\n column: position.column + text.length,\n });\n\n editor.focus();\n };\n\n const handleChange = value => {\n setTouched(true);\n setValue(value);\n };\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n\n const currentValue = editor.getValue();\n if (currentValue !== initialValue) {\n editor.setValue(initialValue);\n }\n }, [initialValue]);\n\n useEffect(\n () => () => {\n completionProviderRef.current?.dispose();\n completionProviderRef.current = null;\n },\n []\n );\n\n return (\n <div className=\"space-y-2\">\n <Label\n required\n data-testid=\"message-template-body\"\n helpIconProps={{ icon: Help, popoverProps: helpPopoverProps }}\n >\n {t(\"neetoMessageTemplate.template.body\")}\n </Label>\n <div className=\"neeto-message-template-json-editor__wrapper\">\n <div className=\"neeto-message-template-json-editor__dynamic-variables\">\n <DynamicVariables\n variables={templateVariables}\n onVariableClick={insertVariable}\n />\n </div>\n <Editor\n className=\"neeto-message-template-json-editor__editor\"\n defaultLanguage={JSON_LANGUAGE}\n defaultValue={initialValue}\n height=\"100%\"\n options={EDITOR_CONFIG}\n theme=\"vs-dark\"\n onChange={handleChange}\n onMount={handleEditorDidMount}\n />\n {touched && error && (\n <div className=\"text-destructive mt-1 text-xs\">{error}</div>\n )}\n </div>\n </div>\n );\n};\n\nexport default JsonEditor;\n"],"names":["VALID_URL_REGEX","CUSTOM_HEADERS_INITIAL_VALUE","key","value","API_TEMPLATE_TYPE","API_TEMPLATES_HELP_POPOVER_PROPS","apiTemplates","description","t","helpLinkProps","popoverProps","position","sendToApi","customHeaders","label","body","JSON_LANGUAGE","EDITOR_CONFIG","formatOnType","formatOnPaste","automaticLayout","tabSize","minimap","enabled","scrollBeyondLastLine","autoIndent","dataIndex","title","render","status","width","FILTER_COLUMNS","node","type","values","API_TEMPLATE_INITIAL_VALUES","name","endpoint","enableCustomHeaders","SAMPLE_URL","API_TEMPLATE_FORM_VALIDATION_SCHEMA","yup","object","string","trim","required","entity","matches","test","context","parsedValue","JSON","parse","isNotPresent","createError","message","_unused","TEMPLATE_STATUS","ACTIVE","INACTIVE","sanitizeHelpPopoverProps","map","unless","path","omit","buildHelpPopoverProps","combinedProps","mergeDeepLeft","rejectEmptyKeyValuePairs","reject","whereAny","isEmpty","removeOption","_ref","arrayHelpers","index","data","length","remove","push","addOption","isKeyOrValueNotEmpty","isNotEmpty","KeyValuePairs","withT","_jsx","FieldArray","children","form","showDeleteButton","_jsxs","className","_","Input","concat","placeholder","suffix","Button","icon","Delete","size","variant","onClick","CustomHeaders","_ref$helpPopoverProps","helpPopoverProps","_useFormikContext","useFormikContext","setFieldValue","_useTranslation","useTranslation","useEffect","handleCheckedChange","checked","Switch","hyphenate","labelProps","helpIconProps","onCheckedChange","JsonEditor","_ref$initialValue","initialValue","_ref$templateVariable","templateVariables","editorRef","useRef","completionProviderRef","_useField","useField","_useField2","_slicedToArray","_useField2$","touched","error","_useField2$2","setValue","setTouched","handleEditorDidMount","editor","monaco","current","languages","registerCompletionItemProvider","triggerCharacters","provideCompletionItems","model","lineContent","getLineContent","lineNumber","beforeCursor","slice","column","endsWith","suggestions","_ref2","kind","CompletionItemKind","Variable","insertText","insertTextRules","CompletionItemInsertTextRule","InsertAsSnippet","detail","insertVariable","_ref3","selection","getSelection","range","startLineNumber","startColumn","endLineNumber","endColumn","text","executeEdits","forceMoveMarkers","getPosition","setPosition","focus","handleChange","currentValue","getValue","_completionProviderRe","dispose","Label","Help","DynamicVariables","variables","onVariableClick","Editor","defaultLanguage","defaultValue","height","options","theme","onChange","onMount"],"mappings":"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"}