@truedat/df 7.5.9 → 7.5.10

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 (212) hide show
  1. package/package.json +43 -67
  2. package/src/components/DynamicFieldValue.js +0 -1
  3. package/src/components/DynamicForm.js +5 -4
  4. package/src/components/DynamicFormViewer.js +0 -1
  5. package/src/components/DynamicFormWithTranslations.js +3 -3
  6. package/src/components/EditableDynamicFieldValue.js +1 -2
  7. package/src/components/FieldGroupDetail.js +0 -1
  8. package/src/components/FieldGroupSegment.js +17 -29
  9. package/src/components/FieldGroupWithTranslations.js +19 -38
  10. package/src/components/FieldViewerValue.js +4 -7
  11. package/src/components/OriginLabel.js +0 -1
  12. package/src/components/SelectDynamicFormWithTranslations.js +4 -6
  13. package/src/components/SelectableDynamicForm.js +5 -11
  14. package/src/components/__tests__/DynamicFieldValue.spec.js +0 -1
  15. package/src/components/__tests__/DynamicForm.spec.js +25 -23
  16. package/src/components/__tests__/EditableDynamicFieldValue.spec.js +0 -1
  17. package/src/components/__tests__/FieldGroupDetail.spec.js +0 -1
  18. package/src/components/__tests__/FieldViewerValue.spec.js +1 -6
  19. package/src/components/__tests__/SelectableDynamicForm.spec.js +102 -46
  20. package/src/components/__tests__/__snapshots__/DynamicFieldValue.spec.js.snap +2 -2
  21. package/src/components/__tests__/__snapshots__/DynamicForm.spec.js.snap +94 -81
  22. package/src/components/__tests__/__snapshots__/FieldGroupDetail.spec.js.snap +2 -2
  23. package/src/components/__tests__/__snapshots__/FieldViewerValue.spec.js.snap +1 -7
  24. package/src/components/__tests__/__snapshots__/SelectableDynamicForm.spec.js.snap +39 -39
  25. package/src/components/hierarchies/Hierarchies.js +2 -4
  26. package/src/components/hierarchies/HierarchiesView.js +1 -2
  27. package/src/components/hierarchies/HierarchyCrumbs.js +1 -2
  28. package/src/components/hierarchies/HierarchyRoutes.js +44 -39
  29. package/src/components/hierarchies/HierarchyView.js +4 -7
  30. package/src/components/hierarchies/__tests__/Hierarchies.spec.js +2 -3
  31. package/src/components/hierarchies/__tests__/HierarchiesView.spec.js +3 -7
  32. package/src/components/hierarchies/__tests__/HierarchyCrumbs.spec.js +0 -1
  33. package/src/components/hierarchies/__tests__/HierarchyRoutes.spec.js +79 -0
  34. package/src/components/hierarchies/__tests__/HierarchyView.spec.js +2 -10
  35. package/src/components/hierarchies/__tests__/__snapshots__/Hierarchies.spec.js.snap +1 -0
  36. package/src/components/hierarchies/__tests__/__snapshots__/HierarchiesView.spec.js.snap +7 -5
  37. package/src/components/hierarchies/__tests__/__snapshots__/HierarchyCrumbs.spec.js.snap +4 -2
  38. package/src/components/hierarchies/__tests__/__snapshots__/HierarchyRoutes.spec.js.snap +60 -0
  39. package/src/components/hierarchies/__tests__/__snapshots__/HierarchyView.spec.js.snap +8 -6
  40. package/src/components/widgets/CheckboxField.js +0 -1
  41. package/src/components/widgets/ColorPickerField.js +2 -3
  42. package/src/components/widgets/DateField.js +0 -1
  43. package/src/components/widgets/DateTimeField.js +0 -1
  44. package/src/components/widgets/DomainDropdown.js +1 -1
  45. package/src/components/widgets/DomainPreview.js +1 -2
  46. package/src/components/widgets/DropdownDataLoader.js +3 -3
  47. package/src/components/widgets/DropdownField.js +5 -4
  48. package/src/components/widgets/DynamicField.js +0 -5
  49. package/src/components/widgets/EnrichedTextField.js +0 -1
  50. package/src/components/widgets/HierarchyDropdown.js +1 -1
  51. package/src/components/widgets/HierarchyPreview.js +0 -1
  52. package/src/components/widgets/IdentifierField.js +0 -1
  53. package/src/components/widgets/ImageField.js +1 -1
  54. package/src/components/widgets/ImagePreview.js +0 -1
  55. package/src/components/widgets/NumberField.js +6 -7
  56. package/src/components/widgets/PairListField.js +5 -6
  57. package/src/components/widgets/PasswordField.js +1 -2
  58. package/src/components/widgets/RadioField.js +0 -1
  59. package/src/components/widgets/StandardDropdown.js +0 -1
  60. package/src/components/widgets/StringField.js +0 -1
  61. package/src/components/widgets/SystemPreview.js +2 -3
  62. package/src/components/widgets/TableField.js +5 -5
  63. package/src/components/widgets/TextField.js +1 -2
  64. package/src/components/widgets/__tests__/CheckboxField.spec.js +33 -23
  65. package/src/components/widgets/__tests__/ColorPickerField.spec.js +5 -12
  66. package/src/components/widgets/__tests__/DateField.spec.js +5 -5
  67. package/src/components/widgets/__tests__/DateTimeField.spec.js +5 -5
  68. package/src/components/widgets/__tests__/DomainPreview.spec.js +12 -14
  69. package/src/components/widgets/__tests__/DropdownDataLoader.spec.js +5 -5
  70. package/src/components/widgets/__tests__/DropdownField.spec.js +18 -29
  71. package/src/components/widgets/__tests__/DynamicField.spec.js +0 -1
  72. package/src/components/widgets/__tests__/HierarchyDropdown.spec.js +4 -5
  73. package/src/components/widgets/__tests__/HierarchyPreview.spec.js +0 -1
  74. package/src/components/widgets/__tests__/ImageField.spec.js +5 -10
  75. package/src/components/widgets/__tests__/NumberField.spec.js +23 -5
  76. package/src/components/widgets/__tests__/PairListField.spec.js +69 -59
  77. package/src/components/widgets/__tests__/PasswordField.spec.js +3 -4
  78. package/src/components/widgets/__tests__/RadioField.spec.js +5 -5
  79. package/src/components/widgets/__tests__/StandardDropdown.spec.js +45 -46
  80. package/src/components/widgets/__tests__/StringField.spec.js +10 -13
  81. package/src/components/widgets/__tests__/SystemPreview.spec.js +13 -15
  82. package/src/components/widgets/__tests__/TableField.spec.js +32 -32
  83. package/src/components/widgets/__tests__/TextField.spec.js +5 -5
  84. package/src/components/widgets/__tests__/__snapshots__/CheckboxField.spec.js.snap +58 -29
  85. package/src/components/widgets/__tests__/__snapshots__/ColorPickerField.spec.js.snap +221 -36
  86. package/src/components/widgets/__tests__/__snapshots__/DateField.spec.js.snap +21 -16
  87. package/src/components/widgets/__tests__/__snapshots__/DateTimeField.spec.js.snap +21 -20
  88. package/src/components/widgets/__tests__/__snapshots__/DomainPreview.spec.js.snap +26 -21
  89. package/src/components/widgets/__tests__/__snapshots__/DropdownDataLoader.spec.js.snap +1 -1
  90. package/src/components/widgets/__tests__/__snapshots__/DropdownField.spec.js.snap +93 -43
  91. package/src/components/widgets/__tests__/__snapshots__/DynamicField.spec.js.snap +2 -14
  92. package/src/components/widgets/__tests__/__snapshots__/ImageField.spec.js.snap +16 -28
  93. package/src/components/widgets/__tests__/__snapshots__/NumberField.spec.js.snap +11 -9
  94. package/src/components/widgets/__tests__/__snapshots__/PairListField.spec.js.snap +53 -39
  95. package/src/components/widgets/__tests__/__snapshots__/PasswordField.spec.js.snap +15 -8
  96. package/src/components/widgets/__tests__/__snapshots__/RadioField.spec.js.snap +41 -22
  97. package/src/components/widgets/__tests__/__snapshots__/StandardDropdown.spec.js.snap +78 -31
  98. package/src/components/widgets/__tests__/__snapshots__/StringField.spec.js.snap +78 -38
  99. package/src/components/widgets/__tests__/__snapshots__/SystemPreview.spec.js.snap +24 -21
  100. package/src/components/widgets/__tests__/__snapshots__/TableField.spec.js.snap +138 -174
  101. package/src/components/widgets/__tests__/__snapshots__/TextField.spec.js.snap +12 -7
  102. package/src/reducers/__tests__/dfMessage.spec.js +14 -18
  103. package/src/reducers/dfMessage.js +8 -7
  104. package/src/selectors/index.js +0 -1
  105. package/src/templates/components/NewTemplate.js +0 -1
  106. package/src/templates/components/Template.js +0 -2
  107. package/src/templates/components/TemplateCard.js +3 -4
  108. package/src/templates/components/TemplateCrumbs.js +2 -3
  109. package/src/templates/components/TemplateFilters.js +0 -1
  110. package/src/templates/components/TemplateLoader.js +25 -101
  111. package/src/templates/components/TemplateRoutes.js +29 -45
  112. package/src/templates/components/Templates.js +1 -5
  113. package/src/templates/components/TemplatesContext.js +3 -7
  114. package/src/templates/components/TemplatesTable.js +1 -2
  115. package/src/templates/components/__tests__/NewTemplate.spec.js +5 -10
  116. package/src/templates/components/__tests__/Template.spec.js +0 -1
  117. package/src/templates/components/__tests__/TemplateLoader.spec.js +71 -109
  118. package/src/templates/components/__tests__/TemplateRoutes.spec.js +63 -0
  119. package/src/templates/components/__tests__/TemplatesTable.spec.js +15 -9
  120. package/src/templates/components/__tests__/__snapshots__/NewTemplate.spec.js.snap +335 -22
  121. package/src/templates/components/__tests__/__snapshots__/Template.spec.js.snap +49 -48
  122. package/src/templates/components/__tests__/__snapshots__/TemplateLoader.spec.js.snap +7 -1
  123. package/src/templates/components/__tests__/__snapshots__/TemplateRoutes.spec.js.snap +38 -0
  124. package/src/templates/components/__tests__/__snapshots__/TemplatesTable.spec.js.snap +94 -1
  125. package/src/templates/components/index.js +1 -2
  126. package/src/templates/components/templateForm/ActiveGroupForm.js +1 -4
  127. package/src/templates/components/templateForm/ConditionalFieldForm.js +0 -1
  128. package/src/templates/components/templateForm/DefaultValue.js +0 -1
  129. package/src/templates/components/templateForm/DependentDomain.js +0 -1
  130. package/src/templates/components/templateForm/DependentFormField.js +0 -1
  131. package/src/templates/components/templateForm/FieldForm.js +5 -5
  132. package/src/templates/components/templateForm/GroupsList.js +0 -1
  133. package/src/templates/components/templateForm/HierarchiesList.js +1 -2
  134. package/src/templates/components/templateForm/MandatoryConditional.js +0 -1
  135. package/src/templates/components/templateForm/SwitchListForm.js +2 -2
  136. package/src/templates/components/templateForm/SwitchSegment.js +0 -1
  137. package/src/templates/components/templateForm/TemplateForm.js +1 -1
  138. package/src/templates/components/templateForm/TemplateFormActions.js +3 -4
  139. package/src/templates/components/templateForm/ValuesField.js +1 -3
  140. package/src/templates/components/templateForm/ValuesListForm.js +3 -3
  141. package/src/templates/components/templateForm/ValuesSelector.js +0 -1
  142. package/src/templates/components/templateForm/__tests__/ActiveGroupForm.spec.js +8 -13
  143. package/src/templates/components/templateForm/__tests__/DefaultValue.spec.js +198 -113
  144. package/src/templates/components/templateForm/__tests__/DependentDomain.spec.js +0 -1
  145. package/src/templates/components/templateForm/__tests__/DependentFormField.spec.js +0 -1
  146. package/src/templates/components/templateForm/__tests__/FieldForm.spec.js +106 -72
  147. package/src/templates/components/templateForm/__tests__/GroupsList.spec.js +7 -12
  148. package/src/templates/components/templateForm/__tests__/MandatoryConditional.spec.js +0 -1
  149. package/src/templates/components/templateForm/__tests__/SwitchListForm.spec.js +71 -50
  150. package/src/templates/components/templateForm/__tests__/SwitchSegment.spec.js +37 -62
  151. package/src/templates/components/templateForm/__tests__/TemplateForm.spec.js +0 -1
  152. package/src/templates/components/templateForm/__tests__/TemplateFormActions.spec.js +19 -15
  153. package/src/templates/components/templateForm/__tests__/ValuesField.spec.js +84 -62
  154. package/src/templates/components/templateForm/__tests__/ValuesListForm.spec.js +108 -144
  155. package/src/templates/components/templateForm/__tests__/ValuesSelector.spec.js +36 -36
  156. package/src/templates/components/templateForm/__tests__/__snapshots__/ActiveGroupForm.spec.js.snap +654 -86
  157. package/src/templates/components/templateForm/__tests__/__snapshots__/DefaultValue.spec.js.snap +45 -23
  158. package/src/templates/components/templateForm/__tests__/__snapshots__/FieldForm.spec.js.snap +1700 -1025
  159. package/src/templates/components/templateForm/__tests__/__snapshots__/GroupsList.spec.js.snap +44 -39
  160. package/src/templates/components/templateForm/__tests__/__snapshots__/SwitchListForm.spec.js.snap +225 -60
  161. package/src/templates/components/templateForm/__tests__/__snapshots__/SwitchSegment.spec.js.snap +1 -1
  162. package/src/templates/components/templateForm/__tests__/__snapshots__/TemplateForm.spec.js.snap +89 -92
  163. package/src/templates/components/templateForm/__tests__/__snapshots__/TemplateFormActions.spec.js.snap +66 -100
  164. package/src/templates/components/templateForm/__tests__/__snapshots__/ValuesField.spec.js.snap +542 -231
  165. package/src/templates/components/templateForm/__tests__/__snapshots__/ValuesListForm.spec.js.snap +264 -268
  166. package/src/templates/components/templateForm/__tests__/__snapshots__/ValuesSelector.spec.js.snap +146 -11
  167. package/src/templates/reducers/__tests__/allTemplates.spec.js +1 -1
  168. package/src/templates/reducers/__tests__/template.spec.js +3 -2
  169. package/src/templates/reducers/__tests__/templateLoading.spec.js +2 -2
  170. package/src/templates/reducers/__tests__/templates.spec.js +1 -1
  171. package/src/templates/reducers/__tests__/templatesLoading.spec.js +1 -1
  172. package/src/templates/reducers/allTemplates.js +1 -2
  173. package/src/templates/reducers/template.js +2 -1
  174. package/src/templates/reducers/templates.js +1 -1
  175. package/src/templates/reducers/templatesLoading.js +1 -1
  176. package/src/templates/routines.js +0 -2
  177. package/src/templates/sagas/__tests__/deleteTemplate.spec.js +2 -2
  178. package/src/templates/sagas/__tests__/fetchTemplates.spec.js +3 -6
  179. package/src/templates/sagas/__tests__/updateTemplate.spec.js +4 -4
  180. package/src/templates/sagas/deleteTemplate.js +1 -1
  181. package/src/templates/sagas/fetchTemplate.js +1 -1
  182. package/src/templates/sagas/fetchTemplates.js +1 -1
  183. package/src/templates/sagas/updateTemplate.js +1 -1
  184. package/src/templates/utils/filterSwitches.js +2 -2
  185. package/src/templates/utils/filterValues.js +2 -2
  186. package/src/api/hierarchies.js +0 -4
  187. package/src/components/FieldGroupCopy.js +0 -108
  188. package/src/components/FieldGroupSubSegment/FieldGroupSubSegment.js +0 -181
  189. package/src/components/FieldGroupSubSegment/__tests__/FieldGroupSubSegment.spec.js +0 -221
  190. package/src/components/FieldGroupSubSegment/__tests__/__snapshots__/FieldGroupSubSegment.spec.js.snap +0 -230
  191. package/src/components/FieldGroupSubSegment/constants.js +0 -68
  192. package/src/components/FieldGroupSubSegment/copyValidations.js +0 -75
  193. package/src/components/FieldGroupSubSegment/handleCopyModule.js +0 -186
  194. package/src/components/__tests__/FieldGroupCopy.spec.js +0 -14
  195. package/src/components/__tests__/__snapshots__/FieldGroupCopy.spec.js.snap +0 -307
  196. package/src/components/widgets/CopyField/CopyField.js +0 -270
  197. package/src/components/widgets/CopyField/CopyFieldCell.js +0 -138
  198. package/src/components/widgets/CopyField/CopyFieldColumn.js +0 -53
  199. package/src/components/widgets/CopyField/CopyFieldSelectableCell.js +0 -71
  200. package/src/components/widgets/CopyField/CustomStyles.js +0 -91
  201. package/src/components/widgets/CopyField/__tests__/CopyField.spec.js +0 -82
  202. package/src/components/widgets/CopyField/__tests__/CopyFieldCell.spec.js +0 -67
  203. package/src/components/widgets/CopyField/__tests__/CopyFieldColumn.spec.js +0 -33
  204. package/src/components/widgets/CopyField/__tests__/CopyFieldSelectableCell.spec.js +0 -49
  205. package/src/components/widgets/CopyField/__tests__/__snapshots__/CopyField.spec.js.snap +0 -279
  206. package/src/components/widgets/CopyField/__tests__/__snapshots__/CopyFieldCell.spec.js.snap +0 -67
  207. package/src/components/widgets/CopyField/__tests__/__snapshots__/CopyFieldColumn.spec.js.snap +0 -42
  208. package/src/components/widgets/CopyField/__tests__/__snapshots__/CopyFieldSelectableCell.spec.js.snap +0 -60
  209. package/src/hooks/useHierarchies.js +0 -112
  210. package/src/selectors/subscopedTemplates.js +0 -16
  211. package/src/templates/components/TemplatesLoader.js +0 -24
  212. package/src/templates/components/__tests__/TemplatesLoader.spec.js +0 -29
