diff --git a/hosting/docker-compose.yaml b/hosting/docker-compose.yaml
index 9cdf2b2114..560b273668 100644
--- a/hosting/docker-compose.yaml
+++ b/hosting/docker-compose.yaml
@@ -119,6 +119,8 @@ services:
watchtower-service:
image: containrrr/watchtower
+ ports:
+ - "${WATCHTOWER_PORT}:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --debug --http-api-update bbapps bbworker
@@ -128,8 +130,6 @@ services:
- WATCHTOWER_CLEANUP=true
labels:
- "com.centurylinklabs.watchtower.enable=false"
- ports:
- - 6161:8080
volumes:
diff --git a/hosting/hosting.properties b/hosting/hosting.properties
index d11972bc4b..c8e2f5c606 100644
--- a/hosting/hosting.properties
+++ b/hosting/hosting.properties
@@ -17,4 +17,5 @@ WORKER_PORT=4003
MINIO_PORT=4004
COUCH_DB_PORT=4005
REDIS_PORT=6379
+WATCHTOWER_PORT=6161
BUDIBASE_ENVIRONMENT=PRODUCTION
diff --git a/lerna.json b/lerna.json
index 57277a07a1..67abcbf62d 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,5 +1,5 @@
{
- "version": "0.9.105-alpha.32",
+ "version": "0.9.116-alpha.3",
"npmClient": "yarn",
"packages": [
"packages/*"
diff --git a/packages/auth/package.json b/packages/auth/package.json
index 9cfa8e880f..239265b9f0 100644
--- a/packages/auth/package.json
+++ b/packages/auth/package.json
@@ -1,6 +1,6 @@
{
"name": "@budibase/auth",
- "version": "0.9.105-alpha.32",
+ "version": "0.9.116-alpha.3",
"description": "Authentication middlewares for budibase builder and apps",
"main": "src/index.js",
"author": "Budibase",
diff --git a/packages/bbui/package.json b/packages/bbui/package.json
index 4650c988dd..c8b5e1430e 100644
--- a/packages/bbui/package.json
+++ b/packages/bbui/package.json
@@ -1,7 +1,7 @@
{
"name": "@budibase/bbui",
"description": "A UI solution used in the different Budibase projects.",
- "version": "0.9.105-alpha.32",
+ "version": "0.9.116-alpha.3",
"license": "AGPL-3.0",
"svelte": "src/index.js",
"module": "dist/bbui.es.js",
diff --git a/packages/bbui/src/Table/ArrayRenderer.svelte b/packages/bbui/src/Table/ArrayRenderer.svelte
new file mode 100644
index 0000000000..679973a03a
--- /dev/null
+++ b/packages/bbui/src/Table/ArrayRenderer.svelte
@@ -0,0 +1,17 @@
+
+
+{#each badges as badge}
+ {badge}
+{/each}
+{#if leftover}
+
+{leftover} more
+{/if}
diff --git a/packages/bbui/src/Table/CellRenderer.svelte b/packages/bbui/src/Table/CellRenderer.svelte
index 2d073b7782..d6a2f3196d 100644
--- a/packages/bbui/src/Table/CellRenderer.svelte
+++ b/packages/bbui/src/Table/CellRenderer.svelte
@@ -4,7 +4,7 @@
import DateTimeRenderer from "./DateTimeRenderer.svelte"
import RelationshipRenderer from "./RelationshipRenderer.svelte"
import AttachmentRenderer from "./AttachmentRenderer.svelte"
-
+ import ArrayRenderer from "./ArrayRenderer.svelte"
export let row
export let schema
export let value
@@ -19,6 +19,7 @@
options: StringRenderer,
number: StringRenderer,
longform: StringRenderer,
+ array: ArrayRenderer,
}
$: type = schema?.type ?? "string"
$: customRenderer = customRenderers?.find(x => x.column === schema?.name)
diff --git a/packages/builder/package.json b/packages/builder/package.json
index a4ad8f7703..e98706a229 100644
--- a/packages/builder/package.json
+++ b/packages/builder/package.json
@@ -1,6 +1,6 @@
{
"name": "@budibase/builder",
- "version": "0.9.105-alpha.32",
+ "version": "0.9.116-alpha.3",
"license": "AGPL-3.0",
"private": true,
"scripts": {
@@ -65,10 +65,10 @@
}
},
"dependencies": {
- "@budibase/bbui": "^0.9.105-alpha.32",
- "@budibase/client": "^0.9.105-alpha.32",
+ "@budibase/bbui": "^0.9.116-alpha.3",
+ "@budibase/client": "^0.9.116-alpha.3",
"@budibase/colorpicker": "1.1.2",
- "@budibase/string-templates": "^0.9.105-alpha.32",
+ "@budibase/string-templates": "^0.9.116-alpha.3",
"@sentry/browser": "5.19.1",
"@spectrum-css/page": "^3.0.1",
"@spectrum-css/vars": "^3.0.1",
diff --git a/packages/builder/src/analytics.js b/packages/builder/src/analytics.js
index bcc59eb311..5b130a8e6b 100644
--- a/packages/builder/src/analytics.js
+++ b/packages/builder/src/analytics.js
@@ -23,6 +23,7 @@ async function activate() {
if (posthogConfigured) {
posthog.init(process.env.POSTHOG_TOKEN, {
autocapture: false,
+ capture_pageview: false,
api_host: process.env.POSTHOG_URL,
})
posthog.set_config({ persistence: "cookie" })
@@ -79,6 +80,7 @@ const isFeedbackTimeElapsed = sinceDateStr => {
const feedbackMilliseconds = feedbackHours * 60 * 60 * 1000
return Date.now() > sinceDate + feedbackMilliseconds
}
+
function submitFeedback(values) {
if (!analyticsEnabled || !process.env.POSTHOG_TOKEN) return
localStorage.setItem(FEEDBACK_SUBMITTED_KEY, Date.now())
diff --git a/packages/builder/src/builderStore/store/screenTemplates/newRowScreen.js b/packages/builder/src/builderStore/store/screenTemplates/newRowScreen.js
index b890d42d54..c2dffef4b6 100644
--- a/packages/builder/src/builderStore/store/screenTemplates/newRowScreen.js
+++ b/packages/builder/src/builderStore/store/screenTemplates/newRowScreen.js
@@ -43,6 +43,7 @@ const createScreen = table => {
tableId: table._id,
type: "table",
},
+ size: "spectrum--medium",
})
const fieldGroup = new Component("@budibase/standard-components/fieldgroup")
diff --git a/packages/builder/src/builderStore/store/screenTemplates/rowDetailScreen.js b/packages/builder/src/builderStore/store/screenTemplates/rowDetailScreen.js
index ec737fe36b..3ba8be10b5 100644
--- a/packages/builder/src/builderStore/store/screenTemplates/rowDetailScreen.js
+++ b/packages/builder/src/builderStore/store/screenTemplates/rowDetailScreen.js
@@ -101,7 +101,6 @@ const createScreen = table => {
.instanceName("Form")
.customProps({
actionType: "Update",
- theme: "spectrum--lightest",
size: "spectrum--medium",
dataSource: {
label: table.name,
diff --git a/packages/builder/src/builderStore/store/screenTemplates/rowListScreen.js b/packages/builder/src/builderStore/store/screenTemplates/rowListScreen.js
index ccf1fceb29..188682ed3f 100644
--- a/packages/builder/src/builderStore/store/screenTemplates/rowListScreen.js
+++ b/packages/builder/src/builderStore/store/screenTemplates/rowListScreen.js
@@ -65,6 +65,7 @@ const createScreen = table => {
tableId: table._id,
type: "table",
},
+ size: "spectrum--medium",
paginate: true,
limit: 8,
})
diff --git a/packages/builder/src/builderStore/store/screenTemplates/utils/commonComponents.js b/packages/builder/src/builderStore/store/screenTemplates/utils/commonComponents.js
index 1a64a8958f..5b3bc041ff 100644
--- a/packages/builder/src/builderStore/store/screenTemplates/utils/commonComponents.js
+++ b/packages/builder/src/builderStore/store/screenTemplates/utils/commonComponents.js
@@ -131,6 +131,7 @@ const fieldTypeToComponentMap = {
string: "stringfield",
number: "numberfield",
options: "optionsfield",
+ array: "multifieldselect",
boolean: "booleanfield",
longform: "longformfield",
datetime: "datetimefield",
@@ -167,6 +168,13 @@ export function makeDatasourceFormComponents(datasource) {
optionsSource: "schema",
})
}
+ if (fieldType === "array") {
+ component.customProps({
+ placeholder: "Choose an option",
+ optionsSource: "schema",
+ })
+ }
+
if (fieldType === "link") {
let placeholder =
fieldSchema.relationshipType === "one-to-many"
diff --git a/packages/builder/src/components/backend/DataTable/RowFieldControl.svelte b/packages/builder/src/components/backend/DataTable/RowFieldControl.svelte
index 0724016679..e82c55679a 100644
--- a/packages/builder/src/components/backend/DataTable/RowFieldControl.svelte
+++ b/packages/builder/src/components/backend/DataTable/RowFieldControl.svelte
@@ -1,5 +1,12 @@
diff --git a/packages/builder/src/components/design/AppPreview/componentStructure.json b/packages/builder/src/components/design/AppPreview/componentStructure.json
index cea20a7dcf..3bc2554fde 100644
--- a/packages/builder/src/components/design/AppPreview/componentStructure.json
+++ b/packages/builder/src/components/design/AppPreview/componentStructure.json
@@ -21,7 +21,8 @@
"datetimefield",
"attachmentfield",
"relationshipfield",
- "daterangepicker"
+ "daterangepicker",
+ "multifieldselect"
]
},
{
diff --git a/packages/builder/src/components/design/NavigationPanel/NewScreenModal.svelte b/packages/builder/src/components/design/NavigationPanel/NewScreenModal.svelte
index 3b16d2ba74..ed0c764956 100644
--- a/packages/builder/src/components/design/NavigationPanel/NewScreenModal.svelte
+++ b/packages/builder/src/components/design/NavigationPanel/NewScreenModal.svelte
@@ -1,6 +1,7 @@
@@ -122,7 +132,7 @@
/>
{:else if ["string", "longform", "number"].includes(filter.type)}
- {:else if filter.type === "options"}
+ {:else if filter.type === "options" || "array"}
{
return ConstraintMap[type]
}
@@ -190,6 +196,7 @@
valueType: "Binding",
type: fieldType,
id: generate(),
+ value: fieldType == "array" ? [] : null,
},
]
}
@@ -275,7 +282,7 @@
disabled={rule.constraint === "required"}
on:change={e => (rule.value = e.detail)}
/>
- {:else if ["maxLength", "minLength", "regex", "notRegex", "contains", "notContains"].includes(rule.constraint)}
+ {:else if rule.type !== "array" && ["maxLength", "minLength", "regex", "notRegex", "contains", "notContains"].includes(rule.constraint)}
+ {:else if rule.type === "array"}
+