@webitel/ui-sdk 26.2.101 → 26.2.102

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 (37) hide show
  1. package/package.json +4 -3
  2. package/src/components/on-demand/wt-upload-file-icon-btn/wt-upload-file-icon-btn.vue +77 -0
  3. package/src/locale/en/en.js +9 -0
  4. package/src/locale/es/es.js +9 -0
  5. package/src/locale/kz/kz.js +9 -0
  6. package/src/locale/pl/pl.js +9 -0
  7. package/src/locale/ro/ro.js +9 -0
  8. package/src/locale/ru/ru.js +9 -0
  9. package/src/locale/uk/uk.js +9 -0
  10. package/src/locale/uz/uz.js +9 -0
  11. package/src/locale/vi/vi.js +9 -0
  12. package/src/modules/UploadCsvPopup/components/wt-upload-csv-popup.vue +266 -0
  13. package/src/modules/UploadCsvPopup/composable/useUploadCsv.ts +203 -0
  14. package/src/modules/UploadCsvPopup/scripts/normalizeCSVData.ts +60 -0
  15. package/src/modules/UploadCsvPopup/scripts/parseCSV.ts +13 -0
  16. package/src/modules/UploadCsvPopup/scripts/processFile.ts +12 -0
  17. package/src/modules/UploadCsvPopup/scripts/splitAndSaveData.ts +25 -0
  18. package/src/modules/UploadCsvPopup/types/WtUploadCSVHandlingMode.enum.ts +9 -0
  19. package/types/components/on-demand/wt-upload-file-icon-btn/wt-upload-file-icon-btn.vue.d.ts +12 -0
  20. package/types/locale/en/en.d.ts +9 -0
  21. package/types/locale/es/es.d.ts +9 -0
  22. package/types/locale/i18n.d.ts +81 -0
  23. package/types/locale/index.d.ts +81 -0
  24. package/types/locale/kz/kz.d.ts +9 -0
  25. package/types/locale/pl/pl.d.ts +9 -0
  26. package/types/locale/ro/ro.d.ts +9 -0
  27. package/types/locale/ru/ru.d.ts +9 -0
  28. package/types/locale/uk/uk.d.ts +9 -0
  29. package/types/locale/uz/uz.d.ts +9 -0
  30. package/types/locale/vi/vi.d.ts +9 -0
  31. package/types/modules/UploadCsvPopup/components/wt-upload-csv-popup.vue.d.ts +22 -0
  32. package/types/modules/UploadCsvPopup/composable/useUploadCsv.d.ts +33 -0
  33. package/types/modules/UploadCsvPopup/scripts/normalizeCSVData.d.ts +21 -0
  34. package/types/modules/UploadCsvPopup/scripts/parseCSV.d.ts +2 -0
  35. package/types/modules/UploadCsvPopup/scripts/processFile.d.ts +4 -0
  36. package/types/modules/UploadCsvPopup/scripts/splitAndSaveData.d.ts +5 -0
  37. package/types/modules/UploadCsvPopup/types/WtUploadCSVHandlingMode.enum.d.ts +6 -0
