enhance contract and booking services with server-side search and validation improvements

- Added  parameter to  and  for server-side free-text search on contract reference, company name, and booking details.
- Introduced new validation errors in  for container clashes and space issues when creating bookings.
- Implemented paginated dropdown settings retrieval in .
- Updated  to fetch active yards using a new method that handles pagination.
- Enhanced  with a  method to fetch all records by walking through pages.
- Refactored  to support filtering and pagination in schedule listings.
- Improved  to return a paginated list of facilities.
- Updated UI components in  and  to utilize debounced search inputs for better performance.
- Added alerts in  to inform users about booking constraints related to splits and capacity.
- Enhanced  to display notifications for split bookings and capacity usage.
This commit is contained in:
Marshal
2026-07-12 10:51:31 +00:00
parent 6695c5448e
commit 4b7f6d2548
108 changed files with 3187 additions and 1368 deletions

View File

@@ -31,24 +31,31 @@ export function patchRuleEngineListRecord(
qc.setQueriesData<RuleEngineListResult<RuleEngineRecord>>(
{ queryKey: ["rule-engine", "list", resource] },
(old) => {
if (!old?.data?.length) return old;
const index = old.data.findIndex((row) => String(row.id) === updatedId);
if (!old?.items?.length) return old;
const index = old.items.findIndex((row) => String(row.id) === updatedId);
if (index === -1) return old;
const data = old.data.slice();
data[index] = { ...data[index], ...updated };
return { ...old, data };
const items = old.items.slice();
items[index] = { ...items[index], ...updated };
return { ...old, items };
},
);
}
/** Invalidate and refetch active rule-engine list queries for a resource. */
/**
* Invalidate and refetch active rule-engine list queries for a resource.
* Also covers the page-walked order/full lists (order-list key), which show
* the same rows and must refresh after any create/update/delete.
*/
export async function invalidateRuleEngineList(
qc: QueryClient,
resource: RuleEngineResourceSlug | string,
): Promise<void> {
const queryKey = ["rule-engine", "list", resource] as const;
await qc.invalidateQueries({ queryKey });
await qc.refetchQueries({ queryKey, type: "active" });
const listKey = ["rule-engine", "list", resource] as const;
const orderListKey = ["rule-engine", "order-list", resource] as const;
await qc.invalidateQueries({ queryKey: listKey });
await qc.invalidateQueries({ queryKey: orderListKey });
await qc.refetchQueries({ queryKey: listKey, type: "active" });
await qc.refetchQueries({ queryKey: orderListKey, type: "active" });
}
export function invalidateRuleEngineRoot(qc: QueryClient): Promise<void> {