From 6d4e2b7454c99d3ceb65d168f7e9388c8e40a93f Mon Sep 17 00:00:00 2001 From: Dean Date: Tue, 23 Apr 2024 16:21:36 +0100 Subject: [PATCH 001/110] Added changelog links to portal help section and version update modal --- .../builder/src/components/common/FontAwesomeIcon.svelte | 2 ++ packages/builder/src/components/common/HelpMenu.svelte | 8 ++++++++ .../builder/src/components/deploy/VersionModal.svelte | 6 ++++++ packages/builder/src/constants/index.js | 2 ++ 4 files changed, 18 insertions(+) diff --git a/packages/builder/src/components/common/FontAwesomeIcon.svelte b/packages/builder/src/components/common/FontAwesomeIcon.svelte index 16c065cfaa..0e10dfc86c 100644 --- a/packages/builder/src/components/common/FontAwesomeIcon.svelte +++ b/packages/builder/src/components/common/FontAwesomeIcon.svelte @@ -23,6 +23,7 @@ faQuestionCircle, faCircleCheck, faGear, + faRectangleList, } from "@fortawesome/free-solid-svg-icons" import { faGithub, faDiscord } from "@fortawesome/free-brands-svg-icons" @@ -37,6 +38,7 @@ faFileArrowUp, faChevronLeft, faCircleInfo, + faRectangleList, // -- Required for easyMDE use in the builder. faBold, diff --git a/packages/builder/src/components/common/HelpMenu.svelte b/packages/builder/src/components/common/HelpMenu.svelte index 63156676d2..0ce5ab9c8e 100644 --- a/packages/builder/src/components/common/HelpMenu.svelte +++ b/packages/builder/src/components/common/HelpMenu.svelte @@ -4,6 +4,7 @@ import { isEnabled, TENANT_FEATURE_FLAGS } from "helpers/featureFlags" import { licensing } from "stores/portal" import { isPremiumOrAbove } from "helpers/planTitle" + import { ChangelogURL } from "constants" $: premiumOrAboveLicense = isPremiumOrAbove($licensing?.license?.plan?.type) @@ -30,6 +31,13 @@ Help docs
+ +
+ +
+ Changelog +
+
{/if} + + Find the changelog for the latest release + here + {#if revertAvailable} You can revert this app to version diff --git a/packages/builder/src/constants/index.js b/packages/builder/src/constants/index.js index f556ee4b05..44c71f2e3b 100644 --- a/packages/builder/src/constants/index.js +++ b/packages/builder/src/constants/index.js @@ -70,3 +70,5 @@ export const PlanModel = { PER_USER: "perUser", DAY_PASS: "dayPass", } + +export const ChangelogURL = "https://docs.budibase.com/changelog" From cbf33adc0e4433356d5dde6f977da58e633d058f Mon Sep 17 00:00:00 2001 From: Gerard Burns Date: Wed, 24 Apr 2024 08:05:29 +0100 Subject: [PATCH 002/110] fix --- packages/builder/src/stores/builder/components.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/builder/src/stores/builder/components.js b/packages/builder/src/stores/builder/components.js index fe5f4e8a05..a2f5810d64 100644 --- a/packages/builder/src/stores/builder/components.js +++ b/packages/builder/src/stores/builder/components.js @@ -440,11 +440,14 @@ export class ComponentStore extends BudiStore { return state }) + componentTreeNodesStore.makeNodeVisible(componentInstance._id) + // Log event analytics.captureEvent(Events.COMPONENT_CREATED, { name: componentInstance._component, }) + return componentInstance } From afdbf4cc42e4dae7ba3a4cd9419c01a35479c6d8 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Mon, 22 Apr 2024 11:14:23 +0200 Subject: [PATCH 003/110] Add BB_REFERENCE_SINGLE type --- .../server/src/integrations/base/sqlTable.ts | 5 ++- .../server/src/integrations/googlesheets.ts | 35 +++++++++++++------ .../server/src/integrations/utils/utils.ts | 1 + .../server/src/sdk/app/tables/internal/sqs.ts | 1 + .../src/utilities/rowProcessor/index.ts | 3 +- packages/server/src/utilities/schema.ts | 3 +- packages/shared-core/src/filters.ts | 6 +++- packages/shared-core/src/table.ts | 2 ++ packages/types/src/documents/app/row.ts | 2 ++ .../types/src/documents/app/table/schema.ts | 7 ++++ 10 files changed, 50 insertions(+), 15 deletions(-) diff --git a/packages/server/src/integrations/base/sqlTable.ts b/packages/server/src/integrations/base/sqlTable.ts index 3c55d75b8b..087f068386 100644 --- a/packages/server/src/integrations/base/sqlTable.ts +++ b/packages/server/src/integrations/base/sqlTable.ts @@ -61,7 +61,8 @@ function generateSchema( case FieldType.BARCODEQR: schema.text(key) break - case FieldType.BB_REFERENCE: { + case FieldType.BB_REFERENCE: + case FieldType.BB_REFERENCE_SINGLE: { const subtype = column.subtype switch (subtype) { case FieldSubtype.USER: @@ -127,6 +128,8 @@ function generateSchema( .references(`${tableName}.${relatedPrimary}`) } break + default: + utils.unreachable(column.type) } } diff --git a/packages/server/src/integrations/googlesheets.ts b/packages/server/src/integrations/googlesheets.ts index 7215c337d7..8288a07846 100644 --- a/packages/server/src/integrations/googlesheets.ts +++ b/packages/server/src/integrations/googlesheets.ts @@ -52,17 +52,30 @@ interface AuthTokenResponse { access_token: string } -const ALLOWED_TYPES = [ - FieldType.STRING, - FieldType.FORMULA, - FieldType.NUMBER, - FieldType.LONGFORM, - FieldType.DATETIME, - FieldType.OPTIONS, - FieldType.BOOLEAN, - FieldType.BARCODEQR, - FieldType.BB_REFERENCE, -] +const isTypeAllowed: Record = { + [FieldType.STRING]: true, + [FieldType.FORMULA]: true, + [FieldType.NUMBER]: true, + [FieldType.LONGFORM]: true, + [FieldType.DATETIME]: true, + [FieldType.OPTIONS]: true, + [FieldType.BOOLEAN]: true, + [FieldType.BARCODEQR]: true, + [FieldType.BB_REFERENCE]: true, + [FieldType.BB_REFERENCE_SINGLE]: true, + [FieldType.ARRAY]: false, + [FieldType.ATTACHMENTS]: false, + [FieldType.ATTACHMENT_SINGLE]: false, + [FieldType.LINK]: false, + [FieldType.AUTO]: false, + [FieldType.JSON]: false, + [FieldType.INTERNAL]: false, + [FieldType.BIGINT]: false, +} + +const ALLOWED_TYPES = Object.entries(isTypeAllowed) + .filter(([_, allowed]) => allowed) + .map(([type]) => type as FieldType) const SCHEMA: Integration = { plus: true, diff --git a/packages/server/src/integrations/utils/utils.ts b/packages/server/src/integrations/utils/utils.ts index aac3f5f74a..581c9b6a22 100644 --- a/packages/server/src/integrations/utils/utils.ts +++ b/packages/server/src/integrations/utils/utils.ts @@ -378,6 +378,7 @@ function copyExistingPropsOver( case FieldType.ATTACHMENT_SINGLE: case FieldType.JSON: case FieldType.BB_REFERENCE: + case FieldType.BB_REFERENCE_SINGLE: shouldKeepSchema = keepIfType(FieldType.JSON, FieldType.STRING) break diff --git a/packages/server/src/sdk/app/tables/internal/sqs.ts b/packages/server/src/sdk/app/tables/internal/sqs.ts index 0726c94962..391e186bc0 100644 --- a/packages/server/src/sdk/app/tables/internal/sqs.ts +++ b/packages/server/src/sdk/app/tables/internal/sqs.ts @@ -45,6 +45,7 @@ const FieldTypeMap: Record = { [FieldType.BIGINT]: SQLiteType.TEXT, // TODO: consider the difference between multi-user and single user types (subtyping) [FieldType.BB_REFERENCE]: SQLiteType.TEXT, + [FieldType.BB_REFERENCE_SINGLE]: SQLiteType.TEXT, } function buildRelationshipDefinitions( diff --git a/packages/server/src/utilities/rowProcessor/index.ts b/packages/server/src/utilities/rowProcessor/index.ts index e69cfa471a..418b38bc38 100644 --- a/packages/server/src/utilities/rowProcessor/index.ts +++ b/packages/server/src/utilities/rowProcessor/index.ts @@ -244,7 +244,8 @@ export async function outputProcessing( } } else if ( !opts.skipBBReferences && - column.type == FieldType.BB_REFERENCE + (column.type == FieldType.BB_REFERENCE || + column.type == FieldType.BB_REFERENCE_SINGLE) ) { for (let row of enriched) { row[property] = await processOutputBBReferences( diff --git a/packages/server/src/utilities/schema.ts b/packages/server/src/utilities/schema.ts index 4c7f0b7423..156ea5ea7b 100644 --- a/packages/server/src/utilities/schema.ts +++ b/packages/server/src/utilities/schema.ts @@ -92,7 +92,8 @@ export function validate(rows: Rows, schema: TableSchema): ValidationResults { ) { results.schemaValidation[columnName] = false } else if ( - columnType === FieldType.BB_REFERENCE && + (columnType === FieldType.BB_REFERENCE || + columnType === FieldType.BB_REFERENCE_SINGLE) && !isValidBBReference(columnData, columnSubtype) ) { results.schemaValidation[columnName] = false diff --git a/packages/shared-core/src/filters.ts b/packages/shared-core/src/filters.ts index 0554e0c1e4..849f22e991 100644 --- a/packages/shared-core/src/filters.ts +++ b/packages/shared-core/src/filters.ts @@ -68,7 +68,11 @@ export const getValidOperatorsForType = ( ops = numOps } else if (type === FieldType.FORMULA && formulaType === FormulaType.STATIC) { ops = stringOps.concat([Op.MoreThan, Op.LessThan]) - } else if (type === FieldType.BB_REFERENCE && subtype == FieldSubtype.USER) { + } else if ( + (type === FieldType.BB_REFERENCE_SINGLE || + type === FieldType.BB_REFERENCE) && + subtype == FieldSubtype.USER + ) { ops = [Op.Equals, Op.NotEquals, Op.Empty, Op.NotEmpty, Op.In] } else if (type === FieldType.BB_REFERENCE && subtype == FieldSubtype.USERS) { ops = [Op.Contains, Op.NotContains, Op.ContainsAny, Op.Empty, Op.NotEmpty] diff --git a/packages/shared-core/src/table.ts b/packages/shared-core/src/table.ts index 26a7e77cd0..2b3586932a 100644 --- a/packages/shared-core/src/table.ts +++ b/packages/shared-core/src/table.ts @@ -18,6 +18,7 @@ const allowDisplayColumnByType: Record = { [FieldType.LINK]: false, [FieldType.JSON]: false, [FieldType.BB_REFERENCE]: false, + [FieldType.BB_REFERENCE_SINGLE]: false, } const allowSortColumnByType: Record = { @@ -39,6 +40,7 @@ const allowSortColumnByType: Record = { [FieldType.ARRAY]: false, [FieldType.LINK]: false, [FieldType.BB_REFERENCE]: false, + [FieldType.BB_REFERENCE_SINGLE]: false, } export function canBeDisplayColumn(type: FieldType): boolean { diff --git a/packages/types/src/documents/app/row.ts b/packages/types/src/documents/app/row.ts index 865ab4ba64..ca9b11ffe5 100644 --- a/packages/types/src/documents/app/row.ts +++ b/packages/types/src/documents/app/row.ts @@ -107,6 +107,8 @@ export enum FieldType { * an array of resource IDs, the API will squash these down and validate them before saving the row. */ BB_REFERENCE = "bb_reference", + // TODO + BB_REFERENCE_SINGLE = "bb_reference_single", } export interface RowAttachment { diff --git a/packages/types/src/documents/app/table/schema.ts b/packages/types/src/documents/app/table/schema.ts index 63a5876bc0..22ad9f7bb5 100644 --- a/packages/types/src/documents/app/table/schema.ts +++ b/packages/types/src/documents/app/table/schema.ts @@ -112,6 +112,11 @@ export interface BBReferenceFieldMetadata subtype: FieldSubtype.USER | FieldSubtype.USERS relationshipType?: RelationshipType } +export interface BBReferenceSingleFieldMetadata + extends Omit { + type: FieldType.BB_REFERENCE_SINGLE + subtype: FieldSubtype.USER | FieldSubtype.USERS +} export interface AttachmentFieldMetadata extends BaseFieldSchema { type: FieldType.ATTACHMENTS @@ -163,6 +168,7 @@ interface OtherFieldMetadata extends BaseFieldSchema { | FieldType.NUMBER | FieldType.LONGFORM | FieldType.BB_REFERENCE + | FieldType.BB_REFERENCE_SINGLE | FieldType.ATTACHMENTS > } @@ -178,6 +184,7 @@ export type FieldSchema = | BBReferenceFieldMetadata | JsonFieldMetadata | AttachmentFieldMetadata + | BBReferenceSingleFieldMetadata export interface TableSchema { [key: string]: FieldSchema From 2555a145b26dd1a174824fbc9b9f49cf6066ba4a Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Mon, 22 Apr 2024 12:32:51 +0200 Subject: [PATCH 004/110] Add user/users column types --- .../backend/DataTable/modals/CreateEditColumn.svelte | 10 ++++------ packages/builder/src/constants/backend/index.js | 11 ++++++++--- packages/frontend-core/src/constants.js | 5 +++-- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte index d271462f3e..a837a9aad8 100644 --- a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte +++ b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte @@ -373,10 +373,6 @@ .map(([_, fieldDefinition]) => fieldDefinition) } - const isUsers = - editableColumn.type === FieldType.BB_REFERENCE && - editableColumn.subtype === FieldSubtype.USERS - if (!externalTable) { return [ FIELDS.STRING, @@ -393,7 +389,8 @@ FIELDS.LINK, FIELDS.FORMULA, FIELDS.JSON, - isUsers ? FIELDS.USERS : FIELDS.USER, + FIELDS.USER, + FIELDS.USERS, FIELDS.AUTO, ] } else { @@ -407,7 +404,8 @@ FIELDS.BOOLEAN, FIELDS.FORMULA, FIELDS.BIGINT, - isUsers ? FIELDS.USERS : FIELDS.USER, + FIELDS.USER, + FIELDS.USERS, ] // no-sql or a spreadsheet if (!externalTable || table.sql) { diff --git a/packages/builder/src/constants/backend/index.js b/packages/builder/src/constants/backend/index.js index 84975d93e2..30f6e20b45 100644 --- a/packages/builder/src/constants/backend/index.js +++ b/packages/builder/src/constants/backend/index.js @@ -4,6 +4,7 @@ import { INTERNAL_TABLE_SOURCE_ID, AutoFieldSubType, Hosting, + FieldTypeSubtypes, } from "@budibase/types" import { Constants } from "@budibase/frontend-core" @@ -159,15 +160,19 @@ export const FIELDS = { }, USER: { name: "User", - type: FieldType.BB_REFERENCE, + type: FieldType.BB_REFERENCE_SINGLE, subtype: FieldSubtype.USER, - icon: TypeIconMap[FieldType.USER], + icon: TypeIconMap[FieldType.BB_REFERENCE_SINGLE][ + FieldTypeSubtypes.BB_REFERENCE.USER + ], }, USERS: { name: "Users", type: FieldType.BB_REFERENCE, subtype: FieldSubtype.USERS, - icon: TypeIconMap[FieldType.USERS], + icon: TypeIconMap[FieldType.BB_REFERENCE][ + FieldTypeSubtypes.BB_REFERENCE.USERS + ], constraints: { type: "array", }, diff --git a/packages/frontend-core/src/constants.js b/packages/frontend-core/src/constants.js index 95228c3bdc..b3b1edac65 100644 --- a/packages/frontend-core/src/constants.js +++ b/packages/frontend-core/src/constants.js @@ -131,10 +131,11 @@ export const TypeIconMap = { [FieldType.JSON]: "Brackets", [FieldType.BIGINT]: "TagBold", [FieldType.AUTO]: "MagicWand", - [FieldType.USER]: "User", - [FieldType.USERS]: "UserGroup", [FieldType.BB_REFERENCE]: { [FieldTypeSubtypes.BB_REFERENCE.USER]: "User", [FieldTypeSubtypes.BB_REFERENCE.USERS]: "UserGroup", }, + [FieldType.BB_REFERENCE_SINGLE]: { + [FieldTypeSubtypes.BB_REFERENCE.USER]: "User", + }, } From 891a04c37637590977db7c8d9318dce268918689 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Mon, 22 Apr 2024 12:38:58 +0200 Subject: [PATCH 005/110] Remove is multiple toggle --- .../DataTable/modals/CreateEditColumn.svelte | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte index a837a9aad8..574b15de1a 100644 --- a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte +++ b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte @@ -684,20 +684,6 @@ - {:else if isUsersColumn(editableColumn) && datasource?.source !== SourceName.GOOGLE_SHEETS} - - handleTypeChange( - makeFieldId( - FieldType.BB_REFERENCE, - e.detail ? FieldSubtype.USERS : FieldSubtype.USER - ) - )} - disabled={!isCreating} - thin - text="Allow multiple users" - /> {/if} {#if editableColumn.type === AUTO_TYPE || editableColumn.autocolumn}