mirror of
https://github.com/opensourcepos/opensourcepos.git
synced 2026-03-25 10:21:36 -04:00
This commit adds URL-based filter persistence for table views, allowing users to navigate away from a filtered view (e.g., clicking into sale details) and return without losing their filter settings. The solution uses history.replaceState() to update the URL without triggering a page reload, providing a seamless user experience while maintaining shareable/bookmarkable URLs. Fixes navigation issue where filters are lost when viewing details or navigating away from table views. * Move filter restoration to server-side for cleaner architecture Changes: - Controllers now restore filters from URL query string on initial page load: * Sales.php: Reads start_date, end_date, and filters[] from GET * Items.php: Reads start_date, end_date, filters[], and stock_location * Expenses.php: Reads start_date, end_date, and filters[] * Cashups.php: Reads start_date, end_date, and filters[] - Views now receive restored filter values from controllers: * Server-side date override via JavaScript variables * form_multiselect() receives $selected_filters from controller * Removed setTimeout hack from table_filter_persistence.php - Simplified table_filter_persistence.php: * Now only handles URL updates on filter changes * No longer responsible for restoring state * Cleaner, single responsibility (client-side URL management) Benefits: - Works without JavaScript for initial render - Cleaner architecture (server controls initial state) - Client-side JS only handles "live" filter updates - Filters persist across navigation via URL query string - Shareable/bookmarkable URLs How it works: 1. User visits /sales/manage?start_date=2024-01-01&filters[]=only_cash 2. Controller reads GET params and passes to view 3. View renders with correct initial filter values 4. User changes filter → JavaScript updates URL via replaceState() 5. User navigates away and back → Controller restores from URL again * Refactor filter restoration into helper function and use PSR-12 naming * Use array_merge with helper to reduce code duplication --------- Co-authored-by: Ollama <ollama@steganos.dev>