fuse-importer 0.23.8 → 0.24.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 (152) hide show
  1. package/README.md +19 -19
  2. package/lib/esm/Importer/ImporterWithContext.d.ts +7 -0
  3. package/lib/esm/Importer/ImporterWithContext.js +69 -0
  4. package/lib/esm/Importer/Matcher/EnumFieldsMatchers/EnumFieldMatcher/index.js +4 -4
  5. package/lib/esm/Importer/Matcher/EnumFieldsMatchers/EnumFieldMatcher/tableColumns.js +1 -1
  6. package/lib/esm/Importer/Matcher/EnumFieldsMatchers/index.js +2 -2
  7. package/lib/esm/Importer/Matcher/HeaderMatcher/index.js +2 -3
  8. package/lib/esm/Importer/Matcher/HeaderMatcher/tableColumns.js +1 -1
  9. package/lib/esm/Importer/Matcher/index.d.ts +3 -3
  10. package/lib/esm/Importer/Matcher/index.js +4 -3
  11. package/lib/esm/Importer/PreviewFirstTime.d.ts +2 -0
  12. package/lib/esm/Importer/PreviewFirstTime.js +80 -0
  13. package/lib/esm/Importer/PreviewModeBanner.js +3 -6
  14. package/lib/esm/Importer/Review/AppResponseModal.js +3 -3
  15. package/lib/esm/Importer/Review/ReviewContextProvider.d.ts +27 -0
  16. package/lib/esm/Importer/Review/ReviewContextProvider.js +234 -0
  17. package/lib/esm/Importer/Review/ReviewWithContext.d.ts +3 -0
  18. package/lib/esm/Importer/Review/ReviewWithContext.js +23 -0
  19. package/lib/esm/Importer/Review/index.d.ts +3 -3
  20. package/lib/esm/Importer/Review/index.js +4 -92
  21. package/lib/esm/Importer/Stepper/Step.d.ts +7 -0
  22. package/lib/esm/Importer/Stepper/Step.js +19 -0
  23. package/lib/esm/Importer/Stepper/StepIndex.d.ts +6 -0
  24. package/lib/esm/Importer/Stepper/StepIndex.js +27 -0
  25. package/lib/esm/Importer/Stepper/StepperSubmitModal.d.ts +8 -0
  26. package/lib/esm/Importer/Stepper/StepperSubmitModal.js +22 -0
  27. package/lib/esm/Importer/Stepper/UnmatchedHeadersModal.d.ts +9 -0
  28. package/lib/esm/Importer/Stepper/UnmatchedHeadersModal.js +23 -0
  29. package/lib/esm/Importer/Stepper/common/getEnumFieldValueMatchingsInitialValue.d.ts +8 -0
  30. package/lib/esm/Importer/Stepper/common/getEnumFieldValueMatchingsInitialValue.js +33 -0
  31. package/lib/esm/Importer/Stepper/common/icons.d.ts +3 -0
  32. package/lib/esm/Importer/Stepper/common/icons.js +18 -0
  33. package/lib/esm/Importer/{Stepper.d.ts → Stepper/index.d.ts} +2 -2
  34. package/lib/esm/Importer/Stepper/index.js +97 -0
  35. package/lib/esm/Importer/TrialModeBanner.js +3 -4
  36. package/lib/esm/Importer/Uploader/DragAndDropImporter/ImporterDropzone.js +1 -1
  37. package/lib/esm/Importer/Uploader/DragAndDropImporter/index.js +4 -4
  38. package/lib/esm/Importer/Uploader/HeaderButtons.d.ts +2 -0
  39. package/lib/esm/Importer/Uploader/HeaderButtons.js +29 -0
  40. package/lib/esm/Importer/Uploader/HeadersPreview.js +6 -64
  41. package/lib/esm/Importer/Uploader/UploaderContextProvider.d.ts +2 -2
  42. package/lib/esm/Importer/Uploader/index.d.ts +3 -3
  43. package/lib/esm/Importer/Uploader/index.js +6 -6
  44. package/lib/esm/Importer/common/AppLoading.js +2 -2
  45. package/lib/esm/Importer/{Footer.d.ts → common/Footer.d.ts} +0 -0
  46. package/lib/esm/Importer/common/Footer.js +17 -0
  47. package/lib/esm/Importer/{FuseApi.d.ts → common/FuseApi.d.ts} +1 -1
  48. package/lib/esm/Importer/{FuseApi.js → common/FuseApi.js} +2 -2
  49. package/lib/esm/Importer/{GlobalStyle.d.ts → common/GlobalStyle.d.ts} +0 -0
  50. package/lib/esm/Importer/common/GlobalStyle.js +7 -0
  51. package/lib/esm/Importer/{ImporterFonts.d.ts → common/ImporterFonts.d.ts} +0 -0
  52. package/lib/esm/Importer/{ImporterFonts.js → common/ImporterFonts.js} +0 -0
  53. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider.d.ts +13 -26
  54. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider.js +51 -286
  55. package/lib/esm/Importer/common/Spreadsheet/common/index.d.ts +8 -15
  56. package/lib/esm/Importer/common/Spreadsheet/common/index.js +31 -101
  57. package/lib/esm/Importer/common/Spreadsheet/{common → components}/FieldHeader.d.ts +0 -0
  58. package/lib/esm/Importer/common/Spreadsheet/{common → components}/FieldHeader.js +1 -1
  59. package/lib/esm/Importer/common/Spreadsheet/{GlobalStyle.d.ts → components/GlobalStyle.d.ts} +0 -0
  60. package/lib/esm/Importer/common/Spreadsheet/{GlobalStyle.js → components/GlobalStyle.js} +0 -0
  61. package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetData.d.ts +3 -0
  62. package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetData.js +74 -0
  63. package/lib/esm/Importer/common/Spreadsheet/{SpreadsheetRowNumbers.d.ts → components/SpreadsheetRowNumbers.d.ts} +1 -1
  64. package/lib/esm/Importer/common/Spreadsheet/{SpreadsheetRowNumbers.js → components/SpreadsheetRowNumbers.js} +4 -4
  65. package/lib/esm/Importer/common/Spreadsheet/components/ValidationProgress.d.ts +6 -0
  66. package/lib/esm/Importer/common/Spreadsheet/components/ValidationProgress.js +19 -0
  67. package/lib/esm/Importer/common/Spreadsheet/{common → components}/fields/SpeadsheetAutocomplete.d.ts +1 -1
  68. package/lib/esm/Importer/common/Spreadsheet/{common → components}/fields/SpeadsheetAutocomplete.js +2 -4
  69. package/lib/esm/Importer/common/Spreadsheet/{common → components}/fields/SpreadsheetInput.d.ts +0 -0
  70. package/lib/esm/Importer/common/Spreadsheet/{common → components}/fields/SpreadsheetInput.js +0 -0
  71. package/lib/esm/Importer/common/Spreadsheet/{common → components}/fields/index.d.ts +0 -4
  72. package/lib/esm/Importer/common/Spreadsheet/{common → components}/fields/index.js +11 -64
  73. package/lib/esm/Importer/common/Spreadsheet/{inputs → components/inputs}/Boolean.d.ts +1 -1
  74. package/lib/esm/Importer/common/Spreadsheet/{inputs → components/inputs}/Boolean.js +1 -1
  75. package/lib/esm/Importer/common/Spreadsheet/{inputs → components/inputs}/EmailInput.d.ts +1 -1
  76. package/lib/esm/Importer/common/Spreadsheet/{inputs → components/inputs}/EmailInput.js +1 -1
  77. package/lib/esm/Importer/common/Spreadsheet/{inputs → components/inputs}/EnumInput.d.ts +1 -1
  78. package/lib/esm/Importer/common/Spreadsheet/{inputs → components/inputs}/EnumInput.js +1 -1
  79. package/lib/esm/Importer/common/Spreadsheet/{inputs → components/inputs}/FloatInput.d.ts +1 -1
  80. package/lib/esm/Importer/common/Spreadsheet/{inputs → components/inputs}/FloatInput.js +1 -1
  81. package/lib/esm/Importer/common/Spreadsheet/{inputs → components/inputs}/IntegerInput.d.ts +1 -1
  82. package/lib/esm/Importer/common/Spreadsheet/{inputs → components/inputs}/IntegerInput.js +1 -1
  83. package/lib/esm/Importer/common/Spreadsheet/{inputs → components/inputs}/StringInput.d.ts +1 -1
  84. package/lib/esm/Importer/common/Spreadsheet/{inputs → components/inputs}/StringInput.js +1 -1
  85. package/lib/esm/Importer/common/Spreadsheet/components/inputs/index.d.ts +13 -0
  86. package/lib/esm/Importer/common/Spreadsheet/{inputs → components/inputs}/index.js +1 -1
  87. package/lib/esm/Importer/common/Spreadsheet/hooks.d.ts +29 -0
  88. package/lib/esm/Importer/common/Spreadsheet/hooks.js +201 -0
  89. package/lib/esm/Importer/common/Spreadsheet/index.d.ts +10 -9
  90. package/lib/esm/Importer/common/Spreadsheet/index.js +10 -105
  91. package/lib/esm/Importer/common/Spreadsheet/styles.d.ts +3 -0
  92. package/lib/esm/Importer/common/Spreadsheet/styles.js +10 -0
  93. package/lib/esm/Importer/common/Spreadsheet/validation/index.d.ts +20 -0
  94. package/lib/esm/Importer/common/Spreadsheet/validation/index.js +172 -0
  95. package/lib/esm/Importer/common/Spreadsheet/validation/validators.d.ts +6 -0
  96. package/lib/esm/Importer/common/Spreadsheet/validation/validators.js +176 -0
  97. package/lib/esm/Importer/common/icons/index.d.ts +3 -0
  98. package/lib/esm/Importer/common/icons/index.js +3 -0
  99. package/lib/esm/Importer/common/index.js +3 -3
  100. package/lib/esm/Importer/{theme.d.ts → common/theme.d.ts} +14 -4
  101. package/lib/esm/Importer/{theme.js → common/theme.js} +1 -1
  102. package/lib/esm/Importer/common/utils.d.ts +2 -4
  103. package/lib/esm/Importer/common/utils.js +79 -24
  104. package/lib/esm/Importer/{ImporterContextProvider.d.ts → contexts/ImporterContextProvider.d.ts} +18 -53
  105. package/lib/esm/Importer/{ImporterContextProvider.js → contexts/ImporterContextProvider.js} +31 -27
  106. package/lib/esm/Importer/data/index.d.ts +28 -0
  107. package/lib/esm/Importer/data/index.js +134 -0
  108. package/lib/esm/Importer/index.d.ts +10 -10
  109. package/lib/esm/Importer/index.js +12 -60
  110. package/lib/esm/common/Modal.js +5 -2
  111. package/lib/esm/common/Table/TableView/TableHeaders.js +1 -1
  112. package/lib/esm/common/Table/TableView/TableRow.d.ts +2 -1
  113. package/lib/esm/common/Table/TableView/TableRow.js +10 -10
  114. package/lib/esm/common/Table/TableView/index.d.ts +2 -1
  115. package/lib/esm/common/Table/TableView/index.js +9 -8
  116. package/lib/esm/common/Table/icons.d.ts +1 -0
  117. package/lib/esm/common/Table/icons.js +2 -1
  118. package/lib/esm/common/TooltipProvider.d.ts +5 -1
  119. package/lib/esm/common/TooltipProvider.js +11 -13
  120. package/lib/esm/common/buttons.d.ts +6 -3
  121. package/lib/esm/common/buttons.js +11 -5
  122. package/lib/esm/common/inputs/Autocomplete.d.ts +2 -1
  123. package/lib/esm/common/inputs/Autocomplete.js +7 -6
  124. package/lib/esm/common/inputs/SelectMenu.d.ts +2 -1
  125. package/lib/esm/common/inputs/SelectMenu.js +8 -8
  126. package/lib/esm/common/inputs/TextInput.d.ts +10 -6
  127. package/lib/esm/common/inputs/TextInput.js +12 -3
  128. package/lib/esm/common/inputs/index.d.ts +1 -0
  129. package/lib/esm/common/inputs/index.js +1 -0
  130. package/lib/esm/common/inputs/tooltip.d.ts +5 -0
  131. package/lib/esm/common/inputs/tooltip.js +38 -0
  132. package/lib/esm/index.d.ts +1 -2
  133. package/lib/esm/index.js +0 -1
  134. package/lib/esm/styled/theme/colorPalette.d.ts +18 -18
  135. package/lib/esm/styled/theme/debugCss.d.ts +1 -0
  136. package/lib/esm/styled/theme/debugCss.js +2 -1
  137. package/lib/esm/styled/theme/dimensionsCss.d.ts +6 -2
  138. package/lib/esm/styled/theme/dimensionsCss.js +3 -3
  139. package/lib/esm/styled/theme/globalCss.d.ts +3 -0
  140. package/lib/esm/styled/theme/globalCss.js +9 -8
  141. package/lib/esm/styled/theme/index.d.ts +24 -5
  142. package/lib/esm/styled/theme/textStyles.d.ts +1 -0
  143. package/lib/esm/styled/theme/textStyles.js +2 -1
  144. package/lib/esm/types.d.ts +64 -14
  145. package/lib/main.js +1 -1
  146. package/package.json +18 -8
  147. package/lib/esm/Importer/Footer.js +0 -19
  148. package/lib/esm/Importer/GlobalStyle.js +0 -7
  149. package/lib/esm/Importer/SpreadsheetReviewContextProvider.d.ts +0 -20
  150. package/lib/esm/Importer/SpreadsheetReviewContextProvider.js +0 -128
  151. package/lib/esm/Importer/Stepper.js +0 -153
  152. package/lib/esm/Importer/common/Spreadsheet/inputs/index.d.ts +0 -13
