diff --git a/packages/builder/src/components/userInterface/temporaryPanelStructure.js b/packages/builder/src/components/userInterface/temporaryPanelStructure.js index e2c4044fb6..ae39ce3ee2 100644 --- a/packages/builder/src/components/userInterface/temporaryPanelStructure.js +++ b/packages/builder/src/components/userInterface/temporaryPanelStructure.js @@ -321,17 +321,44 @@ export default { name: "Form", description: "A component that generates a form from your data.", icon: "ri-file-edit-fill", - properties: { - design: { ...all }, - settings: [{ label: "Model", key: "model", control: ModelSelect }], - }, - _component: "@budibase/standard-components/dataform", - template: { - component: "@budibase/materialdesign-components/Form", - description: "Form for saving a record", - name: "@budibase/materialdesign-components/recordForm", - }, - children: [], + commonProps: {}, + children: [ + { + _component: "@budibase/standard-components/dataform", + name: "Form Basic", + icon: "ri-file-edit-fill", + properties: { + design: { ...all }, + settings: [ + { + label: "Model", + key: "model", + control: ModelSelect, + }, + ], + }, + template: { + component: "@budibase/materialdesign-components/Form", + description: "Form for saving a record", + name: "@budibase/materialdesign-components/recordForm", + }, + }, + { + _component: "@budibase/standard-components/dataformwide", + name: "Form Wide", + icon: "ri-file-edit-fill", + properties: { + design: { ...all }, + settings: [ + { + label: "Model", + key: "model", + control: ModelSelect, + }, + ], + }, + }, + ], }, { name: "Chart", diff --git a/packages/standard-components/components.json b/packages/standard-components/components.json index c4c0246672..8df7756499 100644 --- a/packages/standard-components/components.json +++ b/packages/standard-components/components.json @@ -209,6 +209,13 @@ "model": "models" } }, + "dataformwide": { + "description": "an HTML table that fetches data from a model or view and displays it.", + "data": true, + "props": { + "model": "models" + } + }, "datalist": { "description": "A configurable data list that attaches to your backend models.", "data": true, diff --git a/packages/standard-components/src/DataForm.svelte b/packages/standard-components/src/DataForm.svelte index 1510110ba9..389ce0ecd2 100644 --- a/packages/standard-components/src/DataForm.svelte +++ b/packages/standard-components/src/DataForm.svelte @@ -4,6 +4,12 @@ export let _bb export let model + const TYPE_MAP = { + string: "text", + boolean: "checkbox", + number: "number", + } + let username let password let newModel = { @@ -59,15 +65,23 @@

{modelDef.name} Form

+
{#each fields as field}
- + {#if schema[field].type === 'string' && schema[field].constraints.inclusion} + + {:else} + + {/if}

{/each} @@ -143,8 +157,42 @@ } button:hover { - background-color: white; - border-color: #393c44; - color: #393c44; + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), + 0 4px 6px -2px rgba(0, 0, 0, 0.05); + } + + input[type="checkbox"] { + width: 32px; + height: 32px; + padding: 0; + margin: 0; + vertical-align: bottom; + position: relative; + top: -1px; + *overflow: hidden; + } + + select::-ms-expand { + display: none; + } + select { + display: inline-block; + cursor: pointer; + align-items: baseline; + box-sizing: border-box; + padding: 1em 1em; + border: 1px solid #eaeaea; + border-radius: 5px; + font: inherit; + line-height: inherit; + -webkit-appearance: none; + -moz-appearance: none; + -ms-appearance: none; + appearance: none; + background-repeat: no-repeat; + background-image: linear-gradient(45deg, transparent 50%, currentColor 50%), + linear-gradient(135deg, currentColor 50%, transparent 50%); + background-position: right 17px top 1.5em, right 10px top 1.5em; + background-size: 7px 7px, 7px 7px; } diff --git a/packages/standard-components/src/DataFormWide.svelte b/packages/standard-components/src/DataFormWide.svelte new file mode 100644 index 0000000000..f712c787de --- /dev/null +++ b/packages/standard-components/src/DataFormWide.svelte @@ -0,0 +1,173 @@ + + + +

{modelDef.name} Form

+
+
+ {#each fields as field} +
+ + {#if schema[field].type === 'string' && schema[field].constraints.inclusion} + + {:else} + + {/if} +
+
+ {/each} +
+ +
+
+ + + diff --git a/packages/standard-components/src/index.js b/packages/standard-components/src/index.js index 24342066e8..37d6abab74 100644 --- a/packages/standard-components/src/index.js +++ b/packages/standard-components/src/index.js @@ -16,6 +16,7 @@ export { default as icon } from "./Icon.svelte" export { default as Navigation } from "./Navigation.svelte" export { default as datatable } from "./DataTable.svelte" export { default as dataform } from "./DataForm.svelte" +export { default as dataformwide } from "./DataFormWide.svelte" export { default as datachart } from "./DataChart.svelte" export { default as datalist } from "./DataList.svelte" export { default as list } from "./List.svelte"