fuse-importer 0.27.0 → 0.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 (183) hide show
  1. package/lib/esm/Importer/ImporterWithContext.d.ts +2 -0
  2. package/lib/esm/Importer/ImporterWithContext.js +51 -13
  3. package/lib/esm/Importer/Matcher/EnumFieldsMatchers/EnumFieldMatcher/index.js +2 -2
  4. package/lib/esm/Importer/Matcher/EnumFieldsMatchers/index.js +4 -3
  5. package/lib/esm/Importer/Matcher/HeaderMatcher/index.js +14 -9
  6. package/lib/esm/Importer/Matcher/index.js +0 -11
  7. package/lib/esm/Importer/PreviewFirstTime.js +1 -1
  8. package/lib/esm/Importer/Review/AppResponseModal.js +2 -2
  9. package/lib/esm/Importer/Review/ReviewContextProvider.d.ts +8 -6
  10. package/lib/esm/Importer/Review/ReviewContextProvider.js +72 -195
  11. package/lib/esm/Importer/Review/ReviewWithContext.js +2 -2
  12. package/lib/esm/Importer/Stepper/StepperSubmitModal.d.ts +2 -1
  13. package/lib/esm/Importer/Stepper/StepperSubmitModal.js +4 -2
  14. package/lib/esm/Importer/Stepper/UnmatchedHeadersModal.js +1 -1
  15. package/lib/esm/Importer/Stepper/index.js +36 -13
  16. package/lib/esm/Importer/Uploader/DragAndDropImporter/ImporterDropzone.d.ts +2 -1
  17. package/lib/esm/Importer/Uploader/DragAndDropImporter/ImporterDropzone.js +15 -64
  18. package/lib/esm/Importer/Uploader/DragAndDropImporter/ImporterSectionHeader/index.js +2 -2
  19. package/lib/esm/Importer/Uploader/DragAndDropImporter/index.js +11 -3
  20. package/lib/esm/Importer/Uploader/HeadersPreview.js +1 -1
  21. package/lib/esm/Importer/common/Spreadsheet/DataSetContextProvider/index.d.ts +16 -0
  22. package/lib/esm/Importer/common/Spreadsheet/DataSetContextProvider/index.js +63 -0
  23. package/lib/esm/Importer/common/Spreadsheet/DuplicateDataContextProvider/index.d.ts +19 -0
  24. package/lib/esm/Importer/common/Spreadsheet/DuplicateDataContextProvider/index.js +155 -0
  25. package/lib/esm/Importer/common/Spreadsheet/FilteredDataContextProvider/index.d.ts +29 -0
  26. package/lib/esm/Importer/common/Spreadsheet/FilteredDataContextProvider/index.js +150 -0
  27. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/filterMethods.d.ts +6 -4
  28. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/filterMethods.js +38 -45
  29. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/hashCalculators.d.ts +7 -0
  30. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/hashCalculators.js +152 -0
  31. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/index.d.ts +7 -30
  32. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/index.js +10 -141
  33. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useBatchProcessing.d.ts +5 -0
  34. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useBatchProcessing.js +81 -0
  35. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useDataSetManipulation.d.ts +5 -0
  36. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useDataSetManipulation.js +119 -0
  37. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useSpreadsheetFilter.d.ts +1 -1
  38. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/utils.d.ts +1 -0
  39. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/utils.js +8 -0
  40. package/lib/esm/Importer/common/Spreadsheet/ValidationContextProvider/index.d.ts +31 -0
  41. package/lib/esm/Importer/common/Spreadsheet/ValidationContextProvider/index.js +324 -0
  42. package/lib/esm/Importer/common/Spreadsheet/common/index.js +18 -9
  43. package/lib/esm/Importer/common/Spreadsheet/common/types.d.ts +2 -3
  44. package/lib/esm/Importer/common/Spreadsheet/components/FieldHeader.d.ts +0 -2
  45. package/lib/esm/Importer/common/Spreadsheet/components/FieldHeader.js +26 -11
  46. package/lib/esm/Importer/common/Spreadsheet/components/FindAndReplace/index.d.ts +6 -0
  47. package/lib/esm/Importer/common/Spreadsheet/components/FindAndReplace/index.js +88 -0
  48. package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetData.js +25 -17
  49. package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetRowCheckboxes.js +48 -47
  50. package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetRowNumbers.js +3 -3
  51. package/lib/esm/Importer/common/Spreadsheet/components/fields/SpeadsheetAutocomplete.d.ts +1 -0
  52. package/lib/esm/Importer/common/Spreadsheet/components/fields/SpeadsheetAutocomplete.js +7 -3
  53. package/lib/esm/Importer/common/Spreadsheet/components/fields/SpreadsheetInput.d.ts +3 -1
  54. package/lib/esm/Importer/common/Spreadsheet/components/fields/SpreadsheetInput.js +45 -11
  55. package/lib/esm/Importer/common/Spreadsheet/components/fields/index.d.ts +12 -5
  56. package/lib/esm/Importer/common/Spreadsheet/components/fields/index.js +81 -26
  57. package/lib/esm/Importer/common/Spreadsheet/components/fields/utils.d.ts +11 -0
  58. package/lib/esm/Importer/common/Spreadsheet/components/fields/utils.js +29 -0
  59. package/lib/esm/Importer/common/Spreadsheet/components/inputs/index.js +1 -2
  60. package/lib/esm/Importer/common/Spreadsheet/index.d.ts +0 -1
  61. package/lib/esm/Importer/common/Spreadsheet/index.js +1 -84
  62. package/lib/esm/Importer/common/Spreadsheet/styles.d.ts +1 -2
  63. package/lib/esm/Importer/common/Spreadsheet/styles.js +13 -1
  64. package/lib/esm/Importer/common/Spreadsheet/transformation/index.d.ts +2 -2
  65. package/lib/esm/Importer/common/Spreadsheet/transformation/index.js +35 -13
  66. package/lib/esm/Importer/common/Spreadsheet/transformation/transformators/dateTimeAutoformatUtils.d.ts +5 -0
  67. package/lib/esm/Importer/common/Spreadsheet/transformation/transformators/dateTimeAutoformatUtils.js +231 -0
  68. package/lib/esm/Importer/common/Spreadsheet/transformation/transformators/index.d.ts +18 -0
  69. package/lib/esm/Importer/common/Spreadsheet/transformation/transformators/index.js +179 -0
  70. package/lib/esm/Importer/common/Spreadsheet/useFieldSorting.d.ts +5 -0
  71. package/lib/esm/Importer/common/Spreadsheet/useFieldSorting.js +81 -0
  72. package/lib/esm/Importer/common/Spreadsheet/validation/index.d.ts +5 -3
  73. package/lib/esm/Importer/common/Spreadsheet/validation/index.js +13 -17
  74. package/lib/esm/Importer/common/Spreadsheet/validation/validators.d.ts +3 -2
  75. package/lib/esm/Importer/common/Spreadsheet/validation/validators.js +23 -7
  76. package/lib/esm/Importer/common/theme.d.ts +1 -0
  77. package/lib/esm/Importer/contexts/ImporterContextProvider.d.ts +13 -4
  78. package/lib/esm/Importer/contexts/ImporterContextProvider.js +150 -21
  79. package/lib/esm/Importer/data/index.d.ts +7 -3
  80. package/lib/esm/Importer/data/index.js +49 -20
  81. package/lib/esm/Importer/hooks/useExportDataToFile.d.ts +5 -0
  82. package/lib/esm/Importer/hooks/useExportDataToFile.js +54 -0
  83. package/lib/esm/Importer/hooks/useSubmitToServer.d.ts +7 -0
  84. package/lib/esm/Importer/hooks/useSubmitToServer.js +214 -0
  85. package/lib/esm/Importer/index.d.ts +4 -3
  86. package/lib/esm/Importer/index.js +2 -2
  87. package/lib/esm/common/CircleSpinner.d.ts +1 -0
  88. package/lib/esm/common/CircleSpinner.js +13 -0
  89. package/lib/esm/common/ConfirmationModal.js +1 -1
  90. package/lib/esm/common/EventManagerContextProvider/index.d.ts +22 -0
  91. package/lib/esm/common/EventManagerContextProvider/index.js +38 -0
  92. package/lib/esm/common/FileUploadDropzone/ImporterDropzone.d.ts +16 -0
  93. package/lib/esm/common/FileUploadDropzone/ImporterDropzone.js +143 -0
  94. package/lib/esm/common/FileUploadDropzone/index.d.ts +1 -0
  95. package/lib/esm/common/FileUploadDropzone/index.js +1 -0
  96. package/lib/esm/common/Modal.js +2 -2
  97. package/lib/esm/common/Table/TableActions/CustomActions/CustomActions.d.ts +1 -0
  98. package/lib/esm/common/Table/TableActions/CustomActions/CustomActions.js +150 -0
  99. package/lib/esm/common/Table/TableActions/CustomActions/index.d.ts +1 -0
  100. package/lib/esm/common/Table/TableActions/CustomActions/index.js +1 -0
  101. package/lib/esm/common/Table/TableActions/DeleteSelectedRows.js +25 -8
  102. package/lib/esm/common/Table/TableActions/ExportData.js +5 -3
  103. package/lib/esm/common/Table/TableActions/FilterByErrors/FilterByErrors.js +41 -10
  104. package/lib/esm/common/Table/TableActions/RowFilters.js +63 -11
  105. package/lib/esm/common/Table/TableActions/SearchRows.js +28 -17
  106. package/lib/esm/common/Table/TableActions/TableActions.js +15 -4
  107. package/lib/esm/common/Table/TableActions/TableActions.styles.d.ts +1 -0
  108. package/lib/esm/common/Table/TableActions/TableActions.styles.js +4 -3
  109. package/lib/esm/common/Table/TableActions/TransformedRecordsCount.d.ts +6 -0
  110. package/lib/esm/common/Table/TableActions/TransformedRecordsCount.js +71 -0
  111. package/lib/esm/common/Table/TableActions/ValidationProgress.d.ts +2 -0
  112. package/lib/esm/common/Table/TableActions/ValidationProgress.js +22 -0
  113. package/lib/esm/common/Table/TableActions/icons.d.ts +3 -0
  114. package/lib/esm/common/Table/TableActions/icons.js +3 -0
  115. package/lib/esm/common/Table/TableActions/useFindAndReplace.d.ts +5 -0
  116. package/lib/esm/common/Table/TableActions/useFindAndReplace.js +45 -0
  117. package/lib/esm/common/Table/TableView/TableRows/TableRow.d.ts +1 -1
  118. package/lib/esm/common/Table/TableView/TableRows/TableRow.js +3 -3
  119. package/lib/esm/common/Table/TableView/TableRows/index.js +21 -6
  120. package/lib/esm/common/Table/TableView/index.d.ts +1 -1
  121. package/lib/esm/common/Table/TableView/index.js +7 -16
  122. package/lib/esm/common/Table/TableView/types.d.ts +9 -9
  123. package/lib/esm/common/Table/index.d.ts +2 -1
  124. package/lib/esm/common/Table/index.js +2 -2
  125. package/lib/esm/common/Toast.d.ts +42 -3
  126. package/lib/esm/common/Toast.js +56 -18
  127. package/lib/esm/common/TooltipProvider.d.ts +2 -0
  128. package/lib/esm/common/TooltipProvider.js +12 -9
  129. package/lib/esm/common/buttons.d.ts +5 -1
  130. package/lib/esm/common/buttons.js +19 -13
  131. package/lib/esm/common/columnsTransformations.d.ts +1 -0
  132. package/lib/esm/common/columnsTransformations.js +10 -16
  133. package/lib/esm/common/columnsValidations.d.ts +0 -26
  134. package/lib/esm/common/columnsValidations.js +1 -31
  135. package/lib/esm/common/datePatterns.d.ts +26 -0
  136. package/lib/esm/common/datePatterns.js +327 -0
  137. package/lib/esm/common/icons/index.d.ts +4 -0
  138. package/lib/esm/common/icons/index.js +6 -2
  139. package/lib/esm/common/index.d.ts +2 -0
  140. package/lib/esm/common/index.js +2 -0
  141. package/lib/esm/common/inputs/Autocomplete.js +2 -2
  142. package/lib/esm/common/inputs/Checkbox.d.ts +2 -1
  143. package/lib/esm/common/inputs/Checkbox.js +9 -7
  144. package/lib/esm/common/inputs/SelectMenu.d.ts +2 -1
  145. package/lib/esm/common/inputs/SelectMenu.js +14 -3
  146. package/lib/esm/common/inputs/TextInput.js +1 -1
  147. package/lib/esm/index.d.ts +3 -1
  148. package/lib/esm/index.js +9 -2
  149. package/lib/esm/locales/de.d.ts +13 -1
  150. package/lib/esm/locales/de.js +14 -2
  151. package/lib/esm/locales/en.d.ts +26 -1
  152. package/lib/esm/locales/en.js +30 -5
  153. package/lib/esm/locales/es.d.ts +13 -1
  154. package/lib/esm/locales/es.js +14 -2
  155. package/lib/esm/locales/fr.d.ts +13 -1
  156. package/lib/esm/locales/fr.js +14 -2
  157. package/lib/esm/styled/theme/colorPalette.d.ts +2 -0
  158. package/lib/esm/styled/theme/colorPalette.js +1 -0
  159. package/lib/esm/styled/theme/index.d.ts +1 -0
  160. package/lib/esm/styled/theme/textCss.js +1 -1
  161. package/lib/esm/types.d.ts +48 -5
  162. package/lib/esm/types.js +0 -1
  163. package/lib/esm/utils/index.d.ts +1 -0
  164. package/lib/esm/utils/index.js +4 -0
  165. package/lib/main.js +24 -24
  166. package/lib/main.js.LICENSE.txt +2 -0
  167. package/package.json +8 -6
  168. package/lib/esm/Importer/Stepper/common/getEnumFieldValueMatchingsInitialValue.d.ts +0 -8
  169. package/lib/esm/Importer/Stepper/common/getEnumFieldValueMatchingsInitialValue.js +0 -33
  170. package/lib/esm/Importer/common/Spreadsheet/components/ValidationProgress.d.ts +0 -5
  171. package/lib/esm/Importer/common/Spreadsheet/components/ValidationProgress.js +0 -19
  172. package/lib/esm/Importer/common/Spreadsheet/components/inputs/EmailInput.d.ts +0 -3
  173. package/lib/esm/Importer/common/Spreadsheet/components/inputs/EmailInput.js +0 -14
  174. package/lib/esm/Importer/common/Spreadsheet/hooks.d.ts +0 -34
  175. package/lib/esm/Importer/common/Spreadsheet/hooks.js +0 -254
  176. package/lib/esm/Importer/common/Spreadsheet/transformation/transformators.d.ts +0 -8
  177. package/lib/esm/Importer/common/Spreadsheet/transformation/transformators.js +0 -106
  178. package/lib/esm/common/Table/TableActions/FilterByErrors/functions.d.ts +0 -11
  179. package/lib/esm/common/Table/TableActions/FilterByErrors/functions.js +0 -35
  180. package/lib/esm/common/Table/TableActions/hooks.d.ts +0 -18
  181. package/lib/esm/common/Table/TableActions/hooks.js +0 -41
  182. package/lib/esm/common/Table/TableView/CustomScrollbar.d.ts +0 -2
  183. package/lib/esm/common/Table/TableView/CustomScrollbar.js +0 -34
