From 2ce9f850d9b0eec0721408f3d93bfbddb86e5fe9 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Wed, 20 Sep 2023 10:33:45 +0200 Subject: [PATCH 1/7] Render bb reference as relationship --- packages/bbui/src/Table/CellRenderer.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/bbui/src/Table/CellRenderer.svelte b/packages/bbui/src/Table/CellRenderer.svelte index c64b975884..4ad6e22d7e 100644 --- a/packages/bbui/src/Table/CellRenderer.svelte +++ b/packages/bbui/src/Table/CellRenderer.svelte @@ -25,6 +25,7 @@ longform: StringRenderer, array: ArrayRenderer, internal: InternalRenderer, + bb_reference: RelationshipRenderer, } $: type = getType(schema) $: customRenderer = customRenderers?.find(x => x.column === schema?.name) From 69b6edb1e76a49ab934ede4218b0cd3cbf8f4e66 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Wed, 20 Sep 2023 16:41:55 +0200 Subject: [PATCH 2/7] FieldTypes from @budibase/types --- packages/client/src/constants.js | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/packages/client/src/constants.js b/packages/client/src/constants.js index 37a45fbe5d..f0a89b9cfd 100644 --- a/packages/client/src/constants.js +++ b/packages/client/src/constants.js @@ -1,17 +1,5 @@ -export const FieldTypes = { - STRING: "string", - BARCODEQR: "barcodeqr", - LONGFORM: "longform", - OPTIONS: "options", - NUMBER: "number", - BOOLEAN: "boolean", - ARRAY: "array", - DATETIME: "datetime", - ATTACHMENT: "attachment", - LINK: "link", - FORMULA: "formula", - JSON: "json", -} +import { FieldType as FieldTypes } from "@budibase/types" +export { FieldType as FieldTypes } from "@budibase/types" export const UnsortableTypes = [ FieldTypes.FORMULA, From 2bc96addc28b0fae4866822b4b4c7a2bb4812245 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Wed, 20 Sep 2023 16:44:26 +0200 Subject: [PATCH 3/7] Register BBReferenceField --- packages/client/manifest.json | 61 +++++++++++++++++++ .../app/blocks/form/InnerFormBlock.svelte | 1 + .../app/forms/BBReferenceField.svelte | 11 ++++ .../app/forms/RelationshipField.svelte | 3 +- .../client/src/components/app/forms/index.js | 1 + 5 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 packages/client/src/components/app/forms/BBReferenceField.svelte diff --git a/packages/client/manifest.json b/packages/client/manifest.json index 6788925c31..3bf4a8f7a8 100644 --- a/packages/client/manifest.json +++ b/packages/client/manifest.json @@ -5623,5 +5623,66 @@ "defaultValue": false } ] + }, + "bbreferencefield": { + "name": "BB Reference field", + "icon": "Link", + "styles": ["size"], + "requiredAncestors": ["form"], + "editable": true, + "size": { + "width": 400, + "height": 50 + }, + "settings": [ + { + "type": "text", + "label": "Label", + "key": "label" + }, + { + "type": "text", + "label": "Placeholder", + "key": "placeholder" + }, + { + "type": "text", + "label": "Default value", + "key": "defaultValue" + }, + { + "type": "event", + "label": "On change", + "key": "onChange", + "context": [ + { + "label": "Field Value", + "key": "value" + } + ] + }, + { + "type": "validation/link", + "label": "Validation", + "key": "validation" + }, + { + "type": "filter/relationship", + "label": "Filtering", + "key": "filter" + }, + { + "type": "boolean", + "label": "Search", + "key": "autocomplete", + "defaultValue": true + }, + { + "type": "boolean", + "label": "Disabled", + "key": "disabled", + "defaultValue": false + } + ] } } diff --git a/packages/client/src/components/app/blocks/form/InnerFormBlock.svelte b/packages/client/src/components/app/blocks/form/InnerFormBlock.svelte index f2887e97ad..ec5daa21b1 100644 --- a/packages/client/src/components/app/blocks/form/InnerFormBlock.svelte +++ b/packages/client/src/components/app/blocks/form/InnerFormBlock.svelte @@ -30,6 +30,7 @@ link: "relationshipfield", json: "jsonfield", barcodeqr: "codescanner", + bb_reference: "bbreferencefield", } let formId diff --git a/packages/client/src/components/app/forms/BBReferenceField.svelte b/packages/client/src/components/app/forms/BBReferenceField.svelte new file mode 100644 index 0000000000..87bc015f93 --- /dev/null +++ b/packages/client/src/components/app/forms/BBReferenceField.svelte @@ -0,0 +1,11 @@ + + + diff --git a/packages/client/src/components/app/forms/RelationshipField.svelte b/packages/client/src/components/app/forms/RelationshipField.svelte index c9fe4a8549..6402ccbe2d 100644 --- a/packages/client/src/components/app/forms/RelationshipField.svelte +++ b/packages/client/src/components/app/forms/RelationshipField.svelte @@ -16,6 +16,7 @@ export let defaultValue export let onChange export let filter + export let datasourceType = "table" let fieldState let fieldApi @@ -29,7 +30,7 @@ $: fetch = fetchData({ API, datasource: { - type: "table", + type: datasourceType, tableId: linkedTableId, }, options: { diff --git a/packages/client/src/components/app/forms/index.js b/packages/client/src/components/app/forms/index.js index 47701fe3a9..5804d3a79d 100644 --- a/packages/client/src/components/app/forms/index.js +++ b/packages/client/src/components/app/forms/index.js @@ -15,3 +15,4 @@ export { default as formstep } from "./FormStep.svelte" export { default as jsonfield } from "./JSONField.svelte" export { default as s3upload } from "./S3Upload.svelte" export { default as codescanner } from "./CodeScannerField.svelte" +export { default as bbreferencefield } from "./BBReferenceField.svelte" From db2fcf3606837fe4ebe8c79856eeda1ba89b5c42 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Wed, 20 Sep 2023 17:22:07 +0200 Subject: [PATCH 4/7] Fix display --- .../src/components/app/forms/BBReferenceField.svelte | 12 +++++------- .../components/app/forms/RelationshipField.svelte | 8 ++++++-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/client/src/components/app/forms/BBReferenceField.svelte b/packages/client/src/components/app/forms/BBReferenceField.svelte index 87bc015f93..7d11ff5525 100644 --- a/packages/client/src/components/app/forms/BBReferenceField.svelte +++ b/packages/client/src/components/app/forms/BBReferenceField.svelte @@ -1,11 +1,9 @@ - + diff --git a/packages/client/src/components/app/forms/RelationshipField.svelte b/packages/client/src/components/app/forms/RelationshipField.svelte index 6402ccbe2d..d054a4a558 100644 --- a/packages/client/src/components/app/forms/RelationshipField.svelte +++ b/packages/client/src/components/app/forms/RelationshipField.svelte @@ -17,6 +17,7 @@ export let onChange export let filter export let datasourceType = "table" + export let primaryDisplay let fieldState let fieldApi @@ -25,6 +26,9 @@ let searchTerm let open + $: type = + datasourceType === "table" ? FieldTypes.LINK : FieldTypes.BB_REFERENCE + $: multiselect = fieldSchema?.relationshipType !== "one-to-many" $: linkedTableId = fieldSchema?.tableId $: fetch = fetchData({ @@ -45,7 +49,7 @@ : flatten(fieldState?.value)?.[0] $: component = multiselect ? CoreMultiselect : CoreSelect $: expandedDefaultValue = expand(defaultValue) - $: primaryDisplay = tableDefinition?.primaryDisplay + $: primaryDisplay = primaryDisplay || tableDefinition?.primaryDisplay let optionsObj = {} let initialValuesProcessed @@ -162,7 +166,7 @@ {disabled} {validation} defaultValue={expandedDefaultValue} - type={FieldTypes.LINK} + {type} bind:fieldState bind:fieldApi bind:fieldSchema From 9f391ed2d92e27ab6edb55f2bd984227bfb1f11c Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Tue, 26 Sep 2023 10:26:12 +0200 Subject: [PATCH 5/7] Fix initial load empty --- .../client/src/components/app/forms/RelationshipField.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/src/components/app/forms/RelationshipField.svelte b/packages/client/src/components/app/forms/RelationshipField.svelte index d054a4a558..768f784d49 100644 --- a/packages/client/src/components/app/forms/RelationshipField.svelte +++ b/packages/client/src/components/app/forms/RelationshipField.svelte @@ -59,7 +59,7 @@ // Persist the initial values as options, allowing them to be present in the dropdown, // even if they are not in the inital fetch results initialValuesProcessed = true - optionsObj = fieldState?.value?.reduce((accumulator, value) => { + optionsObj = (fieldState?.value || []).reduce((accumulator, value) => { accumulator[value._id] = { _id: value._id, [primaryDisplay]: value.primaryDisplay, From b9dc60dc07762503ddfc002d09aeb24604952440 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Tue, 26 Sep 2023 11:27:17 +0200 Subject: [PATCH 6/7] Display side panel form selector --- .../design/settings/controls/FieldConfiguration/utils.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/builder/src/components/design/settings/controls/FieldConfiguration/utils.js b/packages/builder/src/components/design/settings/controls/FieldConfiguration/utils.js index d4a8963dba..c929263db1 100644 --- a/packages/builder/src/components/design/settings/controls/FieldConfiguration/utils.js +++ b/packages/builder/src/components/design/settings/controls/FieldConfiguration/utils.js @@ -43,4 +43,5 @@ export const FieldTypeToComponentMap = { link: "relationshipfield", json: "jsonfield", barcodeqr: "codescanner", + bb_reference: "bbreferencefield", } From b3405b7aaa65fdac6606c4b92f1d2b386cf31317 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Tue, 26 Sep 2023 11:44:37 +0200 Subject: [PATCH 7/7] Design forms --- .../components/design/settings/componentSettings.js | 2 ++ .../new/_components/componentStructure.json | 3 ++- packages/client/manifest.json | 11 +++++++++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/builder/src/components/design/settings/componentSettings.js b/packages/builder/src/components/design/settings/componentSettings.js index 6d673cbd3d..4c49587372 100644 --- a/packages/builder/src/components/design/settings/componentSettings.js +++ b/packages/builder/src/components/design/settings/componentSettings.js @@ -65,6 +65,7 @@ const componentMap = { "field/array": FormFieldSelect, "field/json": FormFieldSelect, "field/barcodeqr": FormFieldSelect, + "field/bb_reference": FormFieldSelect, // Some validation types are the same as others, so not all types are // explicitly listed here. e.g. options uses string validation "validation/string": ValidationEditor, @@ -74,6 +75,7 @@ const componentMap = { "validation/datetime": ValidationEditor, "validation/attachment": ValidationEditor, "validation/link": ValidationEditor, + "validation/bb_reference": ValidationEditor, } export const getComponentForSetting = setting => { 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 ee0f99a074..11a130490a 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 @@ -69,7 +69,8 @@ "datetimefield", "multifieldselect", "s3upload", - "codescanner" + "codescanner", + "bbreferencefield" ] }, { diff --git a/packages/client/manifest.json b/packages/client/manifest.json index 3bf4a8f7a8..4e56ca758d 100644 --- a/packages/client/manifest.json +++ b/packages/client/manifest.json @@ -5625,8 +5625,9 @@ ] }, "bbreferencefield": { - "name": "BB Reference field", - "icon": "Link", + "devComment": "As bb reference is only used for user subtype for now, we are using user for icon and labels", + "name": "User Field", + "icon": "User", "styles": ["size"], "requiredAncestors": ["form"], "editable": true, @@ -5635,6 +5636,12 @@ "height": 50 }, "settings": [ + { + "type": "field/bb_reference", + "label": "Field", + "key": "field", + "required": true + }, { "type": "text", "label": "Label",