Browse Source

Expanding the focus behaviour to more component types in the builder. Minor fix for cypress test

master
Dean 4 years ago
parent
commit
702b62f8e6
  1. 17
      packages/bbui/src/ActionButton/ActionButton.svelte
  2. 8
      packages/bbui/src/Form/Core/Combobox.svelte
  3. 13
      packages/builder/cypress/integration/createComponents.spec.js
  4. 8
      packages/builder/src/builderStore/store/frontend.js
  5. 2
      packages/builder/src/components/design/AppPreview/CurrentItemPreview.svelte
  6. 5
      packages/builder/src/components/design/PropertiesPanel/PropertyControls/IconSelect/IconSelect.svelte
  7. 2
      packages/builder/src/components/design/PropertiesPanel/PropertyControls/URLSelect.svelte
  8. 1
      packages/builder/src/pages/builder/app/[application]/design/[assetType]/_layout.svelte
  9. 3
      packages/client/manifest.json
  10. 12
      packages/client/src/components/app/BackgroundImage.svelte
  11. 23
      packages/client/src/components/app/Icon.svelte
  12. 12
      packages/client/src/components/app/Image.svelte
  13. 12
      packages/client/src/components/app/MarkdownViewer.svelte
  14. 25
      packages/client/src/components/app/charts/ApexChart.svelte
  15. 12
      packages/client/src/components/app/forms/Field.svelte
  16. 2
      packages/client/src/stores/builder.js

17
packages/bbui/src/ActionButton/ActionButton.svelte

