diff --git a/packages/builder/src/components/design/settings/controls/ButtonActionEditor/ButtonActionDrawer.svelte b/packages/builder/src/components/design/settings/controls/ButtonActionEditor/ButtonActionDrawer.svelte index 5b0ab4a6a3..31962077fc 100644 --- a/packages/builder/src/components/design/settings/controls/ButtonActionEditor/ButtonActionDrawer.svelte +++ b/packages/builder/src/components/design/settings/controls/ButtonActionEditor/ButtonActionDrawer.svelte @@ -6,8 +6,8 @@ Button, Layout, DrawerContent, - ActionMenu, - MenuItem, + ActionButton, + Search, } from "@budibase/bbui" import { getAvailableActions } from "./index" import { generate } from "shortid" @@ -22,8 +22,24 @@ export let actions export let bindings = [] + $: showAvailableActions = !actions?.length + + let actionQuery + $: parsedQuery = + typeof actionQuery === "string" ? actionQuery.toLowerCase().trim() : "" + let selectedAction = actions?.length ? actions[0] : null + $: mappedActionTypes = actionTypes.reduce((acc, action) => { + let parsedName = action.name.toLowerCase().trim() + if (parsedQuery.length && parsedName.indexOf(parsedQuery) < 0) { + return acc + } + acc[action.type] = acc[action.type] || [] + acc[action.type].push(action) + return acc + }, {}) + // These are ephemeral bindings which only exist while executing actions $: buttonContextBindings = getButtonContextBindings( $currentAsset, @@ -61,7 +77,12 @@ actions = actions } - const addAction = actionType => () => { + const toggleActionList = () => { + actionQuery = null + showAvailableActions = !showAvailableActions + } + + const addAction = actionType => { const newAction = { parameters: {}, [EVENT_TYPE_KEY]: actionType.name, @@ -78,6 +99,11 @@ selectedAction = action } + const onAddAction = actionType => { + addAction(actionType) + toggleActionList() + } + function handleDndConsider(e) { actions = e.detail.items } @@ -88,7 +114,39 @@ - {#if actions && actions.length > 0} + {#if showAvailableActions || !actions?.length} +
+ {#if actions?.length > 0} +
+ + Back + +
+ {/if} +
+ +
+ {#each Object.entries(mappedActionTypes) as [categoryId, category], idx} +
{categoryId}
+
    + {#each category as actionType} +
  • + {actionType.name} +
  • + {/each} +
+ {/each} +
+ {/if} + + {#if actions && actions.length > 0 && !showAvailableActions} +
+ +
{/if} - - - {#each actionTypes as actionType} - - {actionType.name} - - {/each} - - {#if selectedActionComponent} + {#if selectedActionComponent && !showAvailableActions} {#key selectedAction.id}
* { + padding-bottom: var(--spectrum-global-dimension-static-size-200); + } + + .actions-list .heading { + padding-bottom: var(--spectrum-global-dimension-static-size-100); + padding-top: var(--spectrum-global-dimension-static-size-50); + } + + .actions-list .heading.top-entry { + padding-top: 0px; + } + + ul { + list-style: none; + padding: 0; + margin: 0; + } + + li { + font-size: var(--font-size-s); + padding: var(--spacing-m); + border-radius: 4px; + background-color: var(--spectrum-global-color-gray-200); + transition: background-color 130ms ease-in-out, color 130ms ease-in-out, + border-color 130ms ease-in-out; + word-wrap: break-word; + } + li:not(:last-of-type) { + margin-bottom: var(--spacing-s); + } + li :global(*) { + transition: color 130ms ease-in-out; + } + li:hover { + color: var(--spectrum-global-color-gray-900); + background-color: var(--spectrum-global-color-gray-50); + cursor: pointer; + } + + .action-name { + font-weight: 600; + text-transform: capitalize; + } + .heading { + font-size: var(--font-size-s); + font-weight: 600; + text-transform: uppercase; + color: var(--spectrum-global-color-gray-600); + } diff --git a/packages/builder/src/components/design/settings/controls/ButtonActionEditor/ButtonActionEditor.svelte b/packages/builder/src/components/design/settings/controls/ButtonActionEditor/ButtonActionEditor.svelte index 550d982013..331d9e4c5d 100644 --- a/packages/builder/src/components/design/settings/controls/ButtonActionEditor/ButtonActionEditor.svelte +++ b/packages/builder/src/components/design/settings/controls/ButtonActionEditor/ButtonActionEditor.svelte @@ -69,9 +69,16 @@ notifications.error("Error creating automation") } } + + $: actionCount = value?.length + $: actionText = `${actionCount || "No"} action${ + actionCount !== 1 ? "s" : "" + } set` +
{actionText}
Define actions + Define what actions to run. @@ -85,3 +92,10 @@ {key} /> + + diff --git a/packages/builder/src/components/design/settings/controls/ButtonActionEditor/manifest.json b/packages/builder/src/components/design/settings/controls/ButtonActionEditor/manifest.json index cf18fee3a6..c00b8dddec 100644 --- a/packages/builder/src/components/design/settings/controls/ButtonActionEditor/manifest.json +++ b/packages/builder/src/components/design/settings/controls/ButtonActionEditor/manifest.json @@ -2,6 +2,7 @@ "actions": [ { "name": "Save Row", + "type": "data", "component": "SaveRow", "context": [ { @@ -12,6 +13,7 @@ }, { "name": "Duplicate Row", + "type": "data", "component": "DuplicateRow", "context": [ { @@ -22,14 +24,17 @@ }, { "name": "Delete Row", + "type": "data", "component": "DeleteRow" }, { "name": "Navigate To", + "type": "application", "component": "NavigateTo" }, { "name": "Execute Query", + "type": "data", "component": "ExecuteQuery", "context": [ { @@ -40,43 +45,53 @@ }, { "name": "Trigger Automation", + "type": "application", "component": "TriggerAutomation" }, { "name": "Update Field Value", + "type": "form", "component": "UpdateFieldValue" }, { "name": "Validate Form", + "type": "form", "component": "ValidateForm" }, { "name": "Change Form Step", + "type": "form", "component": "ChangeFormStep" }, { "name": "Clear Form", + "type": "form", "component": "ClearForm" }, { "name": "Log Out", + "type": "application", "component": "LogOut" }, { "name": "Close Screen Modal", + "type": "application", "component": "CloseScreenModal" }, { "name": "Refresh Data Provider", + "type": "data", "component": "RefreshDataProvider" }, { "name": "Update State", + "type": "data", "component": "UpdateState", "dependsOnFeature": "state" }, { "name": "Upload File to S3", + "type": "data", "component": "S3Upload", "context": [ { @@ -87,12 +102,14 @@ }, { "name": "Export Data", + "type": "data", "component": "ExportData" }, { "name": "Continue if / Stop if", + "type": "logic", "component": "ContinueIf", "dependsOnFeature": "continueIfAction" } ] -} +} \ No newline at end of file