1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import { read as readXlsx, utils as utilsXlsx } from 'xlsx';
- import Papa from 'papaparse';
- import { parseJSON } from '@/utils/helper';
- import getFile, { readFileAsBase64 } from '@/utils/getFile';
- import renderString from '../templating/renderString';
- async function insertData({ id, data }, { refData }) {
- const replacedValueList = {};
- for (const item of data.dataList) {
- let value = '';
- if (item.isFile) {
- const replacedPath = await renderString(
- item.filePath || '',
- refData,
- this.engine.isPopup
- );
- const path = replacedPath.value;
- const isExcel = /.xlsx?$/.test(path);
- const isJSON = path.endsWith('.json');
- const action = item.action || item.csvAction || 'default';
- let responseType = 'text';
- if (isJSON) responseType = 'json';
- else if (action === 'base64' || (isExcel && action !== 'default'))
- responseType = 'blob';
- let result = await getFile(path, {
- responseType,
- returnValue: true,
- });
- const readAsJson = action.includes('json');
- if (action === 'base64') {
- result = await readFileAsBase64(result);
- } else if (result && path.endsWith('.csv') && readAsJson) {
- const parsedCSV = Papa.parse(result, {
- header: action.includes('header'),
- });
- result = parsedCSV.data || [];
- } else if (isExcel && readAsJson) {
- const base64Xls = await readFileAsBase64(result);
- const wb = readXlsx(base64Xls.slice(base64Xls.indexOf(',')), {
- type: 'base64',
- });
- const inputtedSheet = (item.xlsSheet || '').trim();
- const sheetName = wb.SheetNames.includes(inputtedSheet)
- ? inputtedSheet
- : wb.SheetNames[0];
- const options = {};
- if (item.xlsRange) options.range = item.xlsRange;
- if (!action.includes('header')) options.header = 1;
- const sheetData = utilsXlsx.sheet_to_json(
- wb.Sheets[sheetName],
- options
- );
- result = sheetData;
- }
- value = result;
- Object.assign(replacedValueList, replacedPath.list);
- } else {
- const replacedValue = await renderString(
- item.value,
- refData,
- this.engine.isPopup
- );
- value = parseJSON(replacedValue.value, replacedValue.value);
- Object.assign(replacedValueList, replacedValue.list);
- }
- if (item.type === 'table') {
- const values = typeof value === 'string' ? value.split('||') : [value];
- values.forEach((tableValue) => {
- this.addDataToColumn(item.name, tableValue);
- });
- } else {
- this.setVariable(item.name, value);
- }
- }
- return {
- data: '',
- replacedValue: replacedValueList,
- nextBlockId: this.getBlockConnections(id),
- };
- }
- export default insertData;
|