pinia-orm
Version:
The Pinia plugin to enable Object-Relational Mapping access to the Pinia Store.
62 lines (52 loc) • 2.03 kB
JavaScript
import { l as getValue, o as orderBy } from './shared/pinia-orm.7ddc00a8.mjs';
function useSum(models, field) {
return models.reduce((sum, item) => {
if (typeof item[field] === "number") {
sum += item[field];
}
return sum;
}, 0);
}
function usePluck(models, field) {
return models.map((model) => getValue(model, field)).filter((item) => item);
}
function useMax(models, field) {
const numbers = usePluck(models, field).filter((item) => typeof item === "number");
return numbers.length === 0 ? 0 : Math.max(...numbers);
}
function useMin(models, field) {
const numbers = usePluck(models, field).filter((item) => typeof item === "number");
return numbers.length === 0 ? 0 : Math.min(...numbers);
}
function useKeys(models) {
return models.map((model) => model[model.$getLocalKey()]);
}
function useGroupBy(models, fields) {
const grouped = {};
const props = Array.isArray(fields) ? fields : [fields];
models.forEach((model) => {
const key = props.length === 1 ? model[props[0]] : `[${props.map((field) => model[field]).toString()}]`;
grouped[key] = (grouped[key] || []).concat(model);
});
return grouped;
}
function useSortBy(collection, sort, flags) {
const directions = [];
const iteratees = [];
typeof sort === "function" && iteratees.push(sort) && directions.push("asc");
Array.isArray(sort) && sort.forEach((item) => iteratees.push(item[0]) && directions.push(item[1]));
iteratees.length === 0 && iteratees.push(sort);
return orderBy(collection, iteratees, directions, flags);
}
function useCollect(models) {
return {
sum: (field) => useSum(models, field),
min: (field) => useMin(models, field),
max: (field) => useMax(models, field),
pluck: (field) => usePluck(models, field),
groupBy: (fields) => useGroupBy(models, fields),
sortBy: (sort, flags = "SORT_REGULAR") => useSortBy(models, sort, flags),
keys: () => useKeys(models)
};
}
export { useCollect, useGroupBy, useKeys, useMax, useMin, usePluck, useSortBy, useSum };