diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/workspace/data-type-workspace.context.ts index 21a2f7af84..d20a5bffa0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/workspace/data-type-workspace.context.ts @@ -28,17 +28,17 @@ export class UmbDataTypeWorkspaceContext { // TODO: revisit. temp solution because the create and response models are different. #data = new UmbObjectState(undefined); - data = this.#data.asObservable(); + readonly data = this.#data.asObservable(); #getDataPromise?: Promise; - name = this.#data.asObservablePart((data) => data?.name); - id = this.#data.asObservablePart((data) => data?.id); + readonly name = this.#data.asObservablePart((data) => data?.name); + readonly id = this.#data.asObservablePart((data) => data?.id); - propertyEditorUiAlias = this.#data.asObservablePart((data) => data?.propertyEditorUiAlias); - propertyEditorSchemaAlias = this.#data.asObservablePart((data) => data?.propertyEditorAlias); + readonly propertyEditorUiAlias = this.#data.asObservablePart((data) => data?.propertyEditorUiAlias); + readonly propertyEditorSchemaAlias = this.#data.asObservablePart((data) => data?.propertyEditorAlias); #properties = new UmbObjectState | undefined>(undefined); - properties: Observable | undefined> = this.#properties.asObservable(); + readonly properties: Observable | undefined> = this.#properties.asObservable(); private _propertyEditorSchemaConfigDefaultData: Array = []; private _propertyEditorUISettingsDefaultData: Array = []; @@ -53,13 +53,13 @@ export class UmbDataTypeWorkspaceContext private _propertyEditorUISettingsSchemaAlias?: string; #defaults = new UmbArrayState([], (entry) => entry.alias); - defaults = this.#defaults.asObservable(); + readonly defaults = this.#defaults.asObservable(); #propertyEditorUiIcon = new UmbStringState(null); - propertyEditorUiIcon = this.#propertyEditorUiIcon.asObservable(); + readonly propertyEditorUiIcon = this.#propertyEditorUiIcon.asObservable(); #propertyEditorUiName = new UmbStringState(null); - propertyEditorUiName = this.#propertyEditorUiName.asObservable(); + readonly propertyEditorUiName = this.#propertyEditorUiName.asObservable(); constructor(host: UmbControllerHostElement) { super(host, 'Umb.Workspace.DataType', new UmbDataTypeDetailRepository(host)); diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/workspace/dictionary-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/workspace/dictionary-workspace.context.ts index 997db59a7d..b27f8bae0b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/workspace/dictionary-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/workspace/dictionary-workspace.context.ts @@ -1,9 +1,9 @@ import { UmbDictionaryRepository } from '../repository/dictionary.repository.js'; import { - UmbSaveableWorkspaceContextInterface, + type UmbSaveableWorkspaceContextInterface, UmbEditableWorkspaceContextBase, } from '@umbraco-cms/backoffice/workspace'; -import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import { DictionaryItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; @@ -13,10 +13,10 @@ export class UmbDictionaryWorkspaceContext implements UmbSaveableWorkspaceContextInterface { #data = new UmbObjectState(undefined); - data = this.#data.asObservable(); + readonly data = this.#data.asObservable(); - name = this.#data.asObservablePart((data) => data?.name); - dictionary = this.#data.asObservablePart((data) => data); + readonly name = this.#data.asObservablePart((data) => data?.name); + readonly dictionary = this.#data.asObservablePart((data) => data); constructor(host: UmbControllerHostElement) { super(host, 'Umb.Workspace.Dictionary', new UmbDictionaryRepository(host)); diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/media-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/media-type-workspace.context.ts index e8ab17ba2c..1127403282 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/media-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/media-type-workspace.context.ts @@ -1,9 +1,9 @@ import { UmbMediaTypeRepository } from '../repository/media-type.repository.js'; import { - UmbSaveableWorkspaceContextInterface, + type UmbSaveableWorkspaceContextInterface, UmbEditableWorkspaceContextBase, } from '@umbraco-cms/backoffice/workspace'; -import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { MediaTypeResponseModel } from '@umbraco-cms/backoffice/backend-api'; @@ -14,14 +14,14 @@ export class UmbMediaTypeWorkspaceContext implements UmbSaveableWorkspaceContextInterface { #data = new UmbObjectState(undefined); - data = this.#data.asObservable(); + readonly data = this.#data.asObservable(); #getDataPromise?: Promise; - name = this.#data.asObservablePart((data) => data?.name); - id = this.#data.asObservablePart((data) => data?.id); - alias = this.#data.asObservablePart((data) => data?.alias); - description = this.#data.asObservablePart((data) => data?.description); - icon = this.#data.asObservablePart((data) => data?.icon); + readonly name = this.#data.asObservablePart((data) => data?.name); + readonly id = this.#data.asObservablePart((data) => data?.id); + readonly alias = this.#data.asObservablePart((data) => data?.alias); + readonly description = this.#data.asObservablePart((data) => data?.description); + readonly icon = this.#data.asObservablePart((data) => data?.icon); constructor(host: UmbControllerHostElement) { super(host, 'Umb.Workspace.MediaType', new UmbMediaTypeRepository(host)); diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-groups/workspace/member-group-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-groups/workspace/member-group-workspace.context.ts index 38da5949c0..4af1a59466 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-groups/workspace/member-group-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-groups/workspace/member-group-workspace.context.ts @@ -3,10 +3,10 @@ import type { UmbMemberGroupDetailModel } from '../types.js'; import { UMB_MEMBER_GROUP_ENTITY_TYPE } from '../entity.js'; import { UMB_MEMBER_GROUP_WORKSPACE_ALIAS } from './manifests.js'; import { - UmbSaveableWorkspaceContextInterface, + type UmbSaveableWorkspaceContextInterface, UmbEditableWorkspaceContextBase, } from '@umbraco-cms/backoffice/workspace'; -import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; export class UmbMemberGroupWorkspaceContext diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-types/workspace/member-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-types/workspace/member-type-workspace.context.ts index 1ce66f3df7..ee32cbdaf9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-types/workspace/member-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-types/workspace/member-type-workspace.context.ts @@ -1,10 +1,10 @@ import { UmbMemberTypeRepository } from '../repository/member-type.repository.js'; import { - UmbSaveableWorkspaceContextInterface, + type UmbSaveableWorkspaceContextInterface, UmbEditableWorkspaceContextBase, } from '@umbraco-cms/backoffice/workspace'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; -import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; // TODO => use correct tpye diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/members/workspace/member-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/members/members/workspace/member-workspace.context.ts index ad6c12f22c..55ecf02ee2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/members/workspace/member-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/members/workspace/member-workspace.context.ts @@ -3,7 +3,7 @@ import type { UmbMemberDetailModel } from '../types.js'; import { UMB_MEMBER_ENTITY_TYPE } from '../entity.js'; import { UMB_MEMBER_WORKSPACE_ALIAS } from './manifests.js'; import { - UmbSaveableWorkspaceContextInterface, + type UmbSaveableWorkspaceContextInterface, UmbEditableWorkspaceContextBase, } from '@umbraco-cms/backoffice/workspace'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/languages/workspace/language/language-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/languages/workspace/language/language-workspace.context.ts index b0f89da15f..e0fd57e2bc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/languages/workspace/language/language-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/languages/workspace/language/language-workspace.context.ts @@ -1,9 +1,9 @@ import { UmbLanguageRepository } from '../../repository/language.repository.js'; import { - UmbSaveableWorkspaceContextInterface, + type UmbSaveableWorkspaceContextInterface, UmbEditableWorkspaceContextBase, } from '@umbraco-cms/backoffice/workspace'; -import { ApiError, LanguageResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import { ApiError, type LanguageResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; @@ -13,11 +13,11 @@ export class UmbLanguageWorkspaceContext implements UmbSaveableWorkspaceContextInterface { #data = new UmbObjectState(undefined); - data = this.#data.asObservable(); + readonly data = this.#data.asObservable(); // TODO: this is a temp solution to bubble validation errors to the UI #validationErrors = new UmbObjectState(undefined); - validationErrors = this.#validationErrors.asObservable(); + readonly validationErrors = this.#validationErrors.asObservable(); constructor(host: UmbControllerHostElement) { super(host, 'Umb.Workspace.Language', new UmbLanguageRepository(host)); diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts index d4be3a51e0..b28d8568d8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/workspace/relation-type-workspace.context.ts @@ -1,11 +1,11 @@ import { UmbRelationTypeRepository } from '../repository/relation-type.repository.js'; import { - UmbSaveableWorkspaceContextInterface, + type UmbSaveableWorkspaceContextInterface, UmbEditableWorkspaceContextBase, } from '@umbraco-cms/backoffice/workspace'; import type { RelationTypeBaseModel, RelationTypeResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; -import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; export class UmbRelationTypeWorkspaceContext @@ -13,9 +13,9 @@ export class UmbRelationTypeWorkspaceContext implements UmbSaveableWorkspaceContextInterface { #data = new UmbObjectState(undefined); - data = this.#data.asObservable(); - name = this.#data.asObservablePart((data) => data?.name); - id = this.#data.asObservablePart((data) => data?.id); + readonly data = this.#data.asObservable(); + readonly name = this.#data.asObservablePart((data) => data?.name); + readonly id = this.#data.asObservablePart((data) => data?.id); constructor(host: UmbControllerHostElement) { super(host, 'Umb.Workspace.RelationType', new UmbRelationTypeRepository(host)); diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/partial-view-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/partial-view-workspace.context.ts index 6b818a1702..7ea5a2601b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/partial-view-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/partial-view-workspace.context.ts @@ -1,14 +1,14 @@ import { UmbPartialViewRepository } from '../repository/partial-view.repository.js'; -import { UmbPartialViewDetailModel } from '../types.js'; +import type { UmbPartialViewDetailModel } from '../types.js'; import { UMB_PARTIAL_VIEW_ENTITY_TYPE } from '../entity.js'; import { UmbBooleanState, UmbDeepState } from '@umbraco-cms/backoffice/observable-api'; -import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UmbSaveableWorkspaceContextInterface, UmbEditableWorkspaceContextBase, } from '@umbraco-cms/backoffice/workspace'; import { loadCodeEditor } from '@umbraco-cms/backoffice/code-editor'; -import { UpdatePartialViewRequestModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UpdatePartialViewRequestModel } from '@umbraco-cms/backoffice/backend-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; export class UmbPartialViewWorkspaceContext @@ -47,13 +47,13 @@ export class UmbPartialViewWorkspaceContext } #data = new UmbDeepState(undefined); - data = this.#data.asObservable(); - name = this.#data.asObservablePart((data) => data?.name); - content = this.#data.asObservablePart((data) => data?.content); - path = this.#data.asObservablePart((data) => data?.path); + readonly data = this.#data.asObservable(); + readonly name = this.#data.asObservablePart((data) => data?.name); + readonly content = this.#data.asObservablePart((data) => data?.content); + readonly path = this.#data.asObservablePart((data) => data?.path); #isCodeEditorReady = new UmbBooleanState(false); - isCodeEditorReady = this.#isCodeEditorReady.asObservable(); + readonly isCodeEditorReady = this.#isCodeEditorReady.asObservable(); constructor(host: UmbControllerHostElement) { super(host, 'Umb.Workspace.PartialView', new UmbPartialViewRepository(host)); diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/stylesheet-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/stylesheet-workspace.context.ts index 512d396a11..5d0aed22ca 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/stylesheet-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/stylesheet-workspace.context.ts @@ -1,13 +1,13 @@ import { UmbStylesheetRepository } from '../repository/stylesheet.repository.js'; -import { StylesheetDetails } from '../index.js'; +import type { StylesheetDetails } from '../index.js'; import { - UmbSaveableWorkspaceContextInterface, + type UmbSaveableWorkspaceContextInterface, UmbEditableWorkspaceContextBase, } from '@umbraco-cms/backoffice/workspace'; -import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UmbArrayState, UmbBooleanState, UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import { loadCodeEditor } from '@umbraco-cms/backoffice/code-editor'; -import { RichTextRuleModel, UpdateStylesheetRequestModel } from '@umbraco-cms/backoffice/backend-api'; +import type { RichTextRuleModel, UpdateStylesheetRequestModel } from '@umbraco-cms/backoffice/backend-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; export type RichTextRuleModelSortable = RichTextRuleModel & { sortOrder?: number }; @@ -18,14 +18,14 @@ export class UmbStylesheetWorkspaceContext { #data = new UmbObjectState(undefined); #rules = new UmbArrayState([], (rule) => rule.name); - data = this.#data.asObservable(); - rules = this.#rules.asObservable(); - name = this.#data.asObservablePart((data) => data?.name); - content = this.#data.asObservablePart((data) => data?.content); - path = this.#data.asObservablePart((data) => data?.path); + readonly data = this.#data.asObservable(); + readonly rules = this.#rules.asObservable(); + readonly name = this.#data.asObservablePart((data) => data?.name); + readonly content = this.#data.asObservablePart((data) => data?.content); + readonly path = this.#data.asObservablePart((data) => data?.path); #isCodeEditorReady = new UmbBooleanState(false); - isCodeEditorReady = this.#isCodeEditorReady.asObservable(); + readonly isCodeEditorReady = this.#isCodeEditorReady.asObservable(); constructor(host: UmbControllerHostElement) { super(host, 'Umb.Workspace.StyleSheet', new UmbStylesheetRepository(host)); diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/stylesheet-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/stylesheet-workspace.element.ts index c4f74d092e..1506091374 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/stylesheet-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/stylesheet-workspace.element.ts @@ -1,10 +1,10 @@ -import { serverFilePathFromUrlFriendlyPath } from '../../utils.js'; import { UmbStylesheetWorkspaceContext } from './stylesheet-workspace.context.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import type { UmbRoute } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UmbWorkspaceIsNewRedirectController } from '@umbraco-cms/backoffice/workspace'; +import { decodeFilePath } from '@umbraco-cms/backoffice/utils'; @customElement('umb-stylesheet-workspace') export class UmbStylesheetWorkspaceElement extends UmbLitElement { @@ -17,7 +17,7 @@ export class UmbStylesheetWorkspaceElement extends UmbLitElement { component: import('./stylesheet-workspace-editor.element.js'), setup: async (_component, info) => { const path = info.match.params.path === 'null' ? null : info.match.params.path; - const serverPath = path === null ? null : serverFilePathFromUrlFriendlyPath(path); + const serverPath = path === null ? null : decodeFilePath(path); await this.#workspaceContext.create(serverPath); await this.#workspaceContext.setRules([]); @@ -34,7 +34,7 @@ export class UmbStylesheetWorkspaceElement extends UmbLitElement { setup: (_component, info) => { this.removeControllerByAlias('_observeIsNew'); const path = info.match.params.path; - const serverPath = serverFilePathFromUrlFriendlyPath(path); + const serverPath = decodeFilePath(path); this.#workspaceContext.load(serverPath); }, }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/utils.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/utils.ts index cb7253772a..57c84ea4bf 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/utils.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/utils.ts @@ -1,9 +1,3 @@ -// TODO: we can try and make pretty urls if we want to -export const urlFriendlyPathFromServerFilePath = (path: string) => encodeURIComponent(path).replace('.', '-'); - -// TODO: we can try and make pretty urls if we want to -export const serverFilePathFromUrlFriendlyPath = (unique: string) => decodeURIComponent(unique.replace('-', '.')); - //Below are a copy of export const getInsertDictionarySnippet = (nodeName: string) => { return `@Umbraco.GetDictionaryValue("${nodeName}")`; @@ -31,10 +25,10 @@ export const getRenderBodySnippet = () => '@RenderBody()'; export const getRenderSectionSnippet = (sectionName: string, isMandatory: boolean) => `@RenderSection("${sectionName}", ${isMandatory})`; -export const getAddSectionSnippet = (sectionName: string) => `@section ${sectionName} +export const getAddSectionSnippet = (sectionName: string) => `@section ${sectionName} { - + }`; diff --git a/src/Umbraco.Web.UI.Client/src/shared/utils/diff.type.ts b/src/Umbraco.Web.UI.Client/src/shared/utils/diff.type.ts index cbce25da17..699ea2524f 100644 --- a/src/Umbraco.Web.UI.Client/src/shared/utils/diff.type.ts +++ b/src/Umbraco.Web.UI.Client/src/shared/utils/diff.type.ts @@ -1,5 +1,5 @@ -type FilterKeys = { +type _FilterKeys = { [K in keyof T]: K extends keyof U ? never : K; }; -export type Diff = Pick[keyof T]>; +export type Diff = Pick[keyof T]>; diff --git a/src/Umbraco.Web.UI.Client/src/shared/utils/index.ts b/src/Umbraco.Web.UI.Client/src/shared/utils/index.ts index c5d439c2e2..7b605bb5de 100644 --- a/src/Umbraco.Web.UI.Client/src/shared/utils/index.ts +++ b/src/Umbraco.Web.UI.Client/src/shared/utils/index.ts @@ -4,11 +4,13 @@ export * from './ensure-path-ends-with-slash.function.js'; export * from './generate-umbraco-alias.function.js'; export * from './increment-string.function.js'; export * from './media-helper.service.js'; +export * from './pagination-manager/pagination.manager.js'; +export * from './path-decode.function.js'; +export * from './path-encode.function.js'; export * from './path-folder-name.function.js'; export * from './selection-manager.js'; export * from './udi-service.js'; export * from './umbraco-path.function.js'; -export * from './pagination-manager/pagination.manager.js'; declare global { interface Window { diff --git a/src/Umbraco.Web.UI.Client/src/shared/utils/path-decode.function.ts b/src/Umbraco.Web.UI.Client/src/shared/utils/path-decode.function.ts new file mode 100644 index 0000000000..4858a64a5d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/shared/utils/path-decode.function.ts @@ -0,0 +1 @@ +export const decodeFilePath = (unique: string) => decodeURIComponent(unique.replace('-', '.')); diff --git a/src/Umbraco.Web.UI.Client/src/shared/utils/path-encode.function.ts b/src/Umbraco.Web.UI.Client/src/shared/utils/path-encode.function.ts new file mode 100644 index 0000000000..ef3e8b0a2b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/shared/utils/path-encode.function.ts @@ -0,0 +1 @@ +export const encodeFilePath = (path: string) => encodeURIComponent(path).replace('.', '-'); diff --git a/src/Umbraco.Web.UI.Client/src/shared/utils/umbraco-path.function.ts b/src/Umbraco.Web.UI.Client/src/shared/utils/umbraco-path.function.ts index b536ed8a2e..9c54a56c4e 100644 --- a/src/Umbraco.Web.UI.Client/src/shared/utils/umbraco-path.function.ts +++ b/src/Umbraco.Web.UI.Client/src/shared/utils/umbraco-path.function.ts @@ -1,3 +1,4 @@ +// TODO: Rename to something more obvious, naming wise this can mean anything. I suggest: umbracoManagementApiPath() export function umbracoPath(path: string) { return `/umbraco/management/api/v1${path}`; }