@@ -55,19 +55,14 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
55
55
  return to.concat(ar || Array.prototype.slice.call(from));
56
56
  };
57
57
  import { jsx as _jsx } from "react/jsx-runtime";
58
- import Fuse from "fuse.js";
59
58
  import { createContext, useContext, useEffect, useMemo, useRef, useState, } from "react";
60
59
  import { FieldTypes, } from "../../types";
61
60
  import { FuseApi } from "../common/FuseApi";
62
61
  import { getCustomTheme, theme } from "../common/theme";
63
62
  import { getColumnType, verifyDuplicateValue } from "../common/utils";
64
- export var fusejsOptions = {
65
- includeScore: true,
66
- threshold: 0.35,
67
- };
68
63
  var ImporterContext = createContext({});
69
64
  export var ImporterContextProvider = function (_a) {
70
- var templateSlug = _a.templateSlug, initialRecords = _a.initialRecords, apiToken = _a.apiToken, children = _a.children, options = _a.options, onSubmit = _a.onSubmit, onClose = _a.onClose, formatRecord = _a.formatRecord, onValidateRecord = _a.onValidateRecord, dynamicColumns = _a.dynamicColumns;
65
+ var templateSlug = _a.templateSlug, initialRecords = _a.initialRecords, apiToken = _a.apiToken, children = _a.children, options = _a.options, onSubmit = _a.onSubmit, onClose = _a.onClose, formatRecord = _a.formatRecord, onValidateRecord = _a.onValidateRecord, dynamicColumns = _a.dynamicColumns, customActions = _a.customActions;
71
66
  var _b = useState(initialRecords ? 2 : 0), currentStepIndex = _b[0], setCurrentStepIndex = _b[1];
72
67
  var _c = useState(0), matcherSubstep = _c[0], setMatcherSubstep = _c[1];
73
68
  var _d = useState(null), templateError = _d[0], setTemplateError = _d[1];
@@ -76,20 +71,51 @@ export var ImporterContextProvider = function (_a) {
76
71
  var _g = useState(null), uploadedData = _g[0], setUploadedData = _g[1];
77
72
  var _h = useState(null), organization = _h[0], setOrganization = _h[1];
78
73
  var _j = useState(null), previewFirstTime = _j[0], setPreviewFirstTime = _j[1];
79
- var _k = useState({
74
+ var _k = useState(null), headersMappings = _k[0], setHeadersMappings = _k[1];
75
+ var _l = useState({
80
76
  theme: theme,
81
77
  logoURL: null,
82
- }), style = _k[0], setStyle = _k[1];
83
- var _l = useState(null), templateHeaderMatchings = _l[0], setTemplateHeaderMatchings = _l[1];
84
- var _m = useState(null), enumFieldValueMatchings = _m[0], setEnumFieldValueMatchings = _m[1];
85
- var _o = useState(null), uploadedDataEnumFieldValues = _o[0], setUploadedDataEnumFieldValues = _o[1];
86
- var _p = useState([]), selectedRows = _p[0], setSelectedRows = _p[1];
78
+ }), style = _l[0], setStyle = _l[1];
79
+ var _m = useState(null), templateHeaderMatchings = _m[0], setTemplateHeaderMatchings = _m[1];
80
+ var _o = useState({}), enumFieldValueMatchings = _o[0], setEnumFieldValueMatchings = _o[1];
81
+ var _p = useState(null), uploadedDataEnumFieldValues = _p[0], setUploadedDataEnumFieldValues = _p[1];
82
+ var _q = useState([]), selectedRows = _q[0], setSelectedRows = _q[1];
87
83
  var isUsingManualImport = useRef(false);
88
- var _q = useState(0), headerRowIndex = _q[0], setHeaderRowIndex = _q[1];
84
+ var _r = useState(0), headerRowIndex = _r[0], setHeaderRowIndex = _r[1];
85
+ var _s = useState(false), headerMappingsLoaded = _s[0], setHeaderMappingsLoaded = _s[1];
86
+ var _t = useState(false), valueMappingsLoaded = _t[0], setValueMappingsLoaded = _t[1];
89
87
  var fuseApi = useMemo(function () { return new FuseApi(options.env, apiToken); }, [
90
88
  options.env,
91
89
  apiToken,
92
90
  ]);
91
+ var fetchColumnMappings = function (userDynamicColumns) { return __awaiter(void 0, void 0, void 0, function () {
92
+ var mappings;
93
+ return __generator(this, function (_a) {
94
+ switch (_a.label) {
95
+ case 0: return [4 /*yield*/, fuseApi.post("/api/v1/importer/templates/".concat(templateSlug, "/column_mappings"), {
96
+ file_headers: uploadedDataHeaders,
97
+ dynamic_columns: userDynamicColumns,
98
+ })];
99
+ case 1:
100
+ mappings = (_a.sent()).data.mappings;
101
+ return [2 /*return*/, mappings];
102
+ }
103
+ });
104
+ }); };
105
+ var fetchValueMappings = function (_uploadedDataEnumFieldValues, userDynamicValues) { return __awaiter(void 0, void 0, void 0, function () {
106
+ var mappings;
107
+ return __generator(this, function (_a) {
108
+ switch (_a.label) {
109
+ case 0: return [4 /*yield*/, fuseApi.post("/api/v1/importer/templates/".concat(templateSlug, "/value_mappings"), {
110
+ file_values: _uploadedDataEnumFieldValues,
111
+ dynamic_values: userDynamicValues,
112
+ })];
113
+ case 1:
114
+ mappings = (_a.sent()).data.mappings;
115
+ return [2 /*return*/, mappings];
116
+ }
117
+ });
118
+ }); };
93
119
  var uploadedDataHeaders = useMemo(function () {
94
120
  var _a;
95
121
  if (!uploadedData)
@@ -104,23 +130,109 @@ export var ImporterContextProvider = function (_a) {
104
130
  return typeof ud === "number" ? ud.toString() : ud;
105
131
  });
106
132
  }, [uploadedData, headerRowIndex]);
133
+ var userDynamicColumns = dynamicColumns.map(function (value) { return value.label; });
134
+ // use the API to match selected headers to the template
135
+ var loadHeaderMappings = function () { return __awaiter(void 0, void 0, void 0, function () {
136
+ var mappings, e_1;
137
+ return __generator(this, function (_a) {
138
+ switch (_a.label) {
139
+ case 0:
140
+ setHeaderMappingsLoaded(false);
141
+ _a.label = 1;
142
+ case 1:
143
+ _a.trys.push([1, 3, , 4]);
144
+ return [4 /*yield*/, fetchColumnMappings(userDynamicColumns)];
145
+ case 2:
146
+ mappings = _a.sent();
147
+ setHeadersMappings(mappings);
148
+ return [3 /*break*/, 4];
149
+ case 3:
150
+ e_1 = _a.sent();
151
+ setHeadersMappings([]);
152
+ console.error("Error occurred while fetching header mappings", e_1);
153
+ return [3 /*break*/, 4];
154
+ case 4:
155
+ setHeaderMappingsLoaded(true);
156
+ return [2 /*return*/];
157
+ }
158
+ });
159
+ }); };
160
+ useEffect(function () {
161
+ (function () { return __awaiter(void 0, void 0, void 0, function () {
162
+ return __generator(this, function (_a) {
163
+ if (uploadedDataHeaders) {
164
+ loadHeaderMappings();
165
+ }
166
+ return [2 /*return*/];
167
+ });
168
+ }); })();
169
+ }, [uploadedDataHeaders]);
170
+ // Values mappings for enum columns
171
+ var loadValueMappings = function (_uploadedDataEnumFieldValues) { return __awaiter(void 0, void 0, void 0, function () {
172
+ var dynamicValues, mappings, e_2;
173
+ return __generator(this, function (_a) {
174
+ switch (_a.label) {
175
+ case 0:
176
+ setValueMappingsLoaded(false);
177
+ if (!(!!_uploadedDataEnumFieldValues &&
178
+ Object.keys(_uploadedDataEnumFieldValues).length > 0)) return [3 /*break*/, 4];
179
+ _a.label = 1;
180
+ case 1:
181
+ _a.trys.push([1, 3, , 4]);
182
+ dynamicValues = userDynamicColumns.reduce(function (acc, column) {
183
+ var _a;
184
+ var values = (_a = templateHeaders.find(function (header) { return header.label === column; })) === null || _a === void 0 ? void 0 : _a.values;
185
+ if (values) {
186
+ acc[column] = values;
187
+ }
188
+ return acc;
189
+ }, {});
190
+ return [4 /*yield*/, fetchValueMappings(_uploadedDataEnumFieldValues, dynamicValues)];
191
+ case 2:
192
+ mappings = _a.sent();
193
+ setEnumFieldValueMatchings(mappings);
194
+ return [3 /*break*/, 4];
195
+ case 3:
196
+ e_2 = _a.sent();
197
+ setEnumFieldValueMatchings({});
198
+ console.error("Error occurred while fetching value mappings", e_2);
199
+ return [3 /*break*/, 4];
200
+ case 4:
201
+ setValueMappingsLoaded(true);
202
+ return [2 /*return*/];
203
+ }
204
+ });
205
+ }); };
107
206
  useEffect(function () {
108
207
  var setHeadersFromDataset = function () {
109
208
  var _templateHeaderMatchings = {};
110
- var fuse = new Fuse(uploadedDataHeaders, fusejsOptions);
111
209
  templateHeaders.forEach(function (templateHeader, _index) {
112
- var _a;
113
- var fuseResults = fuse.search(templateHeader.label);
114
- _templateHeaderMatchings[templateHeader.label] = (_a = fuseResults[0]) === null || _a === void 0 ? void 0 : _a.item;
210
+ var mappedHeader = headersMappings.find(function (headerMapping) {
211
+ var matchedColumn = Object.values(headerMapping)[0];
212
+ if (matchedColumn) {
213
+ return (matchedColumn.toLowerCase() === templateHeader.label.toLowerCase());
214
+ }
215
+ else {
216
+ return false;
217
+ }
218
+ });
219
+ if (mappedHeader) {
220
+ _templateHeaderMatchings[templateHeader.label] = Object.keys(mappedHeader)[0];
221
+ }
222
+ else {
223
+ _templateHeaderMatchings[templateHeader.label] = null;
224
+ }
115
225
  });
116
226
  setTemplateHeaderMatchings(_templateHeaderMatchings);
117
227
  };
118
- if (uploadedDataHeaders) {
228
+ if (uploadedDataHeaders && headersMappings) {
119
229
  setHeadersFromDataset();
120
230
  }
121
- }, [uploadedDataHeaders]);
231
+ }, [uploadedDataHeaders, headersMappings]);
122
232
  useEffect(function () {
123
- if (!templateHeaderMatchings || !uploadedDataHeaders)
233
+ if (!templateHeaderMatchings ||
234
+ !uploadedDataHeaders ||
235
+ !headerMappingsLoaded)
124
236
  return;
125
237
  var _uploadedDataEnumFieldValues = {};
126
238
  var templateLabels = Object.keys(templateHeaderMatchings);
@@ -142,7 +254,13 @@ export var ImporterContextProvider = function (_a) {
142
254
  });
143
255
  });
