IO-3365 Push Filters to Query

Signed-off-by: Allan Carr <allan@imexsystems.ca>
This commit is contained in:
Allan Carr
2025-09-11 21:32:18 -07:00
parent 808eeb91e9
commit 02974e6e4b
3 changed files with 25 additions and 9 deletions

View File

@@ -20,8 +20,8 @@ export const DELETE_BILL = gql`
`; `;
export const QUERY_ALL_BILLS_PAGINATED = gql` export const QUERY_ALL_BILLS_PAGINATED = gql`
query QUERY_ALL_BILLS_PAGINATED($offset: Int, $limit: Int, $order: [bills_order_by!]!) { query QUERY_ALL_BILLS_PAGINATED($offset: Int, $limit: Int, $order: [bills_order_by!]!, $where: bills_bool_exp) {
bills(offset: $offset, limit: $limit, order_by: $order) { bills(offset: $offset, limit: $limit, order_by: $order, where: $where) {
id id
vendorid vendorid
vendor { vendor {

View File

@@ -31,7 +31,7 @@ export function BillsListPage({ loading, data, refetch, total, setBillEnterConte
const history = useNavigate(); const history = useNavigate();
const [state, setState] = useLocalStorage("bills_list_sort", { const [state, setState] = useLocalStorage("bills_list_sort", {
sortedInfo: {}, sortedInfo: {},
filteredInfo: { text: "" } filteredInfo: { vendorname: [] }
}); });
const Templates = TemplateList("bill"); const Templates = TemplateList("bill");
const { t } = useTranslation(); const { t } = useTranslation();
@@ -48,8 +48,7 @@ export function BillsListPage({ loading, data, refetch, total, setBillEnterConte
vendor: { name: order === "descend" ? "desc" : "asc" } vendor: { name: order === "descend" ? "desc" : "asc" }
}), }),
filters: (vendorsData?.vendors || []).map((v) => ({ text: v.name, value: v.id })), filters: (vendorsData?.vendors || []).map((v) => ({ text: v.name, value: v.id })),
filteredValue: state.filteredInfo.vendorname || null, filteredValue: search.vendorIds ? search.vendorIds.split(",") : null,
onFilter: (value, record) => record.vendorid === value,
sortOrder: state.sortedInfo.columnKey === "vendorname" && state.sortedInfo.order, sortOrder: state.sortedInfo.columnKey === "vendorname" && state.sortedInfo.order,
render: (text, record) => <span>{record.vendor.name}</span> render: (text, record) => <span>{record.vendor.name}</span>
}, },
@@ -165,20 +164,36 @@ export function BillsListPage({ loading, data, refetch, total, setBillEnterConte
]; ];
const handleTableChange = (pagination, filters, sorter) => { const handleTableChange = (pagination, filters, sorter) => {
// Persist filters (including vendorname) and sorting setState({
setState({ ...state, filteredInfo: { ...state.filteredInfo, ...filters }, sortedInfo: sorter }); sortedInfo: sorter,
filteredInfo: { ...state.filteredInfo, vendorname: filters.vendorname || [] }
});
search.page = pagination.current; search.page = pagination.current;
if (filters.vendorname && filters.vendorname.length) {
search.vendorIds = filters.vendorname.join(",");
} else {
delete search.vendorIds;
}
if (sorter && sorter.column && sorter.column.sortObject) { if (sorter && sorter.column && sorter.column.sortObject) {
search.searchObj = JSON.stringify(sorter.column.sortObject(sorter.order)); search.searchObj = JSON.stringify(sorter.column.sortObject(sorter.order));
delete search.sortcolumn;
delete search.sortorder;
} else { } else {
delete search.searchObj; delete search.searchObj;
search.sortcolumn = sorter.order ? sorter.columnKey : null; search.sortcolumn = sorter.order ? sorter.columnKey : null;
search.sortorder = sorter.order; search.sortorder = sorter.order;
} }
search.sort = JSON.stringify({ [sorter.columnKey]: sorter.order });
history({ search: queryString.stringify(search) }); history({ search: queryString.stringify(search) });
}; };
useEffect(() => {
if (!search.vendorIds && state.filteredInfo.vendorname && state.filteredInfo.vendorname.length) {
search.vendorIds = state.filteredInfo.vendorname.join(",");
history({ search: queryString.stringify(search) });
}
}, []);
useEffect(() => { useEffect(() => {
if (search.search && search.search.trim() !== "") { if (search.search && search.search.trim() !== "") {
searchBills(); searchBills();

View File

@@ -49,7 +49,8 @@ export function BillsPageContainer({ setBreadcrumbs, setSelectedHeader }) {
: { : {
[sortcolumn || "date"]: sortorder ? (sortorder === "descend" ? "desc" : "asc") : "desc" [sortcolumn || "date"]: sortorder ? (sortorder === "descend" ? "desc" : "asc") : "desc"
} }
] ],
where: searchParams.vendorIds ? { vendorid: { _in: searchParams.vendorIds.split(",") } } : undefined
} }
}); });