diff --git a/packages/builder/src/builderStore/store/workflow/tests/testWorkflow.js b/packages/builder/src/builderStore/store/workflow/tests/testWorkflow.js index 2ef6018bf0..90c4b17924 100644 --- a/packages/builder/src/builderStore/store/workflow/tests/testWorkflow.js +++ b/packages/builder/src/builderStore/store/workflow/tests/testWorkflow.js @@ -3,7 +3,6 @@ export default { _rev: "4-02c6659734934895812fa7be0215ee59", name: "Test Workflow", definition: { - trigger: {}, steps: [ { id: "VFWeZcIPx", diff --git a/packages/builder/src/components/userInterface/EventsEditor/StateBindingCascader.svelte b/packages/builder/src/components/userInterface/EventsEditor/StateBindingCascader.svelte index 130b0f8269..1edf5d45a0 100644 --- a/packages/builder/src/components/userInterface/EventsEditor/StateBindingCascader.svelte +++ b/packages/builder/src/components/userInterface/EventsEditor/StateBindingCascader.svelte @@ -5,9 +5,7 @@ import Input from "components/common/Input.svelte" import { find, map, keys, reduce, keyBy } from "lodash/fp" import { pipe } from "components/common/core" - import { - EVENT_TYPE_MEMBER_NAME - } from "components/common/eventHandlers" + import { EVENT_TYPE_MEMBER_NAME } from "components/common/eventHandlers" import { store, workflowStore } from "builderStore" import { ArrowDownIcon } from "components/common/Icons/" diff --git a/packages/builder/src/components/userInterface/StateBindingControl.svelte b/packages/builder/src/components/userInterface/StateBindingControl.svelte index 57a6bf13f9..0246fb71dc 100644 --- a/packages/builder/src/components/userInterface/StateBindingControl.svelte +++ b/packages/builder/src/components/userInterface/StateBindingControl.svelte @@ -21,32 +21,32 @@ size="19" on:click={() => onChanged(!value)} /> - {:else if type === 'models'} - - {:else if type === 'options' || type === 'models'} - + {:else if type === 'models'} + + {:else if type === 'options' || type === 'models'} + {/if} diff --git a/packages/builder/src/components/workflow/SetupPanel/SetupPanel.svelte b/packages/builder/src/components/workflow/SetupPanel/SetupPanel.svelte index f7252a5707..1ae741b55a 100644 --- a/packages/builder/src/components/workflow/SetupPanel/SetupPanel.svelte +++ b/packages/builder/src/components/workflow/SetupPanel/SetupPanel.svelte @@ -1,5 +1,5 @@ \ No newline at end of file + diff --git a/packages/builder/tests/createProps.spec.js b/packages/builder/tests/createProps.spec.js index 269ab8156a..bd468ba41a 100644 --- a/packages/builder/tests/createProps.spec.js +++ b/packages/builder/tests/createProps.spec.js @@ -1,6 +1,5 @@ import { createProps } from "../src/components/userInterface/pagesParsing/createProps" import { keys, some } from "lodash/fp" -import { BB_STATE_BINDINGPATH } from "@budibase/client/src/state/parseBinding" import { stripStandardProps } from "./testData" describe("createDefaultProps", () => { @@ -94,17 +93,6 @@ describe("createDefaultProps", () => { expect(props.onClick).toEqual([]) }) - it("should create a object with empty state when prop def is 'state' ", () => { - const comp = getcomponent() - comp.props.data = "state" - - const { props, errors } = createProps(comp) - - expect(errors).toEqual([]) - expect(props.data[BB_STATE_BINDINGPATH]).toBeDefined() - expect(props.data[BB_STATE_BINDINGPATH]).toBe("") - }) - it("should create a object children array when children == true ", () => { const comp = getcomponent() comp.children = true diff --git a/packages/client/src/api/workflow/actions.js b/packages/client/src/api/workflow/actions.js index f7d4755fbf..794cb184bf 100644 --- a/packages/client/src/api/workflow/actions.js +++ b/packages/client/src/api/workflow/actions.js @@ -9,6 +9,7 @@ export default { ...context, [id]: args, } + return context }, NAVIGATE: () => { // TODO client navigation diff --git a/packages/client/tests/bindingDom.spec.js b/packages/client/tests/bindingDom.spec.js deleted file mode 100644 index 2013803d27..0000000000 --- a/packages/client/tests/bindingDom.spec.js +++ /dev/null @@ -1,363 +0,0 @@ -import { load, makePage, makeScreen } from "./testAppDef" -import { EVENT_TYPE_MEMBER_NAME } from "../src/state/eventHandlers" - -describe("initialiseApp (binding)", () => { - it("should populate root element prop from store value", async () => { - const { dom } = await load( - makePage({ - _component: "testlib/div", - className: { - "##bbstate": "divClassName", - "##bbsource": "state", - "##bbstatefallback": "default", - }, - }) - ) - - const rootDiv = dom.window.document.body.children[0] - expect(rootDiv.className.includes("default")).toBe(true) - }) - - it("should update root element from store", async () => { - const { dom, app } = await load( - makePage({ - _component: "testlib/div", - className: { - "##bbstate": "divClassName", - "##bbsource": "state", - "##bbstatefallback": "default", - }, - }) - ) - - app.pageStore().update(s => { - s.divClassName = "newvalue" - return s - }) - - const rootDiv = dom.window.document.body.children[0] - expect(rootDiv.className.includes("newvalue")).toBe(true) - }) - - it("should update root element from store, using binding expression", async () => { - const { dom, app } = await load( - makePage({ - _component: "testlib/div", - className: "state.divClassName", - }) - ) - - app.pageStore().update(s => { - s.divClassName = "newvalue" - return s - }) - - const rootDiv = dom.window.document.body.children[0] - expect(rootDiv.className.includes("newvalue")).toBe(true) - }) - - it("should populate child component with store value", async () => { - const { dom } = await load( - makePage({ - _component: "testlib/div", - _children: [ - { - _component: "testlib/h1", - text: { - "##bbstate": "headerOneText", - "##bbsource": "state", - "##bbstatefallback": "header one", - }, - }, - { - _component: "testlib/h1", - text: { - "##bbstate": "headerTwoText", - "##bbsource": "state", - "##bbstatefallback": "header two", - }, - }, - ], - }) - ) - - const rootDiv = dom.window.document.body.children[0] - - expect(rootDiv.children.length).toBe(2) - expect(rootDiv.children[0].tagName).toBe("H1") - expect(rootDiv.children[0].innerText).toBe("header one") - expect(rootDiv.children[1].tagName).toBe("H1") - expect(rootDiv.children[1].innerText).toBe("header two") - }) - - it("should populate child component with store value", async () => { - const { dom, app } = await load( - makePage({ - _component: "testlib/div", - _children: [ - { - _component: "testlib/h1", - text: { - "##bbstate": "headerOneText", - "##bbsource": "state", - "##bbstatefallback": "header one", - }, - }, - { - _component: "testlib/h1", - text: { - "##bbstate": "headerTwoText", - "##bbsource": "state", - "##bbstatefallback": "header two", - }, - }, - ], - }) - ) - - app.pageStore().update(s => { - s.headerOneText = "header 1 - new val" - s.headerTwoText = "header 2 - new val" - return s - }) - - const rootDiv = dom.window.document.body.children[0] - - expect(rootDiv.children.length).toBe(2) - expect(rootDiv.children[0].tagName).toBe("H1") - expect(rootDiv.children[0].innerText).toBe("header 1 - new val") - expect(rootDiv.children[1].tagName).toBe("H1") - expect(rootDiv.children[1].innerText).toBe("header 2 - new val") - }) - - it("should populate screen child with store value", async () => { - const { dom, app } = await load( - makePage({ - _component: "testlib/div", - _children: [ - { - _component: "##builtin/screenslot", - text: "header one", - }, - ], - }), - [ - makeScreen("/", { - _component: "testlib/div", - className: "screen-class", - _children: [ - { - _component: "testlib/h1", - text: { - "##bbstate": "headerOneText", - "##bbsource": "state", - "##bbstatefallback": "header one", - }, - }, - { - _component: "testlib/h1", - text: { - "##bbstate": "headerTwoText", - "##bbsource": "state", - "##bbstatefallback": "header two", - }, - }, - ], - }), - ] - ) - - app.screenStore().update(s => { - s.headerOneText = "header 1 - new val" - s.headerTwoText = "header 2 - new val" - return s - }) - - const rootDiv = dom.window.document.body.children[0] - expect(rootDiv.children.length).toBe(1) - - const screenRoot = rootDiv.children[0] - - expect(screenRoot.children.length).toBe(1) - expect(screenRoot.children[0].children.length).toBe(2) - expect(screenRoot.children[0].children[0].innerText).toBe( - "header 1 - new val" - ) - expect(screenRoot.children[0].children[1].innerText).toBe( - "header 2 - new val" - ) - }) - - it("should fire events", async () => { - const { dom, app } = await load( - makePage({ - _component: "testlib/button", - onClick: [ - event("Set State", { - path: "address", - value: "123 Main Street", - }), - ], - }) - ) - - const button = dom.window.document.body.children[0] - expect(button.tagName).toBe("BUTTON") - - let storeAddress - app.pageStore().subscribe(s => { - storeAddress = s.address - }) - button.dispatchEvent(new dom.window.Event("click")) - expect(storeAddress).toBe("123 Main Street") - }) - - it("should alter event parameters based on store values", async () => { - const { dom, app } = await load( - makePage({ - _component: "testlib/button", - onClick: [ - event("Set State", { - path: "address", - value: { - "##bbstate": "sourceaddress", - "##bbsource": "state", - "##bbstatefallback": "fallback address", - }, - }), - ], - }) - ) - - const button = dom.window.document.body.children[0] - expect(button.tagName).toBe("BUTTON") - - let storeAddress - app.pageStore().subscribe(s => { - storeAddress = s.address - }) - - button.dispatchEvent(new dom.window.Event("click")) - expect(storeAddress).toBe("fallback address") - - app.pageStore().update(s => { - s.sourceaddress = "new address" - return s - }) - - button.dispatchEvent(new dom.window.Event("click")) - expect(storeAddress).toBe("new address") - }) - - it("should take event parameters from context values", async () => { - const { dom, app } = await load( - makePage({ - _component: "testlib/button", - _id: "with_context", - onClick: [ - event("Set State", { - path: "address", - value: { - "##bbstate": "testKey", - "##bbsource": "context", - "##bbstatefallback": "fallback address", - }, - }), - ], - }) - ) - - const button = dom.window.document.body.children[0] - expect(button.tagName).toBe("BUTTON") - - let storeAddress - app.pageStore().subscribe(s => { - storeAddress = s.address - }) - - button.dispatchEvent(new dom.window.Event("click")) - expect(storeAddress).toBe("test value") - }) -}) - -it("should rerender components when their code is bound to the store ", async () => { - const { dom, app } = await load( - makePage({ - _component: "testlib/div", - _children: [ - { - _component: "testlib/div", - _id: "n_clones_based_on_store", - className: "child_div", - }, - ], - }) - ) - - const rootDiv = dom.window.document.body.children[0] - expect(rootDiv.tagName).toBe("DIV") - expect(rootDiv.children.length).toBe(0) - - app.pageStore().update(s => { - s.componentCount = 3 - return s - }) - - expect(rootDiv.children.length).toBe(3) - expect(rootDiv.children[0].className.includes("child_div")).toBe(true) - - app.pageStore().update(s => { - s.componentCount = 5 - return s - }) - - expect(rootDiv.children.length).toBe(5) - expect(rootDiv.children[0].className.includes("child_div")).toBe(true) - - app.pageStore().update(s => { - s.componentCount = 0 - return s - }) - - expect(rootDiv.children.length).toBe(0) -}) - -it("should be able to read value from context, passed fromm parent, through code", async () => { - const { dom, app } = await load( - makePage({ - _component: "testlib/div", - _children: [ - { - _component: "testlib/div", - _id: "n_clones_based_on_store", - className: { - "##bbstate": "index", - "##bbsource": "context", - "##bbstatefallback": "nothing", - }, - }, - ], - }) - ) - - const rootDiv = dom.window.document.body.children[0] - expect(rootDiv.tagName).toBe("DIV") - expect(rootDiv.children.length).toBe(0) - - app.pageStore().update(s => { - s.componentCount = 3 - return s - }) - - expect(rootDiv.children.length).toBe(3) - expect(rootDiv.children[0].className.includes("index_0")).toBe(true) - expect(rootDiv.children[1].className.includes("index_1")).toBe(true) - expect(rootDiv.children[2].className.includes("index_2")).toBe(true) -}) - -const event = (handlerType, parameters) => { - const e = {} - e[EVENT_TYPE_MEMBER_NAME] = handlerType - e.parameters = parameters - return e -} diff --git a/packages/client/tests/domControlFlow.spec.js b/packages/client/tests/domControlFlow.spec.js deleted file mode 100644 index 3c817d859d..0000000000 --- a/packages/client/tests/domControlFlow.spec.js +++ /dev/null @@ -1,74 +0,0 @@ -import { load, makePage } from "./testAppDef" - -describe("controlFlow", () => { - it("should display simple div, with always true render function", async () => { - const { dom } = await load( - makePage({ - _component: "testlib/div", - className: "my-test-class", - _id: "always_render", - }) - ) - - expect(dom.window.document.body.children.length).toBe(1) - const child = dom.window.document.body.children[0] - expect(child.className.includes("my-test-class")).toBeTruthy() - }) - - it("should not display div, with always false render function", async () => { - const { dom } = await load( - makePage({ - _component: "testlib/div", - className: "my-test-class", - _id: "never_render", - }) - ) - - expect(dom.window.document.body.children.length).toBe(0) - }) - - it("should display 3 divs in a looped render function", async () => { - const { dom } = await load( - makePage({ - _component: "testlib/div", - className: "my-test-class", - _id: "three_clones", - }) - ) - - expect(dom.window.document.body.children.length).toBe(3) - - const child0 = dom.window.document.body.children[0] - expect(child0.className.includes("my-test-class")).toBeTruthy() - - const child1 = dom.window.document.body.children[1] - expect(child1.className.includes("my-test-class")).toBeTruthy() - - const child2 = dom.window.document.body.children[2] - expect(child2.className.includes("my-test-class")).toBeTruthy() - }) - - it("should display 3 div, in a looped render, as children", async () => { - const { dom } = await load( - makePage({ - _component: "testlib/div", - _children: [ - { - _component: "testlib/div", - className: "my-test-class", - _id: "three_clones", - }, - ], - }) - ) - - expect(dom.window.document.body.children.length).toBe(1) - - const rootDiv = dom.window.document.body.children[0] - expect(rootDiv.children.length).toBe(3) - - expect(rootDiv.children[0].className.includes("my-test-class")).toBeTruthy() - expect(rootDiv.children[1].className.includes("my-test-class")).toBeTruthy() - expect(rootDiv.children[2].className.includes("my-test-class")).toBeTruthy() - }) -}) diff --git a/packages/server/src/api/controllers/view.js b/packages/server/src/api/controllers/view.js index 2f15d41570..9e847da358 100644 --- a/packages/server/src/api/controllers/view.js +++ b/packages/server/src/api/controllers/view.js @@ -11,7 +11,7 @@ const controller = { if ( !name.startsWith("all") && name !== "by_type" && - name !== "by_username" && + name !== "by_username" && name !== "by_workflow_trigger" ) { response.push({