From 5facd389d972031ba709dc548853413ac89a7cb6 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 30 Oct 2023 09:51:54 -0700 Subject: [PATCH 1/3] Refactor filters into a reusable component --- .../components/filters}/content.svelte | 15 +++++++++------ .../components/filters}/filters.svelte | 16 ++++++++++++++-- src/lib/components/filters/index.ts | 1 + .../components/filters}/store.ts | 12 ++---------- src/lib/components/viewSelector.svelte | 10 +--------- src/lib/helpers/load.ts | 4 ++++ src/lib/helpers/types.ts | 10 ++++++++++ src/lib/layout/gridHeader.svelte | 2 +- .../database-[database]/[[page]]/store.ts | 16 +++++----------- .../collection-[collection]/+page.svelte | 9 +++++---- .../collection-[collection]/+page.ts | 7 ++++--- .../collection-[collection]/store.ts | 9 +-------- .../collection-[collection]/table.svelte | 3 ++- .../databases/database-[database]/store.ts | 10 +++++----- .../console/project-[project]/databases/store.ts | 10 +++++----- 15 files changed, 69 insertions(+), 65 deletions(-) rename src/{routes/console/project-[project]/databases/database-[database]/collection-[collection]/(filters) => lib/components/filters}/content.svelte (93%) rename src/{routes/console/project-[project]/databases/database-[database]/collection-[collection]/(filters) => lib/components/filters}/filters.svelte (84%) create mode 100644 src/lib/components/filters/index.ts rename src/{routes/console/project-[project]/databases/database-[database]/collection-[collection]/(filters) => lib/components/filters}/store.ts (84%) diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/(filters)/content.svelte b/src/lib/components/filters/content.svelte similarity index 93% rename from src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/(filters)/content.svelte rename to src/lib/components/filters/content.svelte index 19b464b679..736f54dc0d 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/(filters)/content.svelte +++ b/src/lib/components/filters/content.svelte @@ -4,8 +4,11 @@ import InputText from '$lib/elements/forms/inputText.svelte'; import { Query } from '@appwrite.io/console'; import { createEventDispatcher } from 'svelte'; - import { columns } from '../store'; - import { tags, type Column, type Operator, queries } from './store'; + import { tags, type Operator, queries } from './store'; + import type { Column } from '$lib/helpers/types'; + import type { Writable } from 'svelte/store'; + + export let columns: Writable; const dispatch = createEventDispatcher<{ clear: void; @@ -31,22 +34,22 @@ 'greater than': { toQuery: (attr, input) => Query.greaterThan(attr, Number(input)), toTag: (attribute, input) => `**${attribute}** greater than **${input}**`, - types: ['integer', 'double'] + types: ['integer', 'double', 'datetime'] }, 'greater than or equal to': { toQuery: (attr, input) => Query.greaterThanEqual(attr, Number(input)), toTag: (attribute, input) => `**${attribute}** greater than or equal to **${input}**`, - types: ['integer', 'double'] + types: ['integer', 'double', 'datetime'] }, 'less than': { toQuery: Query.lessThan, toTag: (attribute, input) => `**${attribute}** less than **${input}**`, - types: ['integer', 'double'] + types: ['integer', 'double', 'datetime'] }, 'less than or equal to': { toQuery: Query.lessThanEqual, toTag: (attribute, input) => `**${attribute}** less than or equal to **${input}**`, - types: ['integer', 'double'] + types: ['integer', 'double', 'datetime'] }, equal: { toQuery: Query.equal, diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/(filters)/filters.svelte b/src/lib/components/filters/filters.svelte similarity index 84% rename from src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/(filters)/filters.svelte rename to src/lib/components/filters/filters.svelte index 7aa33e4972..cd2f8bfd99 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/(filters)/filters.svelte +++ b/src/lib/components/filters/filters.svelte @@ -2,8 +2,16 @@ import { beforeNavigate } from '$app/navigation'; import { Drop, Modal } from '$lib/components'; import { Button } from '$lib/elements/forms'; + import type { Column } from '$lib/helpers/types'; + import type { Writable } from 'svelte/store'; import Content from './content.svelte'; - import { queries, queriesAreDirty, tags } from './store'; + import { queries, queriesAreDirty, queryParamToMap, tags } from './store'; + + export let query = '[]'; + export let columns: Writable; + + const parsedQueries = queryParamToMap(query); + queries.set(parsedQueries); // We need to separate them so we don't trigger Drop's handlers let showFiltersDesktop = false; @@ -33,6 +41,7 @@

Apply filter rules to refine the table view

(applied = e.detail.applied)} on:clear={() => (applied = 0)} />
@@ -61,7 +70,10 @@ description="Apply filter rules to refine the table view" bind:show={showFiltersMobile} size="big"> - (applied = e.detail.applied)} on:clear={() => (applied = 0)} /> + (applied = e.detail.applied)} + on:clear={() => (applied = 0)} /> = Store extends Writable ? T : never; -export type Column = Omit[number], 'type'> & { - type: ColumnType; -}; +import type { Column, ColumnType } from '$lib/helpers/types'; export type Operator = { toTag: (attribute: string, input?: string | number) => string; diff --git a/src/lib/components/viewSelector.svelte b/src/lib/components/viewSelector.svelte index c5987d501c..0ece86889c 100644 --- a/src/lib/components/viewSelector.svelte +++ b/src/lib/components/viewSelector.svelte @@ -1,12 +1,3 @@ - -
From e76b9aec4b1a73fe2a3a798dea8842f25ad3268c Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 30 Oct 2023 10:20:23 -0700 Subject: [PATCH 3/3] Fix filtering on booleans --- src/lib/components/filters/content.svelte | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/lib/components/filters/content.svelte b/src/lib/components/filters/content.svelte index d960cc5bd9..6da14dcc69 100644 --- a/src/lib/components/filters/content.svelte +++ b/src/lib/components/filters/content.svelte @@ -135,6 +135,16 @@
{#if column.type === 'integer' || column.type === 'double'} + {:else if column.type === 'boolean'} + {:else} {/if}