From 05666445089187e46bf8f9d32dfd49ddfae9cc16 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 21 Aug 2023 11:56:58 +0100 Subject: [PATCH] Allow view searching and sorting. Refactor grid logic to fix multiple issuies --- packages/client/manifest.json | 5 +- packages/frontend-core/src/api/viewsV2.js | 3 + .../grid/controls/SortButton.svelte | 46 ++----- .../src/components/grid/stores/pagination.js | 7 +- .../src/components/grid/stores/sort.js | 27 +++- .../src/components/grid/stores/table.js | 82 ++++++------ .../src/components/grid/stores/viewV2.js | 123 +++++++++++------- packages/frontend-core/src/fetch/DataFetch.js | 71 +++++----- .../frontend-core/src/fetch/QueryFetch.js | 4 + .../frontend-core/src/fetch/ViewV2Fetch.js | 12 +- .../server/src/api/controllers/row/views.ts | 30 ++++- packages/types/src/api/web/app/rows.ts | 8 +- 12 files changed, 250 insertions(+), 168 deletions(-) diff --git a/packages/client/manifest.json b/packages/client/manifest.json index 795cc17097..c8d0506553 100644 --- a/packages/client/manifest.json +++ b/packages/client/manifest.json @@ -4615,14 +4615,15 @@ "type": "field/sortable", "label": "Sort by", "key": "sortColumn", - "placeholder": "None" + "placeholder": "Default" }, { "type": "select", "label": "Sort order", "key": "sortOrder", "options": ["Ascending", "Descending"], - "defaultValue": "Ascending" + "defaultValue": "Ascending", + "dependsOn": "sortColumn" }, { "type": "select", diff --git a/packages/frontend-core/src/api/viewsV2.js b/packages/frontend-core/src/api/viewsV2.js index c765214c3b..38bacac012 100644 --- a/packages/frontend-core/src/api/viewsV2.js +++ b/packages/frontend-core/src/api/viewsV2.js @@ -31,6 +31,7 @@ export const buildViewV2Endpoints = API => ({ /** * Fetches all rows in a view * @param viewId the id of the view + * @param query the search query * @param paginate whether to paginate or not * @param limit page size * @param bookmark pagination cursor @@ -40,6 +41,7 @@ export const buildViewV2Endpoints = API => ({ */ fetch: async ({ viewId, + query, paginate, limit, bookmark, @@ -50,6 +52,7 @@ export const buildViewV2Endpoints = API => ({ return await API.post({ url: `/api/v2/views/${viewId}/search`, body: { + query, paginate, limit, bookmark, diff --git a/packages/frontend-core/src/components/grid/controls/SortButton.svelte b/packages/frontend-core/src/components/grid/controls/SortButton.svelte index bd75249216..60e3c8e514 100644 --- a/packages/frontend-core/src/components/grid/controls/SortButton.svelte +++ b/packages/frontend-core/src/components/grid/controls/SortButton.svelte @@ -8,7 +8,6 @@ let anchor $: columnOptions = getColumnOptions($stickyColumn, $columns) - $: checkValidSortColumn($sort.column, $stickyColumn, $columns) $: orderOptions = getOrderOptions($sort.column, columnOptions) const getColumnOptions = (stickyColumn, columns) => { @@ -46,8 +45,8 @@ const updateSortColumn = e => { sort.update(state => ({ - ...state, column: e.detail, + order: e.detail ? state.order : "ascending", })) } @@ -57,29 +56,6 @@ order: e.detail, })) } - - // Ensure we never have a sort column selected that is not visible - const checkValidSortColumn = (sortColumn, stickyColumn, columns) => { - if (!sortColumn) { - return - } - if ( - sortColumn !== stickyColumn?.name && - !columns.some(col => col.name === sortColumn) - ) { - if (stickyColumn) { - sort.update(state => ({ - ...state, - column: stickyColumn.name, - })) - } else { - sort.update(state => ({ - ...state, - column: columns[0]?.name, - })) - } - } - }
@@ -98,21 +74,23 @@
+ {#if $sort.column} +