From a51f5c73c4a9b7d8cfae4c6b30d3a73aa9ea0d8e Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Tue, 16 Mar 2021 13:54:34 +0000 Subject: [PATCH 01/51] Add data provider component and refactor component setting types --- .../builder/src/builderStore/dataBinding.js | 11 ++- .../design/AppPreview/componentStructure.json | 1 + .../DataProviderSelect.svelte | 23 +++++ ...eSelect.svelte => DataSourceSelect.svelte} | 0 .../PropertyControls/SchemaSelect.svelte | 4 +- .../PropertiesPanel/SettingsView.svelte | 6 +- packages/client/src/api/datasources.js | 18 ++-- packages/client/src/api/queries.js | 4 +- packages/client/src/api/rows.js | 10 +- .../client/src/components/ClientApp.svelte | 2 +- .../client/src/components/Provider.svelte | 10 +- packages/client/src/store/dataSource.js | 84 +++++++++++++++++ packages/client/src/store/datasource.js | 84 ----------------- packages/client/src/store/index.js | 2 +- packages/standard-components/manifest.json | 51 +++++++++- .../src/DataProvider.svelte | 93 +++++++++++++++++++ packages/standard-components/src/List.svelte | 74 ++++----------- packages/standard-components/src/index.js | 1 + 18 files changed, 302 insertions(+), 176 deletions(-) create mode 100644 packages/builder/src/components/design/PropertiesPanel/PropertyControls/DataProviderSelect.svelte rename packages/builder/src/components/design/PropertiesPanel/PropertyControls/{DatasourceSelect.svelte => DataSourceSelect.svelte} (100%) create mode 100644 packages/client/src/store/dataSource.js delete mode 100644 packages/client/src/store/datasource.js create mode 100644 packages/standard-components/src/DataProvider.svelte diff --git a/packages/builder/src/builderStore/dataBinding.js b/packages/builder/src/builderStore/dataBinding.js index dee0b86fb3..76a05b3bdb 100644 --- a/packages/builder/src/builderStore/dataBinding.js +++ b/packages/builder/src/builderStore/dataBinding.js @@ -35,7 +35,7 @@ export const getDataProviderComponents = (asset, componentId) => { // Filter by only data provider components return path.filter(component => { const def = store.actions.components.getDefinition(component._component) - return def?.dataProvider + return def?.dataContext != null }) } @@ -101,15 +101,16 @@ const getContextBindings = (asset, componentId) => { // Create bindings for each data provider dataProviders.forEach(component => { - const isForm = component._component.endsWith("/form") - const datasource = getDatasourceForProvider(component) - let tableName, schema + const def = store.actions.components.getDefinition(component._component) + const contextDefinition = def.dataContext + let schema // Forms are an edge case which do not need table schemas - if (isForm) { + if (contextDefinition.type === "form") { schema = buildFormSchema(component) tableName = "Fields" } else { + const datasource = getDatasourceForProvider(component) if (!datasource) { return } diff --git a/packages/builder/src/components/design/AppPreview/componentStructure.json b/packages/builder/src/components/design/AppPreview/componentStructure.json index 16109b5a96..0b53ea45fd 100644 --- a/packages/builder/src/components/design/AppPreview/componentStructure.json +++ b/packages/builder/src/components/design/AppPreview/componentStructure.json @@ -1,5 +1,6 @@ [ "container", + "dataprovider", "datagrid", "list", "button", diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/DataProviderSelect.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/DataProviderSelect.svelte new file mode 100644 index 0000000000..d13b0c68eb --- /dev/null +++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/DataProviderSelect.svelte @@ -0,0 +1,23 @@ + + + diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/DatasourceSelect.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/DataSourceSelect.svelte similarity index 100% rename from packages/builder/src/components/design/PropertiesPanel/PropertyControls/DatasourceSelect.svelte rename to packages/builder/src/components/design/PropertiesPanel/PropertyControls/DataSourceSelect.svelte diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/SchemaSelect.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/SchemaSelect.svelte index 62584fbc93..b21f2c3bd5 100644 --- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/SchemaSelect.svelte +++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/SchemaSelect.svelte @@ -1,7 +1,7 @@ - + diff --git a/packages/builder/src/components/design/PropertiesPanel/SettingsView.svelte b/packages/builder/src/components/design/PropertiesPanel/SettingsView.svelte index 3cb2437e8e..5db5c77dd5 100644 --- a/packages/builder/src/components/design/PropertiesPanel/SettingsView.svelte +++ b/packages/builder/src/components/design/PropertiesPanel/SettingsView.svelte @@ -13,7 +13,8 @@ import OptionSelect from "./PropertyControls/OptionSelect.svelte" import Checkbox from "./PropertyControls/Checkbox.svelte" import TableSelect from "./PropertyControls/TableSelect.svelte" - import DatasourceSelect from "./PropertyControls/DatasourceSelect.svelte" + import DataSourceSelect from "./PropertyControls/DataSourceSelect.svelte" + import DataProviderSelect from "./PropertyControls/DataProviderSelect.svelte" import FieldSelect from "./PropertyControls/FieldSelect.svelte" import MultiFieldSelect from "./PropertyControls/MultiFieldSelect.svelte" import SchemaSelect from "./PropertyControls/SchemaSelect.svelte" @@ -61,7 +62,8 @@ const controlMap = { text: Input, select: OptionSelect, - datasource: DatasourceSelect, + dataSource: DataSourceSelect, + dataProvider: DataProviderSelect, detailScreen: DetailScreenSelect, boolean: Checkbox, number: Input, diff --git a/packages/client/src/api/datasources.js b/packages/client/src/api/datasources.js index c2af90592e..508e1e8db0 100644 --- a/packages/client/src/api/datasources.js +++ b/packages/client/src/api/datasources.js @@ -7,31 +7,31 @@ import { executeQuery } from "./queries" /** * Fetches all rows for a particular Budibase data source. */ -export const fetchDatasource = async datasource => { - if (!datasource || !datasource.type) { +export const fetchDatasource = async dataSource => { + if (!dataSource || !dataSource.type) { return [] } // Fetch all rows in data source - const { type, tableId, fieldName } = datasource + const { type, tableId, fieldName } = dataSource let rows = [] if (type === "table") { rows = await fetchTableData(tableId) } else if (type === "view") { - rows = await fetchViewData(datasource) + rows = await fetchViewData(dataSource) } else if (type === "query") { // Set the default query params - let parameters = cloneDeep(datasource.queryParams || {}) - for (let param of datasource.parameters) { + let parameters = cloneDeep(dataSource.queryParams || {}) + for (let param of dataSource.parameters) { if (!parameters[param.name]) { parameters[param.name] = param.default } } - rows = await executeQuery({ queryId: datasource._id, parameters }) + rows = await executeQuery({ queryId: dataSource._id, parameters }) } else if (type === "link") { rows = await fetchRelationshipData({ - rowId: datasource.rowId, - tableId: datasource.rowTableId, + rowId: dataSource.rowId, + tableId: dataSource.rowTableId, fieldName, }) } diff --git a/packages/client/src/api/queries.js b/packages/client/src/api/queries.js index 9876c85a63..715841f0fa 100644 --- a/packages/client/src/api/queries.js +++ b/packages/client/src/api/queries.js @@ -1,4 +1,4 @@ -import { notificationStore, datasourceStore } from "../store" +import { notificationStore, dataSourceStore } from "../store" import API from "./api" /** @@ -20,7 +20,7 @@ export const executeQuery = async ({ queryId, parameters }) => { notificationStore.danger("An error has occurred") } else if (!query.readable) { notificationStore.success("Query executed successfully") - datasourceStore.actions.invalidateDatasource(query.datasourceId) + dataSourceStore.actions.invalidateDataSource(query.datasourceId) } return res } diff --git a/packages/client/src/api/rows.js b/packages/client/src/api/rows.js index 639516f0f6..87cc9a9d37 100644 --- a/packages/client/src/api/rows.js +++ b/packages/client/src/api/rows.js @@ -1,4 +1,4 @@ -import { notificationStore, datasourceStore } from "../store" +import { notificationStore, dataSourceStore } from "../store" import API from "./api" import { fetchTableDefinition } from "./tables" @@ -31,7 +31,7 @@ export const saveRow = async row => { : notificationStore.success("Row saved") // Refresh related datasources - datasourceStore.actions.invalidateDatasource(row.tableId) + dataSourceStore.actions.invalidateDataSource(row.tableId) return res } @@ -52,7 +52,7 @@ export const updateRow = async row => { : notificationStore.success("Row updated") // Refresh related datasources - datasourceStore.actions.invalidateDatasource(row.tableId) + dataSourceStore.actions.invalidateDataSource(row.tableId) return res } @@ -72,7 +72,7 @@ export const deleteRow = async ({ tableId, rowId, revId }) => { : notificationStore.success("Row deleted") // Refresh related datasources - datasourceStore.actions.invalidateDatasource(tableId) + dataSourceStore.actions.invalidateDataSource(tableId) return res } @@ -96,7 +96,7 @@ export const deleteRows = async ({ tableId, rows }) => { : notificationStore.success(`${rows.length} row(s) deleted`) // Refresh related datasources - datasourceStore.actions.invalidateDatasource(tableId) + dataSourceStore.actions.invalidateDataSource(tableId) return res } diff --git a/packages/client/src/components/ClientApp.svelte b/packages/client/src/components/ClientApp.svelte index e8ab668ef2..8fb1b83d4c 100644 --- a/packages/client/src/components/ClientApp.svelte +++ b/packages/client/src/components/ClientApp.svelte @@ -33,7 +33,7 @@ { type: ActionTypes.RefreshDatasource, callback: () => authStore.actions.fetchUser(), - metadata: { datasource: { type: "table", tableId: TableNames.USERS } }, + metadata: { dataSource: { type: "table", tableId: TableNames.USERS } }, }, ] diff --git a/packages/client/src/components/Provider.svelte b/packages/client/src/components/Provider.svelte index 6f56e62abe..d2679957c0 100644 --- a/packages/client/src/components/Provider.svelte +++ b/packages/client/src/components/Provider.svelte @@ -1,6 +1,6 @@ diff --git a/packages/client/src/store/dataSource.js b/packages/client/src/store/dataSource.js new file mode 100644 index 0000000000..2645c949a2 --- /dev/null +++ b/packages/client/src/store/dataSource.js @@ -0,0 +1,84 @@ +import { writable, get } from "svelte/store" +import { notificationStore } from "./notification" + +export const createDataSourceStore = () => { + const store = writable([]) + + // Registers a new dataSource instance + const registerDataSource = (dataSource, instanceId, refresh) => { + if (!dataSource || !instanceId || !refresh) { + return + } + + // Create a list of all relevant dataSource IDs which would require that + // this dataSource is refreshed + let dataSourceIds = [] + + // Extract table ID + if (dataSource.type === "table" || dataSource.type === "view") { + if (dataSource.tableId) { + dataSourceIds.push(dataSource.tableId) + } + } + + // Extract both table IDs from both sides of the relationship + else if (dataSource.type === "link") { + if (dataSource.rowTableId) { + dataSourceIds.push(dataSource.rowTableId) + } + if (dataSource.tableId) { + dataSourceIds.push(dataSource.tableId) + } + } + + // Extract the dataSource ID (not the query ID) for queries + else if (dataSource.type === "query") { + if (dataSource.dataSourceId) { + dataSourceIds.push(dataSource.dataSourceId) + } + } + + // Store configs for each relevant dataSource ID + if (dataSourceIds.length) { + store.update(state => { + dataSourceIds.forEach(id => { + state.push({ + dataSourceId: id, + instanceId, + refresh, + }) + }) + return state + }) + } + } + + // Removes all registered dataSource instances belonging to a particular + // instance ID + const unregisterInstance = instanceId => { + store.update(state => { + return state.filter(instance => instance.instanceId !== instanceId) + }) + } + + // Invalidates a specific dataSource ID by refreshing all instances + // which depend on data from that dataSource + const invalidateDataSource = dataSourceId => { + const relatedInstances = get(store).filter(instance => { + return instance.dataSourceId === dataSourceId + }) + if (relatedInstances?.length) { + notificationStore.blockNotifications(1000) + } + relatedInstances?.forEach(instance => { + instance.refresh() + }) + } + + return { + subscribe: store.subscribe, + actions: { registerDataSource, unregisterInstance, invalidateDataSource }, + } +} + +export const dataSourceStore = createDataSourceStore() diff --git a/packages/client/src/store/datasource.js b/packages/client/src/store/datasource.js deleted file mode 100644 index d40fbbbfc1..0000000000 --- a/packages/client/src/store/datasource.js +++ /dev/null @@ -1,84 +0,0 @@ -import { writable, get } from "svelte/store" -import { notificationStore } from "./notification" - -export const createDatasourceStore = () => { - const store = writable([]) - - // Registers a new datasource instance - const registerDatasource = (datasource, instanceId, refresh) => { - if (!datasource || !instanceId || !refresh) { - return - } - - // Create a list of all relevant datasource IDs which would require that - // this datasource is refreshed - let datasourceIds = [] - - // Extract table ID - if (datasource.type === "table" || datasource.type === "view") { - if (datasource.tableId) { - datasourceIds.push(datasource.tableId) - } - } - - // Extract both table IDs from both sides of the relationship - else if (datasource.type === "link") { - if (datasource.rowTableId) { - datasourceIds.push(datasource.rowTableId) - } - if (datasource.tableId) { - datasourceIds.push(datasource.tableId) - } - } - - // Extract the datasource ID (not the query ID) for queries - else if (datasource.type === "query") { - if (datasource.datasourceId) { - datasourceIds.push(datasource.datasourceId) - } - } - - // Store configs for each relevant datasource ID - if (datasourceIds.length) { - store.update(state => { - datasourceIds.forEach(id => { - state.push({ - datasourceId: id, - instanceId, - refresh, - }) - }) - return state - }) - } - } - - // Removes all registered datasource instances belonging to a particular - // instance ID - const unregisterInstance = instanceId => { - store.update(state => { - return state.filter(instance => instance.instanceId !== instanceId) - }) - } - - // Invalidates a specific datasource ID by refreshing all instances - // which depend on data from that datasource - const invalidateDatasource = datasourceId => { - const relatedInstances = get(store).filter(instance => { - return instance.datasourceId === datasourceId - }) - if (relatedInstances?.length) { - notificationStore.blockNotifications(1000) - } - relatedInstances?.forEach(instance => { - instance.refresh() - }) - } - - return { - subscribe: store.subscribe, - actions: { registerDatasource, unregisterInstance, invalidateDatasource }, - } -} - -export const datasourceStore = createDatasourceStore() diff --git a/packages/client/src/store/index.js b/packages/client/src/store/index.js index 9d08423374..ebf89e14e3 100644 --- a/packages/client/src/store/index.js +++ b/packages/client/src/store/index.js @@ -3,7 +3,7 @@ export { notificationStore } from "./notification" export { routeStore } from "./routes" export { screenStore } from "./screens" export { builderStore } from "./builder" -export { datasourceStore } from "./datasource" +export { dataSourceStore } from "./dataSource" // Context stores are layered and duplicated, so it is not a singleton export { createContextStore } from "./context" diff --git a/packages/standard-components/manifest.json b/packages/standard-components/manifest.json index 5be1665b03..fdbba6e150 100644 --- a/packages/standard-components/manifest.json +++ b/packages/standard-components/manifest.json @@ -84,13 +84,11 @@ "icon": "ri-list-check-2", "styleable": true, "hasChildren": true, - "dataProvider": true, - "actions": ["RefreshDatasource"], "settings": [ { - "type": "datasource", + "type": "dataProvider", "label": "Data", - "key": "datasource" + "key": "dataProviderId" }, { "type": "text", @@ -103,7 +101,11 @@ "label": "Filtering", "key": "filter" } - ] + ], + "dataContext": { + "type": "schema", + "dataProviderSetting": "dataProviderId" + } }, "search": { "name": "Search", @@ -1472,5 +1474,44 @@ "defaultValue": false } ] + }, + "dataprovider": { + "name": "Data Provider", + "icon": "ri-database-2-line", + "styleable": false, + "hasChildren": true, + "settings": [ + { + "type": "dataSource", + "label": "Data", + "key": "dataSource" + }, + { + "type": "filter", + "label": "Filtering", + "key": "filter" + } + ], + "dataContext": { + "type": "static", + "values": [ + { + "label": "Rows", + "key": "rows" + }, + { + "label": "Rows Length", + "key": "rowsLength" + }, + { + "label": "Loading", + "key": "loading" + }, + { + "label": "Loaded", + "key": "loaded" + } + ] + } } } diff --git a/packages/standard-components/src/DataProvider.svelte b/packages/standard-components/src/DataProvider.svelte new file mode 100644 index 0000000000..a8f42c94d6 --- /dev/null +++ b/packages/standard-components/src/DataProvider.svelte @@ -0,0 +1,93 @@ + + + + + diff --git a/packages/standard-components/src/List.svelte b/packages/standard-components/src/List.svelte index ee7880fb24..e9c66c4a9f 100644 --- a/packages/standard-components/src/List.svelte +++ b/packages/standard-components/src/List.svelte @@ -1,68 +1,32 @@ - -
- {#if filteredRows.length > 0} - {#if $component.children === 0 && $builderStore.inBuilder} -

Add some components to display.

- {:else} - {#each filteredRows as row} - - - - {/each} - {/if} - {:else if loaded && noRowsMessage} -

{noRowsMessage}

+
+ {#if data.length > 0} + {#if $component.children === 0 && $builderStore.inBuilder} +

Add some components to display.

+ {:else} + {#each data as row} + + + + {/each} {/if} -
- + {:else if loaded && noRowsMessage} +

{noRowsMessage}

+ {/if} +
From ea688855810fca57bd9fb901406268db3dd9bd2e Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Fri, 19 Mar 2021 14:05:28 +0000 Subject: [PATCH 11/51] Update SaveRow button action to take an explicit table ID, making it more much flexible. Fix massive width --- .../EventsEditor/actions/SaveRow.svelte | 62 +++++++++++-------- 1 file changed, 35 insertions(+), 27 deletions(-) diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/SaveRow.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/SaveRow.svelte index 94b1e9645b..b367b17484 100644 --- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/SaveRow.svelte +++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/SaveRow.svelte @@ -1,9 +1,8 @@
- {#if !dataProviderComponents.length} -
- Save Row can only be used within a component that provides data, such as a - Repeater -
- {:else} - + + Choosing a Data Source will automatically use the data it provides, but it's + optional.
+ You can always add or override fields manually. + +
+ - {#if parameters.providerId} + + + + {#if parameters.tableId} {/if} - {/if} +
From 1521a22c390b9304c350fd66ab25834bf5fe48f9 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Fri, 19 Mar 2021 14:05:42 +0000 Subject: [PATCH 12/51] Fix massive width in filter editor drawer --- .../design/PropertiesPanel/PropertyControls/FilterEditor.svelte | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/FilterEditor.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/FilterEditor.svelte index cefeb50e63..faff7bc0b9 100644 --- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/FilterEditor.svelte +++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/FilterEditor.svelte @@ -66,6 +66,8 @@ .root { padding: var(--spacing-l); min-height: calc(40vh - 2 * var(--spacing-l)); + max-width: 800px; + margin: 0 auto; } .fields { From 2a6e05efff7fb77c1eb572bb33c5a88bbab7d97b Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Fri, 19 Mar 2021 14:26:37 +0000 Subject: [PATCH 13/51] Fix massive widths on remaining button actions --- .../EventsEditor/actions/ExecuteQuery.svelte | 65 +++++++++++-------- .../EventsEditor/actions/LogIn.svelte | 4 +- .../EventsEditor/actions/LogOut.svelte | 11 +++- .../EventsEditor/actions/NavigateTo.svelte | 2 + .../actions/TriggerAutomation.svelte | 5 ++ .../EventsEditor/actions/ValidateForm.svelte | 2 + 6 files changed, 58 insertions(+), 31 deletions(-) diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/ExecuteQuery.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/ExecuteQuery.svelte index e18336fab5..a5cbd7e69d 100644 --- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/ExecuteQuery.svelte +++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/ExecuteQuery.svelte @@ -24,36 +24,45 @@ } - - - - - -{#if parameters.datasourceId} - - + {#each $backendUiStore.datasources as datasource} + {/each} -{/if} - + -{#if query?.parameters?.length > 0} - - -{/if} + {#if parameters.datasourceId} + + + {/if} + + + + {#if query?.parameters?.length > 0} + + + {/if} + + + diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/LogIn.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/LogIn.svelte index c49369bf29..eee4dc2bc7 100644 --- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/LogIn.svelte +++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/LogIn.svelte @@ -30,7 +30,9 @@ display: grid; column-gap: var(--spacing-l); row-gap: var(--spacing-s); - grid-template-columns: auto 1fr auto 1fr; + grid-template-columns: auto 1fr; align-items: baseline; + max-width: 800px; + margin: 0 auto; } diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/LogOut.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/LogOut.svelte index 2b0aad8342..7306ed4e61 100644 --- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/LogOut.svelte +++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/LogOut.svelte @@ -1,7 +1,14 @@ -
This action doesn't require any additional settings.
+ + +
+ This action doesn't require any additional settings. +
diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/NavigateTo.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/NavigateTo.svelte index 65071837e7..b9567c6523 100644 --- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/NavigateTo.svelte +++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/NavigateTo.svelte @@ -27,6 +27,8 @@ display: flex; flex-direction: row; align-items: baseline; + max-width: 800px; + margin: 0 auto; } .root :global(> div) { diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/TriggerAutomation.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/TriggerAutomation.svelte index 1a3276800a..4ae5e320fc 100644 --- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/TriggerAutomation.svelte +++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/TriggerAutomation.svelte @@ -101,6 +101,11 @@ diff --git a/packages/standard-components/src/table/CellRenderer.svelte b/packages/standard-components/src/table/CellRenderer.svelte new file mode 100644 index 0000000000..7374bc337c --- /dev/null +++ b/packages/standard-components/src/table/CellRenderer.svelte @@ -0,0 +1,26 @@ + + +{#if value != null && value !== ''} + {#if plainTypes.includes(type)} + {value} + {:else if type === 'boolean'} + + {:else if type === 'datetime'} + + {:else if type === 'link'} + + {:else if type === 'attachment'} + + {/if} +{/if} diff --git a/packages/standard-components/src/table/DateTimeRenderer.svelte b/packages/standard-components/src/table/DateTimeRenderer.svelte new file mode 100644 index 0000000000..fbde2999e1 --- /dev/null +++ b/packages/standard-components/src/table/DateTimeRenderer.svelte @@ -0,0 +1,7 @@ + + +{dayjs(value).format('MMMM D YYYY, HH:mm')} diff --git a/packages/standard-components/src/table/RelationshipRenderer.svelte b/packages/standard-components/src/table/RelationshipRenderer.svelte new file mode 100644 index 0000000000..7096101582 --- /dev/null +++ b/packages/standard-components/src/table/RelationshipRenderer.svelte @@ -0,0 +1,15 @@ + + +{#if value && value.length} + {#each value as item} + {#if item && item.primaryDisplay} + + {item.primaryDisplay} + + {/if} + {/each} +{/if} diff --git a/packages/standard-components/src/table/Table.svelte b/packages/standard-components/src/table/Table.svelte new file mode 100644 index 0000000000..930b5a343a --- /dev/null +++ b/packages/standard-components/src/table/Table.svelte @@ -0,0 +1,136 @@ + + +
+ + + + {#each fields as field} + + {/each} + + + + {#each sortedRows as row} + + {#each fields as field} + + {/each} + + {/each} + +
sortBy(field)}> +
+ {schema[field]?.name} + +
+
+
+ +
+
+
+ + diff --git a/packages/standard-components/src/table/index.js b/packages/standard-components/src/table/index.js new file mode 100644 index 0000000000..410fe1ff6c --- /dev/null +++ b/packages/standard-components/src/table/index.js @@ -0,0 +1 @@ +export { default as table } from "./Table.svelte" diff --git a/packages/standard-components/yarn.lock b/packages/standard-components/yarn.lock index 8a026bd592..236a7104b0 100644 --- a/packages/standard-components/yarn.lock +++ b/packages/standard-components/yarn.lock @@ -132,72 +132,82 @@ estree-walker "^1.0.1" picomatch "^2.2.2" -"@spectrum-css/actionbutton@^1.0.0-beta.1": - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/@spectrum-css/actionbutton/-/actionbutton-1.0.0-beta.1.tgz#a6684cac108d4a9daefe0be6df8201d3c369a0d6" - integrity sha512-QbrPMTkbkmh+dEBP66TFXmF5z3qSde+BnLR5hnlo2XMvKvnblX2VJStEbQ+hTKuSZXCRFADXyXD5o0NOYDTByQ== +"@spectrum-css/actionbutton@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@spectrum-css/actionbutton/-/actionbutton-1.0.1.tgz#9c75da37ea6915919fb574c74bd60dacc03b6577" + integrity sha512-AUqtyNabHF451Aj9i3xz82TxS5Z6k1dttA68/1hMeU9kbPCSS4P6Viw3vaRGs9CSspuR8xnnhDgrq+F+zMy2Hw== -"@spectrum-css/button@^3.0.0-beta.6": - version "3.0.0-beta.6" - resolved "https://registry.yarnpkg.com/@spectrum-css/button/-/button-3.0.0-beta.6.tgz#007919d3e7a6692e506dc9addcd46aee6b203b1a" - integrity sha512-ZoJxezt5Pc006RR7SMG7PfC0VAdWqaGDpd21N8SEykGuz/KmNulqGW8RiSZQGMVX/jk5ZCAthPrH8cI/qtKbMg== +"@spectrum-css/button@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@spectrum-css/button/-/button-3.0.1.tgz#6db8c3e851baecd0f1c2d88fef37d49d01c6e643" + integrity sha512-YXrBtjIYisk4Vaxnp0RiE4gdElQX04P2mc4Pi2GlQ27dJKlHmufYcF+kAqGdtiyK5yjdN/vKRcC8y13aA4rusA== -"@spectrum-css/checkbox@^3.0.0-beta.6": - version "3.0.0-beta.6" - resolved "https://registry.yarnpkg.com/@spectrum-css/checkbox/-/checkbox-3.0.0-beta.6.tgz#338c4e58c4570ac8023f7332794fcb45f5ae9374" - integrity sha512-Z0Mwu7yn2b+QcZaBqMpKhliTQiF8T/cRyKgTyaIACtJ0FAK5NBJ4h/X6SWW3iXtoUWCH4+p/Hdtq1iQHAFi1qQ== +"@spectrum-css/checkbox@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@spectrum-css/checkbox/-/checkbox-3.0.1.tgz#6f36377d8bd556989ddd1dec2506dc295c5fcda8" + integrity sha512-fI0q2Cp6yU4ORyE6JWUSMYNgEtGf6AjYViZ2Weg3UPTYBQuWdQd8J0ZTcH38pDMyARFPRdiXgQ3KnyX5Hk5huw== -"@spectrum-css/fieldlabel@^3.0.0-beta.7": - version "3.0.0-beta.7" - resolved "https://registry.yarnpkg.com/@spectrum-css/fieldlabel/-/fieldlabel-3.0.0-beta.7.tgz#f37797565e21b3609b8fbc2dafcea8ea41ffa114" - integrity sha512-0pseiPghqlOdALsRtidveWyt2YjfSXTZWDlSkcne/J0/QXBJOQH/7Qfy7TmROQZYRB2LqH1VzmE1zbvGwr5Aog== +"@spectrum-css/fieldlabel@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@spectrum-css/fieldlabel/-/fieldlabel-3.0.1.tgz#39f7c0f25cc2ff402afeff005341b0832f7c588c" + integrity sha512-LMfwrwIq8wEEvxFLobdLvXRwKrp8o9Fty4iJ9aYl2Rj1uXkfRd8qLz9HGZjLEE1OuJgoTBgamYABl7EvoA5PLw== -"@spectrum-css/icon@^3.0.0-beta.2": - version "3.0.0-beta.2" - resolved "https://registry.yarnpkg.com/@spectrum-css/icon/-/icon-3.0.0-beta.2.tgz#2dd7258ded74501b56e5fc42d0b6f0a3f4936aeb" - integrity sha512-BEHJ68YIXSwsNAqTdq/FrS4A+jtbKzqYrsGKXdDf93ql+fHWYXRCh1EVYGHx/1696mY73DhM4snMpKGIFtXGFA== +"@spectrum-css/icon@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@spectrum-css/icon/-/icon-3.0.1.tgz#e300a6fc353c85c6b5d6e7a364408a940c31b177" + integrity sha512-cGFtIrcQ/7tthdkHK1npuEFiCdYVHLqwmLxghUYQw8Tb8KgJaw3OBO1tpjgsUizexNgu26BjVRIbGxNWuBXIHQ== -"@spectrum-css/inputgroup@^3.0.0-beta.7": - version "3.0.0-beta.7" - resolved "https://registry.yarnpkg.com/@spectrum-css/inputgroup/-/inputgroup-3.0.0-beta.7.tgz#9829812e349bf973fb8835f0586bf013c8c38d23" - integrity sha512-pZDpYhtTKZUVG31Rtx7imdwK2ohLyVuTEsl+mj2yDKn+2TOwYRxr6LdbfNhFN4xd0GtSqapKYfbgKBWYpIyiSw== +"@spectrum-css/inputgroup@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@spectrum-css/inputgroup/-/inputgroup-3.0.1.tgz#8c5b257b57b3b2cf04e99355709365fa0d6838cc" + integrity sha512-asBRa1jTlld6plkcq4ySO+xl+OJlCMSOLoAFdSSIJowcSlCV0yDy7oeOhf5YQv9mMHFWTKlWUSoAKDZTguIPxA== -"@spectrum-css/menu@^3.0.0-beta.5": - version "3.0.0-beta.5" - resolved "https://registry.yarnpkg.com/@spectrum-css/menu/-/menu-3.0.0-beta.5.tgz#99d5ea7f6760b7a89d5d732f4e91b98dd3f82d74" - integrity sha512-jvPD5GbNdX31rdFBLxCG7KoUVGeeNYLzNXDpiGZsWme/djVTwitljgNe7bhVwCVlXZE7H20Ti/YrdafnE154Rw== +"@spectrum-css/label@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@spectrum-css/label/-/label-2.0.9.tgz#792f34b906ba81118f4d0edcc81a18da1ecd57cb" + integrity sha512-0vXhWIZoQDTg+I6MyMpwmeJ+yQHtxkZ7lLcEqxhJ2y7JXP2ftblz2sO4+9jB11ljepeVlV+B6LF1drU8mMu82A== -"@spectrum-css/page@^3.0.0-beta.0": - version "3.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@spectrum-css/page/-/page-3.0.0-beta.0.tgz#885ea41b44861c5dc3aac904536f9e93c9109b58" - integrity sha512-+OD+l3aLisykxJnHfLkdkxMS1Uj1vKGYpKil7W0r5lSWU44eHyRgb8ZK5Vri1+sUO5SSf/CTybeVwtXME9wMLA== +"@spectrum-css/menu@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@spectrum-css/menu/-/menu-3.0.1.tgz#2a376f991acc24e12ec892bb6b9db2650fc41fbe" + integrity sha512-Qjg0+1O0eC89sb/bRFq2AGnQ8XqhVy23TUXHyffNM8qdcMssnlny3QmhzjURCZKvx/Y5UytCpzhedPQqSpQwZg== + +"@spectrum-css/page@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@spectrum-css/page/-/page-3.0.1.tgz#5e1c3dd5b1a1ee591f9d636b75f03665f542d846" + integrity sha512-LAlKF8km5BlsGPpZ2SNtwKOQIHn1lz0X93aczGZVZceOg73O4gyeoT5cx4vi1z+KtBRY5VMDWx3XgGtUwwjqwA== dependencies: - "@spectrum-css/vars" "^3.0.0-beta.2" + "@spectrum-css/vars" "^3.0.1" -"@spectrum-css/picker@^1.0.0-beta.3": - version "1.0.0-beta.3" - resolved "https://registry.yarnpkg.com/@spectrum-css/picker/-/picker-1.0.0-beta.3.tgz#476593597b5a9e0105397e4e39350869cf6e7965" - integrity sha512-jHzFnS5Frd3JSwZ6B8ymH/sVnNqAUBo9p93Zax4VHTUDsPTtTkvxj/Vxo4POmrJEL9v3qUB2Yk13rD2BSfEzLQ== +"@spectrum-css/picker@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@spectrum-css/picker/-/picker-1.0.1.tgz#98991198576d26bd14160824e7b6f3c278ff930b" + integrity sha512-Rv4/UBOdNW1gs7WVBCJnPD5VFly8MqP++psDX6kcugUIcfJy0GC3acvElotmKRlCDk8Qxks2W2A0jKeSgphTmA== -"@spectrum-css/popover@^3.0.0-beta.6": - version "3.0.0-beta.6" - resolved "https://registry.yarnpkg.com/@spectrum-css/popover/-/popover-3.0.0-beta.6.tgz#787611f020e091234e6ba7e946b0dbd0ed1a2fa2" - integrity sha512-dUJlwxoNpB6jOR0g/ywH2cPoUz2FVsL6xPfkm6BSsLp9ejhYy0/OFF4w0Q32Fu9qJDbWJ9qaoOlPpt7IjQ+/GQ== +"@spectrum-css/popover@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@spectrum-css/popover/-/popover-3.0.1.tgz#5863c1efc53f98f9aba2de9186666780041303fc" + integrity sha512-LmOSj/yCwQQ9iGmCYnHiJsJR/HfPiGqI1Jl7pkKxBOCxYBMS/5+ans9vfCN2Qnd0eK7WSbfPg72S6mjye7db2Q== -"@spectrum-css/stepper@^3.0.0-beta.7": - version "3.0.0-beta.7" - resolved "https://registry.yarnpkg.com/@spectrum-css/stepper/-/stepper-3.0.0-beta.7.tgz#fc78435ce878c5e233af13e43ed2c3e8671a2bbc" - integrity sha512-TQL2OBcdEgbHBwehMGgqMuWdKZZQPGcBRV5FlF0TUdOT58lEqFAO43Gajqvyte1P23lNmnX8KuMwkRfQdn0RzA== +"@spectrum-css/stepper@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@spectrum-css/stepper/-/stepper-3.0.1.tgz#7f270f53505e7dbe082591e8ea1c4c8f397e045a" + integrity sha512-IvZlGFJ8QPr9tUz5xvVN4hASaTRDPdKu9IIp25q/x0ecgSrKAM55e3EBWEYWy1H1JI3h+zlPnNRuK0VLhDbCYA== -"@spectrum-css/textfield@^3.0.0-beta.6": - version "3.0.0-beta.6" - resolved "https://registry.yarnpkg.com/@spectrum-css/textfield/-/textfield-3.0.0-beta.6.tgz#30c044ceb403d6ea82d8046fb8f767f7fe455da6" - integrity sha512-U7P8C3Xx8h5X+r+dZu1qbxceIxBn7ZSmMvJyC7MPSPcU3EwdzCUepERNGX7NrQdcX91XSNlPUOF7hZUognBwhQ== +"@spectrum-css/table@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@spectrum-css/table/-/table-3.0.1.tgz#753e0e2498082c0c36b9600828516aff3ac338cd" + integrity sha512-XQ+srMTv9hK1H0nctWUtqyzitmvyb5TNR+7mjAmKRdkBRSTQQSipDhenxZp72ekzMtMoSYZVZ77kgo0Iw3Fpug== -"@spectrum-css/vars@^3.0.0-beta.2": - version "3.0.0-beta.2" - resolved "https://registry.yarnpkg.com/@spectrum-css/vars/-/vars-3.0.0-beta.2.tgz#f0b3a2db44aa57b1a82e47ab392c716a3056a157" - integrity sha512-HpcRDUkSjKVWUi7+jf6zp33YszXs3qFljaaNVTVOf0m0mqjWWXHxgLrvYlFFlHp5ITbNXds5Cb7EgiXCKmVIpA== +"@spectrum-css/textfield@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@spectrum-css/textfield/-/textfield-3.0.1.tgz#e875b8e37817378ad08fc4af7d53026df38911e5" + integrity sha512-MUV5q87CVxbkNdSNoxGrFbgyKc51ft/WWf3aVEoPdPw5yBnXqFe1w1YmAit5zYDOOhhs58sCLAlUcCMlOpkgrA== + +"@spectrum-css/vars@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@spectrum-css/vars/-/vars-3.0.1.tgz#561fd69098f896a647242dd8d6108af603bfa31e" + integrity sha512-l4oRcCOqInChYXZN6OQhpe3isk6l4OE6Ys8cgdlsiKp53suNoQxyyd9p/eGRbCjZgH3xQ8nK0t4DHa7QYC0S6w== "@types/color-name@^1.1.1": version "1.1.1" @@ -864,6 +874,11 @@ csso@^4.0.2: dependencies: css-tree "1.0.0-alpha.39" +dayjs@^1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.4.tgz#8e544a9b8683f61783f570980a8a80eaf54ab1e2" + integrity sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw== + deep-equal@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" From c70b69577adb3a37fae3828b05bcf306af43bcb4 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Wed, 24 Mar 2021 16:29:28 +0000 Subject: [PATCH 26/51] Add attachment handling to tables --- .../src/table/AttachmentRenderer.svelte | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/standard-components/src/table/AttachmentRenderer.svelte b/packages/standard-components/src/table/AttachmentRenderer.svelte index a169ad2963..a7f2466750 100644 --- a/packages/standard-components/src/table/AttachmentRenderer.svelte +++ b/packages/standard-components/src/table/AttachmentRenderer.svelte @@ -2,4 +2,31 @@ export let value -{value} +{#if value && value.length} + {#each value as attachment} + {#if attachment.type.startsWith('image')} + {attachment.extension} + {:else} +
{attachment.extension}
+ {/if} + {/each} +{/if} + + From 22fb849ad2f859dd13c62b29736a0e5e7997bab6 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Wed, 24 Mar 2021 18:45:55 +0000 Subject: [PATCH 27/51] Increase table attachment preview heights --- .../src/table/AttachmentRenderer.svelte | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/standard-components/src/table/AttachmentRenderer.svelte b/packages/standard-components/src/table/AttachmentRenderer.svelte index a7f2466750..12f2b2d938 100644 --- a/packages/standard-components/src/table/AttachmentRenderer.svelte +++ b/packages/standard-components/src/table/AttachmentRenderer.svelte @@ -14,19 +14,21 @@ From bc562ffd6b86ee4173706eac7287e14c6e9494bd Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Wed, 24 Mar 2021 18:46:12 +0000 Subject: [PATCH 28/51] Make table responsive and vertically and horizontally scrollable --- .../src/table/Table.svelte | 100 +++++++++++------- 1 file changed, 62 insertions(+), 38 deletions(-) diff --git a/packages/standard-components/src/table/Table.svelte b/packages/standard-components/src/table/Table.svelte index 930b5a343a..8df8c06e34 100644 --- a/packages/standard-components/src/table/Table.svelte +++ b/packages/standard-components/src/table/Table.svelte @@ -8,6 +8,7 @@ export let dataProvider export let columns export let showAutoColumns + export let rowCount = 8 const component = getContext("component") const { styleable } = getContext("sdk") @@ -60,51 +61,71 @@ } -
- - - - {#each fields as field} - - {/each} - - - - {#each sortedRows as row} - +
+
+
sortBy(field)}> -
- {schema[field]?.name} - -
-
+ + {#each fields as field} - {/each} - {/each} - -
-
- +
sortBy(field)}> +
+ {schema[field]?.name} +
- +
+ + + {#each sortedRows as row} + + {#each fields as field} + +
+ +
+ + {/each} + + {/each} + + +
From c95baec83fc6fd8f0d0a6e1d2e8f8d91281d7812 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 25 Mar 2021 09:37:14 +0000 Subject: [PATCH 36/51] Add table cell max width and support text truncation --- .../src/table/CellRenderer.svelte | 3 ++- .../src/table/StringRenderer.svelte | 12 ++++++++++++ packages/standard-components/src/table/Table.svelte | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 packages/standard-components/src/table/StringRenderer.svelte diff --git a/packages/standard-components/src/table/CellRenderer.svelte b/packages/standard-components/src/table/CellRenderer.svelte index 7374bc337c..0c14ec2aa5 100644 --- a/packages/standard-components/src/table/CellRenderer.svelte +++ b/packages/standard-components/src/table/CellRenderer.svelte @@ -1,4 +1,5 @@ + +
{value}
+ + diff --git a/packages/standard-components/src/table/Table.svelte b/packages/standard-components/src/table/Table.svelte index b1f2a3ef2e..a41b08b437 100644 --- a/packages/standard-components/src/table/Table.svelte +++ b/packages/standard-components/src/table/Table.svelte @@ -192,6 +192,8 @@ justify-content: flex-start; align-items: center; gap: 4px; + max-width: 320px; + overflow: hidden; } .spectrum-Table-sortedIcon { opacity: 0; From 604d02cb4e636733c59fa789bcfceb7867a0c6e0 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 25 Mar 2021 09:45:23 +0000 Subject: [PATCH 37/51] Add smart trunctation to all table cell types --- .../src/table/AttachmentRenderer.svelte | 21 ++++++++++++------- .../src/table/RelationshipRenderer.svelte | 21 ++++++++++++------- .../src/table/StringRenderer.svelte | 1 + .../src/table/Table.svelte | 2 -- 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/packages/standard-components/src/table/AttachmentRenderer.svelte b/packages/standard-components/src/table/AttachmentRenderer.svelte index 12f2b2d938..162e3211ab 100644 --- a/packages/standard-components/src/table/AttachmentRenderer.svelte +++ b/packages/standard-components/src/table/AttachmentRenderer.svelte @@ -1,15 +1,20 @@ -{#if value && value.length} - {#each value as attachment} - {#if attachment.type.startsWith('image')} - {attachment.extension} - {:else} -
{attachment.extension}
- {/if} - {/each} +{#each attachments as attachment} + {#if attachment.type.startsWith('image')} + {attachment.extension} + {:else} +
{attachment.extension}
+ {/if} +{/each} +{#if leftover} +
+{leftover} others
{/if} diff --git a/packages/standard-components/src/table/Table.svelte b/packages/standard-components/src/table/Table.svelte index a41b08b437..b1f2a3ef2e 100644 --- a/packages/standard-components/src/table/Table.svelte +++ b/packages/standard-components/src/table/Table.svelte @@ -192,8 +192,6 @@ justify-content: flex-start; align-items: center; gap: 4px; - max-width: 320px; - overflow: hidden; } .spectrum-Table-sortedIcon { opacity: 0; From 16ce2d4a0774c760703e2e9a7cd2064564ed7bce Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 25 Mar 2021 09:47:52 +0000 Subject: [PATCH 38/51] Change table truncation text to be agnostic of plural case --- .../standard-components/src/table/AttachmentRenderer.svelte | 2 +- .../standard-components/src/table/RelationshipRenderer.svelte | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/standard-components/src/table/AttachmentRenderer.svelte b/packages/standard-components/src/table/AttachmentRenderer.svelte index 162e3211ab..45bd97a849 100644 --- a/packages/standard-components/src/table/AttachmentRenderer.svelte +++ b/packages/standard-components/src/table/AttachmentRenderer.svelte @@ -14,7 +14,7 @@ {/if} {/each} {#if leftover} -
+{leftover} others
+
+{leftover} more
{/if} diff --git a/packages/standard-components/src/grid/CreateRow/Button.svelte b/packages/standard-components/src/grid/CreateRow/Button.svelte deleted file mode 100644 index ab3513de91..0000000000 --- a/packages/standard-components/src/grid/CreateRow/Button.svelte +++ /dev/null @@ -1,37 +0,0 @@ - - -
- -
- -
Add New Row
- dispatch('newRow')} /> -
- - diff --git a/packages/standard-components/src/grid/CreateRow/Modal.svelte b/packages/standard-components/src/grid/CreateRow/Modal.svelte deleted file mode 100644 index 1cb9aa923d..0000000000 --- a/packages/standard-components/src/grid/CreateRow/Modal.svelte +++ /dev/null @@ -1,144 +0,0 @@ - - -
- {#each errorMessages as error} -

{error}

- {/each} -
- {#each fields as field} -
- - {#if schema[field].type === 'string' && schema[field].constraints.inclusion} - - {:else if schema[field].type === 'datetime'} - - {:else if schema[field].type === 'boolean'} - - {:else if schema[field].type === 'number'} - - {:else if schema[field].type === 'string'} - - {:else if schema[field].type === 'longform'} - - {:else if schema[field].type === 'attachment'} - - {/if} -
-
- {/each} -
-
-
-
- -
-
- -
-
- - diff --git a/packages/standard-components/src/grid/DateTime/Wrapper.svelte b/packages/standard-components/src/grid/DateTime/Wrapper.svelte deleted file mode 100644 index b493626d64..0000000000 --- a/packages/standard-components/src/grid/DateTime/Wrapper.svelte +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/packages/standard-components/src/grid/Relationship/RelationshipDisplay.svelte b/packages/standard-components/src/grid/Relationship/RelationshipDisplay.svelte deleted file mode 100644 index f269f8f2a8..0000000000 --- a/packages/standard-components/src/grid/Relationship/RelationshipDisplay.svelte +++ /dev/null @@ -1,75 +0,0 @@ - - -
- {#if linkedRows && linkedRows.length && displayColumn} - {#each linkedRows as linkedRow} - {#if linkedRow[displayColumn] != null && linkedRow[displayColumn] !== ''} -
{linkedRow[displayColumn]}
- {/if} - {/each} - {:else}{count} related row(s){/if} -
- - diff --git a/packages/standard-components/src/grid/Relationship/RelationshipLabel.svelte b/packages/standard-components/src/grid/Relationship/RelationshipLabel.svelte deleted file mode 100644 index ec64255855..0000000000 --- a/packages/standard-components/src/grid/Relationship/RelationshipLabel.svelte +++ /dev/null @@ -1,32 +0,0 @@ - - -
- {#each items as item} -
{item?.primaryDisplay ?? ''}
- {/each} -
- - diff --git a/packages/standard-components/src/grid/Select/Wrapper.svelte b/packages/standard-components/src/grid/Select/Wrapper.svelte deleted file mode 100644 index 4c4a8eaf21..0000000000 --- a/packages/standard-components/src/grid/Select/Wrapper.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/packages/standard-components/src/grid/ViewDetails/Cell.svelte b/packages/standard-components/src/grid/ViewDetails/Cell.svelte deleted file mode 100644 index f222429aa8..0000000000 --- a/packages/standard-components/src/grid/ViewDetails/Cell.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - diff --git a/packages/standard-components/src/grid/customRenderer.js b/packages/standard-components/src/grid/customRenderer.js deleted file mode 100644 index fd558baa98..0000000000 --- a/packages/standard-components/src/grid/customRenderer.js +++ /dev/null @@ -1,169 +0,0 @@ -// Custom renderers to handle special types -// https://www.ag-grid.com/javascript-grid-cell-rendering-components/ - -import AttachmentCell from "./AttachmentCell/Button.svelte" -import ViewDetails from "./ViewDetails/Cell.svelte" -import Select from "./Select/Wrapper.svelte" -import DatePicker from "./DateTime/Wrapper.svelte" -import RelationshipLabel from "./Relationship/RelationshipLabel.svelte" - -const renderers = new Map([ - ["boolean", booleanRenderer], - ["attachment", attachmentRenderer], - ["options", optionsRenderer], - ["link", linkedRowRenderer], - ["_id", viewDetailsRenderer], -]) - -export function getRenderer(schema, editable, SDK) { - if (renderers.get(schema.type)) { - return renderers.get(schema.type)( - schema.options, - schema.constraints, - editable, - SDK - ) - } else { - return false - } -} - -/* eslint-disable no-unused-vars */ -function booleanRenderer(options, constraints, editable, SDK) { - return params => { - const toggle = e => { - params.value = !params.value - params.setValue(e.currentTarget.checked) - } - let input = document.createElement("input") - input.style.display = "grid" - input.style.placeItems = "center" - input.style.height = "100%" - input.type = "checkbox" - input.checked = params.value - if (editable) { - input.addEventListener("click", toggle) - } else { - input.disabled = true - } - - return input - } -} -/* eslint-disable no-unused-vars */ -function attachmentRenderer(options, constraints, editable, SDK) { - return params => { - const container = document.createElement("div") - - const attachmentInstance = new AttachmentCell({ - target: container, - props: { - files: params.value || [], - SDK, - }, - }) - - const deleteFile = event => { - const newFilesArray = params.value.filter(file => file !== event.detail) - params.setValue(newFilesArray) - } - - attachmentInstance.$on("delete", deleteFile) - - return container - } -} -/* eslint-disable no-unused-vars */ -function dateRenderer(options, constraints, editable, SDK) { - return function(params) { - const container = document.createElement("div") - const toggle = e => { - params.setValue(e.detail[0][0]) - } - - // Options need to be passed in with minTime and maxTime! Needs bbui update. - new DatePicker({ - target: container, - props: { - value: params.value, - SDK, - }, - }) - - return container - } -} - -function optionsRenderer(options, constraints, editable, SDK) { - return params => { - if (!editable) return params.value - const container = document.createElement("div") - container.style.display = "grid" - container.style.placeItems = "center" - container.style.height = "100%" - const change = e => { - params.setValue(e.detail) - } - - const selectInstance = new Select({ - target: container, - props: { - value: params.value, - options: constraints.inclusion, - SDK, - }, - }) - - selectInstance.$on("change", change) - - return container - } -} -/* eslint-disable no-unused-vars */ -function linkedRowRenderer(options, constraints, editable, SDK) { - return params => { - let container = document.createElement("div") - container.style.display = "grid" - container.style.placeItems = "center" - container.style.height = "100%" - - new RelationshipLabel({ - target: container, - props: { - row: params.data, - columnName: params.column.colId, - SDK, - }, - }) - - return container - } -} - -/* eslint-disable no-unused-vars */ -function viewDetailsRenderer(options, constraints, editable, SDK) { - return params => { - let container = document.createElement("div") - container.style.display = "grid" - container.style.alignItems = "center" - container.style.height = "100%" - - let url = "/" - if (options.detailUrl) { - url = options.detailUrl.replace(":id", params.data._id) - } - if (!url.startsWith("/")) { - url = `/${url}` - } - - new ViewDetails({ - target: container, - props: { - url, - SDK, - }, - }) - - return container - } -} diff --git a/packages/standard-components/src/grid/valueSetters.js b/packages/standard-components/src/grid/valueSetters.js deleted file mode 100644 index 2da8182092..0000000000 --- a/packages/standard-components/src/grid/valueSetters.js +++ /dev/null @@ -1,6 +0,0 @@ -// https://www.ag-grid.com/javascript-grid-value-setters/ -// These handles values and makes sure they adhere to the data type provided by the table -export const number = params => { - params.data[params.colDef.field] = parseFloat(params.newValue) - return true -} diff --git a/packages/standard-components/src/index.js b/packages/standard-components/src/index.js index 9280825ebf..d1ad792247 100644 --- a/packages/standard-components/src/index.js +++ b/packages/standard-components/src/index.js @@ -14,7 +14,6 @@ loadSpectrumIcons() export { default as container } from "./Container.svelte" export { default as dataprovider } from "./DataProvider.svelte" -export { default as datagrid } from "./grid/Component.svelte" export { default as screenslot } from "./ScreenSlot.svelte" export { default as button } from "./Button.svelte" export { default as repeater } from "./Repeater.svelte" diff --git a/packages/standard-components/src/table/DateTimeRenderer.svelte b/packages/standard-components/src/table/DateTimeRenderer.svelte index fbde2999e1..169adab163 100644 --- a/packages/standard-components/src/table/DateTimeRenderer.svelte +++ b/packages/standard-components/src/table/DateTimeRenderer.svelte @@ -4,4 +4,10 @@ export let value -{dayjs(value).format('MMMM D YYYY, HH:mm')} +
{dayjs(value).format('MMMM D YYYY, HH:mm')}
+ + diff --git a/packages/standard-components/src/table/StringRenderer.svelte b/packages/standard-components/src/table/StringRenderer.svelte index 92f3c035c8..2756839616 100644 --- a/packages/standard-components/src/table/StringRenderer.svelte +++ b/packages/standard-components/src/table/StringRenderer.svelte @@ -8,6 +8,6 @@ div { overflow: hidden; text-overflow: ellipsis; - max-width: 320px; + width: 150px; } diff --git a/packages/standard-components/src/table/Table.svelte b/packages/standard-components/src/table/Table.svelte index b1f2a3ef2e..faa689aa97 100644 --- a/packages/standard-components/src/table/Table.svelte +++ b/packages/standard-components/src/table/Table.svelte @@ -14,22 +14,42 @@ const component = getContext("component") const { styleable, Provider } = getContext("sdk") + // Config + const rowHeight = 55 + const headerHeight = 36 + const rowPreload = 5 + const maxRows = 100 + + // Sorting state let sortColumn let sortOrder - $: rows = dataProvider?.rows ?? [] - $: contentStyle = getContentStyle(rowCount, rows.length) - $: sortedRows = sortRows(rows, sortColumn, sortOrder) + // Table state $: loaded = dataProvider?.loaded ?? false + $: rows = dataProvider?.rows ?? [] + $: visibleRowCount = Math.min(rows.length, rowCount || maxRows, maxRows) + $: scroll = rows.length > visibleRowCount + $: contentStyle = getContentStyle(visibleRowCount, scroll) + $: sortedRows = sortRows(rows, sortColumn, sortOrder) $: schema = dataProvider?.schema ?? {} $: fields = getFields(schema, columns, showAutoColumns) - const getContentStyle = (rowCount, dataCount) => { - if (!rowCount) { + // Scrolling state + let timeout + let nextScrollTop = 0 + let scrollTop = 0 + $: firstVisibleRow = calculateFirstVisibleRow(scrollTop) + $: lastVisibleRow = calculateLastVisibleRow( + firstVisibleRow, + visibleRowCount, + rows.length + ) + + const getContentStyle = (visibleRows, scroll) => { + if (!scroll) { return "" } - const actualCount = Math.min(rowCount, dataCount) - return `height: ${35 + actualCount * 56}px;` + return `height: ${headerHeight - 1 + visibleRows * (rowHeight + 1)}px;` } const sortRows = (rows, sortColumn, sortOrder) => { @@ -71,69 +91,101 @@ }) return columns.concat(autoColumns) } + + const onScroll = event => { + nextScrollTop = event.target.scrollTop + if (timeout) { + return + } + timeout = setTimeout(() => { + scrollTop = nextScrollTop + timeout = null + }, 50) + } + + const calculateFirstVisibleRow = scrollTop => { + return Math.max(Math.floor(scrollTop / (rowHeight + 1)) - rowPreload, 0) + } + + const calculateLastVisibleRow = (firstRow, visibleRowCount, allRowCount) => { + return Math.min(firstRow + visibleRowCount + 2 * rowPreload, allRowCount) + } -
-
-
- - - - {#if $component.children} - - {/if} - {#each fields as field} - - {/each} - - - - {#each sortedRows as row} - +{#if loaded} +
+
+
+
-
-
sortBy(field)}> -
- {schema[field]?.name} - -
-
+ + {#if $component.children} - + {/if} {#each fields as field} - {/each} - {/each} - -
-
- - - -
-
+
+
-
- +
sortBy(field)}> +
+
{schema[field]?.name}
+
- +
+ + + {#each sortedRows as row, idx} + lastVisibleRow}> + {#if idx < firstVisibleRow || idx > lastVisibleRow} + + {:else} + {#if $component.children} + +
+ + + +
+ + {/if} + {#each fields as field} + +
+ +
+ + {/each} + {/if} + + {/each} + + +
- +{/if} From 6442177f726d5e1687906bbd0071a5ed2eaa7086 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 25 Mar 2021 14:48:28 +0000 Subject: [PATCH 40/51] Enable table to know when invalid column names have been passed --- packages/standard-components/src/table/Table.svelte | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/standard-components/src/table/Table.svelte b/packages/standard-components/src/table/Table.svelte index faa689aa97..5670fb407f 100644 --- a/packages/standard-components/src/table/Table.svelte +++ b/packages/standard-components/src/table/Table.svelte @@ -77,9 +77,20 @@ } const getFields = (schema, customColumns, showAutoColumns) => { - if (customColumns?.length) { + // Check for an invalid column selection + let invalid = false + customColumns?.forEach(column => { + if (schema[column] == null) { + invalid = true + } + }) + + // Use column selection if it exists + if (!invalid && customColumns?.length) { return customColumns } + + // Otherwise generate columns let columns = [] let autoColumns = [] Object.entries(schema).forEach(([field, fieldSchema]) => { From a242d19f289f98cf3f127dc9d89cd6542549ed96 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 25 Mar 2021 16:17:56 +0000 Subject: [PATCH 41/51] Fix crash generating bindable properties for an empty data provider ID --- packages/builder/src/builderStore/dataBinding.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/builder/src/builderStore/dataBinding.js b/packages/builder/src/builderStore/dataBinding.js index 1d23c8f488..d68b0868e2 100644 --- a/packages/builder/src/builderStore/dataBinding.js +++ b/packages/builder/src/builderStore/dataBinding.js @@ -366,10 +366,7 @@ function bindingReplacement(bindableProperties, textWithBindings, convertTo) { * {{ literal [componentId] }} */ function extractLiteralHandlebarsID(value) { - if (!value) { - return null - } - return value.match(/{{\s*literal[\s\[]+([a-fA-F0-9]+)[\s\]]*}}/)[1] + return value?.match(/{{\s*literal[\s\[]+([a-fA-F0-9]+)[\s\]]*}}/)?.[1] } /** From 9fddf13be5adc0eb999ec81f092d51d72a546b4a Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 25 Mar 2021 16:18:19 +0000 Subject: [PATCH 42/51] Add onclick handler to icons --- packages/client/src/utils/componentProps.js | 4 ++-- packages/standard-components/manifest.json | 5 +++++ packages/standard-components/src/Icon.svelte | 3 ++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/client/src/utils/componentProps.js b/packages/client/src/utils/componentProps.js index 161565e789..559fc54486 100644 --- a/packages/client/src/utils/componentProps.js +++ b/packages/client/src/utils/componentProps.js @@ -43,8 +43,8 @@ export const enrichProps = async (props, context) => { // Enrich all data bindings in top level props let enrichedProps = await enrichDataBindings(validProps, totalContext) - // Enrich button actions if they exist - if (props._component?.endsWith("/button") && enrichedProps.onClick) { + // Enrich click actions if they exist + if (enrichedProps.onClick) { enrichedProps.onClick = enrichButtonActions( enrichedProps.onClick, totalContext diff --git a/packages/standard-components/manifest.json b/packages/standard-components/manifest.json index 9cd8999088..93752f8082 100644 --- a/packages/standard-components/manifest.json +++ b/packages/standard-components/manifest.json @@ -330,6 +330,11 @@ "label": "Color", "key": "color", "defaultValue": "#000" + }, + { + "type": "event", + "label": "On Click", + "key": "onClick" } ] }, diff --git a/packages/standard-components/src/Icon.svelte b/packages/standard-components/src/Icon.svelte index 3ae9ffe6dd..51e4f5d50b 100644 --- a/packages/standard-components/src/Icon.svelte +++ b/packages/standard-components/src/Icon.svelte @@ -7,6 +7,7 @@ export let icon = "" export let size = "fa-lg" export let color = "#f00" + export let onClick $: styles = { ...$component.styles, @@ -17,4 +18,4 @@ } - + From 9b3a6a9c4da372df001cfbbcdca40a622ddb644c Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 29 Mar 2021 15:29:13 +0100 Subject: [PATCH 43/51] Disable table checkbox --- packages/standard-components/src/table/BooleanRenderer.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/standard-components/src/table/BooleanRenderer.svelte b/packages/standard-components/src/table/BooleanRenderer.svelte index a8d86efdea..a71e28cb91 100644 --- a/packages/standard-components/src/table/BooleanRenderer.svelte +++ b/packages/standard-components/src/table/BooleanRenderer.svelte @@ -10,6 +10,7 @@ type="checkbox" class="spectrum-Checkbox-input" id="checkbox-1" + disabled checked={!!value} /> Date: Mon, 29 Mar 2021 15:34:18 +0100 Subject: [PATCH 44/51] Fix form picker component styling --- packages/standard-components/package.json | 2 +- packages/standard-components/src/forms/Picker.svelte | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/standard-components/package.json b/packages/standard-components/package.json index 492c6449c6..5a64e0f550 100644 --- a/packages/standard-components/package.json +++ b/packages/standard-components/package.json @@ -50,7 +50,7 @@ "@spectrum-css/label": "^2.0.9", "@spectrum-css/menu": "^3.0.1", "@spectrum-css/page": "^3.0.1", - "@spectrum-css/picker": "^1.0.1", + "@spectrum-css/picker": "^1.0.0", "@spectrum-css/popover": "^3.0.1", "@spectrum-css/stepper": "^3.0.1", "@spectrum-css/table": "^3.0.1", diff --git a/packages/standard-components/src/forms/Picker.svelte b/packages/standard-components/src/forms/Picker.svelte index 894a070070..de6fb44dcb 100644 --- a/packages/standard-components/src/forms/Picker.svelte +++ b/packages/standard-components/src/forms/Picker.svelte @@ -19,7 +19,7 @@ {#if fieldState}
+{:else}
lastVisibleRow}> - {#if idx < firstVisibleRow || idx > lastVisibleRow} - - {:else} + {#if idx >= firstVisibleRow && idx <= lastVisibleRow} {#if $component.children} From 88ae09a55352c1516a9f7c30460cfae04f610a21 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 29 Mar 2021 16:22:43 +0100 Subject: [PATCH 47/51] Remove deprecated dataProvider setting from manifest --- packages/standard-components/manifest.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/standard-components/manifest.json b/packages/standard-components/manifest.json index ede0e8cbc8..1d9b83cf8c 100644 --- a/packages/standard-components/manifest.json +++ b/packages/standard-components/manifest.json @@ -72,7 +72,6 @@ "icon": "ri-search-line", "styleable": true, "hasChildren": true, - "dataProvider": true, "settings": [ { "type": "table", @@ -1070,7 +1069,6 @@ "icon": "ri-file-text-line", "styleable": true, "hasChildren": true, - "dataProvider": true, "actions": [ "ValidateForm" ], From d26c20df3140e88fa17231f77eab9d8d5461a53d Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 29 Mar 2021 16:37:17 +0100 Subject: [PATCH 48/51] Update search component to work with new data bindings. Simplify manifest context entries for data bindings --- .../builder/src/builderStore/dataBinding.js | 18 +++++++----------- packages/standard-components/manifest.json | 19 ++++++++++--------- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/packages/builder/src/builderStore/dataBinding.js b/packages/builder/src/builderStore/dataBinding.js index d68b0868e2..01bf5a063e 100644 --- a/packages/builder/src/builderStore/dataBinding.js +++ b/packages/builder/src/builderStore/dataBinding.js @@ -35,7 +35,7 @@ export const getDataProviderComponents = (asset, componentId) => { // Filter by only data provider components return path.filter(component => { const def = store.actions.components.getDefinition(component._component) - return def?.dataContext != null + return def?.context != null }) } @@ -113,32 +113,28 @@ const getContextBindings = (asset, componentId) => { // Create bindings for each data provider dataProviders.forEach(component => { const def = store.actions.components.getDefinition(component._component) - const contextDefinition = def.dataContext + const contextDefinition = def.context let schema let readablePrefix - // Forms are an edge case which do not need table schemas if (contextDefinition.type === "form") { + // Forms do not need table schemas + // Their schemas are built from their component field names schema = buildFormSchema(component) readablePrefix = "Fields" } else if (contextDefinition.type === "static") { + // Static contexts are fully defined by the components schema = {} const values = contextDefinition.values || [] values.forEach(value => { schema[value.key] = { name: value.label, type: "string" } }) } else if (contextDefinition.type === "schema") { - let datasource - const setting = contextDefinition.dataProviderSetting - const settingValue = component[setting] - const providerId = extractLiteralHandlebarsID(settingValue) - const provider = findComponent(asset.props, providerId) - datasource = getDatasourceForProvider(asset, provider) + // Schema contexts are generated dynamically depending on their data + const datasource = getDatasourceForProvider(asset, component) if (!datasource) { return } - - // Get schema and table for the datasource const info = getSchemaForDatasource(datasource) schema = info.schema readablePrefix = info.table?.name diff --git a/packages/standard-components/manifest.json b/packages/standard-components/manifest.json index 1d9b83cf8c..55d86f00ea 100644 --- a/packages/standard-components/manifest.json +++ b/packages/standard-components/manifest.json @@ -61,9 +61,8 @@ "key": "filter" } ], - "dataContext": { - "type": "schema", - "dataProviderSetting": "dataProvider" + "context": { + "type": "schema" } }, "search": { @@ -96,7 +95,10 @@ "key": "noRowsMessage", "defaultValue": "No rows found." } - ] + ], + "context": { + "type": "schema" + } }, "stackedlist": { "name": "Stacked List", @@ -1125,7 +1127,7 @@ "defaultValue": false } ], - "dataContext": { + "context": { "type": "form" } }, @@ -1446,7 +1448,7 @@ "key": "limit" } ], - "dataContext": { + "context": { "type": "static", "values": [ { @@ -1548,9 +1550,8 @@ "defaultValue": false } ], - "dataContext": { - "type": "schema", - "dataProviderSetting": "dataProvider" + "context": { + "type": "schema" } } } From 95c363727dcc12eb420025f517e4ff0c0633b07e Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 29 Mar 2021 18:21:57 +0100 Subject: [PATCH 49/51] Remove unecessary escape in regex --- packages/builder/src/builderStore/dataBinding.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/builder/src/builderStore/dataBinding.js b/packages/builder/src/builderStore/dataBinding.js index 01bf5a063e..9d6d0f3f6c 100644 --- a/packages/builder/src/builderStore/dataBinding.js +++ b/packages/builder/src/builderStore/dataBinding.js @@ -362,7 +362,7 @@ function bindingReplacement(bindableProperties, textWithBindings, convertTo) { * {{ literal [componentId] }} */ function extractLiteralHandlebarsID(value) { - return value?.match(/{{\s*literal[\s\[]+([a-fA-F0-9]+)[\s\]]*}}/)?.[1] + return value?.match(/{{\s*literal[\s[]+([a-fA-F0-9]+)[\s\]]*}}/)?.[1] } /** From 230e9ed988732c093d5c21fcf4025c1c44642dc3 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 1 Apr 2021 18:00:46 +0100 Subject: [PATCH 50/51] Update to support new backend table structure --- .../EventsEditor/actions/DeleteRow.svelte | 5 +++-- .../EventsEditor/actions/SaveRow.svelte | 5 +++-- .../src/components/start/CreateAppModal.svelte | 8 +------- packages/standard-components/yarn.lock | 14 +------------- 4 files changed, 8 insertions(+), 24 deletions(-) diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/DeleteRow.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/DeleteRow.svelte index 9b6136ae1f..0895c78331 100644 --- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/DeleteRow.svelte +++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/DeleteRow.svelte @@ -1,12 +1,13 @@ diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/SaveRow.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/SaveRow.svelte index b367b17484..a94a5e3002 100644 --- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/SaveRow.svelte +++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/SaveRow.svelte @@ -1,6 +1,7 @@