diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/sections/users/views/user-groups/editor-view-user-groups.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/sections/users/views/user-groups/editor-view-user-groups.element.ts new file mode 100644 index 0000000000..710a3c8917 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/sections/users/views/user-groups/editor-view-user-groups.element.ts @@ -0,0 +1,158 @@ +import { UUITextStyles } from '@umbraco-ui/uui-css'; +import { css, html, LitElement } from 'lit'; +import { customElement, state } from 'lit/decorators.js'; +import { Subscription } from 'rxjs'; +import { UmbContextConsumerMixin } from '../../../../../core/context'; +import type { UserGroupDetails } from '../../../../../core/models'; +import { UmbUserGroupStore } from '../../../../../core/stores/user/user-group.store'; +import UmbTableElement, { + UmbTableColumn, + UmbTableConfig, + UmbTableDeselectedEvent, + UmbTableItem, + UmbTableOrderedEvent, + UmbTableSelectedEvent, +} from '../../../../components/table/table.element'; + +@customElement('umb-editor-view-user-groups') +export class UmbEditorViewUserGroupsElement extends UmbContextConsumerMixin(LitElement) { + static styles = [ + UUITextStyles, + css` + :host { + height: 100%; + display: flex; + flex-direction: column; + } + `, + ]; + + @state() + private _userGroups: Array = []; + + @state() + private _tableConfig: UmbTableConfig = { + allowSelection: true, + }; + + @state() + private _tableColumns: Array = [ + { + name: 'Name', + alias: 'userGroupName', + }, + { + name: 'Sections', + alias: 'userGroupSections', + }, + { + name: 'Content start node', + alias: 'userGroupContentStartNode', + }, + { + name: 'Media start node', + alias: 'userGroupMediaStartNode', + }, + ]; + + @state() + private _tableItems: Array = []; + + @state() + private _selection: Array = []; + + private _userGroupStore?: UmbUserGroupStore; + private _userGroupsSubscription?: Subscription; + private _selectionSubscription?: Subscription; + + connectedCallback(): void { + super.connectedCallback(); + + this.consumeContext('umbUserGroupStore', (userStore: UmbUserGroupStore) => { + this._userGroupStore = userStore; + this._observeUsers(); + }); + } + + private _observeUsers() { + this._userGroupsSubscription?.unsubscribe(); + this._userGroupsSubscription = this._userGroupStore?.getAll().subscribe((userGroups) => { + this._userGroups = userGroups; + console.log('user groups', userGroups); + + this._createTableItems(this._userGroups); + }); + } + + private _createTableItems(userGroups: Array) { + this._tableItems = userGroups.map((userGroup) => { + return { + key: userGroup.key, + icon: userGroup.icon, + data: [ + { + columnAlias: 'userGroupName', + value: userGroup.name, + }, + { + columnAlias: 'userGroupSections', + value: userGroup.sections, + }, + { + columnAlias: 'userGroupContentStartNode', + value: userGroup.contentStartNode, + }, + { + columnAlias: 'userGroupMediaStartNode', + value: userGroup.mediaStartNode, + }, + ], + }; + }); + } + + private _handleSelected(event: UmbTableSelectedEvent) { + event.stopPropagation(); + console.log('HANDLE SELECT'); + } + + private _handleDeselected(event: UmbTableDeselectedEvent) { + event.stopPropagation(); + console.log('HANDLE DESELECT'); + } + + private _handleOrdering(event: UmbTableOrderedEvent) { + const table = event.target as UmbTableElement; + const orderingColumn = table.orderingColumn; + const orderingDesc = table.orderingDesc; + console.log(`fetch users, order column: ${orderingColumn}, desc: ${orderingDesc}`); + } + + disconnectedCallback(): void { + super.disconnectedCallback(); + + this._userGroupsSubscription?.unsubscribe(); + this._selectionSubscription?.unsubscribe(); + } + + render() { + return html` + + `; + } +} + +export default UmbEditorViewUserGroupsElement; + +declare global { + interface HTMLElementTagNameMap { + 'umb-editor-view-user-groups': UmbEditorViewUserGroupsElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/sections/users/views/user-groups/section-view-user-groups.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/sections/users/views/user-groups/section-view-user-groups.element.ts index af30f3053c..84c808a6bd 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/sections/users/views/user-groups/section-view-user-groups.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/sections/users/views/user-groups/section-view-user-groups.element.ts @@ -1,10 +1,12 @@ import { html, LitElement } from 'lit'; import { customElement } from 'lit/decorators.js'; +import './editor-view-user-groups.element'; + @customElement('umb-section-view-user-groups') export class UmbSectionViewUserGroupsElement extends LitElement { render() { - return html`
CONTENT FOR USER GROUPS SECTION VIEW
`; + return html``; } }