@@ -0,0 +1,203 @@
1
+ import { computed, ref, watch } from 'vue';
2
+
3
+ import { debounce, isEmpty } from '../../../scripts';
4
+ import normalizeCSVData from '../scripts/normalizeCSVData';
5
+ import parseCSV from '../scripts/parseCSV';
6
+ import processFile from '../scripts/processFile';
7
+ import splitAndSaveData from '../scripts/splitAndSaveData';
8
+ import HandlingCSVMode from '../types/WtUploadCSVHandlingMode.enum';
9
+
10
+ /**
11
+ * @param {Object} params
12
+ * @param {Object} params.props - component props (file, mappingFields, handlingMode, addBulkItems, fileUploadHandler)
13
+ * @param {Function} params.emit - emit from setup
14
+ * @param {import('vue').Ref<boolean>} params.skipHeaders
15
+ * @param {import('vue').Ref<string>} params.separator
16
+ */
17
+ const useUploadCsv = ({ props, emit, skipHeaders, separator }) => {
18
+ const isReadingFile = ref(false);
19
+ const isParsingCSV = ref(false);
20
+ const parsedFile = ref(null);
21
+ const isParsingPreview = ref(false);
22
+ const parseErrorStackTrace = ref('');
23
+ const csvPreview = ref([
24
+ [],
25
+ ]);
26
+
27
+ const csvValues = computed(() =>
28
+ (props.mappingFields || [])
29
+ .filter((field) => field.csv)
30
+ .flatMap((field) => field.csv),
31
+ );
32
+
33
+ const csvColumns = computed(() => {
34
+ const firstRow = csvPreview.value[0] || {};
35
+ const columns = Object.keys(firstRow);
36
+
37
+ if (skipHeaders.value) {
38
+ return columns;
39
+ }
40
+
41
+ return columns.map((_, index) => `${index + 1} column`);
42
+ });
43
+
44
+ const filteredCsvColumns = computed(() =>
45
+ csvColumns.value.filter((item) => csvValues.value.indexOf(item) !== -1),
46
+ );
47
+
48
+ const parseCSVOptions = computed(() => ({
49
+ /* docs: https://csv.js.org/parse/options/ */
50
+ delimiter: separator.value,
51
+ columns: (firstLine) => {
52
+ if (skipHeaders.value) return firstLine;
53
+ return firstLine.map((_, index) => `${index}`);
54
+ },
55
+ skipEmptyLines: true,
56
+ }));
57
+
58
+ const csvPreviewTableHeaders = computed(() =>
59
+ csvColumns.value.map((col, index) => ({
60
+ text: col,
61
+ value: skipHeaders.value ? col : `${index}`,
62
+ })),
63
+ );
64
+
65
+ const filteredCsvPreviewTableHeaders = computed(() =>
66
+ filteredCsvColumns.value.map((col, index) => ({
67
+ text: col,
68
+ value: skipHeaders.value ? col : `${index}`,
69
+ })),
70
+ );
71
+
72
+ const csvPreviewTableData = computed(() => csvPreview.value);
73
+
74
+ const allowSaveAction = computed(() =>
75
+ (props.mappingFields || []).every(
76
+ (field) => !field.required || !isEmpty(field.csv),
77
+ ),
78
+ );
79
+
80
+ async function createCSVPreview(file = parsedFile.value) {
81
+ try {
82
+ parseErrorStackTrace.value = '';
83
+ csvPreview.value = await parseCSV(file, {
84
+ ...parseCSVOptions.value,
85
+ toLine: 4,
86
+ });
87
+ } catch (err) {
88
+ parseErrorStackTrace.value = err;
89
+ csvPreview.value = [
90
+ [],
91
+ ];
92
+ }
93
+ }
94
+
95
+ function resetMappings() {
96
+ const mappingFields = (props.mappingFields || []).map((field) => ({
97
+ ...field,
98
+ csv: field.multiple ? [] : '',
99
+ }));
100
+ emit('changeMappingFields', mappingFields);
101
+ }
102
+
103
+ async function handleParseOptionsChangeImpl() {
104
+ isParsingPreview.value = true;
105
+ await createCSVPreview();
106
+ resetMappings();
107
+ isParsingPreview.value = false;
108
+ }
109
+
110
+ const handleParseOptionsChange = debounce(handleParseOptionsChangeImpl);
111
+
112
+ async function initUploadPopup() {
113
+ if (!props.file) return;
114
+
115
+ isReadingFile.value = true;
116
+
117
+ parsedFile.value = await processFile(props.file, {});
118
+ await createCSVPreview(parsedFile.value);
119
+
120
+ isReadingFile.value = false;
121
+ }
122
+
123
+ async function handleCSVProcessing() {
124
+ const sourceData = await parseCSV(parsedFile.value, parseCSVOptions.value);
125
+
126
+ const normalizedData = normalizeCSVData({
127
+ data: sourceData,
128
+ mappings: props.mappingFields,
129
+ });
130
+
131
+ await splitAndSaveData({
132
+ data: normalizedData,
133
+ saveCallback: props.addBulkItems,
134
+ });
135
+ }
136
+
137
+ async function processCSV() {
138
+ isParsingCSV.value = true;
139
+
140
+ try {
141
+ parseErrorStackTrace.value = '';
142
+
143
+ const handler =
144
+ props.handlingMode === HandlingCSVMode.PROCESS
145
+ ? handleCSVProcessing
146
+ : props.fileUploadHandler;
147
+
148
+ if (handler) {
149
+ await handler();
150
+ }
151
+
152
+ close();
153
+ } catch (err) {
154
+ parseErrorStackTrace.value = err;
155
+ throw err;
156
+ } finally {
157
+ isParsingCSV.value = false;
158
+ }
159
+ }
160
+
161
+ function handleSave() {
162
+ emit('save');
163
+ return processCSV();
164
+ }
165
+
166
+ function close() {
167
+ emit('close');
168
+ }
169
+
170
+ // watchers (те, що були в mixin.watch)
171
+ watch(skipHeaders, async () => {
172
+ await handleParseOptionsChange();
173
+ });
174
+
175
+ watch(separator, async () => {
176
+ await handleParseOptionsChange();
177
+ });
178
+
179
+ watch(
180
+ () => props.file,
181
+ (file) => {
182
+ if (file) initUploadPopup();
183
+ },
184
+ );
185
+
186
+ return {
187
+ isReadingFile,
188
+ isParsingCSV,
189
+ isParsingPreview,
190
+ parseErrorStackTrace,
191
+ csvPreviewTableData,
192
+ csvPreviewTableHeaders,
193
+ filteredCsvPreviewTableHeaders,
194
+ csvColumns,
195
+ allowSaveAction,
196
+
197
+ processCSV,
198
+ handleSave,
199
+ close,
200
+ };
201
+ };
202
+
203
+ export default useUploadCsv;
@@ -0,0 +1,60 @@
1
+ import isEmpty from '../../../scripts/isEmpty';
2
+
3
+ /**
4
+ *
5
+ * @param data
6
+ * @param mappings
7
+ *
8
+ * Data format: {
9
+ * [colName]: [value]
10
+ * }
11
+ *
12
+ * Mappings format: {
13
+ * name: string, // webitel field name
14
+ * csv: string | string[], // csv column name
15
+ * required: boolean, // is this webitel field required?
16
+ * locale: string, // ui
17
+ * }
18
+ */
19
+ const normalizeCSVData = ({ data, mappings }) => {
20
+ const nonEmptyMappingFields = mappings.filter((field) => !isEmpty(field.csv));
21
+
22
+ return data.map((dataItem, index) => {
23
+ const normalized = nonEmptyMappingFields.reduce(
24
+ (normalizedItem, { name, csv, required }) => {
25
+ const value = Array.isArray(csv)
26
+ ? csv.map((csv) => dataItem[csv])
27
+ : dataItem[csv];
28
+
29
+ let filteredValue; // Filter empty values in validation purposes
30
+ if (Array.isArray(value)) {
31
+ // Because required field can be combined from many fields in multiple select, so we need to check all values.
32
+ // For example, if we have 3 fields and they are empty, we will get empty array.
33
+ filteredValue = value.filter((item) => !isEmpty(item));
34
+ } else {
35
+ filteredValue = value;
36
+ }
37
+
38
+ const isValueEmpty = isEmpty(filteredValue);
39
+ // This check is only for required fields
40
+ if (required && isValueEmpty) {
41
+ throw new Error(
42
+ `Required field is empty: ${name} on row ${index + 1}`,
43
+ );
44
+ }
45
+
46
+ return isValueEmpty
47
+ ? normalizedItem
48
+ : {
49
+ ...normalizedItem,
50
+ [name]: value, // Return the original value for proper mapping (e.g., variables in members)
51
+ };
52
+ },
53
+ {},
54
+ );
55
+
56
+ return normalized;
57
+ });
58
+ };
59
+
60
+ export default normalizeCSVData;
@@ -0,0 +1,13 @@
1
+ import { parse } from 'csv-parse/browser/esm';
2
+
3
+ const parseCSV = (csvStr, options = {}) =>
4
+ new Promise((resolve, reject) => {
5
+ const callback = (err, output) => {
6
+ if (output) resolve(output, err);
7
+ reject(err);
8
+ };
9
+
10
+ parse(csvStr, options, callback);
11
+ });
12
+
13
+ export default parseCSV;
@@ -0,0 +1,12 @@
1
+ const processFile = (file, { charset = 'utf-8' } = {}) =>
2
+ new Promise((resolve, reject) => {
3
+ const reader = new FileReader();
4
+ reader.addEventListener('load', (e) => {
5
+ const loadedFile = e.target.result;
6
+ resolve(loadedFile);
7
+ });
8
+ reader.addEventListener('error', (e) => reject(e));
9
+ reader.readAsText(file, charset);
10
+ });
11
+
12
+ export default processFile;
@@ -0,0 +1,25 @@
1
+ const splitAndSaveData = async ({ data, saveCallback }) => {
2
+ const chunkSize = 100;
3
+ const chunksCount = Math.ceil(data.length / chunkSize);
4
+ let processedChunkIndex = 1;
5
+ try {
6
+ for (; processedChunkIndex <= chunksCount; processedChunkIndex += 1) {
7
+ await saveCallback(
8
+ data.slice(
9
+ (processedChunkIndex - 1) * chunkSize,
10
+ processedChunkIndex * chunkSize,
11
+ ),
12
+ );
13
+ }
14
+ } catch (err) {
15
+ const errMessage = JSON.stringify(err instanceof Error ? err.message : err);
16
+
17
+ throw new Error(
18
+ `An error occurred during saving ${
19
+ (processedChunkIndex - 1) * chunkSize
20
+ }-${processedChunkIndex * chunkSize} data chunk: ${errMessage}`,
21
+ );
22
+ }
23
+ };
24
+
25
+ export default splitAndSaveData;
@@ -0,0 +1,9 @@
1
+ export const HandlingCSVMode = {
2
+ UPLOAD: 'upload',
3
+ PROCESS: 'process',
4
+ } as const;
5
+
6
+ export type HandlingCSVMode =
7
+ (typeof HandlingCSVMode)[keyof typeof HandlingCSVMode];
8
+
9
+ export default HandlingCSVMode;
@@ -0,0 +1,12 @@
1
+ interface Props {
2
+ accept?: string;
3
+ }
4
+ declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
5
+ change: (files: FileList, event: Event) => any;
6
+ }, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
7
+ onChange?: (files: FileList, event: Event) => any;
8
+ }>, {
9
+ accept: string;
10
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
11
+ declare const _default: typeof __VLS_export;
12
+ export default _default;
@@ -220,6 +220,15 @@ declare const _default: {
220
220
  FAILED: string;
221
221
  };
222
222
  };
