diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/SaveFields.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/SaveFields.svelte index f6bd54ffb6..f4a4bea334 100644 --- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/SaveFields.svelte +++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/SaveFields.svelte @@ -80,7 +80,7 @@ /> {/each}
- diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/FilterEditor/FilterEditor.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/FilterEditor/FilterEditor.svelte index d90097939a..1662337409 100644 --- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/FilterEditor/FilterEditor.svelte +++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/FilterEditor/FilterEditor.svelte @@ -12,22 +12,35 @@ getDatasourceForProvider, getSchemaForDatasource, } from "builderStore/dataBinding" - import FilterBuilder from "./FilterBuilder.svelte" + import LuceneFilterBuilder from "./LuceneFilterBuilder.svelte" import { currentAsset } from "builderStore" + import SaveFields from "../EventsEditor/actions/SaveFields.svelte" const dispatch = createEventDispatcher() - export let value = {} + export let value = [] export let componentInstance let drawer - let tempValue = Array.isArray(value) ? value : [] + let tempValue = value - $: schemaFields = getSchemaFields(componentInstance) + $: numFilters = Array.isArray(tempValue) + ? tempValue.length + : Object.keys(tempValue || {}).length + $: dataSource = getDatasourceForProvider($currentAsset, componentInstance) + $: schema = getSchemaForDatasource(dataSource)?.schema + $: schemaFields = Object.values(schema || {}) + $: internalTable = dataSource?.type === "table" - const getSchemaFields = component => { - const datasource = getDatasourceForProvider($currentAsset, component) - const { schema } = getSchemaForDatasource(datasource) - return Object.values(schema || {}) + // Reset value if value is wrong type for the datasource. + // Lucene editor needs an array, and simple editor needs an object. + $: { + if (internalTable && !Array.isArray(value)) { + tempValue = [] + dispatch("change", []) + } else if (!internalTable && Array.isArray(value)) { + tempValue = {} + dispatch("change", {}) + } } const saveFilter = async () => { @@ -43,14 +56,35 @@ - {#if !Object.keys(tempValue || {}).length} + {#if !numFilters} Add your first filter column. {:else} Results are filtered to only those which match all of the following constaints. {/if} - + {#if internalTable} + + {:else} +
+ (tempValue = e.detail)} + /> +
+ {/if}
+ + diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/FilterEditor/FilterBuilder.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/FilterEditor/LuceneFilterBuilder.svelte similarity index 100% rename from packages/builder/src/components/design/PropertiesPanel/PropertyControls/FilterEditor/FilterBuilder.svelte rename to packages/builder/src/components/design/PropertiesPanel/PropertyControls/FilterEditor/LuceneFilterBuilder.svelte diff --git a/packages/standard-components/src/DataProvider.svelte b/packages/standard-components/src/DataProvider.svelte index 512a4c594d..418d80f7a9 100644 --- a/packages/standard-components/src/DataProvider.svelte +++ b/packages/standard-components/src/DataProvider.svelte @@ -24,7 +24,7 @@ let pageNumber = 0 $: internalTable = dataSource?.type === "table" - $: query = dataSource?.type === "table" ? buildLuceneQuery(filter) : null + $: query = internalTable ? buildLuceneQuery(filter) : null $: hasNextPage = bookmarks[pageNumber + 1] != null $: hasPrevPage = pageNumber > 0 $: getSchema(dataSource) @@ -34,8 +34,8 @@ if (internalTable) { rows = allRows } else { - rows = sortRows(allRows, sortColumn, sortOrder) - rows = limitRows(rows, limit) + const sortedRows = sortRows(allRows, sortColumn, sortOrder) + rows = limitRows(sortedRows, limit) } } $: actions = [ @@ -213,7 +213,7 @@ } const nextPage = async () => { - if (!hasNextPage) { + if (!hasNextPage || !internalTable) { return } const res = await API.searchTable({ @@ -244,7 +244,7 @@ } const prevPage = async () => { - if (!hasPrevPage) { + if (!hasPrevPage || !internalTable) { return } const res = await API.searchTable({