diff --git a/lerna.json b/lerna.json index 215bdfdec5..1cd2802044 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "0.9.185-alpha.14", + "version": "0.9.185-alpha.19", "npmClient": "yarn", "packages": [ "packages/*" diff --git a/packages/auth/package.json b/packages/auth/package.json index 7ac1a6c21f..3d43666fb7 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/auth", - "version": "0.9.185-alpha.14", + "version": "0.9.185-alpha.19", "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 d818ea7987..9373420039 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.185-alpha.14", + "version": "0.9.185-alpha.19", "license": "AGPL-3.0", "svelte": "src/index.js", "module": "dist/bbui.es.js", diff --git a/packages/bbui/src/Form/Combobox.svelte b/packages/bbui/src/Form/Combobox.svelte index 368e8bec4b..83927b05db 100644 --- a/packages/bbui/src/Form/Combobox.svelte +++ b/packages/bbui/src/Form/Combobox.svelte @@ -6,6 +6,7 @@ export let value = null export let label = undefined export let disabled = false + export let readonly = false export let labelPosition = "above" export let error = null export let placeholder = "Choose an option or type" @@ -33,6 +34,7 @@ {value} {options} {placeholder} + {readonly} {getOptionLabel} {getOptionValue} on:change={onChange} diff --git a/packages/bbui/src/Form/Core/Combobox.svelte b/packages/bbui/src/Form/Core/Combobox.svelte index 6a1390eeea..6a6423cccf 100644 --- a/packages/bbui/src/Form/Core/Combobox.svelte +++ b/packages/bbui/src/Form/Core/Combobox.svelte @@ -9,6 +9,7 @@ export let id = null export let placeholder = "Choose an option or type" export let disabled = false + export let readonly = false export let error = null export let options = [] export let getOptionLabel = option => option @@ -73,6 +74,7 @@ value={value || ""} placeholder={placeholder || ""} {disabled} + {readonly} class="spectrum-Textfield-input spectrum-InputGroup-input" /> diff --git a/packages/bbui/src/Form/Core/TextField.svelte b/packages/bbui/src/Form/Core/TextField.svelte index 85c71338f7..d2064ddde0 100644 --- a/packages/bbui/src/Form/Core/TextField.svelte +++ b/packages/bbui/src/Form/Core/TextField.svelte @@ -16,15 +16,15 @@ const dispatch = createEventDispatcher() let focus = false - const updateValue = value => { + const updateValue = newValue => { if (readonly) { return } if (type === "number") { - const float = parseFloat(value) - value = isNaN(float) ? null : float + const float = parseFloat(newValue) + newValue = isNaN(float) ? null : float } - dispatch("change", value) + dispatch("change", newValue) } const onFocus = () => { diff --git a/packages/builder/cypress/integration/addMultiOptionDatatype.spec.js b/packages/builder/cypress/integration/addMultiOptionDatatype.spec.js index bc2619c53d..b3e0f413f8 100644 --- a/packages/builder/cypress/integration/addMultiOptionDatatype.spec.js +++ b/packages/builder/cypress/integration/addMultiOptionDatatype.spec.js @@ -1,41 +1,44 @@ context("Add Multi-Option Datatype", () => { - before(() => { - cy.login() - cy.createTestApp() - }) + before(() => { + cy.login() + cy.createTestApp() + }) - it("should create a new table, with data", () => { - cy.createTable("Multi Data") - cy.addColumn("Multi Data", "Test Data", "Multi-select", "1\n2\n3\n4\n5") - cy.addRowMultiValue(["1", "2", "3", "4", "5"]) - }) + it("should create a new table, with data", () => { + cy.createTable("Multi Data") + cy.addColumn("Multi Data", "Test Data", "Multi-select", "1\n2\n3\n4\n5") + cy.addRowMultiValue(["1", "2", "3", "4", "5"]) + }) - it ("should add form with multi select picker, containing 5 options", () => { - cy.navigateToFrontend() - cy.wait(500) - // Add data provider - cy.get(`[data-cy="category-Data Provider"]`).click() - cy.get('[data-cy="dataSource-prop-control"]').click() - cy.get(".dropdown").contains("Multi Data").click() - cy.wait(500) - // Add Form with schema to match table - cy.addComponent("Form", "Form") - cy.get('[data-cy="dataSource-prop-control"').click() - cy.get(".dropdown").contains("Multi Data").click() - cy.wait(500) - // Add multi-select picker to form - cy.addComponent("Form", "Multi-select Picker").then((componentId) => { - cy.get('[data-cy="field-prop-control"]').type("Test Data").type('{enter}') - cy.wait(1000) - cy.getComponent(componentId).contains("Choose some options").click() - // Check picker has 5 items - cy.getComponent(componentId).find('li').should('have.length', 5) - // Select all items - for (let i = 1; i < 6; i++) { - cy.getComponent(componentId).find('li').contains(i).click() - } - // Check items have been selected - cy.getComponent(componentId).find('.spectrum-Picker-label').contains("(5)") - }) + it("should add form with multi select picker, containing 5 options", () => { + cy.navigateToFrontend() + cy.wait(500) + // Add data provider + cy.get(`[data-cy="category-Data"]`).click() + cy.get(`[data-cy="component-Data Provider"]`).click() + cy.get('[data-cy="dataSource-prop-control"]').click() + cy.get(".dropdown").contains("Multi Data").click() + cy.wait(500) + // Add Form with schema to match table + cy.addComponent("Form", "Form") + cy.get('[data-cy="dataSource-prop-control"').click() + cy.get(".dropdown").contains("Multi Data").click() + cy.wait(500) + // Add multi-select picker to form + cy.addComponent("Form", "Multi-select Picker").then(componentId => { + cy.get('[data-cy="field-prop-control"]').type("Test Data").type("{enter}") + cy.wait(1000) + cy.getComponent(componentId).contains("Choose some options").click() + // Check picker has 5 items + cy.getComponent(componentId).find("li").should("have.length", 5) + // Select all items + for (let i = 1; i < 6; i++) { + cy.getComponent(componentId).find("li").contains(i).click() + } + // Check items have been selected + cy.getComponent(componentId) + .find(".spectrum-Picker-label") + .contains("(5)") }) + }) }) diff --git a/packages/builder/cypress/integration/createAutomation.spec.js b/packages/builder/cypress/integration/createAutomation.spec.js index 0620a15e25..afd405d5ab 100644 --- a/packages/builder/cypress/integration/createAutomation.spec.js +++ b/packages/builder/cypress/integration/createAutomation.spec.js @@ -22,9 +22,9 @@ context("Create a automation", () => { cy.get(".spectrum-Picker-label").click() cy.wait(500) cy.contains("dog").click() - + cy.wait(2000) // Create action - cy.contains("Add Action").click() + cy.get(".block > .spectrum-Icon").click() cy.get(".modal-inner-wrapper").within(() => { cy.wait(1000) cy.contains("Create Row").trigger('mouseover').click().click() diff --git a/packages/builder/package.json b/packages/builder/package.json index 84c2d66e53..7491f77e96 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/builder", - "version": "0.9.185-alpha.14", + "version": "0.9.185-alpha.19", "license": "AGPL-3.0", "private": true, "scripts": { @@ -65,10 +65,10 @@ } }, "dependencies": { - "@budibase/bbui": "^0.9.185-alpha.14", - "@budibase/client": "^0.9.185-alpha.14", + "@budibase/bbui": "^0.9.185-alpha.19", + "@budibase/client": "^0.9.185-alpha.19", "@budibase/colorpicker": "1.1.2", - "@budibase/string-templates": "^0.9.185-alpha.14", + "@budibase/string-templates": "^0.9.185-alpha.19", "@sentry/browser": "5.19.1", "@spectrum-css/page": "^3.0.1", "@spectrum-css/vars": "^3.0.1", diff --git a/packages/builder/src/builderStore/store/automation/index.js b/packages/builder/src/builderStore/store/automation/index.js index 16cc490bb2..7bd0ccca22 100644 --- a/packages/builder/src/builderStore/store/automation/index.js +++ b/packages/builder/src/builderStore/store/automation/index.js @@ -93,7 +93,9 @@ const automationActions = store => ({ }, select: automation => { store.update(state => { + let testResults = state.selectedAutomation?.testResults state.selectedAutomation = new Automation(cloneDeep(automation)) + state.selectedAutomation.testResults = testResults state.selectedBlock = null return state }) diff --git a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowChart.svelte b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowChart.svelte index fee8afd711..2d6881d652 100644 --- a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowChart.svelte +++ b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowChart.svelte @@ -84,7 +84,6 @@ class="block" animate:flip={{ duration: 500 }} in:fly|local={{ x: 500, duration: 1500 }} - out:fly|local={{ x: 500, duration: 800 }} > diff --git a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowItem.svelte b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowItem.svelte index 7ddc5c3e48..7f379ba138 100644 --- a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowItem.svelte +++ b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowItem.svelte @@ -25,10 +25,10 @@ let resultsModal let setupToggled let blockComplete + $: testResult = $automationStore.selectedAutomation.testResults?.steps.filter( step => step.stepId === block.stepId ) - $: isTrigger = block.type === "TRIGGER" $: selected = $automationStore.selectedBlock?.id === block.id @@ -150,15 +150,6 @@ >Finish and test automation {/if} - {/if} diff --git a/packages/builder/src/components/automation/AutomationPanel/AutomationList.svelte b/packages/builder/src/components/automation/AutomationPanel/AutomationList.svelte index 79de4bfbe6..aa3ab027a8 100644 --- a/packages/builder/src/components/automation/AutomationPanel/AutomationList.svelte +++ b/packages/builder/src/components/automation/AutomationPanel/AutomationList.svelte @@ -9,6 +9,7 @@ onMount(() => { automationStore.actions.fetch() }) + function selectAutomation(automation) { automationStore.actions.select(automation) $goto(`./${automation._id}`) diff --git a/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte b/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte index 874a0e68eb..e7208518d5 100644 --- a/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte +++ b/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte @@ -51,31 +51,31 @@ : { schema: {} } $: schemaFields = table ? Object.values(table.schema) : [] - const onChange = debounce( - async function (e, key) { - if (isTestModal) { - // Special case for webhook, as it requires a body, but the schema already brings back the body's contents - if (stepId === "WEBHOOK") { - automationStore.actions.addTestDataToAutomation({ - body: { - [key]: e.detail, - ...$automationStore.selectedAutomation.automation.testData.body, - }, - }) - } + const onChange = debounce(async function (e, key) { + if (isTestModal) { + // Special case for webhook, as it requires a body, but the schema already brings back the body's contents + if (stepId === "WEBHOOK") { automationStore.actions.addTestDataToAutomation({ - [key]: e.detail, + body: { + [key]: e.detail, + ...$automationStore.selectedAutomation.automation.testData.body, + }, }) - testData[key] = e.detail - } else { - block.inputs[key] = e.detail - await automationStore.actions.save( - $automationStore.selectedAutomation?.automation - ) } - }, - isTestModal ? 0 : 800 - ) + automationStore.actions.addTestDataToAutomation({ + [key]: e.detail, + }) + testData[key] = e.detail + await automationStore.actions.save( + $automationStore.selectedAutomation?.automation + ) + } else { + block.inputs[key] = e.detail + await automationStore.actions.save( + $automationStore.selectedAutomation?.automation + ) + } + }, 800) function getAvailableBindings(block, automation) { if (!block || !automation) { diff --git a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte index 32a2d1f659..5117444b67 100644 --- a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte +++ b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte @@ -398,7 +398,7 @@ value={field.formula} on:change={e => (field.formula = e.detail)} bindings={getBindings({ table })} - serverSide="true" + allowJS /> {:else if field.type === AUTO_TYPE} onChange(event.detail)} {placeholder} @@ -63,7 +64,7 @@ bind:valid value={readableValue} on:change={event => (tempValue = event.detail)} - bindableProperties={bindings} + {bindings} {allowJS} /> diff --git a/packages/builder/src/components/common/bindings/ModalBindableInput.svelte b/packages/builder/src/components/common/bindings/ModalBindableInput.svelte index 2a72d7a315..3776f1dc84 100644 --- a/packages/builder/src/components/common/bindings/ModalBindableInput.svelte +++ b/packages/builder/src/components/common/bindings/ModalBindableInput.svelte @@ -6,20 +6,23 @@ } from "builderStore/dataBinding" import ServerBindingPanel from "components/common/bindings/ServerBindingPanel.svelte" import { createEventDispatcher } from "svelte" + import { isJSBinding } from "@budibase/string-templates" export let panel = ServerBindingPanel export let value = "" export let bindings = [] - export let thin = true export let title = "Bindings" export let placeholder export let label + export let allowJS = false const dispatch = createEventDispatcher() let bindingModal let valid = true + $: readableValue = runtimeToReadableBinding(bindings, value) $: tempValue = readableValue + $: isJS = isJSBinding(value) const saveBinding = () => { onChange(tempValue) @@ -34,8 +37,8 @@
onChange(event.detail)} {placeholder} /> @@ -55,7 +58,8 @@ value={readableValue} bind:valid on:change={e => (tempValue = e.detail)} - bindableProperties={bindings} + {bindings} + {allowJS} />
diff --git a/packages/builder/src/components/common/bindings/ServerBindingPanel.svelte b/packages/builder/src/components/common/bindings/ServerBindingPanel.svelte index 66b567f343..5440ba0b18 100644 --- a/packages/builder/src/components/common/bindings/ServerBindingPanel.svelte +++ b/packages/builder/src/components/common/bindings/ServerBindingPanel.svelte @@ -1,209 +1,27 @@ - - -
-
-
Search
- -
- {#each filteredCategories as [categoryName, bindings]} - {#if bindings.length} -
-
{categoryName}
-
    - {#each bindings as binding} -
  • { - value = addHBSBinding(value, getCaretPosition(), binding) - }} - > - {binding.label} - {binding.type} - {#if binding.description} -
    -
    - {binding.description || ""} -
    - {/if} -
  • - {/each} -
-
- {/if} - {/each} - {#if filteredHelpers?.length} -
-
Helpers
-
    - {#each filteredHelpers as helper} -
  • { - value = addHBSBinding(value, getCaretPosition(), helper.text) - }} - > -
    -
    {helper.displayText}
    -
    - {@html helper.description} -
    -
    {helper.example || ''}
    -
    -
  • - {/each} -
-
- {/if} -
-
-
-