@raystack/apsara 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +190 -37
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +4 -0
- package/dist/index.js +190 -37
- package/dist/index.js.map +1 -1
- package/dist/table/DataTableFilterChips.d.ts.map +1 -1
- package/dist/table/FilteredChip.d.ts +3 -1
- package/dist/table/FilteredChip.d.ts.map +1 -1
- package/dist/table/TableContext.d.ts +3 -0
- package/dist/table/TableContext.d.ts.map +1 -1
- package/dist/table/datatable.d.ts.map +1 -1
- package/dist/table/datatables.types.d.ts +18 -1
- package/dist/table/datatables.types.d.ts.map +1 -1
- package/dist/table/filterFns.d.ts +10 -0
- package/dist/table/filterFns.d.ts.map +1 -0
- package/dist/table/hooks/useTable.d.ts +2 -0
- package/dist/table/hooks/useTable.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.css
CHANGED
|
@@ -1993,6 +1993,10 @@ html[data-theme="dark"] {
|
|
|
1993
1993
|
border-top: 1px solid var(--border-base);
|
|
1994
1994
|
}
|
|
1995
1995
|
|
|
1996
|
+
.datatable-module_filterOperator__qtDsH {
|
|
1997
|
+
min-width: fit-content;
|
|
1998
|
+
}
|
|
1999
|
+
|
|
1996
2000
|
.table-module_table__mqnXB {
|
|
1997
2001
|
width: 100%;
|
|
1998
2002
|
font-size: 12px;
|
package/dist/index.js
CHANGED
|
@@ -31632,49 +31632,188 @@ const TextField = forwardRef(({ leading, className, src, size, state, style, ...
|
|
|
31632
31632
|
});
|
|
31633
31633
|
TextField.displayName = "TextField";
|
|
31634
31634
|
|
|
31635
|
-
var styles$4 = {"wrapper":"datatable-module_wrapper__Sxg2d","datatable":"datatable-module_datatable__z-Th2","table":"datatable-module_table__x2IkY","head":"datatable-module_head__zCfCW","toolbar":"datatable-module_toolbar__lO-aI","chip":"datatable-module_chip__IiwTD","chipWrapper":"datatable-module_chipWrapper__iz69x"};
|
|
31635
|
+
var styles$4 = {"wrapper":"datatable-module_wrapper__Sxg2d","datatable":"datatable-module_datatable__z-Th2","table":"datatable-module_table__x2IkY","head":"datatable-module_head__zCfCW","toolbar":"datatable-module_toolbar__lO-aI","chip":"datatable-module_chip__IiwTD","chipWrapper":"datatable-module_chipWrapper__iz69x","filterOperator":"datatable-module_filterOperator__qtDsH"};
|
|
31636
31636
|
|
|
31637
|
-
const
|
|
31637
|
+
const columnTypesMap = {
|
|
31638
|
+
select: "select",
|
|
31639
|
+
number: "number",
|
|
31640
|
+
text: "text",
|
|
31641
|
+
};
|
|
31642
|
+
const filterValueTypeMap = {
|
|
31643
|
+
select: "select",
|
|
31644
|
+
text: "text",
|
|
31645
|
+
};
|
|
31646
|
+
|
|
31647
|
+
const operationsOptions = {
|
|
31648
|
+
[columnTypesMap.select]: [
|
|
31649
|
+
{
|
|
31650
|
+
label: "is",
|
|
31651
|
+
value: "is",
|
|
31652
|
+
fn: (row, columnId, filterValue) => {
|
|
31653
|
+
return row.getValue(columnId) === filterValue.value;
|
|
31654
|
+
},
|
|
31655
|
+
},
|
|
31656
|
+
{
|
|
31657
|
+
label: "is not",
|
|
31658
|
+
value: "is not",
|
|
31659
|
+
fn: (row, columnId, filterValue) => {
|
|
31660
|
+
return row.getValue(columnId) !== filterValue.value;
|
|
31661
|
+
},
|
|
31662
|
+
},
|
|
31663
|
+
],
|
|
31664
|
+
[columnTypesMap.number]: [
|
|
31665
|
+
{
|
|
31666
|
+
label: "=",
|
|
31667
|
+
value: "=",
|
|
31668
|
+
fn: (row, columnId, filterValue) => {
|
|
31669
|
+
return Number(row.getValue(columnId)) === Number(filterValue.value);
|
|
31670
|
+
},
|
|
31671
|
+
},
|
|
31672
|
+
{
|
|
31673
|
+
label: "!=",
|
|
31674
|
+
value: "!=",
|
|
31675
|
+
fn: (row, columnId, filterValue) => {
|
|
31676
|
+
return Number(row.getValue(columnId)) !== Number(filterValue.value);
|
|
31677
|
+
},
|
|
31678
|
+
},
|
|
31679
|
+
{
|
|
31680
|
+
label: ">",
|
|
31681
|
+
value: ">",
|
|
31682
|
+
fn: (row, columnId, filterValue) => {
|
|
31683
|
+
return Number(row.getValue(columnId)) > Number(filterValue.value);
|
|
31684
|
+
},
|
|
31685
|
+
},
|
|
31686
|
+
{
|
|
31687
|
+
label: ">=",
|
|
31688
|
+
value: ">=",
|
|
31689
|
+
fn: (row, columnId, filterValue) => {
|
|
31690
|
+
return Number(row.getValue(columnId)) >= Number(filterValue.value);
|
|
31691
|
+
},
|
|
31692
|
+
},
|
|
31693
|
+
{
|
|
31694
|
+
label: "<",
|
|
31695
|
+
value: "<",
|
|
31696
|
+
fn: (row, columnId, filterValue) => {
|
|
31697
|
+
return Number(row.getValue(columnId)) < Number(filterValue.value);
|
|
31698
|
+
},
|
|
31699
|
+
},
|
|
31700
|
+
{
|
|
31701
|
+
label: "<=",
|
|
31702
|
+
value: "<=",
|
|
31703
|
+
fn: (row, columnId, filterValue) => {
|
|
31704
|
+
return Number(row.getValue(columnId)) <= Number(filterValue.value);
|
|
31705
|
+
},
|
|
31706
|
+
},
|
|
31707
|
+
],
|
|
31708
|
+
[columnTypesMap.text]: [
|
|
31709
|
+
{
|
|
31710
|
+
label: "contains",
|
|
31711
|
+
value: "contains",
|
|
31712
|
+
fn: (row, columnId, filterValue) => {
|
|
31713
|
+
const columnValue = row.getValue(columnId).toLowerCase();
|
|
31714
|
+
const filterStr = filterValue.value.toLowerCase();
|
|
31715
|
+
return columnValue.includes(filterStr);
|
|
31716
|
+
},
|
|
31717
|
+
},
|
|
31718
|
+
{
|
|
31719
|
+
label: "does not contains",
|
|
31720
|
+
value: "does not contains",
|
|
31721
|
+
fn: (row, columnId, filterValue) => {
|
|
31722
|
+
const columnValue = row.getValue(columnId).toLowerCase();
|
|
31723
|
+
const filterStr = filterValue.value.toLowerCase();
|
|
31724
|
+
return !columnValue.includes(filterStr);
|
|
31725
|
+
},
|
|
31726
|
+
},
|
|
31727
|
+
{
|
|
31728
|
+
label: "starts with",
|
|
31729
|
+
value: "starts with",
|
|
31730
|
+
fn: (row, columnId, filterValue) => {
|
|
31731
|
+
const columnValue = row.getValue(columnId).toLowerCase();
|
|
31732
|
+
const filterStr = filterValue.value.toLowerCase();
|
|
31733
|
+
return columnValue.startsWith(filterStr);
|
|
31734
|
+
},
|
|
31735
|
+
},
|
|
31736
|
+
{
|
|
31737
|
+
label: "ends with",
|
|
31738
|
+
value: "ends with",
|
|
31739
|
+
fn: (row, columnId, filterValue) => {
|
|
31740
|
+
const columnValue = row.getValue(columnId).toLowerCase();
|
|
31741
|
+
const filterStr = filterValue.value.toLowerCase();
|
|
31742
|
+
return columnValue.endsWith(filterStr);
|
|
31743
|
+
},
|
|
31744
|
+
},
|
|
31745
|
+
{
|
|
31746
|
+
label: "is empty",
|
|
31747
|
+
value: "is empty",
|
|
31748
|
+
fn: (row, columnId, filterValue) => {
|
|
31749
|
+
return row.getValue(columnId).length === 0;
|
|
31750
|
+
},
|
|
31751
|
+
hideValueField: true,
|
|
31752
|
+
},
|
|
31753
|
+
{
|
|
31754
|
+
label: "is not empty",
|
|
31755
|
+
value: "is not empty",
|
|
31756
|
+
fn: (row, columnId, filterValue) => {
|
|
31757
|
+
return row.getValue(columnId).length > 0;
|
|
31758
|
+
},
|
|
31759
|
+
hideValueField: true,
|
|
31760
|
+
},
|
|
31761
|
+
],
|
|
31762
|
+
};
|
|
31763
|
+
|
|
31764
|
+
const FilterValues = ({ columnType = filterValueTypeMap.text, options = [], onValueChange, }) => {
|
|
31765
|
+
const [value, setValue] = useState("");
|
|
31766
|
+
const valueType = columnType === columnTypesMap.select
|
|
31767
|
+
? filterValueTypeMap.select
|
|
31768
|
+
: filterValueTypeMap.text;
|
|
31769
|
+
useEffect(() => {
|
|
31770
|
+
if (value && onValueChange) {
|
|
31771
|
+
onValueChange({ value });
|
|
31772
|
+
}
|
|
31773
|
+
}, [value]);
|
|
31774
|
+
return valueType === filterValueTypeMap.select ? (jsxRuntimeExports$1.jsxs(Select, { value: value, onValueChange: setValue, children: [jsxRuntimeExports$1.jsx(Select.Trigger, { children: jsxRuntimeExports$1.jsx(Select.Value, { placeholder: "Select value" }) }), jsxRuntimeExports$1.jsx(Select.Content, { children: options.map((opt) => {
|
|
31775
|
+
return (jsxRuntimeExports$1.jsx(Select.Item, { value: opt.value, children: opt.label || opt.value }, opt.key));
|
|
31776
|
+
}) })] })) : (jsxRuntimeExports$1.jsx(TextField, { value: value, onChange: (e) => setValue(e.target.value) }));
|
|
31777
|
+
};
|
|
31778
|
+
const Operation = ({ columnType = columnTypesMap.text, onOperationSelect, }) => {
|
|
31779
|
+
const options = operationsOptions[columnType] || [];
|
|
31780
|
+
const [value, setValue] = useState(options?.[0].value);
|
|
31781
|
+
useEffect(() => {
|
|
31782
|
+
const selectedOption = options.find((o) => o.value === value);
|
|
31783
|
+
if (selectedOption) {
|
|
31784
|
+
onOperationSelect(selectedOption);
|
|
31785
|
+
}
|
|
31786
|
+
}, [value]);
|
|
31787
|
+
return (jsxRuntimeExports$1.jsxs(Select, { defaultValue: value, onValueChange: setValue, children: [jsxRuntimeExports$1.jsx(Select.Trigger, { className: styles$4.filterOperator, children: jsxRuntimeExports$1.jsx(Select.Value, { placeholder: "Select operation" }) }), jsxRuntimeExports$1.jsx(Select.Content, { children: options.map((opt) => {
|
|
31788
|
+
return (jsxRuntimeExports$1.jsx(Select.Item, { value: opt.label, children: opt.label }, opt.label));
|
|
31789
|
+
}) })] }));
|
|
31790
|
+
};
|
|
31791
|
+
const FilteredChip = ({ column, updateColumnCustomFilter, }) => {
|
|
31792
|
+
const [filterOperation, setFilterOperation] = useState();
|
|
31793
|
+
const [filterValue, setFilterValue] = useState();
|
|
31638
31794
|
const { table, removeFilterColumn } = useTable();
|
|
31639
31795
|
const { filterVariant } = column?.columnDef;
|
|
31640
31796
|
const options = column?.columnDef?.meta?.data || [];
|
|
31641
|
-
|
|
31642
|
-
const
|
|
31643
|
-
|
|
31644
|
-
|
|
31645
|
-
|
|
31646
|
-
|
|
31647
|
-
|
|
31648
|
-
new Set(column?.getFilterValue());
|
|
31649
|
-
return (jsxRuntimeExports$1.jsxs(Select, { children: [jsxRuntimeExports$1.jsx(Select.Trigger, { children: jsxRuntimeExports$1.jsx(Select.Value, { placeholder: "Select a value" }) }), jsxRuntimeExports$1.jsx(Select.Content, { children: jsxRuntimeExports$1.jsx(Select.Group, { children: options.map((option) => (jsxRuntimeExports$1.jsx(Select.Item, { value: option.value, children: option?.label || option?.value }, option.value))) }) })] }));
|
|
31650
|
-
}
|
|
31651
|
-
default: {
|
|
31652
|
-
const selectedValues = new Set(column?.getFilterValue());
|
|
31653
|
-
return (jsxRuntimeExports$1.jsxs(Popover, { children: [jsxRuntimeExports$1.jsx(Popover.Trigger, { asChild: true, children: jsxRuntimeExports$1.jsxs(Button$1, { children: [selectedValues.size, " selected"] }) }), jsxRuntimeExports$1.jsx(Popover.Content, { align: "start", style: { padding: 0 }, children: jsxRuntimeExports$1.jsxs(Command, { children: [jsxRuntimeExports$1.jsx(Command.Input, {}), jsxRuntimeExports$1.jsxs(Command.List, { children: [jsxRuntimeExports$1.jsx(Command.Empty, { children: "No results found." }), jsxRuntimeExports$1.jsx(Command.Group, { children: options.map((option) => {
|
|
31654
|
-
const isSelected = selectedValues.has(option.value);
|
|
31655
|
-
return (jsxRuntimeExports$1.jsx(Command.Item, { onSelect: () => {
|
|
31656
|
-
if (isSelected) {
|
|
31657
|
-
selectedValues.delete(option.value);
|
|
31658
|
-
}
|
|
31659
|
-
else {
|
|
31660
|
-
selectedValues.add(option.value);
|
|
31661
|
-
}
|
|
31662
|
-
const filterValues = Array.from(selectedValues);
|
|
31663
|
-
console.log(selectedValues, filterValues);
|
|
31664
|
-
column?.setFilterValue(filterValues.length ? filterValues : undefined);
|
|
31665
|
-
}, children: jsxRuntimeExports$1.jsxs(Flex, { justify: "between", gap: "small", children: [jsxRuntimeExports$1.jsxs(Flex, { align: "center", gap: "small", children: [jsxRuntimeExports$1.jsx(Checkbox, { checked: isSelected }), option.icon && (jsxRuntimeExports$1.jsx(option.icon, { className: "mr-2 h-4 w-4 text-muted-foreground" })), jsxRuntimeExports$1.jsx("span", { children: option.label })] }), facets?.get(option.value) && (jsxRuntimeExports$1.jsx("span", { children: facets.get(option.value) }))] }) }, option.value));
|
|
31666
|
-
}) }), selectedValues.size > 0 && (jsxRuntimeExports$1.jsxs(jsxRuntimeExports$1.Fragment, { children: [jsxRuntimeExports$1.jsx(Command.Separator, {}), jsxRuntimeExports$1.jsx(Command.Group, { children: jsxRuntimeExports$1.jsx(Command.Item, { onSelect: () => column?.setFilterValue(undefined), className: "justify-center text-center", children: "Clear filters" }) })] }))] })] }) })] }));
|
|
31667
|
-
}
|
|
31797
|
+
column?.getFacetedUniqueValues();
|
|
31798
|
+
const columnHeader = column?.columnDef?.header;
|
|
31799
|
+
const columnName = (typeof columnHeader === "string" && columnHeader) || column.id;
|
|
31800
|
+
useEffect(() => {
|
|
31801
|
+
if (filterOperation?.fn && filterValue) {
|
|
31802
|
+
updateColumnCustomFilter(column.id, filterOperation?.fn);
|
|
31803
|
+
column.setFilterValue(filterValue);
|
|
31668
31804
|
}
|
|
31669
|
-
};
|
|
31670
|
-
|
|
31671
|
-
|
|
31672
|
-
|
|
31673
|
-
|
|
31805
|
+
}, [filterOperation, filterValue]);
|
|
31806
|
+
function removeFilter() {
|
|
31807
|
+
column.setFilterValue(undefined);
|
|
31808
|
+
removeFilterColumn(column.id);
|
|
31809
|
+
setFilterOperation(undefined);
|
|
31810
|
+
setFilterValue({});
|
|
31811
|
+
}
|
|
31812
|
+
return (jsxRuntimeExports$1.jsxs(Box, { className: styles$4.chip, children: [jsxRuntimeExports$1.jsx(Text, { children: columnName }), jsxRuntimeExports$1.jsx(Operation, { columnType: filterVariant, onOperationSelect: setFilterOperation }), filterOperation?.hideValueField ? null : (jsxRuntimeExports$1.jsx(FilterValues, { columnType: filterVariant, options: options, onValueChange: setFilterValue })), jsxRuntimeExports$1.jsx(Flex, { children: jsxRuntimeExports$1.jsx(Cross1Icon, { height: "12", width: "12", onClick: removeFilter }) })] }));
|
|
31674
31813
|
};
|
|
31675
31814
|
|
|
31676
31815
|
function DataTableFilterChips(props) {
|
|
31677
|
-
const { filteredColumns, table } = useTable();
|
|
31816
|
+
const { filteredColumns, table, updateColumnCustomFilter } = useTable();
|
|
31678
31817
|
const tableColumns = table
|
|
31679
31818
|
.getAllColumns()
|
|
31680
31819
|
.filter((column) => typeof column.accessorFn !== "undefined" && column.getCanHide());
|
|
@@ -31682,7 +31821,7 @@ function DataTableFilterChips(props) {
|
|
|
31682
31821
|
return null;
|
|
31683
31822
|
return (jsxRuntimeExports$1.jsxs(Flex, { gap: "small", align: "center", className: styles$4.chipWrapper, ...props, children: [filteredColumns.map((filter, index) => {
|
|
31684
31823
|
const filteredColumn = table.getColumn(filter);
|
|
31685
|
-
return jsxRuntimeExports$1.jsx(FilteredChip, { column: filteredColumn }, index);
|
|
31824
|
+
return (jsxRuntimeExports$1.jsx(FilteredChip, { column: filteredColumn, updateColumnCustomFilter: updateColumnCustomFilter }, index));
|
|
31686
31825
|
}), filteredColumns.length < tableColumns.length && (jsxRuntimeExports$1.jsx(DataTableFilterOptions, { variant: "ghost", style: { border: "none", background: "none" }, children: jsxRuntimeExports$1.jsx(PlusIcon, { width: 16, height: 16 }) }))] }));
|
|
31687
31826
|
}
|
|
31688
31827
|
|
|
@@ -31777,6 +31916,7 @@ const Table = Object.assign(TableRoot, {
|
|
|
31777
31916
|
});
|
|
31778
31917
|
|
|
31779
31918
|
function DataTableRoot({ columns, data, emptyState, children, parentStyle, ShouldShowHeader = true, ...props }) {
|
|
31919
|
+
const [tableCustomFilter, setTableCustomFilter] = React__default.useState({});
|
|
31780
31920
|
const convertedChildren = Children.toArray(children);
|
|
31781
31921
|
const header = convertedChildren.find((child) => child.type === DataTableToolbar) || null;
|
|
31782
31922
|
const footer = convertedChildren.find((child) => child.type === DataTableFooter) || null;
|
|
@@ -31788,9 +31928,20 @@ function DataTableRoot({ columns, data, emptyState, children, parentStyle, Shoul
|
|
|
31788
31928
|
const [rowSelection, setRowSelection] = React__default.useState({});
|
|
31789
31929
|
const [globalFilter, setGlobalFilter] = React__default.useState("");
|
|
31790
31930
|
const { filteredColumns, addFilterColumn, removeFilterColumn, resetColumns } = useTableColumn();
|
|
31931
|
+
const columnWithCustomFilter = columns.map((col) => {
|
|
31932
|
+
// @ts-ignore;
|
|
31933
|
+
const colId = col.id || col?.accessorKey;
|
|
31934
|
+
if (colId && tableCustomFilter.hasOwnProperty(colId)) {
|
|
31935
|
+
col.filterFn = tableCustomFilter[colId];
|
|
31936
|
+
}
|
|
31937
|
+
return col;
|
|
31938
|
+
});
|
|
31939
|
+
const updateColumnCustomFilter = (id, filterFn) => {
|
|
31940
|
+
setTableCustomFilter((old) => ({ ...old, [id]: filterFn }));
|
|
31941
|
+
};
|
|
31791
31942
|
const table = useReactTable({
|
|
31792
31943
|
data,
|
|
31793
|
-
columns,
|
|
31944
|
+
columns: columnWithCustomFilter,
|
|
31794
31945
|
globalFilterFn: "auto",
|
|
31795
31946
|
enableRowSelection: true,
|
|
31796
31947
|
manualPagination: true,
|
|
@@ -31826,6 +31977,8 @@ function DataTableRoot({ columns, data, emptyState, children, parentStyle, Shoul
|
|
|
31826
31977
|
resetColumns,
|
|
31827
31978
|
onGlobalFilterChange: setGlobalFilter,
|
|
31828
31979
|
onChange: () => ({}),
|
|
31980
|
+
tableCustomFilter,
|
|
31981
|
+
updateColumnCustomFilter,
|
|
31829
31982
|
}, children: [jsxRuntimeExports$1.jsxs(Flex, { direction: "column", className: styles$4.datatable, children: [header, jsxRuntimeExports$1.jsxs(Flex, { className: styles$4.tableContainer, style: parentStyle, children: [jsxRuntimeExports$1.jsxs(Table, { ...props, style: tableStyle, children: [jsxRuntimeExports$1.jsx(Table.Header, { children: ShouldShowHeader
|
|
31830
31983
|
? table.getHeaderGroups().map((headerGroup) => (jsxRuntimeExports$1.jsx(Table.Row, { children: headerGroup.headers.map((header, index) => {
|
|
31831
31984
|
return (jsxRuntimeExports$1.jsx(Table.Head, { style: {
|