@1771technologies/lytenyte-pro
Version:
Blazingly fast headless React data grid with 100s of features.
63 lines (62 loc) • 2.03 kB
JavaScript
export function sortItemsToSortModel(sortItems, lookup) {
return sortItems
.filter((c) => {
if (c.isCustom)
return true;
if (!c.columnId)
return false;
if (!c.sortOn)
return false;
if (!lookup.has(c.columnId))
return false;
return true;
})
.map((c) => {
const col = lookup.get(c.columnId);
if (c.isCustom) {
return c.originalSort;
}
if (col.type === "number") {
return {
columnId: col.id,
isDescending: c.sortDirection === "descending",
sort: {
columnId: col.id,
kind: "number",
options: {
absoluteValue: c.sortOn.includes("absolute"),
nullsFirst: c.sortOn.includes("nulls_first"),
},
},
};
}
if (col.type === "date" || col.type === "datetime") {
return {
columnId: col.id,
isDescending: c.sortDirection === "descending",
sort: {
columnId: col.id,
kind: "date",
options: {
includeTime: col.type === "datetime",
nullsFirst: c.sortOn.includes("nulls_first"),
},
},
};
}
return {
columnId: col.id,
isDescending: c.sortDirection === "descending",
sort: {
columnId: col.id,
kind: "string",
options: {
caseInsensitive: c.sortOn?.includes("insensitive"),
ignorePunctuation: c.sortOn?.includes("ignore"),
nullsFirst: c.sortOn?.includes("nulls_first"),
trimWhitespace: c.sortOn?.includes("trim"),
},
},
};
});
}