@@ -1,4 +1,4 @@
1
- import { theme } from "../styled/theme";
1
+ import { theme } from "../../styled/theme";
2
2
  export declare type ImporterStylePreferences = {
3
3
  id: number;
4
4
  background: string;
@@ -13,7 +13,7 @@ declare const getCustomTheme: (importerStylePreferences: ImporterStylePreference
13
13
  theme: {
14
14
  readonly colors: {
15
15
  backgroundInterface: string;
16
- interactiveDisabled: string;
16
+ interactiveDisabled: "#FEB0BD";
17
17
  error: string;
18
18
  warning01: string;
19
19
  highlight01: string;
@@ -112,6 +112,7 @@ declare const getCustomTheme: (importerStylePreferences: ImporterStylePreference
112
112
  buttonText: import("styled-components").FlattenSimpleInterpolation;
113
113
  buttonTextSmall: import("styled-components").FlattenSimpleInterpolation;
114
114
  link: import("styled-components").FlattenSimpleInterpolation;
115
+ stepper: import("styled-components").FlattenSimpleInterpolation;
115
116
  };
116
117
  readonly css: {
117
118
  pt: import("styled-components").FlattenInterpolation<import("styled-components").ThemeProps<any>>;
@@ -134,6 +135,9 @@ declare const getCustomTheme: (importerStylePreferences: ImporterStylePreference
134
135
  yscroll: import("styled-components").FlattenSimpleInterpolation;
135
136
  overflowHidden: import("styled-components").FlattenSimpleInterpolation;
136
137
  rotate180: import("styled-components").FlattenSimpleInterpolation;
138
+ rotate180If: import("styled-components").FlattenInterpolation<import("styled-components").ThemedStyledProps<{
139
+ rotate180If: boolean;
140
+ }, any>>;
137
141
  forMobile: import("styled-components").FlattenSimpleInterpolation;
138
142
  forDesktop: import("styled-components").FlattenSimpleInterpolation;
139
143
  mcontainer: import("styled-components").FlattenSimpleInterpolation;
@@ -148,6 +152,7 @@ declare const getCustomTheme: (importerStylePreferences: ImporterStylePreference
148
152
  bgred: import("styled-components").FlattenSimpleInterpolation;
149
153
  bgblue: import("styled-components").FlattenSimpleInterpolation;
150
154
  opacity5: import("styled-components").FlattenSimpleInterpolation;
155
+ divider: import("styled-components").FlattenInterpolation<import("styled-components").ThemeProps<any>>;
151
156
  semiBold: import("styled-components").FlattenSimpleInterpolation;
152
157
  bold: import("styled-components").FlattenSimpleInterpolation;
153
158
  extraBold: import("styled-components").FlattenSimpleInterpolation;
@@ -175,6 +180,7 @@ declare const getCustomTheme: (importerStylePreferences: ImporterStylePreference
175
180
  buttonText: import("styled-components").FlattenSimpleInterpolation;
176
181
  buttonTextSmall: import("styled-components").FlattenSimpleInterpolation;
177
182
  link: import("styled-components").FlattenSimpleInterpolation;
183
+ stepper: import("styled-components").FlattenSimpleInterpolation;
178
184
  truncateText: import("styled-components").FlattenSimpleInterpolation;
179
185
  dInline: import("styled-components").FlattenSimpleInterpolation;
180
186
  flexWrap: import("styled-components").FlattenSimpleInterpolation;
@@ -204,12 +210,16 @@ declare const getCustomTheme: (importerStylePreferences: ImporterStylePreference
204
210
  pSticky: import("styled-components").FlattenSimpleInterpolation;
205
211
  floatLeft: import("styled-components").FlattenSimpleInterpolation;
206
212
  w50: import("styled-components").FlattenSimpleInterpolation;
207
- w100: import("styled-components").FlattenSimpleInterpolation;
213
+ w100: import("styled-components").FlattenInterpolation<import("styled-components").ThemedStyledProps<{
214
+ w100: boolean;
215
+ }, any>>;
208
216
  h100: import("styled-components").FlattenSimpleInterpolation;
209
217
  w: import("styled-components").FlattenInterpolation<import("styled-components").ThemeProps<any>>;
210
218
  h: import("styled-components").FlattenInterpolation<import("styled-components").ThemeProps<any>>;
211
219
  dim: import("styled-components").FlattenInterpolation<import("styled-components").ThemeProps<any>>;
212
- maxw: import("styled-components").FlattenInterpolation<import("styled-components").ThemeProps<any>>;
220
+ maxw: import("styled-components").FlattenInterpolation<import("styled-components").ThemedStyledProps<{
221
+ maxw?: number;
222
+ }, any>>;
213
223
  maxh: import("styled-components").FlattenInterpolation<import("styled-components").ThemeProps<any>>;
214
224
  minw: import("styled-components").FlattenInterpolation<import("styled-components").ThemeProps<any>>;
215
225
  minh: import("styled-components").FlattenInterpolation<import("styled-components").ThemeProps<any>>;
@@ -9,7 +9,7 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
- import { theme } from "../styled/theme";
12
+ import { theme } from "../../styled/theme";
13
13
  var getCustomTheme = function (importerStylePreferences) {
14
14
  var primary_color = importerStylePreferences.primary_color, secondary_color = importerStylePreferences.secondary_color, highlight1 = importerStylePreferences.highlight1, highlight2 = importerStylePreferences.highlight2, background = importerStylePreferences.background;
15
15
  var customTheme = __assign(__assign({}, theme), { colors: __assign(__assign({}, theme.colors), { pink500: primary_color, black: secondary_color, blue500: highlight1, blue100: highlight2, backgroundInterface: background }) });
@@ -1,11 +1,9 @@
1
- import { AppResponse, BatchValidationErrors, Record, RowValidationError } from "../../types";
2
- import { TemplateHeader } from "../ImporterContextProvider";
1
+ import { Integration, Record, TemplateHeader } from "../../types";
3
2
  export declare const getSpreadsheetRowWidth: (fields: any, visibleRowsOnTableViewport: any) => number;
4
- export declare const getUnsubmittedData: (data: Record[], appResponse: AppResponse) => Record[];
5
3
  declare type IsEnumFieldArgs = {
6
4
  templateLabel: string;
7
5
  templateHeaders: TemplateHeader[];
8
6
  };
9
7
  export declare const getColumnType: ({ templateLabel, templateHeaders, }: IsEnumFieldArgs) => string;
10
- export declare const formatBatchErrors: (errors: RowValidationError[]) => BatchValidationErrors;
8
+ export declare const sendRecordsToIntegrations: (reviewedData: Record[], integrations: Integration[]) => Promise<void>;
11
9
  export {};
@@ -1,34 +1,89 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (_) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
11
36
  };
37
+ import axios from "axios";
12
38
  export var getSpreadsheetRowWidth = function (fields, visibleRowsOnTableViewport) {
13
39
  var res = fields.length / visibleRowsOnTableViewport;
14
40
  return res > 1 ? res : 1;
15
41
  };
16
- export var getUnsubmittedData = function (data, appResponse) {
17
- var unsubmittedData = data;
18
- if (appResponse === null || appResponse === void 0 ? void 0 : appResponse.errors)
19
- unsubmittedData = data.filter(function (r) { return !!r._meta.appValidationErrors; });
20
- return unsubmittedData;
21
- };
22
42
  export var getColumnType = function (_a) {
23
43
  var _b;
24
44
  var templateLabel = _a.templateLabel, templateHeaders = _a.templateHeaders;
25
45
  return (_b = templateHeaders.find(function (th) { return th.label === templateLabel; })) === null || _b === void 0 ? void 0 : _b.column_type;
26
46
  };
27
- export var formatBatchErrors = function (errors) {
28
- var res = errors.reduce(function (prevState, curr) {
29
- var newState = __assign({}, prevState);
30
- newState[curr.rowId] = curr.errors;
31
- return newState;
32
- }, {});
33
- return res;
34
- };
47
+ export var sendRecordsToIntegrations = function (reviewedData, integrations) { return __awaiter(void 0, void 0, void 0, function () {
48
+ var _i, reviewedData_1, record, _a, integrations_1, integration, url, trigger_type, instance, error_1;
49
+ return __generator(this, function (_b) {
50
+ switch (_b.label) {
51
+ case 0:
52
+ _i = 0, reviewedData_1 = reviewedData;
53
+ _b.label = 1;
54
+ case 1:
55
+ if (!(_i < reviewedData_1.length)) return [3 /*break*/, 8];
56
+ record = reviewedData_1[_i];
57
+ _a = 0, integrations_1 = integrations;
58
+ _b.label = 2;
59
+ case 2:
60
+ if (!(_a < integrations_1.length)) return [3 /*break*/, 7];
61
+ integration = integrations_1[_a];
62
+ url = integration.url, trigger_type = integration.trigger_type;
63
+ if (!(trigger_type === "webhook")) return [3 /*break*/, 6];
64
+ _b.label = 3;
65
+ case 3:
66
+ _b.trys.push([3, 5, , 6]);
67
+ instance = axios.create({
68
+ baseURL: url,
69
+ timeout: 1000,
70
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
71
+ });
72
+ return [4 /*yield*/, instance.post("", record)];
73
+ case 4:
74
+ _b.sent();
75
+ return [3 /*break*/, 6];
76
+ case 5:
77
+ error_1 = _b.sent();
78
+ console.log(error_1);
79
+ return [3 /*break*/, 6];
80
+ case 6:
81
+ _a++;
82
+ return [3 /*break*/, 2];
83
+ case 7:
84
+ _i++;
85
+ return [3 /*break*/, 1];
86
+ case 8: return [2 /*return*/];
87
+ }
88
+ });
89
+ }); };
@@ -1,8 +1,7 @@
1
1
  import Fuse from "fuse.js";
2
2
  import React from "react";
3
- import { ImporterOptions, OnValidateBatch, OnValidateRecord, FormatRecord } from "../types";
4
- import { ImporterStylePreferences } from "./theme";
5
- import { FuseApi } from "./FuseApi";
3
+ import { FormatRecord, ImporterOptions, Integration, OnSubmit, OnValidateRecord, TemplateHeader } from "../../types";
4
+ import { FuseApi } from "../common/FuseApi";
6
5
  export declare const fusejsOptions: Fuse.IFuseOptions<string>;
7
6
  export declare type HeaderMatchings = {
8
7
  [templateHeaderLabel: string]: string;
@@ -15,80 +14,46 @@ export declare type EnumFieldValueMatchings = {
15
14
  export declare type UploadedDataEnumFieldValues = {
16
15
  [templateHeaderLabel: string]: string[];
17
16
  };
18
- export declare type TemplateHeader = {
19
- label: string;
20
- required: boolean;
21
- unique: boolean;
22
- column_type: string;
23
- internal_key: string;
24
- values: string[];
25
- pattern: string;
26
- };
27
- export declare type Organization = {
28
- id: number;
29
- name: string;
30
- trial_mode: boolean;
31
- plan: {
32
- title: string;
33
- allow_style_customization: boolean;
34
- has_records_limit: boolean;
35
- allowed_records: number;
36
- };
37
- };
38
- export declare type Column = {
39
- column_type: string;
40
- internal_key: string;
41
- label: string;
42
- pattern: string;
43
- required: boolean;
44
- unique: boolean;
45
- values: string[];
46
- };
47
17
  export declare type State = {
48
- resetImport: () => void;
49
18
  currentStepIndex: number;
50
- setCurrentStepIndex: React.Dispatch<number>;
51
19
  templateError: string | null;
52
20
  uploadedData: any[];
53
21
  enumFieldValueMatchings: EnumFieldValueMatchings;
54
- setEnumFieldValueMatchings: React.Dispatch<React.SetStateAction<EnumFieldValueMatchings>>;
55
- setUploadedData: React.Dispatch<any[]>;
56
22
  templateHeaders: TemplateHeader[];
57
23
  templateHeaderMatchings: HeaderMatchings;
58
- setTemplateHeaderMatchings: React.Dispatch<React.SetStateAction<HeaderMatchings>>;
59
24
  uploadedDataHeaders: string[];
60
- onValidateRecord?: OnValidateRecord;
61
- onValidateBatch?: OnValidateBatch;
62
25
  matcherSubstep: number;
63
- setMatcherSubstep: React.Dispatch<number>;
64
26
  uploadedDataEnumFieldValues: UploadedDataEnumFieldValues;
65
27
  templateSlug: string;
66
28
  apiToken: string;
67
29
  inTrialMode: boolean;
68
- onClose: () => void;
30
+ previewFirstTime: boolean;
69
31
  fuseApi: FuseApi;
70
- formatRecord: FormatRecord;
71
32
  importerOptions: ImporterOptions;
72
33
  theme: any;
73
34
  logoURL: string;
74
- isSpreadsheetValid: boolean;
75
- setIsSpreadsheetValid: React.Dispatch<boolean>;
35
+ integrations: Integration[];
36
+ onSubmit: OnSubmit;
37
+ resetImport: () => void;
38
+ onClose: () => void;
39
+ setCurrentStepIndex: React.Dispatch<number>;
40
+ setEnumFieldValueMatchings: React.Dispatch<React.SetStateAction<EnumFieldValueMatchings>>;
41
+ setUploadedData: React.Dispatch<any[]>;
42
+ setTemplateHeaderMatchings: React.Dispatch<React.SetStateAction<HeaderMatchings>>;
43
+ setPreviewFirstTime: React.Dispatch<boolean>;
44
+ formatRecord: FormatRecord;
45
+ onValidateRecord?: OnValidateRecord;
46
+ setMatcherSubstep: React.Dispatch<number>;
76
47
  };
77
48
  export declare type Props = {
78
49
  templateSlug: string;
79
50
  apiToken: string;
80
51
  options: ImporterOptions;
81
- onClose: () => void;
82
52
  children: JSX.Element;
53
+ onClose: () => void;
54
+ onSubmit: OnSubmit;
83
55
  formatRecord: FormatRecord;
84
56
  onValidateRecord?: OnValidateRecord;
85
- onValidateBatch?: OnValidateBatch;
86
- };
87
- export declare type TemplateInfo = {
88
- columns: Column[];
89
- importer_style_preferences: ImporterStylePreferences;
90
- organization: Organization;
91
- name: string;
92
57
  };
93
- export declare const ImporterContextProvider: ({ templateSlug, apiToken, children, options, onClose, formatRecord, onValidateBatch, onValidateRecord, }: Props) => JSX.Element;
58
+ export declare const ImporterContextProvider: ({ templateSlug, apiToken, children, options, onSubmit, onClose, formatRecord, onValidateRecord, }: Props) => JSX.Element;
94
59
  export declare const useImporterContext: () => State;
@@ -48,31 +48,32 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
48
48
  import { jsx as _jsx } from "react/jsx-runtime";
49
49
  import Fuse from "fuse.js";
50
50
  import { createContext, useContext, useEffect, useMemo, useState, } from "react";
51
- import { FieldTypes, } from "../types";
52
- import { getColumnType } from "./common/utils";
53
- import { theme, getCustomTheme, } from "./theme";
54
- import { FuseApi } from "./FuseApi";
51
+ import { FieldTypes, } from "../../types";
52
+ import { FuseApi } from "../common/FuseApi";
53
+ import { getCustomTheme, theme } from "../common/theme";
54
+ import { getColumnType } from "../common/utils";
55
55
  export var fusejsOptions = {
56
56
  includeScore: true,
57
57
  threshold: 0.35,
58
58
  };
59
59
  var ImporterContext = createContext({});
60
60
  export var ImporterContextProvider = function (_a) {
61
- var templateSlug = _a.templateSlug, apiToken = _a.apiToken, children = _a.children, options = _a.options, onClose = _a.onClose, formatRecord = _a.formatRecord, onValidateBatch = _a.onValidateBatch, onValidateRecord = _a.onValidateRecord;
61
+ var templateSlug = _a.templateSlug, apiToken = _a.apiToken, children = _a.children, options = _a.options, onSubmit = _a.onSubmit, onClose = _a.onClose, formatRecord = _a.formatRecord, onValidateRecord = _a.onValidateRecord;
62
62
  var _b = useState(0), currentStepIndex = _b[0], setCurrentStepIndex = _b[1];
63
63
  var _c = useState(0), matcherSubstep = _c[0], setMatcherSubstep = _c[1];
64
64
  var _d = useState(null), templateError = _d[0], setTemplateError = _d[1];
65
65
  var _e = useState(null), templateHeaders = _e[0], setTemplateHeaders = _e[1];
66
- var _f = useState(null), uploadedData = _f[0], setUploadedData = _f[1];
67
- var _g = useState(null), organization = _g[0], setOrganization = _g[1];
68
- var _h = useState({
66
+ var _f = useState(null), integrations = _f[0], setIntegrations = _f[1];
67
+ var _g = useState(null), uploadedData = _g[0], setUploadedData = _g[1];
68
+ var _h = useState(null), organization = _h[0], setOrganization = _h[1];
69
+ var _j = useState(null), previewFirstTime = _j[0], setPreviewFirstTime = _j[1];
70
+ var _k = useState({
69
71
  theme: theme,
70
72
  logoURL: null,
71
- }), style = _h[0], setStyle = _h[1];
72
- var _j = useState(null), templateHeaderMatchings = _j[0], setTemplateHeaderMatchings = _j[1];
73
- var _k = useState(null), enumFieldValueMatchings = _k[0], setEnumFieldValueMatchings = _k[1];
74
- var _l = useState(null), uploadedDataEnumFieldValues = _l[0], setUploadedDataEnumFieldValues = _l[1];
75
- var _m = useState(false), isSpreadsheetValid = _m[0], setIsSpreadsheetValid = _m[1];
73
+ }), style = _k[0], setStyle = _k[1];
74
+ var _l = useState(null), templateHeaderMatchings = _l[0], setTemplateHeaderMatchings = _l[1];
75
+ var _m = useState(null), enumFieldValueMatchings = _m[0], setEnumFieldValueMatchings = _m[1];
76
+ var _o = useState(null), uploadedDataEnumFieldValues = _o[0], setUploadedDataEnumFieldValues = _o[1];
76
77
  var fuseApi = useMemo(function () { return new FuseApi(options.env, apiToken); }, [
77
78
  options.env,
78
79
  apiToken,
@@ -113,7 +114,7 @@ export var ImporterContextProvider = function (_a) {
113
114
  }, [uploadedData]);
114
115
  useEffect(function () {
115
116
  (function () { return __awaiter(void 0, void 0, void 0, function () {
116
- var _a, organization_1, columns, importer_style_preferences, error_1, errorMsg;
117
+ var _a, organization_1, columns, importer_style_preferences, integrations_1, preview_first_time, error_1, errorMsg;
117
118
  var _b, _c;
118
119
  return __generator(this, function (_d) {
119
120
  switch (_d.label) {
@@ -121,9 +122,11 @@ export var ImporterContextProvider = function (_a) {
121
122
  _d.trys.push([0, 2, , 3]);
122
123
  return [4 /*yield*/, fuseApi.get("/api/v1/importer/templates/".concat(templateSlug))];
123
124
  case 1:
124
- _a = (_d.sent()).data, organization_1 = _a.organization, columns = _a.columns, importer_style_preferences = _a.importer_style_preferences;
125
+ _a = (_d.sent()).data, organization_1 = _a.organization, columns = _a.columns, importer_style_preferences = _a.importer_style_preferences, integrations_1 = _a.integrations, preview_first_time = _a.preview_first_time;
125
126
  setOrganization(organization_1);
126
127
  setTemplateHeaders(columns);
128
+ setIntegrations(integrations_1);
129
+ setPreviewFirstTime(preview_first_time);
127
130
  if (organization_1.plan && organization_1.plan.allow_style_customization) {
128
131
  setStyle(getCustomTheme(importer_style_preferences));
129
132
  }
@@ -155,34 +158,35 @@ export var ImporterContextProvider = function (_a) {
155
158
  };
156
159
  var inTrialMode = organization === null || organization === void 0 ? void 0 : organization.trial_mode;
157
160
  var value = {
158
- setUploadedData: setUploadedData,
159
161
  currentStepIndex: currentStepIndex,
160
- formatRecord: formatRecord,
161
- setCurrentStepIndex: setCurrentStepIndex,
162
162
  templateHeaders: templateHeaders,
163
163
  enumFieldValueMatchings: enumFieldValueMatchings,
164
- setEnumFieldValueMatchings: setEnumFieldValueMatchings,
165
164
  templateHeaderMatchings: templateHeaderMatchings,
166
165
  uploadedDataEnumFieldValues: uploadedDataEnumFieldValues,
167
166
  importerOptions: options,
168
- setTemplateHeaderMatchings: setTemplateHeaderMatchings,
169
- resetImport: resetImport,
170
167
  uploadedData: uploadedData,
171
168
  uploadedDataHeaders: uploadedDataHeaders,
172
169
  templateError: templateError,
173
- onValidateBatch: onValidateBatch,
174
- onValidateRecord: onValidateRecord,
175
170
  matcherSubstep: matcherSubstep,
176
- setMatcherSubstep: setMatcherSubstep,
177
171
  apiToken: apiToken,
178
172
  templateSlug: templateSlug,
179
173
  inTrialMode: inTrialMode,
180
- onClose: onClose,
181
174
  fuseApi: fuseApi,
182
175
  theme: style.theme,
183
176
  logoURL: style.logoURL,
184
- isSpreadsheetValid: isSpreadsheetValid,
185
- setIsSpreadsheetValid: setIsSpreadsheetValid,
177
+ integrations: integrations,
178
+ previewFirstTime: previewFirstTime,
179
+ setUploadedData: setUploadedData,
180
+ formatRecord: formatRecord,
181
+ setCurrentStepIndex: setCurrentStepIndex,
182
+ setEnumFieldValueMatchings: setEnumFieldValueMatchings,
183
+ setTemplateHeaderMatchings: setTemplateHeaderMatchings,
184
+ resetImport: resetImport,
185
+ onValidateRecord: onValidateRecord,
186
+ setMatcherSubstep: setMatcherSubstep,
187
+ onClose: onClose,
188
+ setPreviewFirstTime: setPreviewFirstTime,
189
+ onSubmit: onSubmit,
186
190
  };
187
191
  return (_jsx(ImporterContext.Provider, __assign({ value: value }, { children: children })));
188
192
  };
@@ -0,0 +1,28 @@
1
+ import { Field, FieldTypes, FormatRecord, Record, RecordDataSet, TemplateHeader } from "../../types";
2
+ import { EnumFieldValueMatchings, HeaderMatchings } from "../contexts/ImporterContextProvider";
3
+ export declare const addMeta: (record: any, index: number) => Record;
4
+ export declare const recordListToDataSet: (data: Record[], fields: Field[]) => RecordDataSet;
5
+ declare type transformToRecordsArgs = {
6
+ templateHeaderMatchings: HeaderMatchings;
7
+ enumFieldValueMatchings: EnumFieldValueMatchings;
8
+ uploadedDataHeaders: string[];
9
+ uploadedData: any[];
10
+ templateHeaders: TemplateHeader[];
11
+ formatRecord: FormatRecord;
12
+ };
13
+ export declare const getPreviewDataSet: ({ uploadedData, }: {
14
+ uploadedData: any[];
15
+ }) => {
16
+ fields: {
17
+ label: string;
18
+ name: string;
19
+ type: FieldTypes;
20
+ isRequired: boolean;
21
+ }[];
22
+ initialDataSet: RecordDataSet;
23
+ };
24
+ export declare const getReviewDataSet: ({ templateHeaderMatchings, enumFieldValueMatchings, templateHeaders, uploadedDataHeaders, uploadedData, formatRecord, }: transformToRecordsArgs) => {
25
+ fields: Field[];
26
+ initialDataSet: RecordDataSet;
27
+ };
28
+ export {};
@@ -0,0 +1,134 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { FieldTypes, } from "../../types";
13
+ import { parseValue } from "../common/Spreadsheet/common";
14
+ var MINIMUM_ROW_COUNT = 20;
15
+ var getRowId = function (index) {
16
+ var uniqueTimestamp = new Date().getTime();
17
+ return "r".concat(index, "-").concat(uniqueTimestamp);
18
+ };
19
+ var addEmptyRows = function (data, fields) {
20
+ var emptyRecord = fields.reduce(function (obj, f) {
21
+ var _a;
22
+ return (__assign(__assign({}, obj), (_a = {}, _a[f.name] = null, _a)));
23
+ }, {});
24
+ for (var i = data.length; i < MINIMUM_ROW_COUNT; i++) {
25
+ data.push(__assign(__assign({}, emptyRecord), { _meta: {
26
+ id: getRowId(i),
27
+ rowIndex: i,
28
+ } }));
29
+ }
30
+ return data;
31
+ };
32
+ export var addMeta = function (record, index) {
33
+ var _a;
34
+ var rId = getRowId(index);
35
+ var meta = (_a = record._meta) !== null && _a !== void 0 ? _a : {};
36
+ return __assign(__assign({}, record), { _meta: __assign(__assign({}, meta), { id: rId, rowIndex: index, touched: false }) });
37
+ };
38
+ export var recordListToDataSet = function (data, fields) {
39
+ var initialData = data;
40
+ if (data.length < MINIMUM_ROW_COUNT) {
41
+ initialData = addEmptyRows(data, fields);
42
+ }
43
+ return initialData.reduce(function (dataSet, record, i) {
44
+ var recordWithMeta = addMeta(record, i);
45
+ dataSet[recordWithMeta._meta.id] = recordWithMeta;
46
+ return dataSet;
47
+ }, {});
48
+ };
49
+ var transformToRecords = function (_a) {
50
+ var templateHeaderMatchings = _a.templateHeaderMatchings, enumFieldValueMatchings = _a.enumFieldValueMatchings, templateHeaders = _a.templateHeaders, uploadedDataHeaders = _a.uploadedDataHeaders, uploadedData = _a.uploadedData, formatRecord = _a.formatRecord;
51
+ var matchedColumnsLabels = Object.keys(templateHeaderMatchings)
52
+ .filter(function (label) { return !!templateHeaderMatchings[label]; })
53
+ .map(function (label) { return ({
54
+ label: label,
55
+ index: uploadedDataHeaders.indexOf(templateHeaderMatchings[label]),
56
+ }); });
57
+ var templateHeadersByLabel = templateHeaders.reduce(function (byLabel, header) {
58
+ var _a;
59
+ return (__assign(__assign({}, byLabel), (_a = {}, _a[header.label] = header, _a)));
60
+ }, {});
61
+ var getRecord = function (row, index) {
62
+ var record = addMeta({}, index);
63
+ matchedColumnsLabels.forEach(function (_a) {
64
+ var label = _a.label, index = _a.index;
65
+ var enumSet = enumFieldValueMatchings
66
+ ? enumFieldValueMatchings[label]
67
+ : null;
68
+ var header = templateHeadersByLabel[label];
69
+ if (!header)
70
+ return;
71
+ var key = header.internal_key;
72
+ var value = row[index];
73
+ if (value === undefined)
74
+ return;
75
+ record[key] = parseValue(FieldTypes[header.column_type], value, enumSet);
76
+ });
77
+ return formatRecord ? formatRecord(record) : record;
78
+ };
79
+ return uploadedData.slice(1).map(getRecord);
80
+ };
81
+ export var getPreviewDataSet = function (_a) {
82
+ var uploadedData = _a.uploadedData;
83
+ var getFirstRowLen = function () {
84
+ if (uploadedData.length > 0 && Array.isArray(uploadedData[0])) {
85
+ return uploadedData[0].length;
86
+ }
87
+ return 0;
88
+ };
89
+ var fields = new Array(getFirstRowLen()).fill(null).map(function (_, i) {
90
+ var key = String.fromCharCode(65 + i);
91
+ return {
92
+ label: key,
93
+ name: key,
94
+ type: FieldTypes.string,
95
+ isRequired: false,
96
+ };
97
+ });
98
+ var getInitialDataSet = function () {
99
+ //Showing only the first 100 rows to improve performance
100
+ //TODO: Check with Mike
101
+ var data = uploadedData.slice(0, 100).map(function (row, index) {
102
+ var entry = addMeta({}, index);
103
+ fields.forEach(function (field, index) {
104
+ entry[field.name] = row[index];
105
+ });
106
+ return entry;
107
+ });
108
+ return recordListToDataSet(data, fields);
109
+ };
110
+ return { fields: fields, initialDataSet: getInitialDataSet() };
111
+ };
112
+ export var getReviewDataSet = function (_a) {
113
+ var templateHeaderMatchings = _a.templateHeaderMatchings, enumFieldValueMatchings = _a.enumFieldValueMatchings, templateHeaders = _a.templateHeaders, uploadedDataHeaders = _a.uploadedDataHeaders, uploadedData = _a.uploadedData, formatRecord = _a.formatRecord;
114
+ var fields = templateHeaders.map(function (templateHeader) { return ({
115
+ label: templateHeader.label,
116
+ name: templateHeader.internal_key,
117
+ type: FieldTypes[templateHeader.column_type] || FieldTypes.string,
118
+ isRequired: templateHeader.required,
119
+ isUnique: templateHeader.unique,
120
+ options: templateHeader.values,
121
+ pattern: templateHeader.pattern,
122
+ validations: templateHeader.validations,
123
+ }); });
124
+ var records = transformToRecords({
125
+ templateHeaderMatchings: templateHeaderMatchings,
126
+ enumFieldValueMatchings: enumFieldValueMatchings,
127
+ templateHeaders: templateHeaders,
128
+ uploadedDataHeaders: uploadedDataHeaders,
129
+ uploadedData: uploadedData,
130
+ formatRecord: formatRecord,
131
+ });
132
+ var initialDataSet = recordListToDataSet(addEmptyRows(records, fields), fields);
133
+ return { fields: fields, initialDataSet: initialDataSet };
134
+ };
@@ -1,22 +1,22 @@
1
1
  /// <reference types="react" />
2
- import { FormatRecord, ImporterOptions, OnSubmit, OnValidateBatch, OnValidateRecord } from "../types";
3
- declare type LayoutProps = {
4
- zIndex: number;
2
+ import { FormatRecord, ImporterOptions, OnSubmit, OnValidateRecord } from "../types";
3
+ export declare const ACCOUNT_ROUTES: {
4
+ TEMPLATES: string;
5
5
  };
6
- export declare const Layout: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../styled/utils").CSSProps & LayoutProps, never>;
7
- declare type Props = {
6
+ export declare const ACCOUNT_VIEW_PATH = "/account";
7
+ export declare const TEMPLATES_ROUTE: string;
8
+ declare type ImporterProps = {
8
9
  templateSlug: string;
9
10
  apiToken: string;
10
11
  options: ImporterOptions;
12
+ previewMode?: boolean;
11
13
  formatRecord: FormatRecord;
12
14
  onValidateRecord?: OnValidateRecord;
13
- onValidateBatch?: OnValidateBatch;
14
15
  onSubmit?: OnSubmit;
15
- onClose: any;
16
- previewMode?: boolean;
16
+ onClose: () => void;
17
17
  };
18
- declare const Importer: ({ templateSlug, apiToken, onSubmit, onValidateRecord, onValidateBatch, formatRecord, options, onClose, }: Props) => JSX.Element;
18
+ declare const Importer: ({ templateSlug, apiToken, options, formatRecord, onValidateRecord, onSubmit, onClose, }: ImporterProps) => JSX.Element;
19
19
  export * from "./common/Spreadsheet";
20
20
  export * from "./common/utils";
21
- export * from "./SpreadsheetReviewContextProvider";
21
+ export * from "./Review/ReviewContextProvider";
22
22
  export { Importer };