UNPKG

uicore-ts

Version:

UICore is a library to build native-like user interfaces using pure Typescript. No HTML is needed at all. Components are described as TS classes and all user interactions are handled explicitly. This library is strongly inspired by the UIKit framework tha

79 lines (78 loc) 2.79 kB
"use strict"; onmessage = function(event) { const workerResult = sortData( event.data.data, event.data.sortingInstructions ); workerResult.identifier = event.data.identifier; workerResult.instanceIdentifier = event.data.instanceIdentifier; postMessage(workerResult); }; function valueForKeyPath(keyPath, object) { var keys = keyPath.split("."); var currentObject = object; for (var i = 0; i < keys.length; i++) { var key = keys[i]; if (key.substring(0, 2) == "[]") { currentObject = currentObject[key.substring(2)]; var remainingKeyPath = keys.slice(i + 1).join("."); var currentArray = currentObject; currentObject = currentArray.map(function(subObject, index, array) { var result = valueForKeyPath(remainingKeyPath, subObject); return result; }); break; } currentObject = (currentObject || {})[key]; } return currentObject; } function compare(firstObject, secondObject, sortingInstructions) { if (sortingInstructions.length == 0) { return 0; } const sortingInstruction = sortingInstructions[0]; let directionMultiplier = 1; if (sortingInstruction.direction == "descending") { directionMultiplier = -1; } const firstDataString = firstObject[sortingInstruction.keyPath]; const secondDataString = secondObject[sortingInstruction.keyPath]; if (firstDataString < secondDataString) { return -1 * directionMultiplier; } if (firstDataString > secondDataString) { return directionMultiplier; } if (sortingInstructions.length > 1) { const remainingSortingInstructions = sortingInstructions.slice(1); return compare(firstObject, secondObject, remainingSortingInstructions); } return 0; } function sortData(data, sortingInstructions) { const sortingObjects = data.map(function(dataItem, index, array) { const result = { "_UIKeyValueStringSorterWebWorkerSortingObjectIndex": index }; sortingInstructions.forEach((instruction) => { if (instruction.dataType == "string") { result[instruction.keyPath] = JSON.stringify(valueForKeyPath("" + instruction.keyPath, dataItem) || "").toLowerCase(); } else if (instruction.dataType == "number") { result[instruction.keyPath] = valueForKeyPath("" + instruction.keyPath, dataItem); } }); return result; }); const sortedData = sortingObjects.sort((firstObject, secondObject) => compare( firstObject, secondObject, sortingInstructions )); const sortedIndexes = sortedData.map((object) => object._UIKeyValueStringSorterWebWorkerSortingObjectIndex); return { "sortedData": sortedIndexes.map((sortedIndex) => data[sortedIndex]), "sortedIndexes": sortedIndexes }; } //# sourceMappingURL=UIKeyValueSorterWebWorker.worker.js.map