Merge pull request #1440 from umbraco/feature/context-base-fixing-missing-parts

Improvements: forgotten improvements from old PR
This commit is contained in:
Niels Lyngsø
2024-03-19 09:44:13 +01:00
committed by GitHub
11 changed files with 35 additions and 44 deletions

View File

@@ -1,17 +1,16 @@
import type { UmbAppContextConfig } from './app-context-config.interface.js';
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
import { UmbContextBase } from '@umbraco-cms/backoffice/class-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
export class UmbAppContext extends UmbControllerBase {
export class UmbAppContext extends UmbContextBase<UmbAppContext> {
#serverUrl: string;
#backofficePath: string;
constructor(host: UmbControllerHost, config: UmbAppContextConfig) {
super(host);
super(host, UMB_APP_CONTEXT);
this.#serverUrl = config.serverUrl;
this.#backofficePath = config.backofficePath;
this.provideContext(UMB_APP_CONTEXT, this);
}
getBackofficePath() {

View File

@@ -3,10 +3,10 @@ import { UMB_AUTH_CONTEXT } from './auth.context.token.js';
import type { UmbOpenApiConfiguration } from './models/openApiConfiguration.js';
import { OpenAPI } from '@umbraco-cms/backoffice/external/backend-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
import { UmbContextBase } from '@umbraco-cms/backoffice/class-api';
import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api';
export class UmbAuthContext extends UmbControllerBase {
export class UmbAuthContext extends UmbContextBase<UmbAuthContext> {
#isAuthorized = new UmbBooleanState<boolean>(false);
readonly isAuthorized = this.#isAuthorized.asObservable();
@@ -16,13 +16,12 @@ export class UmbAuthContext extends UmbControllerBase {
#authFlow;
constructor(host: UmbControllerHost, serverUrl: string, backofficePath: string, isBypassed: boolean) {
super(host);
super(host, UMB_AUTH_CONTEXT);
this.#isBypassed = isBypassed;
this.#serverUrl = serverUrl;
this.#backofficePath = backofficePath;
this.#authFlow = new UmbAuthFlow(serverUrl, this.#getRedirectUrl());
this.provideContext(UMB_AUTH_CONTEXT, this);
}
/**

View File

@@ -3,14 +3,14 @@ import { createRoutePathBuilder } from './generate-route-path-builder.function.j
import type { IRoutingInfo, IRouterSlot } from '@umbraco-cms/backoffice/external/router-slot';
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
import { UmbContextBase } from '@umbraco-cms/backoffice/class-api';
import { UMB_MODAL_MANAGER_CONTEXT, type UmbModalRouteRegistration } from '@umbraco-cms/backoffice/modal';
const EmptyDiv = document.createElement('div');
type UmbRoutePlusModalKey = UmbRoute & { __modalKey: string };
export class UmbRouteContext extends UmbControllerBase {
export class UmbRouteContext extends UmbContextBase<UmbRouteContext> {
#mainRouter: IRouterSlot;
#modalRouter: IRouterSlot;
#modalRegistrations: UmbModalRouteRegistration[] = [];
@@ -21,10 +21,9 @@ export class UmbRouteContext extends UmbControllerBase {
#activeModalPath?: string;
constructor(host: UmbControllerHost, mainRouter: IRouterSlot, modalRouter: IRouterSlot) {
super(host);
super(host, UMB_ROUTE_CONTEXT);
this.#mainRouter = mainRouter;
this.#modalRouter = modalRouter;
this.provideContext(UMB_ROUTE_CONTEXT, this);
this.consumeContext(UMB_MODAL_MANAGER_CONTEXT, (context) => {
this.#modalContext = context;
this.#generateModalRoutes();

View File

@@ -1,9 +1,9 @@
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
import { UmbContextBase } from '@umbraco-cms/backoffice/class-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbStringState, UmbBooleanState } from '@umbraco-cms/backoffice/observable-api';
export class UmbSectionSidebarContext {
#host: UmbControllerHost;
export class UmbSectionSidebarContext extends UmbContextBase<UmbSectionSidebarContext> {
#contextMenuIsOpen = new UmbBooleanState(false);
contextMenuIsOpen = this.#contextMenuIsOpen.asObservable();
@@ -17,7 +17,7 @@ export class UmbSectionSidebarContext {
headline = this.#headline.asObservable();
constructor(host: UmbControllerHost) {
this.#host = host;
super(host, UMB_SECTION_SIDEBAR_CONTEXT);
}
toggleContextMenu(entityType: string, unique: string | null | undefined, headline: string | undefined) {

View File

@@ -1,4 +1,4 @@
import { UmbSectionSidebarContext, UMB_SECTION_SIDEBAR_CONTEXT } from './section-sidebar.context.js';
import { UmbSectionSidebarContext } from './section-sidebar.context.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';
@@ -7,11 +7,6 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
export class UmbSectionSidebarElement extends UmbLitElement {
#sectionSidebarContext = new UmbSectionSidebarContext(this);
constructor() {
super();
this.provideContext(UMB_SECTION_SIDEBAR_CONTEXT, this.#sectionSidebarContext);
}
render() {
return html`
<umb-section-sidebar-context-menu>

View File

@@ -3,14 +3,14 @@ import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
import type { UmbObserverController } from '@umbraco-cms/backoffice/observable-api';
import { UmbStringState } from '@umbraco-cms/backoffice/observable-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
import { UmbContextBase } from '@umbraco-cms/backoffice/class-api';
import type { ManifestTheme } from '@umbraco-cms/backoffice/extension-registry';
import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';
import { loadManifestPlainCss } from '@umbraco-cms/backoffice/extension-api';
const LOCAL_STORAGE_KEY = 'umb-theme-alias';
export class UmbThemeContext extends UmbControllerBase {
export class UmbThemeContext extends UmbContextBase<UmbThemeContext> {
#theme = new UmbStringState('umb-light-theme');
#themeObserver?: UmbObserverController<ManifestTheme[]>;
@@ -19,9 +19,7 @@ export class UmbThemeContext extends UmbControllerBase {
#styleElement: HTMLLinkElement | HTMLStyleElement | null = null;
constructor(host: UmbControllerHost) {
super(host);
this.provideContext(UMB_THEME_CONTEXT, this);
super(host, UMB_THEME_CONTEXT);
const storedTheme = localStorage.getItem(LOCAL_STORAGE_KEY);
if (storedTheme) {

View File

@@ -2,11 +2,11 @@ import { UMB_VARIANT_WORKSPACE_CONTEXT } from '../../workspace-context/index.js'
import { UmbVariantId } from '@umbraco-cms/backoffice/variant';
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
import { UmbContextBase } from '@umbraco-cms/backoffice/class-api';
import { UmbNumberState } from '@umbraco-cms/backoffice/observable-api';
import type { UmbPropertyDatasetContext } from '@umbraco-cms/backoffice/property';
export class UmbWorkspaceSplitViewContext extends UmbControllerBase {
export class UmbWorkspaceSplitViewContext extends UmbContextBase<UmbWorkspaceSplitViewContext> {
#workspaceContext?: typeof UMB_VARIANT_WORKSPACE_CONTEXT.TYPE;
public getWorkspaceContext() {
return this.#workspaceContext;
@@ -21,7 +21,7 @@ export class UmbWorkspaceSplitViewContext extends UmbControllerBase {
//variantId = this.#variantId.asObservable();
constructor(host: UmbControllerHost) {
super(host);
super(host, UMB_WORKSPACE_SPLIT_VIEW_CONTEXT);
this.consumeContext(UMB_VARIANT_WORKSPACE_CONTEXT, (context) => {
this.#workspaceContext = context;
@@ -31,8 +31,6 @@ export class UmbWorkspaceSplitViewContext extends UmbControllerBase {
this.observe(this.index, () => {
this._observeVariant();
});
this.provideContext(UMB_WORKSPACE_SPLIT_VIEW_CONTEXT, this);
}
private _observeVariant() {

View File

@@ -1,7 +1,7 @@
import type { UmbPropertyDatasetContext, UmbNameablePropertyDatasetContext } from '@umbraco-cms/backoffice/property';
import { UMB_PROPERTY_DATASET_CONTEXT } from '@umbraco-cms/backoffice/property';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
import { UmbContextBase } from '@umbraco-cms/backoffice/class-api';
import { UmbVariantId } from '@umbraco-cms/backoffice/variant';
import type { UmbInvariantableWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace';
@@ -11,7 +11,7 @@ import type { UmbInvariantableWorkspaceContextInterface } from '@umbraco-cms/bac
export class UmbInvariantWorkspacePropertyDatasetContext<
WorkspaceType extends UmbInvariantableWorkspaceContextInterface = UmbInvariantableWorkspaceContextInterface,
>
extends UmbControllerBase
extends UmbContextBase<UmbPropertyDatasetContext>
implements UmbPropertyDatasetContext, UmbNameablePropertyDatasetContext
{
#workspace: WorkspaceType;
@@ -37,13 +37,10 @@ export class UmbInvariantWorkspacePropertyDatasetContext<
}
constructor(host: UmbControllerHost, workspace: WorkspaceType) {
// The controller alias, is a very generic name cause we want only one of these for this controller host.
super(host, 'variantContext');
super(host, UMB_PROPERTY_DATASET_CONTEXT);
this.#workspace = workspace;
this.name = this.#workspace.name;
this.provideContext(UMB_PROPERTY_DATASET_CONTEXT, this);
}
/**

View File

@@ -8,8 +8,10 @@ import {
} from '@umbraco-cms/backoffice/external/backend-api';
import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';
// TODO: Turn this into a Repository with a Store that holds the cache [NL]
/**
* A context for fetching and caching the document configuration.
* @deprecated Do not use this one, it will have ot change in near future.
*/
export class UmbDocumentConfigurationContext extends UmbControllerBase implements UmbApi {
/**
@@ -44,6 +46,9 @@ export class UmbDocumentConfigurationContext extends UmbControllerBase implement
// Export as default to work as a global context:
export default UmbDocumentConfigurationContext;
/**
* @deprecated Do not use this one, it will have ot change in near future.
*/
export const UMB_DOCUMENT_CONFIGURATION_CONTEXT = new UmbContextToken<UmbDocumentConfigurationContext>(
'UmbDocumentConfigurationContext',
);

View File

@@ -3,11 +3,11 @@ import type { UmbDocumentPropertyDataContext } from './document-property-dataset
import type { UmbPropertyDatasetContext } from '@umbraco-cms/backoffice/property';
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
export const IsDocumentVariantContext = (
export const IsDocumentPropertyDatasetContext = (
context: UmbPropertyDatasetContext,
): context is UmbDocumentPropertyDataContext => context.getEntityType() === UMB_DOCUMENT_ENTITY_TYPE;
export const UMB_DOCUMENT_VARIANT_CONTEXT = new UmbContextToken<
export const UMB_DOCUMENT_PROPERTY_DATASET_CONTEXT = new UmbContextToken<
UmbPropertyDatasetContext,
UmbDocumentPropertyDataContext
>('UmbVariantContext', undefined, IsDocumentVariantContext);
>('UmbVariantContext', undefined, IsDocumentPropertyDatasetContext);

View File

@@ -2,11 +2,13 @@ import { UmbLanguageCollectionRepository } from '../collection/index.js';
import type { UmbLanguageDetailModel } from '../types.js';
import { UmbArrayState, UmbObjectState, createObservablePart } from '@umbraco-cms/backoffice/observable-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
import { UmbContextBase } from '@umbraco-cms/backoffice/class-api';
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
import type { UmbApi } from '@umbraco-cms/backoffice/extension-api';
export class UmbAppLanguageContext extends UmbControllerBase implements UmbApi {
// TODO: Make a store for the App Languages.
// TODO: Implement default language end-point, in progress at backend team, so we can avoid getting all languages.
export class UmbAppLanguageContext extends UmbContextBase<UmbAppLanguageContext> implements UmbApi {
#languageCollectionRepository: UmbLanguageCollectionRepository;
#languages = new UmbArrayState<UmbLanguageDetailModel>([], (x) => x.unique);
@@ -24,8 +26,7 @@ export class UmbAppLanguageContext extends UmbControllerBase implements UmbApi {
}
constructor(host: UmbControllerHost) {
super(host);
this.provideContext(UMB_APP_LANGUAGE_CONTEXT, this);
super(host, UMB_APP_LANGUAGE_CONTEXT);
this.#languageCollectionRepository = new UmbLanguageCollectionRepository(this);
this.#observeLanguages();
}