From f7f2cb36d5a16def7f36f738e4c3bedccdacc853 Mon Sep 17 00:00:00 2001 From: Dean Date: Tue, 12 Mar 2024 17:01:07 +0000 Subject: [PATCH 1/5] Table/Tableblock deprecated. Replaced with Gridblock labelled as Table --- .../src/components/deploy/AppActions.svelte | 4 +- .../new/_components/componentStructure.json | 4 +- .../NewScreen/CreateScreenModal.svelte | 10 +- .../NewScreen/images/tableDetails.png | Bin 0 -> 29899 bytes .../NewScreen/images/tableInline.png | Bin 0 -> 22018 bytes .../design/_components/NewScreen/index.svelte | 25 +-- .../src/templates/gridDetailsScreen.js | 158 ++++++++++++++++++ .../builder/src/templates/gridListScreen.js | 41 +++++ packages/builder/src/templates/index.js | 6 +- .../builder/src/templates/rowListScreen.js | 63 ------- packages/client/manifest.json | 4 +- 11 files changed, 232 insertions(+), 83 deletions(-) create mode 100644 packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/images/tableDetails.png create mode 100644 packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/images/tableInline.png create mode 100644 packages/builder/src/templates/gridDetailsScreen.js create mode 100644 packages/builder/src/templates/gridListScreen.js delete mode 100644 packages/builder/src/templates/rowListScreen.js diff --git a/packages/builder/src/components/deploy/AppActions.svelte b/packages/builder/src/components/deploy/AppActions.svelte index 9e5de1d3bf..72622d0a86 100644 --- a/packages/builder/src/components/deploy/AppActions.svelte +++ b/packages/builder/src/components/deploy/AppActions.svelte @@ -44,6 +44,7 @@ let appActionPopoverOpen = false let appActionPopoverAnchor let publishing = false + let lastOpened $: filteredApps = $apps.filter(app => app.devId === application) $: selectedApp = filteredApps?.length ? filteredApps[0] : null @@ -57,7 +58,7 @@ $appStore.version && $appStore.upgradableVersion !== $appStore.version $: canPublish = !publishing && loaded && $sortedScreens.length > 0 - $: lastDeployed = getLastDeployedString($deploymentStore) + $: lastDeployed = getLastDeployedString($deploymentStore, lastOpened) const initialiseApp = async () => { const applicationPkg = await API.fetchAppPackage($appStore.devId) @@ -201,6 +202,7 @@ class="app-action-button publish app-action-popover" on:click={() => { if (!appActionPopoverOpen) { + lastOpened = new Date() appActionPopover.show() } else { appActionPopover.hide() diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/new/_components/componentStructure.json b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/new/_components/componentStructure.json index 96e8faf93c..87fb5b7bfe 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/new/_components/componentStructure.json +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/new/_components/componentStructure.json @@ -3,8 +3,6 @@ "name": "Blocks", "icon": "Article", "children": [ - "gridblock", - "tableblock", "cardsblock", "repeaterblock", "formblock", @@ -24,7 +22,7 @@ "children": [ "dataprovider", "repeater", - "table", + "gridblock", "spreadsheet", "dynamicfilter", "daterangepicker" diff --git a/packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/CreateScreenModal.svelte b/packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/CreateScreenModal.svelte index 8c1a11289d..b49e38d9cd 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/CreateScreenModal.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/CreateScreenModal.svelte @@ -19,7 +19,8 @@ import { goto } from "@roxi/routify" import { TOUR_KEYS } from "components/portal/onboarding/tours.js" import formScreen from "templates/formScreen" - import rowListScreen from "templates/rowListScreen" + import gridListScreen from "templates/gridListScreen" + import gridDetailsScreen from "templates/gridDetailsScreen" let mode let pendingScreen @@ -127,7 +128,7 @@ screenAccessRole = Roles.BASIC formType = null - if (mode === "table" || mode === "grid" || mode === "form") { + if (mode === "grid" || mode === "gridDetails" || mode === "form") { datasourceModal.show() } else if (mode === "blank") { let templates = getTemplates($tables.list) @@ -153,7 +154,10 @@ // Handler for Datasource Screen Creation const completeDatasourceScreenCreation = async () => { - templates = rowListScreen(selectedDatasources, mode) + templates = + mode === "grid" + ? gridListScreen(selectedDatasources) + : gridDetailsScreen(selectedDatasources) const screens = templates.map(template => { let screenTemplate = template.create() diff --git a/packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/images/tableDetails.png b/packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/images/tableDetails.png new file mode 100644 index 0000000000000000000000000000000000000000..f67495f3aa6f52eaee3ee846ce95837941a5fb1b GIT binary patch literal 29899 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
pwl7ZpfAcYm`GJ3 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 A%K!iX literal 0 HcmV?d00001 diff --git a/packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/images/tableInline.png b/packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/images/tableInline.png new file mode 100644 index 0000000000000000000000000000000000000000..905294a9ae3fd9d5a0c01605770ca5fed5cfb245 GIT binary patch literal 22018 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 dOU1sd{QoE~Vrd>j -
createScreenModal.show("table")}> +
createScreenModal.show("grid")}>
- +
- Table - View, edit and delete rows on a table + Table with inline editing + View, edit and delete rows inline
-
createScreenModal.show("grid")}> +
createScreenModal.show("gridDetails")}>
- +
- Grid - View and manipulate rows on a grid + Table with details panel + Manage your row details in a side panel
@@ -113,6 +113,11 @@ width: 100%; } + .card .image { + min-height: 130px; + min-width: 235px; + } + .text { border: 1px solid var(--grey-4); border-radius: 0 0 4px 4px; diff --git a/packages/builder/src/templates/gridDetailsScreen.js b/packages/builder/src/templates/gridDetailsScreen.js new file mode 100644 index 0000000000..8e6e44bfae --- /dev/null +++ b/packages/builder/src/templates/gridDetailsScreen.js @@ -0,0 +1,158 @@ +import sanitizeUrl from "helpers/sanitizeUrl" +import { Screen } from "./Screen" +import { Component } from "./Component" +import { generate } from "shortid" +import { makePropSafe as safe } from "@budibase/string-templates" +import { Utils } from "@budibase/frontend-core" + +export default function (datasources) { + if (!Array.isArray(datasources)) { + return [] + } + return datasources.map(datasource => { + return { + name: `${datasource.label} - List with panel`, + create: () => createScreen(datasource), + id: GRID_DETAILS_TEMPLATE, + resourceId: datasource.resourceId, + } + }) +} + +export const GRID_DETAILS_TEMPLATE = "GRID_DETAILS_TEMPLATE" +export const gridDetailsUrl = datasource => sanitizeUrl(`/${datasource.label}`) + +const createScreen = datasource => { + /* + Create Row + */ + const createRowSidePanel = new Component( + "@budibase/standard-components/sidepanel" + ).instanceName("New row side panel") + + const buttonGroup = new Component("@budibase/standard-components/buttongroup") + const createButton = new Component("@budibase/standard-components/button") + + createButton.instanceName(`${datasource.label} - Create`).customProps({ + onClick: [ + { + id: 0, + "##eventHandlerType": "Open Side Panel", + parameters: { + id: createRowSidePanel._json._id, + }, + }, + ], + text: "Create row", + type: "cta", + }) + + buttonGroup.customProps({ + hAlign: "right", + buttons: [createButton.json()], + }) + + const gridHeader = new Component("@budibase/standard-components/container") + .instanceName("Heading container") + .customProps({ + direction: "row", + hAlign: "stretch", + }) + + const heading = new Component("@budibase/standard-components/heading") + .instanceName("Table heading") + .customProps({ + text: datasource?.label, + }) + + gridHeader.addChild(heading) + gridHeader.addChild(buttonGroup) + + const createFormBlock = new Component( + "@budibase/standard-components/formblock" + ) + createFormBlock.instanceName("Create row formblock").customProps({ + dataSource: datasource, + labelPosition: "left", + buttonPosition: "top", + actionType: "Create", + title: "Create row", + buttons: Utils.buildFormBlockButtonConfig({ + _id: createFormBlock._json._id, + showDeleteButton: false, + showSaveButton: true, + saveButtonLabel: "Save", + actionType: "Create", + dataSource: datasource, + }), + }) + + createRowSidePanel.addChild(createFormBlock) + + /* + Edit Row + */ + const stateKey = `ID_${generate()}` + const detailsSidePanel = new Component( + "@budibase/standard-components/sidepanel" + ).instanceName("Edit row side panel") + + const editFormBlock = new Component("@budibase/standard-components/formblock") + editFormBlock.instanceName("Edit row formblock").customProps({ + dataSource: datasource, + labelPosition: "left", + buttonPosition: "top", + actionType: "Update", + title: "Edit", + rowId: `{{ ${safe("state")}.${safe(stateKey)} }}`, + buttons: Utils.buildFormBlockButtonConfig({ + _id: editFormBlock._json._id, + showDeleteButton: true, + showSaveButton: true, + saveButtonLabel: "Save", + deleteButtonLabel: "Delete", + actionType: "Update", + dataSource: datasource, + }), + }) + + detailsSidePanel.addChild(editFormBlock) + + const gridBlock = new Component("@budibase/standard-components/gridblock") + gridBlock + .customProps({ + table: datasource, + allowAddRows: false, + allowEditRows: false, + allowDeleteRows: false, + onRowClick: [ + { + id: 0, + "##eventHandlerType": "Update State", + parameters: { + key: stateKey, + type: "set", + persist: false, + value: `{{ ${safe("eventContext")}.${safe("row")}._id }}`, + }, + }, + { + id: 1, + "##eventHandlerType": "Open Side Panel", + parameters: { + id: detailsSidePanel._json._id, + }, + }, + ], + }) + .instanceName(`${datasource.label} - Table`) + + return new Screen() + .route(gridDetailsUrl(datasource)) + .instanceName(`${datasource.label} - List and details`) + .addChild(gridHeader) + .addChild(gridBlock) + .addChild(createRowSidePanel) + .addChild(detailsSidePanel) + .json() +} diff --git a/packages/builder/src/templates/gridListScreen.js b/packages/builder/src/templates/gridListScreen.js new file mode 100644 index 0000000000..c98d5d4baf --- /dev/null +++ b/packages/builder/src/templates/gridListScreen.js @@ -0,0 +1,41 @@ +import sanitizeUrl from "helpers/sanitizeUrl" +import { Screen } from "./Screen" +import { Component } from "./Component" + +export default function (datasources) { + if (!Array.isArray(datasources)) { + return [] + } + return datasources.map(datasource => { + return { + name: `${datasource.label} - List`, + create: () => createScreen(datasource), + id: GRID_LIST_TEMPLATE, + resourceId: datasource.resourceId, + } + }) +} + +export const GRID_LIST_TEMPLATE = "GRID_LIST_TEMPLATE" +export const gridListUrl = datasource => sanitizeUrl(`/${datasource.label}`) + +const createScreen = datasource => { + const heading = new Component("@budibase/standard-components/heading") + .instanceName("Table heading") + .customProps({ + text: datasource?.label, + }) + + const gridBlock = new Component("@budibase/standard-components/gridblock") + .instanceName(`${datasource.label} - Table`) + .customProps({ + table: datasource, + }) + + return new Screen() + .route(gridListUrl(datasource)) + .instanceName(`${datasource.label} - List`) + .addChild(heading) + .addChild(gridBlock) + .json() +} diff --git a/packages/builder/src/templates/index.js b/packages/builder/src/templates/index.js index fff31cc070..b00b8cb621 100644 --- a/packages/builder/src/templates/index.js +++ b/packages/builder/src/templates/index.js @@ -1,9 +1,11 @@ -import rowListScreen from "./rowListScreen" +import gridListScreen from "./gridListScreen" +import gridDetailsScreen from "./gridDetailsScreen" import createFromScratchScreen from "./createFromScratchScreen" import formScreen from "./formScreen" const allTemplates = datasources => [ - ...rowListScreen(datasources), + ...gridListScreen(datasources), + ...gridDetailsScreen(datasources), ...formScreen(datasources), ] diff --git a/packages/builder/src/templates/rowListScreen.js b/packages/builder/src/templates/rowListScreen.js deleted file mode 100644 index 7781a3d067..0000000000 --- a/packages/builder/src/templates/rowListScreen.js +++ /dev/null @@ -1,63 +0,0 @@ -import sanitizeUrl from "helpers/sanitizeUrl" -import { Screen } from "./Screen" -import { Component } from "./Component" - -export default function (datasources, mode = "table") { - if (!Array.isArray(datasources)) { - return [] - } - return datasources.map(datasource => { - return { - name: `${datasource.label} - List`, - create: () => createScreen(datasource, mode), - id: ROW_LIST_TEMPLATE, - resourceId: datasource.resourceId, - } - }) -} - -export const ROW_LIST_TEMPLATE = "ROW_LIST_TEMPLATE" -export const rowListUrl = datasource => sanitizeUrl(`/${datasource.label}`) - -const generateTableBlock = datasource => { - const tableBlock = new Component("@budibase/standard-components/tableblock") - tableBlock - .customProps({ - title: datasource.label, - dataSource: datasource, - sortOrder: "Ascending", - size: "spectrum--medium", - paginate: true, - rowCount: 8, - clickBehaviour: "details", - showTitleButton: true, - titleButtonText: "Create row", - titleButtonClickBehaviour: "new", - sidePanelSaveLabel: "Save", - sidePanelDeleteLabel: "Delete", - }) - .instanceName(`${datasource.label} - Table block`) - return tableBlock -} - -const generateGridBlock = datasource => { - const gridBlock = new Component("@budibase/standard-components/gridblock") - gridBlock - .customProps({ - table: datasource, - }) - .instanceName(`${datasource.label} - Grid block`) - return gridBlock -} - -const createScreen = (datasource, mode) => { - return new Screen() - .route(rowListUrl(datasource)) - .instanceName(`${datasource.label} - List`) - .addChild( - mode === "table" - ? generateTableBlock(datasource) - : generateGridBlock(datasource) - ) - .json() -} diff --git a/packages/client/manifest.json b/packages/client/manifest.json index 531e2c968a..a6e14be4ef 100644 --- a/packages/client/manifest.json +++ b/packages/client/manifest.json @@ -4673,6 +4673,7 @@ } }, "table": { + "deprecated": true, "name": "Table", "icon": "Table", "illegalChildren": ["section"], @@ -5418,6 +5419,7 @@ ] }, "tableblock": { + "deprecated": true, "block": true, "name": "Table Block", "icon": "Table", @@ -6595,7 +6597,7 @@ ] }, "gridblock": { - "name": "Grid Block", + "name": "Table", "icon": "Table", "styles": ["size"], "size": { From 76e30b44ab782cb5c39b7e783dd01990d35c96d6 Mon Sep 17 00:00:00 2001 From: Dean Date: Thu, 21 Mar 2024 11:16:19 +0000 Subject: [PATCH 2/5] PR Feedback --- packages/builder/src/templates/gridDetailsScreen.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/builder/src/templates/gridDetailsScreen.js b/packages/builder/src/templates/gridDetailsScreen.js index 8e6e44bfae..35ab651268 100644 --- a/packages/builder/src/templates/gridDetailsScreen.js +++ b/packages/builder/src/templates/gridDetailsScreen.js @@ -33,7 +33,7 @@ const createScreen = datasource => { const buttonGroup = new Component("@budibase/standard-components/buttongroup") const createButton = new Component("@budibase/standard-components/button") - createButton.instanceName(`${datasource.label} - Create`).customProps({ + createButton.customProps({ onClick: [ { id: 0, @@ -47,7 +47,7 @@ const createScreen = datasource => { type: "cta", }) - buttonGroup.customProps({ + buttonGroup.instanceName(`${datasource.label} - Create`).customProps({ hAlign: "right", buttons: [createButton.json()], }) @@ -71,7 +71,7 @@ const createScreen = datasource => { const createFormBlock = new Component( "@budibase/standard-components/formblock" ) - createFormBlock.instanceName("Create row formblock").customProps({ + createFormBlock.instanceName("Create row form block").customProps({ dataSource: datasource, labelPosition: "left", buttonPosition: "top", @@ -98,7 +98,7 @@ const createScreen = datasource => { ).instanceName("Edit row side panel") const editFormBlock = new Component("@budibase/standard-components/formblock") - editFormBlock.instanceName("Edit row formblock").customProps({ + editFormBlock.instanceName("Edit row form block").customProps({ dataSource: datasource, labelPosition: "left", buttonPosition: "top", From b214e15068307aa74e3113895a1a7753f3ae943b Mon Sep 17 00:00:00 2001 From: Dean Date: Thu, 21 Mar 2024 11:31:31 +0000 Subject: [PATCH 3/5] PR feedback move deprecated components --- packages/client/src/components/app/blocks/index.js | 1 - .../components/app/{blocks => deprecated}/TableBlock.svelte | 0 .../components/app/{ => deprecated}/table/SlotRenderer.svelte | 0 .../src/components/app/{ => deprecated}/table/Table.svelte | 0 .../client/src/components/app/{ => deprecated}/table/index.js | 0 packages/client/src/components/app/index.js | 3 ++- 6 files changed, 2 insertions(+), 2 deletions(-) rename packages/client/src/components/app/{blocks => deprecated}/TableBlock.svelte (100%) rename packages/client/src/components/app/{ => deprecated}/table/SlotRenderer.svelte (100%) rename packages/client/src/components/app/{ => deprecated}/table/Table.svelte (100%) rename packages/client/src/components/app/{ => deprecated}/table/index.js (100%) diff --git a/packages/client/src/components/app/blocks/index.js b/packages/client/src/components/app/blocks/index.js index 2c8d81cf96..c1df620285 100644 --- a/packages/client/src/components/app/blocks/index.js +++ b/packages/client/src/components/app/blocks/index.js @@ -1,4 +1,3 @@ -export { default as tableblock } from "./TableBlock.svelte" export { default as cardsblock } from "./CardsBlock.svelte" export { default as repeaterblock } from "./RepeaterBlock.svelte" export { default as formblock } from "./form/FormBlock.svelte" diff --git a/packages/client/src/components/app/blocks/TableBlock.svelte b/packages/client/src/components/app/deprecated/TableBlock.svelte similarity index 100% rename from packages/client/src/components/app/blocks/TableBlock.svelte rename to packages/client/src/components/app/deprecated/TableBlock.svelte diff --git a/packages/client/src/components/app/table/SlotRenderer.svelte b/packages/client/src/components/app/deprecated/table/SlotRenderer.svelte similarity index 100% rename from packages/client/src/components/app/table/SlotRenderer.svelte rename to packages/client/src/components/app/deprecated/table/SlotRenderer.svelte diff --git a/packages/client/src/components/app/table/Table.svelte b/packages/client/src/components/app/deprecated/table/Table.svelte similarity index 100% rename from packages/client/src/components/app/table/Table.svelte rename to packages/client/src/components/app/deprecated/table/Table.svelte diff --git a/packages/client/src/components/app/table/index.js b/packages/client/src/components/app/deprecated/table/index.js similarity index 100% rename from packages/client/src/components/app/table/index.js rename to packages/client/src/components/app/deprecated/table/index.js diff --git a/packages/client/src/components/app/index.js b/packages/client/src/components/app/index.js index 97df3741e1..e23e19704c 100644 --- a/packages/client/src/components/app/index.js +++ b/packages/client/src/components/app/index.js @@ -40,11 +40,12 @@ export { default as sidepanel } from "./SidePanel.svelte" export { default as gridblock } from "./GridBlock.svelte" export * from "./charts" export * from "./forms" -export * from "./table" export * from "./blocks" export * from "./dynamic-filter" // Deprecated component left for compatibility in old apps +export * from "./deprecated/table" +export { default as tableblock } from "./deprecated/TableBlock.svelte" export { default as navigation } from "./deprecated/Navigation.svelte" export { default as cardhorizontal } from "./deprecated/CardHorizontal.svelte" export { default as stackedlist } from "./deprecated/StackedList.svelte" From 5066f54525f852fbb57486a6267adfbdd5b1795e Mon Sep 17 00:00:00 2001 From: Dean Date: Thu, 21 Mar 2024 11:37:47 +0000 Subject: [PATCH 4/5] Fix import for provider --- .../client/src/components/app/deprecated/table/Table.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/src/components/app/deprecated/table/Table.svelte b/packages/client/src/components/app/deprecated/table/Table.svelte index f16e26bc45..fd2e7c030c 100644 --- a/packages/client/src/components/app/deprecated/table/Table.svelte +++ b/packages/client/src/components/app/deprecated/table/Table.svelte @@ -3,7 +3,7 @@ import { Table } from "@budibase/bbui" import SlotRenderer from "./SlotRenderer.svelte" import { canBeSortColumn } from "@budibase/shared-core" - import Provider from "../../context/Provider.svelte" + import Provider from "components/context/Provider.svelte" export let dataProvider export let columns From 7d1c9b1337c3a07264bbfc8988160fb2dcdb1c3d Mon Sep 17 00:00:00 2001 From: Dean Date: Thu, 21 Mar 2024 14:30:18 +0000 Subject: [PATCH 5/5] Fix for settings definition cache getting overwritten when both table and gridblock are on the same screen --- packages/client/src/components/Component.svelte | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/client/src/components/Component.svelte b/packages/client/src/components/Component.svelte index 7dbe0c0e44..378fa64b73 100644 --- a/packages/client/src/components/Component.svelte +++ b/packages/client/src/components/Component.svelte @@ -246,15 +246,18 @@ return } + const cacheId = `${definition.name}${ + definition?.deprecated === true ? "_deprecated" : "" + }` // Get the settings definition for this component, and cache it - if (SettingsDefinitionCache[definition.name]) { - settingsDefinition = SettingsDefinitionCache[definition.name] - settingsDefinitionMap = SettingsDefinitionMapCache[definition.name] + if (SettingsDefinitionCache[cacheId]) { + settingsDefinition = SettingsDefinitionCache[cacheId] + settingsDefinitionMap = SettingsDefinitionMapCache[cacheId] } else { settingsDefinition = getSettingsDefinition(definition) settingsDefinitionMap = getSettingsDefinitionMap(settingsDefinition) - SettingsDefinitionCache[definition.name] = settingsDefinition - SettingsDefinitionMapCache[definition.name] = settingsDefinitionMap + SettingsDefinitionCache[cacheId] = settingsDefinition + SettingsDefinitionMapCache[cacheId] = settingsDefinitionMap } // Parse the instance settings, and cache them