144
256
  setUploadedDataEnumFieldValues(_uploadedDataEnumFieldValues);
145
- }, [templateHeaderMatchings, uploadedDataHeaders]);
257
+ var valueLimitPerEnumField = Math.ceil(40 / enumFieldsLabels.length);
258
+ var enumFieldsLabelsLimited = {};
259
+ Object.keys(_uploadedDataEnumFieldValues).forEach(function (key) {
260
+ enumFieldsLabelsLimited[key] = _uploadedDataEnumFieldValues[key].slice(0, valueLimitPerEnumField);
261
+ });
262
+ loadValueMappings(enumFieldsLabelsLimited);
263
+ }, [headerMappingsLoaded, matcherSubstep]);
146
264
  useEffect(function () {
147
265
  (function () { return __awaiter(void 0, void 0, void 0, function () {
148
266
  var _a, organization_1, columns_1, importer_style_preferences, integrations_1, preview_first_time, error_1, errorMsg;
@@ -188,6 +306,11 @@ export var ImporterContextProvider = function (_a) {
188
306
  var resetImport = function () {
189
307
  setUploadedData(null);
190
308
  setTemplateHeaderMatchings(null);
309
+ setHeadersMappings(null);
310
+ setEnumFieldValueMatchings({});
311
+ setUploadedDataEnumFieldValues(null);
312
+ setSelectedRows([]);
313
+ setHeaderRowIndex(0);
191
314
  };
192
315
  var resetImporterWhenUsingManualImport = function () {
193
316
  setCurrentStepIndex(0);
@@ -207,6 +330,7 @@ export var ImporterContextProvider = function (_a) {
207
330
  initialRecords: initialRecords,
208
331
  currentStepIndex: currentStepIndex,
209
332
  templateHeaders: templateHeaders,
333
+ userDynamicColumns: userDynamicColumns,
210
334
  enumFieldValueMatchings: enumFieldValueMatchings,
211
335
  templateHeaderMatchings: templateHeaderMatchings,
212
336
  uploadedDataEnumFieldValues: uploadedDataEnumFieldValues,
@@ -226,6 +350,7 @@ export var ImporterContextProvider = function (_a) {
226
350
  headerRowIndex: headerRowIndex,
227
351
  setHeaderRowIndex: setHeaderRowIndex,
228
352
  setUploadedData: setUploadedData,
353
+ setHeadersMappings: setHeadersMappings,
229
354
  formatRecord: formatRecord,
230
355
  setCurrentStepIndex: setCurrentStepIndex,
231
356
  setEnumFieldValueMatchings: setEnumFieldValueMatchings,
@@ -241,6 +366,10 @@ export var ImporterContextProvider = function (_a) {
241
366
  isUsingManualImport: isUsingManualImport,
242
367
  resetImporterWhenUsingManualImport: resetImporterWhenUsingManualImport,
243
368
  manualDataImportSelected: manualDataImportSelected,
369
+ customActions: customActions,
370
+ headerMappingsLoaded: headerMappingsLoaded,
371
+ valueMappingsLoaded: valueMappingsLoaded,
372
+ headersMappings: headersMappings,
244
373
  };
245
374
  return (_jsx(ImporterContext.Provider, __assign({ value: value }, { children: children })));
246
375
  };
@@ -1,4 +1,4 @@
1
- import { Field, FieldTypes, FormatRecord, Record, RecordDataSet, TemplateHeader } from "../../types";
1
+ import { Field, FieldTypes, FormatRecord, Record, RecordDataSet, TemplateHeader, TransformedRecord } from "../../types";
2
2
  import { EnumFieldValueMatchings, HeaderMatchings } from "../contexts/ImporterContextProvider";
3
3
  export declare const addEmptyRows: (data: Record[], fields: Field[]) => (Record | {
4
4
  _meta: {
@@ -6,8 +6,11 @@ export declare const addEmptyRows: (data: Record[], fields: Field[]) => (Record
6
6
  rowIndex: number;
7
7
  };
8
8
  })[];
9
- export declare const addMeta: (record: any, index: number, uploadedRow?: any) => Record;
10
- export declare const recordListToDataSet: (data: Record[], fields: Field[]) => RecordDataSet;
9
+ export declare const addMeta: (record: any, index: number, uploadedRow?: any, transformedRow?: TransformedRecord) => Record;
10
+ export declare const recordListToDataSet: (data: Record[], fields: Field[], withTransformations?: boolean) => {
11
+ isDatasetTransformed: boolean;
12
+ dataSet: RecordDataSet;
13
+ };
11
14
  type transformToRecordsArgs = {
12
15
  templateHeaderMatchings: HeaderMatchings;
13
16
  enumFieldValueMatchings: EnumFieldValueMatchings;
@@ -45,6 +48,7 @@ type GetReviewDataSetArgs = {
45
48
  fields: Field[];
46
49
  };
47
50
  export declare const getReviewDataSet: ({ records, fields }: GetReviewDataSetArgs) => {
51
+ isDatasetTransformed: boolean;
48
52
  initialDataSet: {
49
53
  [x: string]: Record;
50
54
  };
@@ -23,8 +23,7 @@ import { FieldTypes, } from "../../types";
23
23
  import { parseValue } from "../common/Spreadsheet/common";
24
24
  var MINIMUM_ROW_COUNT = 20;
25
25
  var getRowId = function (index) {
26
- var uniqueTimestamp = new Date().getTime();
27
- return "r".concat(index, "-").concat(uniqueTimestamp);
26
+ return index.toString();
28
27
  };
29
28
  export var addEmptyRows = function (data, fields) {
30
29
  var emptyRecord = fields.reduce(function (obj, f) {
@@ -37,23 +36,51 @@ export var addEmptyRows = function (data, fields) {
37
36
  } })); });
38
37
  return __spreadArray(__spreadArray([], data, true), newData, true);
39
38
  };
40
- export var addMeta = function (record, index, uploadedRow) {
39
+ export var addMeta = function (record, index, uploadedRow, transformedRow) {
41
40
  var _a;
42
41
  if (uploadedRow === void 0) { uploadedRow = null; }
42
+ if (transformedRow === void 0) { transformedRow = {}; }
43
43
  var rId = getRowId(index);
44
44
  var meta = (_a = record._meta) !== null && _a !== void 0 ? _a : {};
45
- return __assign(__assign({}, record), { _meta: __assign(__assign({}, meta), { id: rId, rowIndex: index, touched: false, uploadedRow: uploadedRow }) });
45
+ return __assign(__assign({}, record), { _meta: __assign(__assign({}, meta), { id: rId, rowIndex: index, uploadedRow: uploadedRow, transformedRow: transformedRow }) });
46
46
  };
47
- export var recordListToDataSet = function (data, fields) {
47
+ export var recordListToDataSet = function (data, fields, withTransformations) {
48
+ if (withTransformations === void 0) { withTransformations = true; }
49
+ var fieldWithTransformations = fields.filter(function (field) { var _a; return ((_a = field === null || field === void 0 ? void 0 : field.transformations) === null || _a === void 0 ? void 0 : _a.length) > 0; });
48
50
  var initialData = data;
49
51
  if (data.length < MINIMUM_ROW_COUNT) {
50
52
  initialData = addEmptyRows(data, fields);
51
53
  }
52
- return initialData.reduce(function (dataSet, record, i) {
53
- var recordWithMeta = addMeta(record, i);
54
+ var isDatasetTransformed = false;
55
+ var res = initialData.reduce(function (dataSet, record, i) {
56
+ var transformedRecord = {};
57
+ if (withTransformations && fieldWithTransformations.length > 0) {
58
+ transformedRecord = transformRecord({
59
+ record: record,
60
+ fields: fieldWithTransformations,
61
+ });
62
+ }
63
+ if (JSON.stringify(transformedRecord) !== "{}")
64
+ isDatasetTransformed = true;
65
+ var recordWithMeta = addMeta(record, i, undefined, transformedRecord);
54
66
  dataSet[recordWithMeta._meta.id] = recordWithMeta;
55
67
  return dataSet;
56
68
  }, {});
69
+ return { isDatasetTransformed: isDatasetTransformed, dataSet: res };
70
+ };
71
+ var compareFormattedRecord = function (originalRecord, formattedRecord) {
72
+ var comparisonResult = {};
73
+ for (var key in formattedRecord) {
74
+ if (formattedRecord.hasOwnProperty(key)) {
75
+ if (formattedRecord[key] !== originalRecord[key]) {
76
+ comparisonResult[key] = {
77
+ original: originalRecord[key],
78
+ transformed: formattedRecord[key],
79
+ };
80
+ }
81
+ }
82
+ }
83
+ return comparisonResult;
57
84
  };
58
85
  export var transformToRecords = function (_a) {
59
86
  var templateHeaderMatchings = _a.templateHeaderMatchings, enumFieldValueMatchings = _a.enumFieldValueMatchings, templateHeaders = _a.templateHeaders, uploadedDataHeaders = _a.uploadedDataHeaders, uploadedData = _a.uploadedData, formatRecord = _a.formatRecord;
@@ -83,14 +110,21 @@ export var transformToRecords = function (_a) {
83
110
  return;
84
111
  record[key] = parseValue(FieldTypes[header.column_type], value, enumSet);
85
112
  });
86
- return formatRecord ? formatRecord(record) : record;
113
+ if (formatRecord) {
114
+ var formattedRecord = formatRecord(record);
115
+ var comparisonResult = compareFormattedRecord(record, formattedRecord);
116
+ record._meta.transformedRow = comparisonResult;
117
+ return formattedRecord;
118
+ }
119
+ return record;
87
120
  };
88
121
  return uploadedData.map(getRecord);
89
122
  };
90
123
  export var getPreviewDataSet = function (_a) {
91
124
  var uploadedData = _a.uploadedData;
92
125
  var rowLen = 0;
93
- for (var i = 0; i < uploadedData.length; i++)
126
+ var previewSize = Math.min(100, uploadedData.length);
127
+ for (var i = 0; i < previewSize; i++)
94
128
  rowLen = Math.max(rowLen, uploadedData[i].length);
95
129
  var fields = new Array(rowLen).fill(null).map(function (_, i) {
96
130
  var key = String.fromCharCode(65 + i);
@@ -102,14 +136,16 @@ export var getPreviewDataSet = function (_a) {
102
136
  };
103
137
  });
104
138
  var getInitialDataSet = function () {
105
- var data = uploadedData.map(function (row, index) {
139
+ var data = uploadedData
140
+ .slice(0, previewSize)
141
+ .map(function (row, index) {
106
142
  var entry = addMeta({}, index);
107
143
  fields.forEach(function (field, index) {
108
144
  entry[field.name] = row[index];
109
145
  });
110
146
  return entry;
111
147
  });
112
- return recordListToDataSet(data, fields);
148
+ return recordListToDataSet(data, fields).dataSet;
113
149
  };
114
150
  return { fields: fields, initialDataSet: getInitialDataSet() };
115
151
  };
@@ -129,14 +165,7 @@ export var getTemplateFields = function (_a) {
129
165
  export var getReviewDataSet = function (_a) {
130
166
  var _b;
131
167
  var records = _a.records, fields = _a.fields;
132
- for (var _i = 0, records_1 = records; _i < records_1.length; _i++) {
133
- var record = records_1[_i];
134
- transformRecord({
135
- record: record,
136
- fields: fields,
137
- });
138
- }
139
- var baseInitialDataSet = recordListToDataSet(addEmptyRows(records, fields), fields);
168
+ var _c = recordListToDataSet(addEmptyRows(records, fields), fields), isDatasetTransformed = _c.isDatasetTransformed, baseInitialDataSet = _c.dataSet;
140
169
  var highestRowIndex = 0;
141
170
  Object.keys(baseInitialDataSet).forEach(function (key) {
142
171
  var record = baseInitialDataSet[key];
@@ -146,5 +175,5 @@ export var getReviewDataSet = function (_a) {
146
175
  });
147
176
  var emptyRowAtBottom = addMeta({}, highestRowIndex + 1);
148
177
  var initialDataSet = __assign(__assign({}, baseInitialDataSet), (_b = {}, _b[emptyRowAtBottom._meta.id] = emptyRowAtBottom, _b));
149
- return { initialDataSet: initialDataSet };
178
+ return { isDatasetTransformed: isDatasetTransformed, initialDataSet: initialDataSet };
150
179
  };
@@ -0,0 +1,5 @@
1
+ import { RecordDataSet } from "../../types";
2
+ import { ExportDataType } from "../Review/ReviewContextProvider";
3
+ export declare const useExportDataToFile: () => {
4
+ onExport: (dataSet: RecordDataSet, dataType: ExportDataType) => void;
5
+ };
@@ -0,0 +1,54 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { useCallback } from "react";
13
+ import Papa from "papaparse";
14
+ import { useImporterContext } from "../contexts/ImporterContextProvider";
15
+ function downloadCsv(data, fileName) {
16
+ var blob = new Blob([data], { type: "text/csv;charset=utf-8;" });
17
+ var link = document.createElement("a");
18
+ link.href = URL.createObjectURL(blob);
19
+ link.download = fileName;
20
+ document.body.appendChild(link);
21
+ link.click();
22
+ document.body.removeChild(link);
23
+ }
24
+ function csvExport(data) {
25
+ var valuesWithQuotesWhenNecessary = data.map(function (obj) {
26
+ var newObj = {};
27
+ for (var key in obj) {
28
+ var value = obj[key];
29
+ newObj[key] =
30
+ typeof value === "string" && value.includes(",") ? "\"".concat(value, "\"") : value;
31
+ }
32
+ return newObj;
33
+ });
34
+ var csv = Papa.unparse(valuesWithQuotesWhenNecessary);
35
+ downloadCsv(csv, "export.csv");
36
+ }
37
+ export var useExportDataToFile = function () {
38
+ var selectedRows = useImporterContext().selectedRows;
39
+ var onExport = useCallback(function (dataSet, dataType) {
40
+ if (!dataSet)
41
+ return;
42
+ var dataSetValues = Object.values(dataSet);
43
+ if (dataType === "csv") {
44
+ var valuesWithoutMeta = dataSetValues.map(function (_a) {
45
+ var _meta = _a._meta, rest = __rest(_a, ["_meta"]);
46
+ return rest;
47
+ });
48
+ csvExport(valuesWithoutMeta);
49
+ }
50
+ }, [selectedRows]);
51
+ return {
52
+ onExport: onExport,
53
+ };
54
+ };
@@ -0,0 +1,7 @@
1
+ import { AppResponse, RecordDataSet } from "../../types";
2
+ export declare const useSubmitToServer: (setHasTransformedRecords: any) => {
3
+ appResponse: AppResponse;
4
+ isSubmitting: boolean;
5
+ onSubmitToServer: (dataSet: RecordDataSet, afterSubmitCallback: (dataSet: RecordDataSet) => void) => Promise<void>;
6
+ importWasSuccessful: boolean;
7
+ };