member workspace
This commit is contained in:
@@ -138,6 +138,8 @@ export class UmbDocumentWorkspaceContext
|
||||
this.observe(this.contentTypeUnique, (unique) => this.structure.loadType(unique));
|
||||
this.observe(this.varies, (varies) => (this.#varies = varies));
|
||||
|
||||
this.loadLanguages();
|
||||
|
||||
this.routes.setRoutes([
|
||||
{
|
||||
path: 'create/parent/:entityType/:parentUnique/:documentTypeUnique',
|
||||
@@ -164,8 +166,6 @@ export class UmbDocumentWorkspaceContext
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
this.loadLanguages();
|
||||
}
|
||||
|
||||
resetState() {
|
||||
|
||||
@@ -2,7 +2,7 @@ import { UMB_MEMBER_COLLECTION_ALIAS } from '../collection/manifests.js';
|
||||
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
|
||||
import { css, html, customElement } from '@umbraco-cms/backoffice/external/lit';
|
||||
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
|
||||
import type { UmbRoute } from '@umbraco-cms/backoffice/router';
|
||||
import type { PageComponent, UmbRoute } from '@umbraco-cms/backoffice/router';
|
||||
|
||||
@customElement('umb-member-section-view')
|
||||
export class UmbMemberSectionViewElement extends UmbLitElement {
|
||||
@@ -17,7 +17,10 @@ export class UmbMemberSectionViewElement extends UmbLitElement {
|
||||
},
|
||||
{
|
||||
path: 'member',
|
||||
component: () => import('../workspace/member-workspace.element.js'),
|
||||
component: () => import('src/packages/core/workspace/workspace.element.js'),
|
||||
setup(component: PageComponent) {
|
||||
(component as any).entityType = 'member';
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '',
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
export { UMB_MEMBER_WORKSPACE_ALIAS } from './manifests.js';
|
||||
export { UMB_MEMBER_WORKSPACE_CONTEXT } from './member-workspace.context-token.js';
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
import { UMB_MEMBER_ENTITY_TYPE } from '../entity.js';
|
||||
import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace';
|
||||
import type {
|
||||
ManifestWorkspace,
|
||||
ManifestWorkspaces,
|
||||
ManifestWorkspaceActions,
|
||||
ManifestWorkspaceView,
|
||||
} from '@umbraco-cms/backoffice/extension-registry';
|
||||
|
||||
export const UMB_MEMBER_WORKSPACE_ALIAS = 'Umb.Workspace.Member';
|
||||
|
||||
const workspace: ManifestWorkspace = {
|
||||
const workspace: ManifestWorkspaces = {
|
||||
type: 'workspace',
|
||||
kind: 'routable',
|
||||
alias: UMB_MEMBER_WORKSPACE_ALIAS,
|
||||
name: 'Member Workspace',
|
||||
js: () => import('./member-workspace.element.js'),
|
||||
api: () => import('./member-workspace.context.js'),
|
||||
meta: {
|
||||
entityType: UMB_MEMBER_ENTITY_TYPE,
|
||||
},
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { UmbMemberVariantOptionModel } from '../types.js';
|
||||
import { UMB_MEMBER_WORKSPACE_CONTEXT } from './member-workspace.context.js';
|
||||
import { UMB_MEMBER_WORKSPACE_CONTEXT } from './member-workspace.context-token.js';
|
||||
import { UmbMemberWorkspaceSplitViewElement } from './member-workspace-split-view.element.js';
|
||||
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
|
||||
import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { UMB_MEMBER_WORKSPACE_CONTEXT } from './member-workspace.context.js';
|
||||
import { UMB_MEMBER_WORKSPACE_CONTEXT } from './member-workspace.context-token.js';
|
||||
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
|
||||
import { css, html, nothing, customElement, state, repeat } from '@umbraco-cms/backoffice/external/lit';
|
||||
import type { ActiveVariant } from '@umbraco-cms/backoffice/workspace';
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
import type { UmbMemberWorkspaceContext } from './member-workspace.context.js';
|
||||
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
|
||||
import type { UmbSaveableWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace';
|
||||
|
||||
export const UMB_MEMBER_WORKSPACE_CONTEXT = new UmbContextToken<
|
||||
UmbSaveableWorkspaceContextInterface,
|
||||
UmbMemberWorkspaceContext
|
||||
>(
|
||||
'UmbWorkspaceContext',
|
||||
undefined,
|
||||
(context): context is UmbMemberWorkspaceContext => context.getEntityType?.() === 'member',
|
||||
);
|
||||
@@ -2,14 +2,20 @@ import { UmbMemberDetailRepository } from '../repository/index.js';
|
||||
import type { UmbMemberDetailModel, UmbMemberVariantModel, UmbMemberVariantOptionModel } from '../types.js';
|
||||
import { UmbMemberPropertyDataContext } from '../property-dataset-context/member-property-dataset-context.js';
|
||||
import { UMB_MEMBER_WORKSPACE_ALIAS } from './manifests.js';
|
||||
import { UmbMemberWorkspaceEditorElement } from './member-workspace-editor.element.js';
|
||||
import { UmbMemberTypeDetailRepository } from '@umbraco-cms/backoffice/member-type';
|
||||
import { UmbEditableWorkspaceContextBase, UmbWorkspaceSplitViewManager } from '@umbraco-cms/backoffice/workspace';
|
||||
import {
|
||||
UmbEditableWorkspaceContextBase,
|
||||
UmbWorkspaceIsNewRedirectController,
|
||||
UmbWorkspaceRouteManager,
|
||||
UmbWorkspaceSplitViewManager,
|
||||
} from '@umbraco-cms/backoffice/workspace';
|
||||
import type {
|
||||
UmbRoutableWorkspaceContext,
|
||||
UmbVariantableWorkspaceContextInterface,
|
||||
UmbSaveableWorkspaceContextInterface,
|
||||
UmbWorkspaceContextInterface,
|
||||
} from '@umbraco-cms/backoffice/workspace';
|
||||
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
|
||||
import {
|
||||
UmbArrayState,
|
||||
UmbObjectState,
|
||||
@@ -20,17 +26,21 @@ import { UmbContentTypeStructureManager } from '@umbraco-cms/backoffice/content-
|
||||
import { UMB_INVARIANT_CULTURE, UmbVariantId } from '@umbraco-cms/backoffice/variant';
|
||||
import type { UmbLanguageDetailModel } from '@umbraco-cms/backoffice/language';
|
||||
import { UmbLanguageCollectionRepository } from '@umbraco-cms/backoffice/language';
|
||||
import type { UmbDataSourceResponse } from '@umbraco-cms/backoffice/repository';
|
||||
|
||||
type EntityType = UmbMemberDetailModel;
|
||||
export class UmbMemberWorkspaceContext
|
||||
extends UmbEditableWorkspaceContextBase<EntityType>
|
||||
implements UmbVariantableWorkspaceContextInterface<UmbMemberVariantModel>
|
||||
implements
|
||||
UmbVariantableWorkspaceContextInterface<UmbMemberVariantModel>,
|
||||
UmbRoutableWorkspaceContext,
|
||||
UmbWorkspaceContextInterface
|
||||
{
|
||||
public readonly repository = new UmbMemberDetailRepository(this);
|
||||
|
||||
#persistedData = new UmbObjectState<EntityType | undefined>(undefined);
|
||||
#currentData = new UmbObjectState<EntityType | undefined>(undefined);
|
||||
#getDataPromise?: Promise<any>;
|
||||
#getDataPromise?: Promise<UmbDataSourceResponse<UmbMemberDetailModel>>;
|
||||
|
||||
// TODo: Optimize this so it uses either a App Language Context? [NL]
|
||||
#languageRepository = new UmbLanguageCollectionRepository(this);
|
||||
@@ -57,6 +67,7 @@ export class UmbMemberWorkspaceContext
|
||||
|
||||
readonly unique = this.#currentData.asObservablePart((data) => data?.unique);
|
||||
|
||||
readonly routes = new UmbWorkspaceRouteManager(this);
|
||||
readonly splitView = new UmbWorkspaceSplitViewManager();
|
||||
|
||||
readonly variantOptions = mergeObservables(
|
||||
@@ -97,6 +108,31 @@ export class UmbMemberWorkspaceContext
|
||||
this.observe(this.varies, (varies) => (this.#varies = varies));
|
||||
|
||||
this.loadLanguages();
|
||||
|
||||
this.routes.setRoutes([
|
||||
{
|
||||
path: 'create/:memberTypeUnique',
|
||||
component: () => new UmbMemberWorkspaceEditorElement(),
|
||||
setup: async (_component, info) => {
|
||||
const memberTypeUnique = info.match.params.memberTypeUnique;
|
||||
this.create(memberTypeUnique);
|
||||
|
||||
new UmbWorkspaceIsNewRedirectController(
|
||||
this,
|
||||
this,
|
||||
this.getHostElement().shadowRoot!.querySelector('umb-router-slot')!,
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'edit/:unique',
|
||||
component: () => new UmbMemberWorkspaceEditorElement(),
|
||||
setup: (_component, info) => {
|
||||
const unique = info.match.params.unique;
|
||||
this.load(unique);
|
||||
},
|
||||
},
|
||||
]);
|
||||
}
|
||||
|
||||
resetState() {
|
||||
@@ -397,11 +433,4 @@ export class UmbMemberWorkspaceContext
|
||||
}
|
||||
}
|
||||
|
||||
export const UMB_MEMBER_WORKSPACE_CONTEXT = new UmbContextToken<
|
||||
UmbSaveableWorkspaceContextInterface,
|
||||
UmbMemberWorkspaceContext
|
||||
>(
|
||||
'UmbWorkspaceContext',
|
||||
undefined,
|
||||
(context): context is UmbMemberWorkspaceContext => context.getEntityType?.() === 'member',
|
||||
);
|
||||
export { UmbMemberWorkspaceContext as api };
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
import { UmbMemberWorkspaceContext } from './member-workspace.context.js';
|
||||
import { UmbMemberWorkspaceEditorElement } from './member-workspace-editor.element.js';
|
||||
import { html, customElement } from '@umbraco-cms/backoffice/external/lit';
|
||||
import type { UmbRoute } from '@umbraco-cms/backoffice/router';
|
||||
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
|
||||
|
||||
import { UmbWorkspaceIsNewRedirectController } from '@umbraco-cms/backoffice/workspace';
|
||||
|
||||
@customElement('umb-member-workspace')
|
||||
export class UmbMemberWorkspaceElement extends UmbLitElement {
|
||||
#workspaceContext = new UmbMemberWorkspaceContext(this);
|
||||
#createElement = () => new UmbMemberWorkspaceEditorElement();
|
||||
|
||||
private _routes: UmbRoute[] = [
|
||||
{
|
||||
path: 'create/:memberTypeUnique',
|
||||
component: this.#createElement,
|
||||
setup: (_component, info) => {
|
||||
const memberTypeUnique = info.match.params.memberTypeUnique;
|
||||
this.#workspaceContext.create(memberTypeUnique);
|
||||
|
||||
new UmbWorkspaceIsNewRedirectController(
|
||||
this,
|
||||
this.#workspaceContext,
|
||||
this.shadowRoot!.querySelector('umb-router-slot')!,
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'edit/:unique',
|
||||
component: this.#createElement,
|
||||
setup: (_component, info) => {
|
||||
const unique = info.match.params.unique;
|
||||
this.#workspaceContext.load(unique);
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
render() {
|
||||
return html`<umb-router-slot .routes=${this._routes}></umb-router-slot>`;
|
||||
}
|
||||
}
|
||||
|
||||
export default UmbMemberWorkspaceElement;
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
'umb-member-workspace': UmbMemberWorkspaceElement;
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
import './member-workspace.element.js';
|
||||
|
||||
import type { Meta, Story } from '@storybook/web-components';
|
||||
|
||||
import type { UmbMemberWorkspaceElement } from './member-workspace.element.js';
|
||||
import { html } from '@umbraco-cms/backoffice/external/lit';
|
||||
|
||||
export default {
|
||||
title: 'Workspaces/Member',
|
||||
component: 'umb-member-workspace',
|
||||
id: 'umb-member-workspace',
|
||||
} as Meta;
|
||||
|
||||
export const AAAOverview: Story<UmbMemberWorkspaceElement> = () =>
|
||||
html` <!--
|
||||
<umb-member-workspace"></umb-member-workspace>
|
||||
-->`;
|
||||
AAAOverview.storyName = 'Overview';
|
||||
@@ -1,4 +1,4 @@
|
||||
import { UMB_MEMBER_WORKSPACE_CONTEXT } from '../../member-workspace.context.js';
|
||||
import { UMB_MEMBER_WORKSPACE_CONTEXT } from '../../member-workspace.context-token.js';
|
||||
import { css, html, customElement, property, state, repeat } from '@umbraco-cms/backoffice/external/lit';
|
||||
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
|
||||
import type { UmbPropertyTypeModel } from '@umbraco-cms/backoffice/content-type';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { UMB_MEMBER_WORKSPACE_CONTEXT } from '../../member-workspace.context.js';
|
||||
import { UMB_MEMBER_WORKSPACE_CONTEXT } from '../../member-workspace.context-token.js';
|
||||
import { css, html, customElement, property, state, repeat } from '@umbraco-cms/backoffice/external/lit';
|
||||
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
|
||||
import { UmbContentTypeContainerStructureHelper } from '@umbraco-cms/backoffice/content-type';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { UMB_MEMBER_WORKSPACE_CONTEXT } from '../../member-workspace.context.js';
|
||||
import { UMB_MEMBER_WORKSPACE_CONTEXT } from '../../member-workspace.context-token.js';
|
||||
import type { UmbMemberWorkspaceViewContentTabElement } from './member-workspace-view-content-tab.element.js';
|
||||
import { css, html, customElement, state, repeat, nothing } from '@umbraco-cms/backoffice/external/lit';
|
||||
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// import { UMB_COMPOSITION_PICKER_MODAL, type UmbCompositionPickerModalData } from '../../../modals/index.js';
|
||||
import { UMB_MEMBER_WORKSPACE_CONTEXT } from '../../member-workspace.context.js';
|
||||
import { UMB_MEMBER_WORKSPACE_CONTEXT } from '../../member-workspace.context-token.js';
|
||||
import type { UmbMemberDetailModel } from '../../../types.js';
|
||||
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
|
||||
import { css, html, customElement, state, when } from '@umbraco-cms/backoffice/external/lit';
|
||||
|
||||
Reference in New Issue
Block a user