2021-12-06 15:06:38 +01:00
|
|
|
|
2021-12-09 14:18:38 +01:00
|
|
|
import { groupBy as _groupBy } from 'underscore';
|
|
|
|
|
|
2021-12-06 15:06:38 +01:00
|
|
|
const arrayMoveMutate = (array: any[], from: number, to: number) =>
|
|
|
|
|
{
|
|
|
|
|
const startIndex = to < 0 ? array.length + to : to;
|
|
|
|
|
const item = array.splice(from, 1)[0];
|
|
|
|
|
array.splice(startIndex, 0, item);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Move an item in an array
|
|
|
|
|
* @returns {any[]} Modified array
|
|
|
|
|
*/
|
|
|
|
|
export function arrayMove(array: any[], from: number, to: number): any[]
|
|
|
|
|
{
|
|
|
|
|
array = array.slice();
|
|
|
|
|
arrayMoveMutate(array, from, to);
|
|
|
|
|
return array;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Replaces an item in an array
|
|
|
|
|
* @returns {number} Index where the item was replaced
|
|
|
|
|
*/
|
|
|
|
|
export function arrayReplace(array: any[], origin: any, target: any): number
|
|
|
|
|
{
|
|
|
|
|
const index = array.indexOf(origin);
|
|
|
|
|
|
|
|
|
|
if (index < 0)
|
|
|
|
|
{
|
|
|
|
|
return index;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
array.splice(index, 1);
|
|
|
|
|
array.splice(index, 0, target);
|
|
|
|
|
return index;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Removes an item from an array
|
|
|
|
|
* @returns {number} Index where the item has been removed
|
|
|
|
|
*/
|
|
|
|
|
export function arrayRemove(array: any[], value: any): number
|
|
|
|
|
{
|
|
|
|
|
const index = array.indexOf(value);
|
|
|
|
|
|
|
|
|
|
if (index < 0)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
array.splice(index, 1);
|
|
|
|
|
return index;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2021-12-09 14:18:38 +01:00
|
|
|
/**
|
|
|
|
|
* Groups an array by a property key
|
|
|
|
|
* @returns {any} Array groups
|
|
|
|
|
*/
|
|
|
|
|
export function arrayGroupBy(array: any[], key: string): any
|
|
|
|
|
{
|
|
|
|
|
return _groupBy(array, key);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2021-12-06 15:06:38 +01:00
|
|
|
/**
|
|
|
|
|
* Converts an object path to an array of path parts
|
|
|
|
|
* @returns {string[]} Object paths as array
|
|
|
|
|
*/
|
|
|
|
|
export function selectorToArray(selector: string): string[]
|
|
|
|
|
{
|
|
|
|
|
if (!selector)
|
|
|
|
|
{
|
|
|
|
|
return [];
|
|
|
|
|
}
|
|
|
|
|
selector = selector.replace(/\[(\w+)\]/g, '.$1');
|
|
|
|
|
selector = selector.replace(/^\./, '');
|
|
|
|
|
return selector.split('.');
|
|
|
|
|
};
|