avine-react-components
Advanced tools
Comparing version 0.1.28 to 0.1.29
@@ -6,3 +6,3 @@ import { FC } from 'react'; | ||
data: Array<any>; | ||
isLoading: boolean; | ||
isLoading?: boolean; | ||
emptyDataText?: string; | ||
@@ -9,0 +9,0 @@ rowsPerPage?: number; |
@@ -149,27 +149,14 @@ "use strict"; | ||
// src/components/table/utils.ts | ||
var COLLATOR = new Intl.Collator(void 0, { numeric: true, sensitivity: "base" }); | ||
var orderByAsc = (data, key) => { | ||
const collator = new Intl.Collator(void 0, { numeric: true, sensitivity: "base" }); | ||
return data.sort((a4, b3) => collator.compare(a4[key.toString()], b3[key.toString()])); | ||
return data.sort((a4, b3) => COLLATOR.compare(a4[key.toString()], b3[key.toString()])); | ||
}; | ||
var orderByDesc = (data) => data.reverse(); | ||
var sortData = (key, columns, data) => { | ||
const column = columns.find((x4) => x4.key.toString() === key.toString()); | ||
if (column) { | ||
const order = column.sortableOrder === "asc" /* Asc */ ? "desc" /* Desc */ : "asc" /* Asc */; | ||
let sortedArray = []; | ||
if (order === "asc" /* Asc */) | ||
sortedArray = orderByAsc(data, key); | ||
if (order === "desc" /* Desc */) | ||
sortedArray = orderByDesc(data); | ||
const sortedColumns = columns.map((col) => { | ||
if (col.key.toString() === key.toString()) | ||
col.sortableOrder = order; | ||
if (col.key.toString() !== key.toString()) | ||
col.sortableOrder = void 0; | ||
return col; | ||
}); | ||
return { columns: sortedColumns, data: sortedArray }; | ||
} | ||
return { columns, data }; | ||
var orderByDesc = (data, key) => { | ||
return data.sort((a4, b3) => COLLATOR.compare(a4[key.toString()], b3[key.toString()])).reverse(); | ||
}; | ||
var sortData = (key, data, order) => { | ||
if (order === "asc" /* Asc */) | ||
return orderByAsc(data, key); | ||
return orderByDesc(data, key); | ||
}; | ||
var getNestedValues = (key, obj) => { | ||
@@ -1087,6 +1074,6 @@ return key.reduce((previous, current) => previous && previous[current] ? previous[current] : null, obj); | ||
var Table = ({ | ||
isLoading, | ||
columns, | ||
data = [], | ||
emptyDataText, | ||
isLoading = false, | ||
rowsPerPage = 10, | ||
@@ -1112,4 +1099,12 @@ searchable = false, | ||
if (column.sortable) { | ||
const { columns: sortedColumn, data: sortedData } = sortData(column.key, innerColumns, innerData); | ||
setInnerColumns(sortedColumn); | ||
const order = column.sortableOrder === "asc" /* Asc */ ? "desc" /* Desc */ : "asc" /* Asc */; | ||
const sortedData = sortData(column.key, innerData, order); | ||
const sortedColumns = columns.map((col) => { | ||
if (col.key.toString() === column.key.toString()) | ||
col.sortableOrder = order; | ||
if (col.key.toString() !== column.key.toString()) | ||
col.sortableOrder = void 0; | ||
return col; | ||
}); | ||
setInnerColumns(sortedColumns); | ||
setInnerData(sortedData); | ||
@@ -1119,5 +1114,23 @@ } | ||
}; | ||
const handleFilterData = (data2, search) => { | ||
const length = data2.length; | ||
const results = []; | ||
search = search.toLowerCase().trim(); | ||
for (let i5 = 0; i5 < length; i5++) { | ||
const values = Object.values(data2[i5]).join(" ").toLowerCase(); | ||
if (values.includes(search)) | ||
results.push(data2[i5]); | ||
} | ||
const sortedColumn = innerColumns.find((x4) => x4.sortableOrder); | ||
if (sortedColumn) { | ||
const sortedData = sortData(sortedColumn.key, results, sortedColumn.sortableOrder); | ||
setInnerData(sortedData); | ||
return; | ||
} | ||
setInnerData(results); | ||
}; | ||
const [searchValue, setSearchValue] = (0, import_react21.useState)(""); | ||
(0, import_react21.useEffect)(() => setInnerColumns(columns), [columns]); | ||
(0, import_react21.useEffect)(() => setInnerData(data), [data]); | ||
return /* @__PURE__ */ import_react21.default.createElement("div", { className: " w-full bg-white my-4 rounded-lg py-4" }, !viewOnly && /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full flex space-x-4 justify-end mb-4 px-4" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full flex space-x-4 items-center justify-end" }, searchable && /* @__PURE__ */ import_react21.default.createElement("div", { className: "relative flex-1" }, /* @__PURE__ */ import_react21.default.createElement(LuSearch, { className: "absolute top-2.5 left-2 text-gray-300", size: 20 }), /* @__PURE__ */ import_react21.default.createElement( | ||
return /* @__PURE__ */ import_react21.default.createElement("div", { className: " w-full bg-white my-4 rounded-lg py-4" }, !viewOnly && /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full flex space-x-4 justify-end mb-4 px-4" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full flex space-x-4 items-center justify-end" }, searchable && !isLoading && /* @__PURE__ */ import_react21.default.createElement("div", { className: "relative flex-1" }, /* @__PURE__ */ import_react21.default.createElement(LuSearch, { className: "absolute top-2.5 left-2 text-gray-300", size: 20 }), /* @__PURE__ */ import_react21.default.createElement( | ||
"input", | ||
@@ -1128,3 +1141,8 @@ { | ||
placeholder: "Pesquisar", | ||
className: "border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-green-500 focus:border-green-500 block w-full py-2.5 pl-8 pr-4 outline-none" | ||
className: "border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-green-500 focus:border-green-500 block w-full py-2.5 pl-8 pr-4 outline-none", | ||
value: searchValue, | ||
onChange: (e2) => { | ||
setSearchValue(e2.target.value); | ||
handleFilterData(data, e2.target.value); | ||
} | ||
} | ||
@@ -1162,3 +1180,3 @@ )), !isLoading && innerData.length > 0 && /* @__PURE__ */ import_react21.default.createElement(import_react21.default.Fragment, null, /* @__PURE__ */ import_react21.default.createElement("div", { className: "flex flex-nowrap items-center space-x-2 text-sm text-gray-400" }, /* @__PURE__ */ import_react21.default.createElement("span", null, "Exibindo"), /* @__PURE__ */ import_react21.default.createElement("select", { value: itemsPerPage, onChange: (e2) => setItemsPerPage(Number(e2.target.value)), className: "bg-green-50 border border-green-300 text-green-700 font-medium text-sm rounded-lg focus:ring-green-500 focus:border-green-500 block p-2 outline-none" }, /* @__PURE__ */ import_react21.default.createElement("option", { value: 10, title: "10 itens por p\xE1gina" }, "10"), /* @__PURE__ */ import_react21.default.createElement("option", { value: 50, title: "50 itens por p\xE1gina" }, "50"), /* @__PURE__ */ import_react21.default.createElement("option", { value: 75, title: "75 itens por p\xE1gina" }, "75"), /* @__PURE__ */ import_react21.default.createElement("option", { value: 100, title: "100 itens por p\xE1gina" }, "100")), /* @__PURE__ */ import_react21.default.createElement("span", null, "de ", innerData.length, " resultados")), /* @__PURE__ */ import_react21.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react21.default.createElement(it, null, /* @__PURE__ */ import_react21.default.createElement(it.Button, { className: "px-2 py-2 text-sm font-medium text-center flex items-center rounded-lg border border-transparent hover:border-gray-200" }, /* @__PURE__ */ import_react21.default.createElement(LuMoreVertical, null)), /* @__PURE__ */ import_react21.default.createElement(it.Items, { className: "flex flex-col absolute right-0 top-8 bg-white shadow-md border rounded-xl p-4" }, /* @__PURE__ */ import_react21.default.createElement(it.Item, null, /* @__PURE__ */ import_react21.default.createElement("button", { onClick: () => { | ||
})); | ||
}))), isLoading && /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full flex justify-center mt-4 text-sm" }, /* @__PURE__ */ import_react21.default.createElement("p", { className: "text-gray-500" }, "Carregando...")), !isLoading && data.length <= 0 && /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full flex justify-center mt-4 text-sm" }, /* @__PURE__ */ import_react21.default.createElement("p", { className: "text-gray-500" }, emptyText))), !isLoading && data.length > itemsPerPage && /* @__PURE__ */ import_react21.default.createElement("nav", { className: "w-full flex justify-end mt-6 px-4" }, /* @__PURE__ */ import_react21.default.createElement("ul", { className: "inline-flex -space-x-px" }, /* @__PURE__ */ import_react21.default.createElement("li", null, /* @__PURE__ */ import_react21.default.createElement("a", { onClick: handlePreviousPage, className: "select-none px-3 py-2 ml-0 leading-tight text-gray-500 bg-white border border-gray-300 rounded-l-lg hover:bg-gray-100 hover:text-gray-700 cursor-pointer" }, "Anterior")), pagination.map((page, index) => /* @__PURE__ */ import_react21.default.createElement("li", { key: index }, /* @__PURE__ */ import_react21.default.createElement( | ||
}))), isLoading && /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full flex justify-center mt-4 text-sm" }, /* @__PURE__ */ import_react21.default.createElement("p", { className: "text-gray-500" }, "Carregando...")), !isLoading && data.length <= 0 && /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full flex justify-center mt-4 text-sm" }, /* @__PURE__ */ import_react21.default.createElement("p", { className: "text-gray-500" }, emptyText))), !isLoading && innerData.length > itemsPerPage && /* @__PURE__ */ import_react21.default.createElement("nav", { className: "w-full flex justify-end mt-6 px-4" }, /* @__PURE__ */ import_react21.default.createElement("ul", { className: "inline-flex -space-x-px" }, /* @__PURE__ */ import_react21.default.createElement("li", null, /* @__PURE__ */ import_react21.default.createElement("a", { onClick: handlePreviousPage, className: "select-none px-3 py-2 ml-0 leading-tight text-gray-500 bg-white border border-gray-300 rounded-l-lg hover:bg-gray-100 hover:text-gray-700 cursor-pointer" }, "Anterior")), pagination.map((page, index) => /* @__PURE__ */ import_react21.default.createElement("li", { key: index }, /* @__PURE__ */ import_react21.default.createElement( | ||
"a", | ||
@@ -1165,0 +1183,0 @@ { |
@@ -1,10 +0,7 @@ | ||
import { TableColumn } from './table.js'; | ||
import { ETableColumnOrder } from './table.js'; | ||
import 'react'; | ||
declare const sortData: (key: string[], columns: TableColumn[], data: unknown[]) => { | ||
columns: TableColumn[]; | ||
data: unknown[]; | ||
}; | ||
declare const sortData: (key: string[], data: any[], order: ETableColumnOrder) => unknown[]; | ||
declare const getNestedValues: (key: string[], obj: any) => any; | ||
export { getNestedValues, sortData }; |
@@ -45,27 +45,14 @@ "use strict"; | ||
// src/components/table/utils.ts | ||
var COLLATOR = new Intl.Collator(void 0, { numeric: true, sensitivity: "base" }); | ||
var orderByAsc = (data, key) => { | ||
const collator = new Intl.Collator(void 0, { numeric: true, sensitivity: "base" }); | ||
return data.sort((a, b) => collator.compare(a[key.toString()], b[key.toString()])); | ||
return data.sort((a, b) => COLLATOR.compare(a[key.toString()], b[key.toString()])); | ||
}; | ||
var orderByDesc = (data) => data.reverse(); | ||
var sortData = (key, columns, data) => { | ||
const column = columns.find((x) => x.key.toString() === key.toString()); | ||
if (column) { | ||
const order = column.sortableOrder === "asc" /* Asc */ ? "desc" /* Desc */ : "asc" /* Asc */; | ||
let sortedArray = []; | ||
if (order === "asc" /* Asc */) | ||
sortedArray = orderByAsc(data, key); | ||
if (order === "desc" /* Desc */) | ||
sortedArray = orderByDesc(data); | ||
const sortedColumns = columns.map((col) => { | ||
if (col.key.toString() === key.toString()) | ||
col.sortableOrder = order; | ||
if (col.key.toString() !== key.toString()) | ||
col.sortableOrder = void 0; | ||
return col; | ||
}); | ||
return { columns: sortedColumns, data: sortedArray }; | ||
} | ||
return { columns, data }; | ||
var orderByDesc = (data, key) => { | ||
return data.sort((a, b) => COLLATOR.compare(a[key.toString()], b[key.toString()])).reverse(); | ||
}; | ||
var sortData = (key, data, order) => { | ||
if (order === "asc" /* Asc */) | ||
return orderByAsc(data, key); | ||
return orderByDesc(data, key); | ||
}; | ||
var getNestedValues = (key, obj) => { | ||
@@ -72,0 +59,0 @@ return key.reduce((previous, current) => previous && previous[current] ? previous[current] : null, obj); |
@@ -157,27 +157,14 @@ "use strict"; | ||
// src/components/table/utils.ts | ||
var COLLATOR = new Intl.Collator(void 0, { numeric: true, sensitivity: "base" }); | ||
var orderByAsc = (data, key) => { | ||
const collator = new Intl.Collator(void 0, { numeric: true, sensitivity: "base" }); | ||
return data.sort((a4, b3) => collator.compare(a4[key.toString()], b3[key.toString()])); | ||
return data.sort((a4, b3) => COLLATOR.compare(a4[key.toString()], b3[key.toString()])); | ||
}; | ||
var orderByDesc = (data) => data.reverse(); | ||
var sortData = (key, columns, data) => { | ||
const column = columns.find((x4) => x4.key.toString() === key.toString()); | ||
if (column) { | ||
const order = column.sortableOrder === "asc" /* Asc */ ? "desc" /* Desc */ : "asc" /* Asc */; | ||
let sortedArray = []; | ||
if (order === "asc" /* Asc */) | ||
sortedArray = orderByAsc(data, key); | ||
if (order === "desc" /* Desc */) | ||
sortedArray = orderByDesc(data); | ||
const sortedColumns = columns.map((col) => { | ||
if (col.key.toString() === key.toString()) | ||
col.sortableOrder = order; | ||
if (col.key.toString() !== key.toString()) | ||
col.sortableOrder = void 0; | ||
return col; | ||
}); | ||
return { columns: sortedColumns, data: sortedArray }; | ||
} | ||
return { columns, data }; | ||
var orderByDesc = (data, key) => { | ||
return data.sort((a4, b3) => COLLATOR.compare(a4[key.toString()], b3[key.toString()])).reverse(); | ||
}; | ||
var sortData = (key, data, order) => { | ||
if (order === "asc" /* Asc */) | ||
return orderByAsc(data, key); | ||
return orderByDesc(data, key); | ||
}; | ||
var getNestedValues = (key, obj) => { | ||
@@ -1095,6 +1082,6 @@ return key.reduce((previous, current) => previous && previous[current] ? previous[current] : null, obj); | ||
var Table = ({ | ||
isLoading, | ||
columns, | ||
data = [], | ||
emptyDataText, | ||
isLoading = false, | ||
rowsPerPage = 10, | ||
@@ -1120,4 +1107,12 @@ searchable = false, | ||
if (column.sortable) { | ||
const { columns: sortedColumn, data: sortedData } = sortData(column.key, innerColumns, innerData); | ||
setInnerColumns(sortedColumn); | ||
const order = column.sortableOrder === "asc" /* Asc */ ? "desc" /* Desc */ : "asc" /* Asc */; | ||
const sortedData = sortData(column.key, innerData, order); | ||
const sortedColumns = columns.map((col) => { | ||
if (col.key.toString() === column.key.toString()) | ||
col.sortableOrder = order; | ||
if (col.key.toString() !== column.key.toString()) | ||
col.sortableOrder = void 0; | ||
return col; | ||
}); | ||
setInnerColumns(sortedColumns); | ||
setInnerData(sortedData); | ||
@@ -1127,5 +1122,23 @@ } | ||
}; | ||
const handleFilterData = (data2, search) => { | ||
const length = data2.length; | ||
const results = []; | ||
search = search.toLowerCase().trim(); | ||
for (let i5 = 0; i5 < length; i5++) { | ||
const values = Object.values(data2[i5]).join(" ").toLowerCase(); | ||
if (values.includes(search)) | ||
results.push(data2[i5]); | ||
} | ||
const sortedColumn = innerColumns.find((x4) => x4.sortableOrder); | ||
if (sortedColumn) { | ||
const sortedData = sortData(sortedColumn.key, results, sortedColumn.sortableOrder); | ||
setInnerData(sortedData); | ||
return; | ||
} | ||
setInnerData(results); | ||
}; | ||
const [searchValue, setSearchValue] = (0, import_react21.useState)(""); | ||
(0, import_react21.useEffect)(() => setInnerColumns(columns), [columns]); | ||
(0, import_react21.useEffect)(() => setInnerData(data), [data]); | ||
return /* @__PURE__ */ import_react21.default.createElement("div", { className: " w-full bg-white my-4 rounded-lg py-4" }, !viewOnly && /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full flex space-x-4 justify-end mb-4 px-4" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full flex space-x-4 items-center justify-end" }, searchable && /* @__PURE__ */ import_react21.default.createElement("div", { className: "relative flex-1" }, /* @__PURE__ */ import_react21.default.createElement(LuSearch, { className: "absolute top-2.5 left-2 text-gray-300", size: 20 }), /* @__PURE__ */ import_react21.default.createElement( | ||
return /* @__PURE__ */ import_react21.default.createElement("div", { className: " w-full bg-white my-4 rounded-lg py-4" }, !viewOnly && /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full flex space-x-4 justify-end mb-4 px-4" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full flex space-x-4 items-center justify-end" }, searchable && !isLoading && /* @__PURE__ */ import_react21.default.createElement("div", { className: "relative flex-1" }, /* @__PURE__ */ import_react21.default.createElement(LuSearch, { className: "absolute top-2.5 left-2 text-gray-300", size: 20 }), /* @__PURE__ */ import_react21.default.createElement( | ||
"input", | ||
@@ -1136,3 +1149,8 @@ { | ||
placeholder: "Pesquisar", | ||
className: "border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-green-500 focus:border-green-500 block w-full py-2.5 pl-8 pr-4 outline-none" | ||
className: "border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-green-500 focus:border-green-500 block w-full py-2.5 pl-8 pr-4 outline-none", | ||
value: searchValue, | ||
onChange: (e2) => { | ||
setSearchValue(e2.target.value); | ||
handleFilterData(data, e2.target.value); | ||
} | ||
} | ||
@@ -1170,3 +1188,3 @@ )), !isLoading && innerData.length > 0 && /* @__PURE__ */ import_react21.default.createElement(import_react21.default.Fragment, null, /* @__PURE__ */ import_react21.default.createElement("div", { className: "flex flex-nowrap items-center space-x-2 text-sm text-gray-400" }, /* @__PURE__ */ import_react21.default.createElement("span", null, "Exibindo"), /* @__PURE__ */ import_react21.default.createElement("select", { value: itemsPerPage, onChange: (e2) => setItemsPerPage(Number(e2.target.value)), className: "bg-green-50 border border-green-300 text-green-700 font-medium text-sm rounded-lg focus:ring-green-500 focus:border-green-500 block p-2 outline-none" }, /* @__PURE__ */ import_react21.default.createElement("option", { value: 10, title: "10 itens por p\xE1gina" }, "10"), /* @__PURE__ */ import_react21.default.createElement("option", { value: 50, title: "50 itens por p\xE1gina" }, "50"), /* @__PURE__ */ import_react21.default.createElement("option", { value: 75, title: "75 itens por p\xE1gina" }, "75"), /* @__PURE__ */ import_react21.default.createElement("option", { value: 100, title: "100 itens por p\xE1gina" }, "100")), /* @__PURE__ */ import_react21.default.createElement("span", null, "de ", innerData.length, " resultados")), /* @__PURE__ */ import_react21.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react21.default.createElement(it, null, /* @__PURE__ */ import_react21.default.createElement(it.Button, { className: "px-2 py-2 text-sm font-medium text-center flex items-center rounded-lg border border-transparent hover:border-gray-200" }, /* @__PURE__ */ import_react21.default.createElement(LuMoreVertical, null)), /* @__PURE__ */ import_react21.default.createElement(it.Items, { className: "flex flex-col absolute right-0 top-8 bg-white shadow-md border rounded-xl p-4" }, /* @__PURE__ */ import_react21.default.createElement(it.Item, null, /* @__PURE__ */ import_react21.default.createElement("button", { onClick: () => { | ||
})); | ||
}))), isLoading && /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full flex justify-center mt-4 text-sm" }, /* @__PURE__ */ import_react21.default.createElement("p", { className: "text-gray-500" }, "Carregando...")), !isLoading && data.length <= 0 && /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full flex justify-center mt-4 text-sm" }, /* @__PURE__ */ import_react21.default.createElement("p", { className: "text-gray-500" }, emptyText))), !isLoading && data.length > itemsPerPage && /* @__PURE__ */ import_react21.default.createElement("nav", { className: "w-full flex justify-end mt-6 px-4" }, /* @__PURE__ */ import_react21.default.createElement("ul", { className: "inline-flex -space-x-px" }, /* @__PURE__ */ import_react21.default.createElement("li", null, /* @__PURE__ */ import_react21.default.createElement("a", { onClick: handlePreviousPage, className: "select-none px-3 py-2 ml-0 leading-tight text-gray-500 bg-white border border-gray-300 rounded-l-lg hover:bg-gray-100 hover:text-gray-700 cursor-pointer" }, "Anterior")), pagination.map((page, index) => /* @__PURE__ */ import_react21.default.createElement("li", { key: index }, /* @__PURE__ */ import_react21.default.createElement( | ||
}))), isLoading && /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full flex justify-center mt-4 text-sm" }, /* @__PURE__ */ import_react21.default.createElement("p", { className: "text-gray-500" }, "Carregando...")), !isLoading && data.length <= 0 && /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full flex justify-center mt-4 text-sm" }, /* @__PURE__ */ import_react21.default.createElement("p", { className: "text-gray-500" }, emptyText))), !isLoading && innerData.length > itemsPerPage && /* @__PURE__ */ import_react21.default.createElement("nav", { className: "w-full flex justify-end mt-6 px-4" }, /* @__PURE__ */ import_react21.default.createElement("ul", { className: "inline-flex -space-x-px" }, /* @__PURE__ */ import_react21.default.createElement("li", null, /* @__PURE__ */ import_react21.default.createElement("a", { onClick: handlePreviousPage, className: "select-none px-3 py-2 ml-0 leading-tight text-gray-500 bg-white border border-gray-300 rounded-l-lg hover:bg-gray-100 hover:text-gray-700 cursor-pointer" }, "Anterior")), pagination.map((page, index) => /* @__PURE__ */ import_react21.default.createElement("li", { key: index }, /* @__PURE__ */ import_react21.default.createElement( | ||
"a", | ||
@@ -1173,0 +1191,0 @@ { |
{ | ||
"name": "avine-react-components", | ||
"version": "0.1.28", | ||
"version": "0.1.29", | ||
"license": "MIT", | ||
@@ -5,0 +5,0 @@ "description": "", |
@@ -1,28 +0,19 @@ | ||
import { ETableColumnOrder, TableColumn } from './table'; | ||
import { ETableColumnOrder } from './table'; | ||
const COLLATOR = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }); | ||
const orderByAsc = (data: unknown[], key: string[]): unknown[] => { | ||
const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }); | ||
return data.sort((a: any, b: any) => collator.compare(a[key.toString()], b[key.toString()])); | ||
return data.sort((a: any, b: any) => COLLATOR.compare(a[key.toString()], b[key.toString()])); | ||
}; | ||
const orderByDesc = (data: unknown[]): unknown[] => data.reverse(); | ||
const orderByDesc = (data: unknown[], key: string[]): unknown[] => { | ||
return data.sort((a: any, b: any) => COLLATOR.compare(a[key.toString()], b[key.toString()])).reverse(); | ||
} | ||
const sortData = (key: string[], columns: TableColumn[], data: unknown[]) => { | ||
const column = columns.find(x => x.key.toString() === key.toString()); | ||
if (column) { | ||
const order = column.sortableOrder === ETableColumnOrder.Asc ? ETableColumnOrder.Desc : ETableColumnOrder.Asc; | ||
let sortedArray: unknown[] = []; | ||
if (order === ETableColumnOrder.Asc) sortedArray = orderByAsc(data, key); | ||
if (order === ETableColumnOrder.Desc) sortedArray = orderByDesc(data); | ||
const sortedColumns = (columns.map(col => { | ||
if (col.key.toString() === key.toString()) col.sortableOrder = order; | ||
if (col.key.toString() !== key.toString()) col.sortableOrder = undefined; | ||
return col; | ||
})); | ||
return { columns: sortedColumns, data: sortedArray }; | ||
} | ||
return { columns, data }; | ||
const sortData = (key: string[], data: any[], order: ETableColumnOrder): unknown[] => { | ||
if (order === ETableColumnOrder.Asc) return orderByAsc(data, key); | ||
return orderByDesc(data, key); | ||
}; | ||
const getNestedValues = (key: string[], obj: any) => { | ||
const getNestedValues = (key: string[], obj: any): any => { | ||
return key.reduce((previous, current) => (previous && previous[current]) ? previous[current] : null, obj); | ||
@@ -29,0 +20,0 @@ }; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
6579110
11445