223
+ importCSV: string;
224
+ CSV: {
225
+ skipHeaders: string;
226
+ charSet: string;
227
+ separator: string;
228
+ CSVColumn: string;
229
+ fieldName: string;
230
+ clearMember: string;
231
+ };
223
232
  };
224
233
  channel: {
225
234
  state: {
@@ -241,6 +241,15 @@ declare namespace _default {
241
241
  export { status_2 as status };
242
242
  }
243
243
  }
244
+ export let importCSV: string;
245
+ export namespace CSV {
246
+ let skipHeaders: string;
247
+ let charSet: string;
248
+ let separator: string;
249
+ let CSVColumn: string;
250
+ let fieldName: string;
251
+ let clearMember: string;
252
+ }
244
253
  export namespace channel_1 {
245
254
  let state_1: {
246
255
  [x: number]: string;
@@ -221,6 +221,15 @@ declare const _default: import("vue-i18n").I18n<{
221
221
  FAILED: string;
222
222
  };
223
223
  };
224
+ importCSV: string;
225
+ CSV: {
226
+ skipHeaders: string;
227
+ charSet: string;
228
+ separator: string;
229
+ CSVColumn: string;
230
+ fieldName: string;
231
+ clearMember: string;
232
+ };
224
233
  };
225
234
  channel: {
226
235
  state: {
@@ -1032,6 +1041,15 @@ declare const _default: import("vue-i18n").I18n<{
1032
1041
  };
1033
1042
  };
1034
1043
  };
1044
+ importCSV: string;
1045
+ CSV: {
1046
+ skipHeaders: string;
1047
+ charSet: string;
1048
+ separator: string;
1049
+ CSVColumn: string;
1050
+ fieldName: string;
1051
+ clearMember: string;
1052
+ };
1035
1053
  channel: {
1036
1054
  state: {
1037
1055
  [x: number]: string;
@@ -1826,6 +1844,15 @@ declare const _default: import("vue-i18n").I18n<{
1826
1844
  };
1827
1845
  };
1828
1846
  };
1847
+ importCSV: string;
1848
+ CSV: {
1849
+ skipHeaders: string;
1850
+ charSet: string;
1851
+ separator: string;
1852
+ CSVColumn: string;
1853
+ fieldName: string;
1854
+ clearMember: string;
1855
+ };
1829
1856
  channel: {
1830
1857
  state: {
1831
1858
  [x: number]: string;
@@ -2622,6 +2649,15 @@ declare const _default: import("vue-i18n").I18n<{
2622
2649
  };
2623
2650
  };
2624
2651
  };
2652
+ importCSV: string;
2653
+ CSV: {
2654
+ skipHeaders: string;
2655
+ charSet: string;
2656
+ separator: string;
2657
+ CSVColumn: string;
2658
+ fieldName: string;
2659
+ clearMember: string;
2660
+ };
2625
2661
  channel: {
2626
2662
  state: {
2627
2663
  [x: number]: string;
@@ -3416,6 +3452,15 @@ declare const _default: import("vue-i18n").I18n<{
3416
3452
  };
3417
3453
  };
3418
3454
  };
3455
+ importCSV: string;
3456
+ CSV: {
3457
+ skipHeaders: string;
3458
+ charSet: string;
3459
+ separator: string;
3460
+ CSVColumn: string;
3461
+ fieldName: string;
3462
+ clearMember: string;
3463
+ };
3419
3464
  channel: {
3420
3465
  state: {
3421
3466
  [x: number]: string;
@@ -4212,6 +4257,15 @@ declare const _default: import("vue-i18n").I18n<{
4212
4257
  };
4213
4258
  };
4214
4259
  };
4260
+ importCSV: string;
4261
+ CSV: {
4262
+ skipHeaders: string;
4263
+ charSet: string;
4264
+ separator: string;
4265
+ CSVColumn: string;
4266
+ fieldName: string;
4267
+ clearMember: string;
4268
+ };
4215
4269
  channel: {
4216
4270
  state: {
4217
4271
  [x: number]: string;
@@ -5008,6 +5062,15 @@ declare const _default: import("vue-i18n").I18n<{
5008
5062
  };
5009
5063
  };
5010
5064
  };
5065
+ importCSV: string;
5066
+ CSV: {
5067
+ skipHeaders: string;
5068
+ charSet: string;
5069
+ separator: string;
5070
+ CSVColumn: string;
5071
+ fieldName: string;
5072
+ clearMember: string;
5073
+ };
5011
5074
  channel: {
5012
5075
  state: {
5013
5076
  [x: number]: string;
@@ -5805,6 +5868,15 @@ declare const _default: import("vue-i18n").I18n<{
5805
5868
  };
5806
5869
  };
5807
5870
  };
5871
+ importCSV: string;
5872
+ CSV: {
5873
+ skipHeaders: string;
5874
+ charSet: string;
5875
+ separator: string;
5876
+ CSVColumn: string;
5877
+ fieldName: string;
5878
+ clearMember: string;
5879
+ };
5808
5880
  channel: {
5809
5881
  state: {
5810
5882
  [x: number]: string;
@@ -6601,6 +6673,15 @@ declare const _default: import("vue-i18n").I18n<{
6601
6673
  };
6602
6674
  };
6603
6675
  };
6676
+ importCSV: string;
6677
+ CSV: {
6678
+ skipHeaders: string;
6679
+ charSet: string;
6680
+ separator: string;
6681
+ CSVColumn: string;
6682
+ fieldName: string;
6683
+ clearMember: string;
6684
+ };
6604
6685
  channel: {
6605
6686
  state: {
6606
6687
  [x: number]: string;
@@ -231,6 +231,15 @@ export declare const messages: {
231
231
  FAILED: string;
232
232
  };
233
233
  };
234
+ importCSV: string;
235
+ CSV: {
236
+ skipHeaders: string;
237
+ charSet: string;
238
+ separator: string;
239
+ CSVColumn: string;
240
+ fieldName: string;
241
+ clearMember: string;
242
+ };
234
243
  };
235
244
  channel: {
236
245
  state: {
@@ -1042,6 +1051,15 @@ export declare const messages: {
1042
1051
  };
1043
1052
  };
1044
1053
  };
1054
+ importCSV: string;
1055
+ CSV: {
1056
+ skipHeaders: string;
1057
+ charSet: string;
1058
+ separator: string;
1059
+ CSVColumn: string;
1060
+ fieldName: string;
1061
+ clearMember: string;
1062
+ };
1045
1063
  channel: {
1046
1064
  state: {
1047
1065
  [x: number]: string;
@@ -1836,6 +1854,15 @@ export declare const messages: {
1836
1854
  };
1837
1855
  };
1838
1856
  };
1857
+ importCSV: string;
1858
+ CSV: {
1859
+ skipHeaders: string;
1860
+ charSet: string;
1861
+ separator: string;
1862
+ CSVColumn: string;
1863
+ fieldName: string;
1864
+ clearMember: string;
1865
+ };
1839
1866
  channel: {
1840
1867
  state: {
1841
1868
  [x: number]: string;
@@ -2632,6 +2659,15 @@ export declare const messages: {
2632
2659
  };
2633
2660
  };
2634
2661
  };
2662
+ importCSV: string;
2663
+ CSV: {
2664
+ skipHeaders: string;
2665
+ charSet: string;
2666
+ separator: string;
2667
+ CSVColumn: string;
2668
+ fieldName: string;
2669
+ clearMember: string;
2670
+ };
2635
2671
  channel: {
2636
2672
  state: {
2637
2673
  [x: number]: string;
@@ -3426,6 +3462,15 @@ export declare const messages: {
3426
3462
  };
3427
3463
  };
3428
3464
  };
3465
+ importCSV: string;
3466
+ CSV: {
3467
+ skipHeaders: string;
3468
+ charSet: string;
3469
+ separator: string;
3470
+ CSVColumn: string;
3471
+ fieldName: string;
3472
+ clearMember: string;
3473
+ };
3429
3474
  channel: {
3430
3475
  state: {
3431
3476
  [x: number]: string;
@@ -4222,6 +4267,15 @@ export declare const messages: {
4222
4267
  };
4223
4268
  };
4224
4269
  };
4270
+ importCSV: string;
4271
+ CSV: {
4272
+ skipHeaders: string;
4273
+ charSet: string;
4274
+ separator: string;
4275
+ CSVColumn: string;
4276
+ fieldName: string;
4277
+ clearMember: string;
4278
+ };
4225
4279
  channel: {
4226
4280
  state: {
4227
4281
  [x: number]: string;
@@ -5018,6 +5072,15 @@ export declare const messages: {
5018
5072
  };
5019
5073
  };
5020
5074
  };
5075
+ importCSV: string;
5076
+ CSV: {
5077
+ skipHeaders: string;
5078
+ charSet: string;
5079
+ separator: string;
5080
+ CSVColumn: string;
5081
+ fieldName: string;
5082
+ clearMember: string;
5083
+ };
5021
5084
  channel: {
5022
5085
  state: {
5023
5086
  [x: number]: string;
@@ -5815,6 +5878,15 @@ export declare const messages: {
5815
5878
  };
5816
5879
  };
5817
5880
  };
5881
+ importCSV: string;
5882
+ CSV: {
5883
+ skipHeaders: string;
5884
+ charSet: string;
5885
+ separator: string;
5886
+ CSVColumn: string;
5887
+ fieldName: string;
5888
+ clearMember: string;
5889
+ };
5818
5890
  channel: {
5819
5891
  state: {
5820
5892
  [x: number]: string;
@@ -6611,6 +6683,15 @@ export declare const messages: {
6611
6683
  };
6612
6684
  };
6613
6685
  };
6686
+ importCSV: string;
6687
+ CSV: {
6688
+ skipHeaders: string;
6689
+ charSet: string;
6690
+ separator: string;
6691
+ CSVColumn: string;
6692
+ fieldName: string;
6693
+ clearMember: string;
6694
+ };
6614
6695
  channel: {
6615
6696
  state: {
6616
6697
  [x: number]: string;
@@ -241,6 +241,15 @@ declare namespace _default {
241
241
  export { status_2 as status };
242
242
  }
243
243
  }
244
+ export let importCSV: string;
245
+ export namespace CSV {
246
+ let skipHeaders: string;
247
+ let charSet: string;
248
+ let separator: string;
249
+ let CSVColumn: string;
250
+ let fieldName: string;
251
+ let clearMember: string;
252
+ }
244
253
  export namespace channel_1 {
245
254
  let state_1: {
246
255
  [x: number]: string;
@@ -241,6 +241,15 @@ declare namespace _default {
241
241
  export { status_2 as status };
242
242
  }
243
243
  }
244
+ export let importCSV: string;
245
+ export namespace CSV {
246
+ let skipHeaders: string;
247
+ let charSet: string;
248
+ let separator: string;
249
+ let CSVColumn: string;
250
+ let fieldName: string;
251
+ let clearMember: string;
252
+ }
244
253
  export namespace channel_1 {
245
254
  let state_1: {
246
255
  [x: number]: string;
@@ -241,6 +241,15 @@ declare namespace _default {
241
241
  export { status_2 as status };
242
242
  }
243
243
  }
244
+ export let importCSV: string;
245
+ export namespace CSV {
246
+ let skipHeaders: string;
247
+ let charSet: string;
248
+ let separator: string;
249
+ let CSVColumn: string;
250
+ let fieldName: string;
251
+ let clearMember: string;
252
+ }
244
253
  export namespace channel_1 {
245
254
  let state_1: {
246
255
  [x: number]: string;