@@ -1,270 +0,0 @@
1
- import React, { useState } from "react";
2
- import PropTypes from "prop-types";
3
- import { Button, Icon, Modal } from "semantic-ui-react";
4
- import {
5
- SortableContainer,
6
- SortableElement,
7
- arrayMove,
8
- } from "react-sortable-hoc";
9
- import { useIntl } from "react-intl";
10
- import {
11
- definitionTableStyle,
12
- addColumnStyle,
13
- copyFieldsStyle,
14
- mainContainerStyle,
15
- lastSortableItemStyle,
16
- buttonDisplayFieldsStyle,
17
- } from "./CustomStyles";
18
- import { CopyFieldColumn } from "./CopyFieldColumn";
19
-
20
- export const CopyField = ({
21
- fields: { value: tableContent = [] },
22
- onChange,
23
- }) => {
24
- // eslint-disable-next-line fp/no-let
25
- let scrollLeft = 0;
26
- const errorModalMessage = React.createRef();
27
- const errorMessage = React.createRef();
28
- const { formatMessage } = useIntl();
29
-
30
- const [open, setOpen] = useState(false);
31
- const tableDefs = [
32
- { definition: "Type", fieldType: "type" },
33
- { definition: "Size", fieldType: "size" },
34
- { definition: "Format", fieldType: "format" },
35
- { definition: "Scale", fieldType: "scale" },
36
- { definition: "Precision", fieldType: "precision" },
37
- ].filter((tableDef) =>
38
- tableContent.some((content) => content[tableDef.fieldType])
39
- );
40
-
41
- const onChangeTableContent = (tableContent) => {
42
- const value = tableContent.map(
43
- ({ name, type, size, scale, precision, format }) => {
44
- const tableColumn = { name, type };
45
- if (scale && precision) {
46
- Object.assign(tableColumn, { scale, precision });
47
- }
48
- if (size) {
49
- Object.assign(tableColumn, { size });
50
- }
51
- if (format) {
52
- Object.assign(tableColumn, { format });
53
- }
54
- return tableColumn;
55
- }
56
- );
57
- onFieldInvalid("");
58
- onChange(null, { name: "fields", value });
59
- };
60
-
61
- const addColumn = () => {
62
- onChangeTableContent([
63
- { name: getColumnName(), type: "string", size: 40 },
64
- ...tableContent,
65
- ]);
66
- };
67
-
68
- const getColumnName = () => {
69
- const getIndex = (index = tableContent.length) => {
70
- if (!tableContent.find((column) => column.name === `New${index}`)) {
71
- return index;
72
- }
73
- return getIndex(index + 1);
74
- };
75
- return `New${getIndex()}`;
76
- };
77
-
78
- const onChangeColumn = (colIndex, fieldType, cellValue) => {
79
- if (
80
- fieldType === "name" &&
81
- !!tableContent.find(
82
- (column, idx) => idx !== colIndex && column[fieldType] === cellValue
83
- )
84
- ) {
85
- onFieldInvalid("widget.copy.error.duplicated.field");
86
- return;
87
- }
88
- Object.assign(tableContent[colIndex], { [fieldType]: cellValue });
89
- onChangeTableContent(tableContent);
90
- setTimeout(
91
- () =>
92
- Object.assign(
93
- document.getElementsByClassName("copyFields" + (open ? "1" : "0"))[0],
94
- {
95
- scrollLeft,
96
- }
97
- ),
98
- 0
99
- );
100
- };
101
-
102
- const deleteColumn = (index) => {
103
- tableContent.splice(index, 1);
104
- onChangeTableContent(tableContent);
105
- setTimeout(
106
- () =>
107
- Object.assign(
108
- document.getElementsByClassName("copyFields" + (open ? "1" : "0"))[0],
109
- {
110
- scrollLeft: scrollLeft - 150,
111
- }
112
- ),
113
- 0
114
- );
115
- };
116
-
117
- const SortableItem = SortableElement(({ value }) => (
118
- <CopyFieldColumn
119
- headerName={value["name"]}
120
- row={value}
121
- colIndex={value.index}
122
- isModalOpened={open}
123
- tableDefs={tableDefs}
124
- onFieldInvalid={onFieldInvalid.bind(this)}
125
- onDeleteColumn={deleteColumn.bind(this)}
126
- onChangeColumn={onChangeColumn.bind(this)}
127
- />
128
- ));
129
-
130
- const SortableList = SortableContainer(({ items, containerIdx }) => {
131
- return (
132
- <div
133
- className={"copyFields copyFields" + containerIdx}
134
- onScroll={(e) => {
135
- // eslint-disable-next-line fp/no-mutation
136
- scrollLeft = e.target.scrollLeft;
137
- }}
138
- style={{
139
- ...copyFieldsStyle,
140
- display: items.length ? "inline-flex" : "none",
141
- }}
142
- >
143
- {items.map((value, index) => (
144
- <SortableItem
145
- key={`item-${index}`}
146
- index={index}
147
- value={{ ...value, index }}
148
- />
149
- ))}
150
- <div style={{ ...lastSortableItemStyle }}></div>
151
- </div>
152
- );
153
- });
154
-
155
- const onSortEnd = ({ oldIndex, newIndex }) => {
156
- const newTableContent = arrayMove(tableContent, oldIndex, newIndex);
157
- onChangeTableContent(newTableContent);
158
- Object.assign(
159
- document.getElementsByClassName("copyFields" + (open ? "1" : "0"))[0],
160
- {
161
- scrollLeft,
162
- }
163
- );
164
- };
165
-
166
- const onFieldInvalid = (textMessage) => {
167
- if (open) {
168
- Object.assign(
169
- errorModalMessage.current || {},
170
- textMessage
171
- ? { textContent: formatMessage({ id: textMessage }) }
172
- : { textContent: "" }
173
- );
174
- } else {
175
- Object.assign(
176
- errorMessage.current || {},
177
- textMessage
178
- ? { textContent: formatMessage({ id: textMessage }) }
179
- : { textContent: "" }
180
- );
181
- }
182
- };
183
-
184
- const getModalContent = (containerIdx) => {
185
- return (
186
- <div style={{ ...mainContainerStyle }}>
187
- <div>
188
- <div>
189
- <Button
190
- className="add-column"
191
- icon
192
- size="small"
193
- style={{ ...addColumnStyle }}
194
- onClick={addColumn.bind(this)}
195
- >
196
- <Icon name="plus" />
197
- </Button>
198
- </div>
199
- {tableDefs.map(({ definition }, key) => (
200
- <div key={key} style={{ ...definitionTableStyle }}>
201
- {definition}
202
- </div>
203
- ))}
204
- </div>
205
-
206
- <SortableList
207
- containerIdx={containerIdx}
208
- distance={5}
209
- axis="x"
210
- lockAxis="x"
211
- items={tableContent}
212
- onSortEnd={onSortEnd.bind(this)}
213
- />
214
- </div>
215
- );
216
- };
217
-
218
- return (
219
- <>
220
- <Modal
221
- onClose={() => setOpen(false)}
222
- onOpen={() => setOpen(true)}
223
- open={open}
224
- size="fullscreen"
225
- trigger={
226
- <div style={{ ...buttonDisplayFieldsStyle }}>
227
- <Button
228
- icon="expand"
229
- content={formatMessage({ id: "widget.copy.button.open.fields" })}
230
- labelPosition="left"
231
- onClick={() => {
232
- if (errorMessage.current) {
233
- errorMessage.current.textContent = "";
234
- }
235
- }}
236
- />
237
- </div>
238
- }
239
- >
240
- <Modal.Header>
241
- {formatMessage({ id: "widget.copy.modaltitle" })}
242
- </Modal.Header>
243
- <Modal.Content>
244
- {
245
- <>
246
- {getModalContent("1")}
247
- <div style={{ color: "red" }} ref={errorModalMessage} />
248
- </>
249
- }
250
- </Modal.Content>
251
- <Modal.Actions>
252
- <Button
253
- content={formatMessage({ id: "widget.copy.button.back" })}
254
- secondary
255
- onClick={() => setOpen(false)}
256
- />
257
- </Modal.Actions>
258
- </Modal>
259
- {getModalContent("0")}
260
- <div style={{ color: "red" }} ref={errorMessage} />
261
- </>
262
- );
263
- };
264
-
265
- CopyField.propTypes = {
266
- fields: PropTypes.object,
267
- onChange: PropTypes.func,
268
- };
269
-
270
- export default CopyField;
@@ -1,138 +0,0 @@
1
- import React, { useState } from "react";
2
- import PropTypes from "prop-types";
3
- import { Input, Popup, Button, Icon } from "semantic-ui-react";
4
- import CopyFieldSelectableCell from "./CopyFieldSelectableCell";
5
- import {
6
- cellStyle,
7
- headerCellStyle,
8
- disabledCellStyle,
9
- deleteContainerStyle,
10
- deleteButtonStyle,
11
- cellContentStyle,
12
- } from "./CustomStyles";
13
-
14
- export const CopyFieldCell = ({
15
- field,
16
- colIndex,
17
- value,
18
- isHeader,
19
- isModalOpened,
20
- ...cellCallbacks
21
- }) => {
22
- const { onFieldInvalid, onChangeCell, onDeleteButtonPressed } = cellCallbacks;
23
-
24
- const disabled = !value;
25
- const [isEditable, setIsEditable] = useState(false);
26
- const [cellValue, setCellValue] = useState("");
27
- const currentCellStyle = isHeader
28
- ? { ...cellStyle, ...headerCellStyle }
29
- : disabled
30
- ? { ...cellStyle, ...disabledCellStyle }
31
- : cellStyle;
32
-
33
- const wrongCellCharacters = /[ `!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?~]/;
34
- const onBlurField = (index, field) => {
35
- if (!cellValue) {
36
- setIsEditable(false);
37
- onFieldInvalid("");
38
- return;
39
- }
40
- if (onFieldInvalid) {
41
- if (!isFieldNameValid(index, field)) {
42
- onFieldInvalid("widget.copy.error.wrongname");
43
- return;
44
- }
45
- }
46
- setIsEditable(false);
47
- onFieldInvalid("");
48
- onChangeCell(index, field, cellValue);
49
- };
50
-
51
- const onKeyDownOnField = (index, field, event) => {
52
- if (event.keyCode === 13) {
53
- event.preventDefault();
54
- onBlurField(index, field);
55
- }
56
- };
57
-
58
- const isFieldNameValid = (index, field) => {
59
- return (
60
- field !== "name" ||
61
- (!wrongCellCharacters.test(cellValue) &&
62
- cellValue.length < 250 &&
63
- isNaN(cellValue.substring(0, 1)))
64
- );
65
- };
66
-
67
- const onChangeField = (event) => {
68
- setCellValue(
69
- isNaN(event.target.value) ? event.target.value : +event.target.value
70
- );
71
- };
72
-
73
- const getCellContent = (value) => {
74
- const cellContent = (
75
- <div
76
- className="cellContent"
77
- onClick={() => !disabled && setIsEditable(true)}
78
- style={{ ...cellContentStyle }}
79
- >
80
- {value}
81
- </div>
82
- );
83
- return value && value.length > 10 ? (
84
- <Popup content={value} trigger={cellContent} />
85
- ) : (
86
- cellContent
87
- );
88
- };
89
-
90
- return (
91
- <div style={currentCellStyle}>
92
- {isEditable ? (
93
- <Input
94
- size="mini"
95
- tabIndex="0"
96
- onKeyDown={onKeyDownOnField.bind(this, colIndex, field)}
97
- autoFocus
98
- onChange={(event) => {
99
- event.persist();
100
- onChangeField(event);
101
- }}
102
- onBlur={onBlurField.bind(this, colIndex, field)}
103
- style={{ width: "65%" }}
104
- />
105
- ) : field === "type" ? (
106
- <CopyFieldSelectableCell
107
- index={colIndex}
108
- defaultValue={value}
109
- onChangeCell={onChangeCell}
110
- isModalOpened={isModalOpened}
111
- />
112
- ) : (
113
- getCellContent(value)
114
- )}
115
-
116
- {isHeader && (
117
- <div
118
- style={{ ...deleteContainerStyle }}
119
- onMouseDown={() => onDeleteButtonPressed(colIndex)}
120
- >
121
- <Button style={{ ...deleteButtonStyle }} size="mini" icon>
122
- <Icon name="trash alternate outline" color="red" />
123
- </Button>
124
- </div>
125
- )}
126
- </div>
127
- );
128
- };
129
-
130
- CopyFieldCell.propTypes = {
131
- field: PropTypes.string,
132
- colIndex: PropTypes.number,
133
- value: PropTypes.string,
134
- isHeader: PropTypes.bool,
135
- isModalOpened: PropTypes.bool,
136
- };
137
-
138
- export default CopyFieldCell;
@@ -1,53 +0,0 @@
1
- import React from "react";
2
- import PropTypes from "prop-types";
3
- import { columnStyle } from "./CustomStyles";
4
- import CopyFieldCell from "./CopyFieldCell";
5
-
6
- export const CopyFieldColumn = ({
7
- colIndex,
8
- headerName,
9
- row,
10
- onFieldInvalid,
11
- onDeleteColumn,
12
- onChangeColumn,
13
- tableDefs,
14
- isModalOpened,
15
- }) => {
16
- return (
17
- <div style={{ ...columnStyle, zIndex: isModalOpened ? 1000 : 9 }}>
18
- <CopyFieldCell
19
- field="name"
20
- value={headerName}
21
- colIndex={colIndex}
22
- onFieldInvalid={onFieldInvalid.bind(this)}
23
- onChangeCell={onChangeColumn.bind(this)}
24
- onDeleteButtonPressed={onDeleteColumn.bind(this)}
25
- isHeader
26
- />
27
- {tableDefs.map(({ fieldType }, index) => {
28
- return (
29
- <CopyFieldCell
30
- key={index}
31
- field={fieldType}
32
- value={row[fieldType]}
33
- colIndex={colIndex}
34
- onFieldInvalid={onFieldInvalid.bind(this)}
35
- onChangeCell={onChangeColumn.bind(this)}
36
- isModalOpened={isModalOpened}
37
- />
38
- );
39
- })}
40
- </div>
41
- );
42
- };
43
-
44
- CopyFieldColumn.propTypes = {
45
- colIndex: PropTypes.number,
46
- headerName: PropTypes.string,
47
- row: PropTypes.object,
48
- onFieldInvalid: PropTypes.func,
49
- onDeleteColumn: PropTypes.func,
50
- onChangeColumn: PropTypes.func,
51
- tableDefs: PropTypes.array,
52
- isModalOpened: PropTypes.bool,
53
- };
@@ -1,71 +0,0 @@
1
- import React from "react";
2
- import PropTypes from "prop-types";
3
- import { Dropdown } from "semantic-ui-react";
4
-
5
- export const CopyFieldSelectableCell = ({
6
- index,
7
- defaultValue,
8
- onChangeCell,
9
- isModalOpened
10
- }) => {
11
- const formatOptions = [
12
- { text: "string", value: "string" },
13
- { text: "integer", value: "integer" },
14
- { text: "decimal", value: "decimal" },
15
- { text: "boolean", value: "boolean" },
16
- { text: "date", value: "date", format: "%d-%m-%Y" },
17
- { text: "datetime", value: "datetime", format: "%d-%m-%Y %H:%M:%S" },
18
- { text: "time", value: "time", format: "%H:%M:%S" }
19
- ];
20
-
21
- const onChangeOption = (event, { value }) => {
22
- onChangeCell(index, "type", value);
23
- if (value !== "date" || value !== "datetime" || value !== "time") {
24
- onChangeCell(index, "format", null);
25
- }
26
- if (value !== "decimal") {
27
- onChangeCell(index, "scale", null);
28
- onChangeCell(index, "precision", null);
29
- }
30
- if (value === "decimal") {
31
- onChangeCell(index, "scale", 2);
32
- onChangeCell(index, "precision", 10);
33
- }
34
- if (value === "date" || value === "datetime" || value === "time") {
35
- onChangeCell(
36
- index,
37
- "format",
38
- formatOptions.find(format => format.value === value).format
39
- );
40
- }
41
- };
42
-
43
- return (
44
- <Dropdown
45
- scrolling
46
- pointing="top"
47
- onOpen={() => {
48
- if (!isModalOpened) {
49
- // eslint-disable-next-line fp/no-mutation
50
- document.getElementsByClassName(
51
- "pusher"
52
- )[0].scrollTop = document.getElementsByClassName(
53
- "pusher"
54
- )[0].scrollHeight;
55
- }
56
- }}
57
- options={formatOptions}
58
- defaultValue={defaultValue}
59
- onChange={onChangeOption.bind(this)}
60
- />
61
- );
62
- };
63
-
64
- CopyFieldSelectableCell.propTypes = {
65
- index: PropTypes.number,
66
- defaultValue: PropTypes.string,
67
- onChangeCell: PropTypes.func,
68
- isModalOpened: PropTypes.bool
69
- };
70
-
71
- export default CopyFieldSelectableCell;
@@ -1,91 +0,0 @@
1
- const CustomStyles = {
2
- columnStyle: {
3
- minWidth: "150px",
4
- overflow: "hidden",
5
- clear: "both",
6
- zIndex: 9
7
- },
8
- definitionTableStyle: {
9
- minHeight: "42px",
10
- padding: "10px",
11
- backgroundColor: "#E8E8E8",
12
- color: "rgba(0, 0, 0, 0.6)",
13
- userSelect: "none"
14
- },
15
- addColumnStyle: {
16
- color: "white",
17
- backgroundColor: "#002057",
18
- margin: "4px 20px"
19
- },
20
- copyFieldsStyle: {
21
- minHeight: "300px",
22
- overflowX: "auto"
23
- },
24
- mainContainerStyle: {
25
- display: "inline-flex",
26
- width: "100%"
27
- },
28
- lastSortableItemStyle: {
29
- minWidth: "1px",
30
- height: "1px"
31
- },
32
- buttonDisplayFieldsStyle: {
33
- marginBottom: "20px",
34
- float: "right"
35
- },
36
- headerCellStyle: {
37
- fontWeight: "bold",
38
- backgroundColor: "#E8E8E8"
39
- },
40
- disabledCellStyle: {
41
- backgroundColor: "#F7F7F7",
42
- cursor: "not-allowed"
43
- },
44
- cellStyle: {
45
- backgroundColor: "white",
46
- borderColor: "rgb(232, 232, 232)",
47
- borderStyle: "solid",
48
- borderWidth: "1px",
49
- color: "rgba(0, 0, 0, 0.6)",
50
- position: "relative",
51
- height: "42px",
52
- padding: "4px",
53
- width: "100%",
54
- cursor: "grab",
55
- userSelect: "none"
56
- },
57
- cellContentStyle: {
58
- cursor: "pointer",
59
- float: "left",
60
- padding: "5px",
61
- width: "100px",
62
- whiteSpace: "nowrap",
63
- overflow: "hidden",
64
- textOverflow: "ellipsis"
65
- },
66
- deleteContainerStyle: {
67
- float: "right",
68
- paddingTop: "3px"
69
- },
70
- deleteButtonStyle: {
71
- backgroundColor: "#9F3A38",
72
- color: "white"
73
- }
74
- };
75
-
76
- export const {
77
- columnStyle,
78
- definitionTableStyle,
79
- addColumnStyle,
80
- copyFieldsStyle,
81
- mainContainerStyle,
82
- lastSortableItemStyle,
83
- buttonDisplayFieldsStyle,
84
- headerCellStyle,
85
- disabledCellStyle,
86
- cellStyle,
87
- cellContentStyle,
88
- deleteContainerStyle,
89
- deleteButtonStyle
90
- } = CustomStyles;
91
- export default CustomStyles;
@@ -1,82 +0,0 @@
1
- import _ from "lodash/fp";
2
- import React from "react";
3
- import { mountWithIntl } from "@truedat/test/intl-stub";
4
- import { shallow } from "enzyme";
5
- import { intl } from "@truedat/test/intl-stub";
6
- import { CopyField } from "../CopyField";
7
- import { CopyFieldColumn } from "../CopyFieldColumn";
8
-
9
- jest.spyOn(React, "useContext").mockImplementation(() => intl);
10
-
11
- describe("<CopyField />", () => {
12
- const tableContent = [
13
- { name: "New4", type: "string" },
14
- { name: "New3", type: "string" },
15
- { name: "New2", type: "string" },
16
- { name: "New1", type: "string" },
17
- { name: "New0", type: "string" }
18
- ];
19
- const fields = { value: tableContent };
20
- const onChange = jest.fn();
21
- const props = { fields, onChange };
22
-
23
- it("matches the latest snapshot", () => {
24
- const wrapper = shallow(<CopyField {...props} />);
25
- expect(wrapper).toMatchSnapshot();
26
- });
27
-
28
- it("add new column", () => {
29
- const wrapper = mountWithIntl(<CopyField {...props} />);
30
- wrapper
31
- .find(".add-column")
32
- .at(1)
33
- .simulate("click");
34
- expect(_.get("value")(wrapper.prop("fields")).length).toBe(5);
35
- expect(onChange.mock.calls.length).toBe(1);
36
- expect(onChange).toBeCalledWith(null, {
37
- name: "fields",
38
- value: [
39
- { name: `New${tableContent.length}`, type: "string", size: 40 },
40
- ...tableContent
41
- ]
42
- });
43
- });
44
-
45
- it("delete column", () => {
46
- const wrapper = mountWithIntl(<CopyField {...props} />);
47
- wrapper
48
- .find(CopyFieldColumn)
49
- .at(1)
50
- .props()
51
- .onDeleteColumn();
52
- expect(onChange.mock.calls.length).toBe(2);
53
- expect(onChange).toBeCalledWith(null, {
54
- name: "fields",
55
- value: [
56
- { name: "New3", type: "string" },
57
- { name: "New2", type: "string" },
58
- { name: "New1", type: "string" },
59
- { name: "New0", type: "string" }
60
- ]
61
- });
62
- });
63
-
64
- it("change column", () => {
65
- const wrapper = mountWithIntl(<CopyField {...props} />);
66
- wrapper
67
- .find(CopyFieldColumn)
68
- .at(1)
69
- .props()
70
- .onChangeColumn(1, "name", "New9");
71
- expect(onChange.mock.calls.length).toBe(3);
72
- expect(onChange).toBeCalledWith(null, {
73
- name: "fields",
74
- value: [
75
- { name: "New3", type: "string" },
76
- { name: "New9", type: "string" },
77
- { name: "New1", type: "string" },
78
- { name: "New0", type: "string" }
79
- ]
80
- });
81
- });
82
- });