123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import { objectHasKey } from '@/utils/helper';
- export async function sliceData({ id, data }) {
- let dataToSort = null;
- if (data.dataSource === 'table') {
- dataToSort = this.engine.referenceData.table;
- } else if (data.dataSource === 'variable') {
- const { variables } = this.engine.referenceData;
- if (!objectHasKey(variables, data.varSourceName)) {
- throw new Error(`Cant find "${data.varSourceName}" variable`);
- }
- dataToSort = variables[data.varSourceName];
- }
- if (!Array.isArray(dataToSort)) {
- const dataType = dataToSort === null ? 'null' : typeof dataToSort;
- throw new Error(`Can't sort data with "${dataType}" data type`);
- }
- const getComparisonValue = ({ itemA, itemB, order = 'asc' }) => {
- let comparison = 0;
- if (itemA > itemB) {
- comparison = 1;
- } else if (itemA < itemB) {
- comparison = -1;
- }
- return order === 'desc' ? comparison * -1 : comparison;
- };
- const sortedArray = dataToSort.sort((a, b) => {
- let comparison = 0;
- if (data.sortByProperty) {
- data.itemProperties.forEach(({ name, order }) => {
- comparison = getComparisonValue({
- order,
- itemA: a[name] ?? a,
- itemB: b[name] ?? b,
- });
- });
- } else {
- comparison = getComparisonValue({
- itemA: a,
- itemB: b,
- });
- }
- return comparison;
- });
- if (data.assignVariable) {
- this.setVariable(data.variableName, sortedArray);
- }
- if (data.saveData) {
- this.addDataToColumn(data.dataColumn, sortedArray);
- }
- return {
- data: sortedArray,
- nextBlockId: this.getBlockConnections(id),
- };
- }
- export default sliceData;
|