diff --git a/packages/builder/src/builderStore/store/screenTemplates/recordListScreen.js b/packages/builder/src/builderStore/store/screenTemplates/recordListScreen.js index 0210e7a85e..9246def7f7 100644 --- a/packages/builder/src/builderStore/store/screenTemplates/recordListScreen.js +++ b/packages/builder/src/builderStore/store/screenTemplates/recordListScreen.js @@ -98,7 +98,7 @@ const createScreen = model => ({ label: "Deals", name: `all_${model._id}`, modelId: model._id, - isModel: true, + type: "model", }, _instanceName: `${model.name} Table`, _children: [], diff --git a/packages/builder/tests/fetchBindableProperties.spec.js b/packages/builder/tests/fetchBindableProperties.spec.js index 76e8e33f05..79d4a272fe 100644 --- a/packages/builder/tests/fetchBindableProperties.spec.js +++ b/packages/builder/tests/fetchBindableProperties.spec.js @@ -1,13 +1,14 @@ import fetchBindableProperties from "../src/builderStore/fetchBindableProperties" describe("fetch bindable properties", () => { - it("should return bindable properties from screen components", () => { const result = fetchBindableProperties({ componentInstanceId: "heading-id", - ...testData() + ...testData(), }) - const componentBinding = result.find(r => r.instance._id === "search-input-id" && r.type === "instance") + const componentBinding = result.find( + r => r.instance._id === "search-input-id" && r.type === "instance" + ) expect(componentBinding).toBeDefined() expect(componentBinding.type).toBe("instance") expect(componentBinding.runtimeBinding).toBe("search-input-id.value") @@ -16,29 +17,39 @@ describe("fetch bindable properties", () => { it("should not return bindable components when not in their context", () => { const result = fetchBindableProperties({ componentInstanceId: "heading-id", - ...testData() + ...testData(), }) - const componentBinding = result.find(r => r.instance._id === "list-item-input-id") + const componentBinding = result.find( + r => r.instance._id === "list-item-input-id" + ) expect(componentBinding).not.toBeDefined() }) it("should return model schema, when inside a context", () => { const result = fetchBindableProperties({ componentInstanceId: "list-item-input-id", - ...testData() + ...testData(), }) - const contextBindings = result.filter(r => r.instance._id === "list-id" && r.type==="context") - // 2 fields + _id + _rev + const contextBindings = result.filter( + r => r.instance._id === "list-id" && r.type === "context" + ) + // 2 fields + _id + _rev expect(contextBindings.length).toBe(4) - - const namebinding = contextBindings.find(b => b.runtimeBinding === "data.name") + + const namebinding = contextBindings.find( + b => b.runtimeBinding === "data.name" + ) expect(namebinding).toBeDefined() expect(namebinding.readableBinding).toBe("list-name.Test Model.name") - - const descriptionbinding = contextBindings.find(b => b.runtimeBinding === "data.description") + + const descriptionbinding = contextBindings.find( + b => b.runtimeBinding === "data.description" + ) expect(descriptionbinding).toBeDefined() - expect(descriptionbinding.readableBinding).toBe("list-name.Test Model.description") - + expect(descriptionbinding.readableBinding).toBe( + "list-name.Test Model.description" + ) + const idbinding = contextBindings.find(b => b.runtimeBinding === "data._id") expect(idbinding).toBeDefined() expect(idbinding.readableBinding).toBe("list-name.Test Model._id") @@ -47,35 +58,51 @@ describe("fetch bindable properties", () => { it("should return model schema, for grantparent context", () => { const result = fetchBindableProperties({ componentInstanceId: "child-list-item-input-id", - ...testData() + ...testData(), }) - const contextBindings = result.filter(r => r.type==="context") + const contextBindings = result.filter(r => r.type === "context") // 2 fields + _id + _rev ... x 2 models expect(contextBindings.length).toBe(8) - - const namebinding_parent = contextBindings.find(b => b.runtimeBinding === "parent.data.name") + + const namebinding_parent = contextBindings.find( + b => b.runtimeBinding === "parent.data.name" + ) expect(namebinding_parent).toBeDefined() expect(namebinding_parent.readableBinding).toBe("list-name.Test Model.name") - - const descriptionbinding_parent = contextBindings.find(b => b.runtimeBinding === "parent.data.description") + + const descriptionbinding_parent = contextBindings.find( + b => b.runtimeBinding === "parent.data.description" + ) expect(descriptionbinding_parent).toBeDefined() - expect(descriptionbinding_parent.readableBinding).toBe("list-name.Test Model.description") - - const namebinding_own = contextBindings.find(b => b.runtimeBinding === "data.name") + expect(descriptionbinding_parent.readableBinding).toBe( + "list-name.Test Model.description" + ) + + const namebinding_own = contextBindings.find( + b => b.runtimeBinding === "data.name" + ) expect(namebinding_own).toBeDefined() - expect(namebinding_own.readableBinding).toBe("child-list-name.Test Model.name") - - const descriptionbinding_own = contextBindings.find(b => b.runtimeBinding === "data.description") + expect(namebinding_own.readableBinding).toBe( + "child-list-name.Test Model.name" + ) + + const descriptionbinding_own = contextBindings.find( + b => b.runtimeBinding === "data.description" + ) expect(descriptionbinding_own).toBeDefined() - expect(descriptionbinding_own.readableBinding).toBe("child-list-name.Test Model.description") + expect(descriptionbinding_own.readableBinding).toBe( + "child-list-name.Test Model.description" + ) }) it("should return bindable component props, from components in same context", () => { const result = fetchBindableProperties({ componentInstanceId: "list-item-heading-id", - ...testData() + ...testData(), }) - const componentBinding = result.find(r => r.instance._id === "list-item-input-id" && r.type === "instance") + const componentBinding = result.find( + r => r.instance._id === "list-item-input-id" && r.type === "instance" + ) expect(componentBinding).toBeDefined() expect(componentBinding.runtimeBinding).toBe("list-item-input-id.value") }) @@ -83,125 +110,140 @@ describe("fetch bindable properties", () => { it("should not return components from child context", () => { const result = fetchBindableProperties({ componentInstanceId: "list-item-heading-id", - ...testData() + ...testData(), }) - const componentBinding = result.find(r => r.instance._id === "child-list-item-input-id" && r.type === "instance") + const componentBinding = result.find( + r => + r.instance._id === "child-list-item-input-id" && r.type === "instance" + ) expect(componentBinding).not.toBeDefined() }) - + it("should return bindable component props, from components in same context (when nested context)", () => { const result = fetchBindableProperties({ componentInstanceId: "child-list-item-heading-id", - ...testData() + ...testData(), }) - const componentBinding = result.find(r => r.instance._id === "child-list-item-input-id" && r.type === "instance") + const componentBinding = result.find( + r => + r.instance._id === "child-list-item-input-id" && r.type === "instance" + ) expect(componentBinding).toBeDefined() - }) - + }) }) const testData = () => { - const screen = { instanceName: "test screen", name: "screen-id", route: "/", props: { - _id:"screent-root-id", + _id: "screent-root-id", _component: "@budibase/standard-components/container", _children: [ { _id: "heading-id", _instanceName: "list item heading", _component: "@budibase/standard-components/heading", - text: "Screen Title" + text: "Screen Title", }, { _id: "search-input-id", _instanceName: "Search Input", _component: "@budibase/standard-components/input", - value: "search phrase" + value: "search phrase", }, { _id: "list-id", _component: "@budibase/standard-components/list", _instanceName: "list-name", - model: { isModel: true, modelId: "test-model-id", label: "Test Model", name: "all_test-model-id" }, + model: { + type: "model", + modelId: "test-model-id", + label: "Test Model", + name: "all_test-model-id", + }, _children: [ { _id: "list-item-heading-id", _instanceName: "list item heading", _component: "@budibase/standard-components/heading", - text: "hello" + text: "hello", }, { _id: "list-item-input-id", _instanceName: "List Item Input", _component: "@budibase/standard-components/input", - value: "list item" + value: "list item", }, { _id: "child-list-id", _component: "@budibase/standard-components/list", _instanceName: "child-list-name", - model: { isModel: true, modelId: "test-model-id", label: "Test Model", name: "all_test-model-id"}, + model: { + type: "model", + modelId: "test-model-id", + label: "Test Model", + name: "all_test-model-id", + }, _children: [ { _id: "child-list-item-heading-id", _instanceName: "child list item heading", _component: "@budibase/standard-components/heading", - text: "hello" + text: "hello", }, { _id: "child-list-item-input-id", _instanceName: "Child List Item Input", _component: "@budibase/standard-components/input", - value: "child list item" + value: "child list item", }, - ] + ], }, - ] + ], }, - ] - } + ], + }, } - const models = [{ - _id: "test-model-id", - name: "Test Model", + const models = [ + { + _id: "test-model-id", + name: "Test Model", schema: { name: { - type: "string" + type: "string", }, description: { - type: "string" - } - } - }] + type: "string", + }, + }, + }, + ] const components = { - "@budibase/standard-components/container" : { + "@budibase/standard-components/container": { props: {}, }, - "@budibase/standard-components/list" : { + "@budibase/standard-components/list": { context: "model", props: { - model: "string" + model: "string", }, }, - "@budibase/standard-components/input" : { + "@budibase/standard-components/input": { bindable: "value", props: { - value: "string" + value: "string", }, }, - "@budibase/standard-components/heading" : { + "@budibase/standard-components/heading": { props: { - text: "string" + text: "string", }, }, } return { screen, models, components } - -} \ No newline at end of file +}