From 27ef875d865ec1d03310dcafbd468b22de4b538f Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Thu, 21 Sep 2023 11:08:32 +0200 Subject: [PATCH] example of vertical and horizontal sorting --- .../stories/test-sorter-controller.element.ts | 88 +++++++++++++++---- 1 file changed, 69 insertions(+), 19 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/sorter/stories/test-sorter-controller.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/sorter/stories/test-sorter-controller.element.ts index c6843e234b..27c9f2d712 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/sorter/stories/test-sorter-controller.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/sorter/stories/test-sorter-controller.element.ts @@ -1,13 +1,13 @@ import { UmbSorterConfig, UmbSorterController } from '../sorter.controller.js'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import { css, customElement, html } from '@umbraco-cms/backoffice/external/lit'; +import { css, customElement, html, state } from '@umbraco-cms/backoffice/external/lit'; type SortEntryType = { id: string; value: string; }; -const sorterConfig: UmbSorterConfig = { +const verticalConfig: UmbSorterConfig = { compareElementToModel: (element: HTMLElement, model: SortEntryType) => { return element.getAttribute('data-sort-entry-id') === model.id; }, @@ -19,6 +19,11 @@ const sorterConfig: UmbSorterConfig = { containerSelector: 'ul', }; +const horizontalConfig: UmbSorterConfig = { + ...verticalConfig, + resolveVerticalDirection: () => false, +}; + const model: Array = [ { id: '0', @@ -38,18 +43,40 @@ const model: Array = [ export default class UmbTestSorterControllerElement extends UmbLitElement { public sorter; + @state() + private vertical = true; + constructor() { super(); - - this.sorter = new UmbSorterController(this, sorterConfig); + this.sorter = new UmbSorterController(this, verticalConfig); this.sorter.setModel(model); } + #change() { + this.sorter.destroy(); + + if (this.vertical) { + this.sorter = new UmbSorterController(this, horizontalConfig); + this.sorter.setModel(model); + } else { + this.sorter = new UmbSorterController(this, verticalConfig); + this.sorter.setModel(model); + } + + this.vertical = !this.vertical; + } + render() { return html` -
    + + Horizontal/Vertical + +
      ${model.map( - (entry) => html`
    • ${entry.value}
    • ` + (entry) => + html`
    • + ${entry.value} +
    • `, )}
    `; @@ -59,39 +86,62 @@ export default class UmbTestSorterControllerElement extends UmbLitElement { css` :host { display: block; + box-sizing: border-box; } ul { + display: flex; + flex-direction: column; + gap: 5px; list-style: none; padding: 0; - margin: 0; + margin: 10px 0; + } + + ul.horizontal { + flex-direction: row; } li { + position: relative; + flex: 1; padding: 10px; - margin: 5px; - background: #eee; + background-color: rgba(0, 255, 0, 0.3); } li:hover { - background: #ddd !important; - cursor: move; + background-color: rgba(0, 255, 0, 0.8); + cursor: grab; } - li:active { - background: #ccc; + .--umb-sorter-placeholder > span { + display: none; } - #sort0 { - background: #f00; + ul.vertical li.--umb-sorter-placeholder { + padding: 0; } - #sort1 { - background: #0f0; + ul.vertical .--umb-sorter-placeholder { + max-height: 2px; } - #sort2 { - background: #c9da10; + ul.vertical .--umb-sorter-placeholder::after { + content: ''; + display: block; + border-top: 2px solid blue; + } + + ul.horizontal .--umb-sorter-placeholder { + background-color: transparent; + } + + ul.horizontal .--umb-sorter-placeholder::before { + content: ''; + position: absolute; + inset: 0; + box-sizing: border-box; + border: 2px dashed blue; } `, ];