UNPKG

@opentiny/vue-renderless

Version:

An enterprise-class UI component library, support both Vue.js 2 and Vue.js 3, as well as PC and mobile.

68 lines (67 loc) 1.89 kB
import "../../../chunk-G2ADBYYC.js"; import arrayEach from "./arrayEach"; import toArray from "./toArray"; import map from "./map"; import isFunction from "../base/isFunction"; import isUndefined from "../base/isUndefined"; import isNull from "../base/isNull"; import get from "../base/get"; import property from "../function/property"; const sortByDef = (v1, v2) => { if (isUndefined(v1) || isUndefined(v2)) { return isUndefined(v2) ? 1 : -1; } if (isNull(v1) || isNull(v2)) { return isNull(v2) ? 1 : -1; } return v1 && v1.localeCompare ? v1.localeCompare(v2) : v1 > v2 ? 1 : -1; }; const sortMultis = (name, compares) => (item1, item2) => { let v1 = item1[name]; let v2 = item2[name]; if (v1 === v2) { return compares ? compares(item1, item2) : 0; } return sortByDef(v1, v2); }; const getSortPros = (arr, list, iterate, context) => { iterate = Array.isArray(iterate) ? iterate : [iterate]; arrayEach(iterate, (prop, index) => { let eachCallback; if (isFunction(prop)) { eachCallback = (val, key) => { val[index] = prop.call(context, val.data, key, arr); }; } else { eachCallback = (val) => { val[index] = get(val.data, prop); }; } arrayEach(list, eachCallback); }); return iterate; }; const sortBy = (arr, iterate, context, STR_UNDEFINED) => { if (arr) { if (iterate === STR_UNDEFINED) { return toArray(arr).sort(sortByDef); } let compares; let list = map(arr, (item) => ({ data: item })); let sortPros = getSortPros(arr, list, iterate, context); let len = sortPros.length; if (len) { while (len >= 0) { compares = sortMultis(len, compares); len--; } list = list.sort(compares); } return map(list, property("data")); } return []; }; var sortBy_default = sortBy; export { sortBy_default as default };