@ -13,6 +13,10 @@
export let size = "M" export let size = "M"
export let active = false export let active = false
export let fullWidth = false export let fullWidth = false
export let autofocus = false
let focus = false
$: focus = autofocus
function longPress(element) { function longPress(element) {
if (!longPressable) return if (!longPressable) return
@ -44,9 +48,16 @@
class:fullWidth class:fullWidth
class="spectrum-ActionButton spectrum-ActionButton--size{size}" class="spectrum-ActionButton spectrum-ActionButton--size{size}"
class:active class:active
class:is-focused={focus}
{disabled} {disabled}
on:longPress on:longPress
on:click|preventDefault on:click|preventDefault
on:focus={() => {
focus = true
}}
on:blur={() => {
focus = false
}}
> >
{#if longPressable} {#if longPressable}
<svg <svg
@ -80,4 +91,10 @@
.active svg { .active svg {
color: var(--spectrum-global-color-blue-600); color: var(--spectrum-global-color-blue-600);
} }
button.is-focused {
border-color: var(
--spectrum-textfield-m-border-color-down,
var(--spectrum-alias-border-color-mouse-focus)
);
}
</style> </style>

8
packages/bbui/src/Form/Core/Combobox.svelte

@ -56,8 +56,12 @@
bind:this={comboInput} bind:this={comboInput}
{id} {id}
type="text" type="text"
on:focus={() => (focus = true)} on:focus={() => {
on:blur={() => (focus = false)} focus = true
}}
on:blur={() => {
focus = false
}}
on:change={onType} on:change={onType}
value={value || ""} value={value || ""}
placeholder={placeholder || ""} placeholder={placeholder || ""}

13
packages/builder/cypress/integration/createComponents.spec.js

@ -118,20 +118,14 @@ filterTests(['all'], () => {
cy.get("[data-cy=setting-field] .spectrum-InputGroup") cy.get("[data-cy=setting-field] .spectrum-InputGroup")
.should("have.class", "is-focused").within(() => { .should("have.class", "is-focused").within(() => {
cy.get("input").should(($input) => { cy.get("input").should(($input) => {
expect($input).to.have.length(1)
inputClasses = Cypress.$($input).attr('class') inputClasses = Cypress.$($input).attr('class')
}) })
}) })
cy.focused().then(($focused) => {
const focusedClasses = Cypress.$($focused).attr('class')
expect(inputClasses).to.equal(focusedClasses)
})
} }
const testFieldFocusOnCreate = (componentLabel) => { const testFieldFocusOnCreate = (componentLabel) => {
let inputClasses let inputClasses
cy.log("Adding: " + componentLabel)
cy.addComponent("Form", componentLabel).then((componentId) => { cy.addComponent("Form", componentLabel).then((componentId) => {
refocusTest(componentId) refocusTest(componentId)
@ -139,15 +133,10 @@ filterTests(['all'], () => {
cy.get("[data-cy=setting-field] .spectrum-InputGroup") cy.get("[data-cy=setting-field] .spectrum-InputGroup")
.should("have.class", "is-focused").within(() => { .should("have.class", "is-focused").within(() => {
cy.get("input").should(($input) => { cy.get("input").should(($input) => {
expect($input).to.have.length(1)
inputClasses = Cypress.$($input).attr('class') inputClasses = Cypress.$($input).attr('class')
}) })
}) })
}) })
cy.focused().then(($focused) => {
const focusedClasses = Cypress.$($focused).attr('class')
expect(inputClasses).to.equal(focusedClasses)
})
} }
componentTypeLabels.forEach( testFieldFocusOnCreate ) componentTypeLabels.forEach( testFieldFocusOnCreate )

8
packages/builder/src/builderStore/store/frontend.js

@ -425,8 +425,10 @@ export const getFrontendStore = () => {
state.currentView = "component" state.currentView = "component"
state.selectedComponentId = componentInstance._id state.selectedComponentId = componentInstance._id
const focusSetting = definition.settings.filter((setting) => { return setting.required }) const focusSetting = definition.settings.filter(setting => {
const mappedSettings = focusSetting.map((setting) => { return setting.required
})
const mappedSettings = focusSetting.map(setting => {
return { return {
key: setting.key, key: setting.key,
target: state.selectedComponentId, target: state.selectedComponentId,
@ -434,7 +436,7 @@ export const getFrontendStore = () => {
} }
}) })
if(focusSetting.length){ if (focusSetting.length) {
state.builderFocus = mappedSettings state.builderFocus = mappedSettings
} }
return state return state

2
packages/builder/src/components/design/AppPreview/CurrentItemPreview.svelte

@ -210,7 +210,7 @@
store.update(state => ({ store.update(state => ({
...state, ...state,
builderFocus : builderFocus :
[{...data}] [...data]
})) }))
} else { } else {
console.warn(`Client sent unknown event type: ${type}`) console.warn(`Client sent unknown event type: ${type}`)

5
packages/builder/src/components/design/PropertiesPanel/PropertyControls/IconSelect/IconSelect.svelte

@ -15,6 +15,7 @@
export let value = "" export let value = ""
export let maxIconsPerPage = 30 export let maxIconsPerPage = 30
export let autofocus = false
let searchTerm = "" let searchTerm = ""
let selectedLetter = "A" let selectedLetter = "A"
@ -117,7 +118,9 @@
</script> </script>
<div bind:this={buttonAnchor}> <div bind:this={buttonAnchor}>
<ActionButton on:click={dropdown.show}>{displayValue}</ActionButton> <ActionButton on:click={dropdown.show} {autofocus}>
{displayValue}
</ActionButton>
</div> </div>
<Popover bind:this={dropdown} on:open={setSelectedUI} anchor={buttonAnchor}> <Popover bind:this={dropdown} on:open={setSelectedUI} anchor={buttonAnchor}>
<div class="container"> <div class="container">

2
packages/builder/src/components/design/PropertiesPanel/PropertyControls/URLSelect.svelte

@ -4,6 +4,7 @@
export let value export let value
export let bindings export let bindings
export let autofocus
$: urlOptions = $store.screens $: urlOptions = $store.screens
.map(screen => screen.routing?.route) .map(screen => screen.routing?.route)
@ -16,4 +17,5 @@
on:change on:change
options={urlOptions} options={urlOptions}
appendBindingsAsOptions={false} appendBindingsAsOptions={false}
{autofocus}
/> />

1
packages/builder/src/pages/builder/app/[application]/design/[assetType]/_layout.svelte

@ -201,7 +201,6 @@
class="components-pane" class="components-pane"
use:clickOutside={() => { use:clickOutside={() => {
if ($store?.builderFocus) { if ($store?.builderFocus) {
console.log($store?.builderFocus)
const otherSettings = $store?.builderFocus?.filter(field => { const otherSettings = $store?.builderFocus?.filter(field => {
return field.location !== "component_settings" return field.location !== "component_settings"
}) })

3
packages/client/manifest.json

@ -1034,7 +1034,8 @@
{ {
"type": "icon", "type": "icon",
"label": "Icon", "label": "Icon",
"key": "icon" "key": "icon",
"required": true
}, },
{ {
"type": "select", "type": "select",

12
packages/client/src/components/app/BackgroundImage.svelte

@ -34,11 +34,13 @@
<span <span
class="showMe spectrum-Link" class="showMe spectrum-Link"
on:click={() => { on:click={() => {
builderStore.actions.setFocus({ builderStore.actions.setFocus([
location: "component_settings", {
key: "url", location: "component_settings",
target: $component.id, key: "url",
}) target: $component.id,
},
])
}} }}
> >
Show me Show me

23
packages/client/src/components/app/Icon.svelte

@ -28,14 +28,29 @@
/> />
{:else if $builderStore.inBuilder} {:else if $builderStore.inBuilder}
<div use:styleable={styles}> <div use:styleable={styles}>
<Placeholder /> <Placeholder>
<div slot="content">
Add the <mark>Icon</mark> in the settings menu&nbsp;
<span
class="showMe spectrum-Link"
on:click={() => {
builderStore.actions.setFocus([
{
location: "component_settings",
key: "icon",
target: $component.id,
},
])
}}
>
Show me
</span>
</div>
</Placeholder>
</div> </div>
{/if} {/if}
<style> <style>
div {
font-style: italic;
}
@media (hover: hover) { @media (hover: hover) {
.hoverable:hover { .hoverable:hover {
color: var(--spectrum-alias-icon-color-selected-hover) !important; color: var(--spectrum-alias-icon-color-selected-hover) !important;

12
packages/client/src/components/app/Image.svelte

@ -21,11 +21,13 @@
<span <span
class="showMe spectrum-Link" class="showMe spectrum-Link"
on:click={() => { on:click={() => {
builderStore.actions.setFocus({ builderStore.actions.setFocus([
location: "component_settings", {
key: "url", location: "component_settings",
target: $component.id, key: "url",
}) target: $component.id,
},
])
}} }}
> >
Show me Show me

12
packages/client/src/components/app/MarkdownViewer.svelte

@ -21,11 +21,13 @@
<span <span
class="showMe spectrum-Link" class="showMe spectrum-Link"
on:click={() => { on:click={() => {
builderStore.actions.setFocus({ builderStore.actions.setFocus([
location: "component_settings", {
key: "value", location: "component_settings",
target: $component.id, key: "value",
}) target: $component.id,
},
])
}} }}
> >
Show me Show me

25
packages/client/src/components/app/charts/ApexChart.svelte

@ -15,16 +15,27 @@
<div use:styleable={$component.styles}> <div use:styleable={$component.styles}>
<Placeholder> <Placeholder>
<div slot="content"> <div slot="content">
Use the settings panel to select a <mark>Provider</mark> and start Use the settings panel start building your chart&nbsp;
building your chart&nbsp;
<span <span
class="showMe spectrum-Link" class="showMe spectrum-Link"
on:click={() => { on:click={() => {
builderStore.actions.setFocus({ builderStore.actions.setFocus([
location: "component_settings", {
key: "dataProvider", location: "component_settings",
target: $component.id, key: "dataProvider",
}) target: $component.id,
},
{
location: "component_settings",
key: "valueColumns",
target: $component.id,
},
{
location: "component_settings",
key: "dataColumns",
target: $component.id,
},
])
}} }}
> >
Show me Show me

12
packages/client/src/components/app/forms/Field.svelte

@ -84,11 +84,13 @@
<span <span
class="showMe spectrum-Link" class="showMe spectrum-Link"
on:click={() => { on:click={() => {
builderStore.actions.setFocus({ builderStore.actions.setFocus([
location: "component_settings", {
key: "field", location: "component_settings",
target: $component.id, key: "field",
}) target: $component.id,
},
])
}} }}
> >
Show me Show me

2
packages/client/src/stores/builder.js

@ -78,7 +78,7 @@ const createBuilderStore = () => {
}, },
setFocus: data => { setFocus: data => {
window.parent.postMessage({ type: "builder-focus", data }) window.parent.postMessage({ type: "builder-focus", data })
} },
} }
return { return {
...store, ...store,

Loading…
Cancel
Save