Skip to content

Commit b13fa6e

Browse files
committed
wip align folder and detail repos
1 parent aa89b5b commit b13fa6e

File tree

15 files changed

+275
-56
lines changed

15 files changed

+275
-56
lines changed

src/packages/core/tree/folder/folder-data-source.interface.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export interface UmbFolderDataSourceConstructor {
77
}
88

99
export interface UmbFolderDataSource {
10+
createScaffold(preset?: Partial<UmbFolderModel>): Promise<UmbDataSourceResponse<UmbFolderModel>>;
1011
create(args: UmbCreateFolderModel): Promise<UmbDataSourceResponse<UmbFolderModel>>;
1112
read(unique: string): Promise<UmbDataSourceResponse<UmbFolderModel>>;
1213
update(args: UmbUpdateFolderModel): Promise<UmbDataSourceResponse<UmbFolderModel>>;

src/packages/core/tree/folder/folder-repository-base.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import { UmbRepositoryBase } from '../../repository/repository-base.js';
22
import type { UmbFolderRepository } from './folder-repository.interface.js';
33
import type { UmbFolderDataSource, UmbFolderDataSourceConstructor } from './folder-data-source.interface.js';
4-
import type { UmbCreateFolderModel, UmbUpdateFolderModel } from './types.js';
4+
import type { UmbFolderModel } from './types.js';
55
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
6-
import { UmbId } from '@umbraco-cms/backoffice/id';
76
import type { UmbNotificationContext } from '@umbraco-cms/backoffice/notification';
87
import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification';
98

@@ -24,17 +23,13 @@ export abstract class UmbFolderRepositoryBase extends UmbRepositoryBase implemen
2423
}
2524

2625
/**
27-
* Creates a scaffold for a folder
26+
* Creates a scaffold
27+
* @param {Partial<UmbFolderModel>} [preset]
2828
* @returns {*}
2929
* @memberof UmbFolderRepositoryBase
3030
*/
31-
async createScaffold() {
32-
const scaffold = {
33-
unique: UmbId.new(),
34-
name: '',
35-
};
36-
37-
return { data: scaffold };
31+
async createScaffold(preset?: Partial<UmbFolderModel>) {
32+
return this.#folderDataSource.createScaffold(preset);
3833
}
3934

4035
/**
@@ -44,7 +39,7 @@ export abstract class UmbFolderRepositoryBase extends UmbRepositoryBase implemen
4439
* @memberof UmbFolderRepositoryBase
4540
*/
4641
async create(args: UmbCreateFolderModel) {
47-
if (args.parentUnique === undefined) throw new Error('Parent unique is missing');
42+
if (args.parent === undefined) throw new Error('Parent unique is missing');
4843
if (!args.name) throw new Error('Name is missing');
4944
await this._init;
5045

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import type { UmbCreateFolderModel, UmbFolderModel, UmbUpdateFolderModel } from './types.js';
2-
import type { UmbDataSourceResponse, UmbDataSourceErrorResponse } from '@umbraco-cms/backoffice/repository';
1+
import type { UmbFolderModel } from './types.js';
2+
import type { UmbRepositoryErrorResponse, UmbRepositoryResponse } from '@umbraco-cms/backoffice/repository';
33
import type { UmbApi } from '@umbraco-cms/backoffice/extension-api';
44
export interface UmbFolderRepository extends UmbApi {
5-
createScaffold(): Promise<UmbDataSourceResponse<UmbFolderModel>>;
6-
create(args: UmbCreateFolderModel): Promise<UmbDataSourceResponse<UmbFolderModel>>;
7-
request(unique: string): Promise<UmbDataSourceResponse<UmbFolderModel>>;
8-
update(args: UmbUpdateFolderModel): Promise<UmbDataSourceResponse<UmbFolderModel>>;
9-
delete(unique: string): Promise<UmbDataSourceErrorResponse>;
5+
createScaffold(preset?: Partial<UmbFolderModel>): Promise<UmbRepositoryResponse<UmbFolderModel>>;
6+
create(data: UmbFolderModel, parentUnique: string | null): Promise<UmbRepositoryResponse<UmbFolderModel>>;
7+
request(unique: string): Promise<UmbRepositoryResponse<UmbFolderModel>>;
8+
update(data: UmbFolderModel): Promise<UmbRepositoryResponse<UmbFolderModel>>;
9+
delete(unique: string): Promise<UmbRepositoryErrorResponse>;
1010
}

src/packages/core/tree/folder/modal/folder-create-modal.element.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export class UmbFolderCreateModalElement extends UmbFolderModalElementBase<
3737

3838
const createFolderModel: UmbCreateFolderModel = {
3939
...this._folderScaffold,
40-
parentUnique: this.data.parent.unique,
40+
parent: this.data.parent,
4141
name,
4242
};
4343

src/packages/core/tree/folder/types.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,3 @@ import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity';
33
export interface UmbFolderModel extends UmbEntityModel {
44
name: string;
55
}
6-
7-
export interface UmbCreateFolderModel {
8-
unique: string;
9-
parentUnique: string | null;
10-
parent: UmbEntityModel;
11-
name: string;
12-
}
13-
14-
export interface UmbUpdateFolderModel {
15-
unique: string;
16-
name: string;
17-
}

src/packages/data-type/tree/folder/data-type-folder.server.data-source.ts

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
import { UMB_DATA_TYPE_FOLDER_ENTITY_TYPE } from '../../entity.js';
2-
import type { UmbCreateFolderModel, UmbFolderDataSource, UmbUpdateFolderModel } from '@umbraco-cms/backoffice/tree';
2+
import type {
3+
UmbCreateFolderModel,
4+
UmbFolderDataSource,
5+
UmbFolderModel,
6+
UmbUpdateFolderModel,
7+
} from '@umbraco-cms/backoffice/tree';
38
import { DataTypeService } from '@umbraco-cms/backoffice/external/backend-api';
49
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
510
import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';
11+
import { UmbId } from '@umbraco-cms/backoffice/id';
612

713
/**
814
* A data source for a Data Type folder that fetches data from the server
@@ -21,6 +27,23 @@ export class UmbDataTypeFolderServerDataSource implements UmbFolderDataSource {
2127
this.#host = host;
2228
}
2329

30+
/**
31+
* Creates a scaffold for a Data Type folder
32+
* @param {Partial<UmbFolderModel>} [preset]
33+
* @returns {*}
34+
* @memberof UmbDataTypeFolderServerDataSource
35+
*/
36+
async createScaffold(preset?: Partial<UmbFolderModel>) {
37+
const scaffold: UmbFolderModel = {
38+
entityType: UMB_DATA_TYPE_FOLDER_ENTITY_TYPE,
39+
unique: UmbId.new(),
40+
name: '',
41+
...preset,
42+
};
43+
44+
return { data: scaffold };
45+
}
46+
2447
/**
2548
* Fetches a Data Type folder from the server
2649
* @param {string} unique
@@ -57,12 +80,12 @@ export class UmbDataTypeFolderServerDataSource implements UmbFolderDataSource {
5780
* @memberof UmbDataTypeFolderServerDataSource
5881
*/
5982
async create(args: UmbCreateFolderModel) {
60-
if (args.parentUnique === undefined) throw new Error('Parent unique is missing');
83+
if (args.parent === undefined) throw new Error('Parent unique is missing');
6184
if (!args.name) throw new Error('Name is missing');
6285

6386
const requestBody = {
6487
id: args.unique,
65-
parent: args.parentUnique ? { id: args.parentUnique } : null,
88+
parent: args.parent ? { id: args.parent.unique } : null,
6689
name: args.name,
6790
};
6891

src/packages/documents/document-blueprints/tree/folder/document-blueprint-folder.server.data-source.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
import { UMB_DOCUMENT_BLUEPRINT_FOLDER_ENTITY_TYPE } from '../../entity.js';
2-
import type { UmbCreateFolderModel, UmbFolderDataSource, UmbUpdateFolderModel } from '@umbraco-cms/backoffice/tree';
2+
import type {
3+
UmbCreateFolderModel,
4+
UmbFolderDataSource,
5+
UmbFolderModel,
6+
UmbUpdateFolderModel,
7+
} from '@umbraco-cms/backoffice/tree';
38
import { DocumentBlueprintService } from '@umbraco-cms/backoffice/external/backend-api';
49
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
510
import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';
11+
import { UmbId } from '@umbraco-cms/backoffice/id';
612

713
/**
814
* A data source for a Document Blueprint folder that fetches data from the server
@@ -21,6 +27,23 @@ export class UmbDocumentBlueprintFolderServerDataSource implements UmbFolderData
2127
this.#host = host;
2228
}
2329

30+
/**
31+
* Creates a scaffold for a Document Blueprint folder
32+
* @param {Partial<UmbFolderModel>} [preset]
33+
* @returns {*}
34+
* @memberof UmbDocumentBlueprintFolderServerDataSource
35+
*/
36+
async createScaffold(preset?: Partial<UmbFolderModel>) {
37+
const scaffold: UmbFolderModel = {
38+
entityType: UMB_DOCUMENT_BLUEPRINT_FOLDER_ENTITY_TYPE,
39+
unique: UmbId.new(),
40+
name: '',
41+
...preset,
42+
};
43+
44+
return { data: scaffold };
45+
}
46+
2447
/**
2548
* Fetches a Document Blueprint folder from the server
2649
* @param {string} unique

src/packages/documents/document-types/tree/folder/document-type-folder.server.data-source.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
import { UMB_DOCUMENT_TYPE_FOLDER_ENTITY_TYPE } from '../../entity.js';
2-
import type { UmbCreateFolderModel, UmbFolderDataSource, UmbUpdateFolderModel } from '@umbraco-cms/backoffice/tree';
2+
import type {
3+
UmbCreateFolderModel,
4+
UmbFolderDataSource,
5+
UmbFolderModel,
6+
UmbUpdateFolderModel,
7+
} from '@umbraco-cms/backoffice/tree';
38
import { DocumentTypeService } from '@umbraco-cms/backoffice/external/backend-api';
49
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
510
import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';
11+
import { UmbId } from '@umbraco-cms/backoffice/id';
612

713
/**
814
* A data source for a Document Type folder that fetches data from the server
@@ -21,6 +27,23 @@ export class UmbDocumentTypeFolderServerDataSource implements UmbFolderDataSourc
2127
this.#host = host;
2228
}
2329

30+
/**
31+
* Creates a scaffold for a Document Type folder
32+
* @param {Partial<UmbFolderModel>} [preset]
33+
* @returns {*}
34+
* @memberof UmbDocumentTypeFolderServerDataSource
35+
*/
36+
async createScaffold(preset?: Partial<UmbFolderModel>) {
37+
const scaffold: UmbFolderModel = {
38+
entityType: UMB_DOCUMENT_TYPE_FOLDER_ENTITY_TYPE,
39+
unique: UmbId.new(),
40+
name: '',
41+
...preset,
42+
};
43+
44+
return { data: scaffold };
45+
}
46+
2447
/**
2548
* Fetches a Document Type folder from the server
2649
* @param {string} unique
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import { UMB_DOCUMENT_TYPE_FOLDER_ENTITY_TYPE } from '../../../entity.js';
2+
import type { UmbDocumentTypeFolderRepository } from '../document-type-folder.repository.js';
3+
import { UMB_DOCUMENT_TYPE_FOLDER_WORKSPACE_ALIAS } from './constants.js';
4+
import { UmbFolderWorkspaceEditorElement } from './folder-editor.element.js';
5+
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
6+
import {
7+
UmbEntityDetailWorkspaceContextBase,
8+
type UmbRoutableWorkspaceContext,
9+
type UmbSubmittableWorkspaceContext,
10+
UmbWorkspaceIsNewRedirectController,
11+
} from '@umbraco-cms/backoffice/workspace';
12+
import type { IRoutingInfo, PageComponent } from '@umbraco-cms/backoffice/router';
13+
import type { UmbFolderModel } from '@umbraco-cms/backoffice/tree';
14+
15+
export class UmbScriptWorkspaceContext
16+
extends UmbEntityDetailWorkspaceContextBase<UmbFolderModel, UmbDocumentTypeFolderRepository>
17+
implements UmbSubmittableWorkspaceContext, UmbRoutableWorkspaceContext
18+
{
19+
public readonly data = this._data.current;
20+
public readonly unique = this._data.createObservablePartOfCurrent((data) => data?.unique);
21+
public readonly entityType = this._data.createObservablePartOfCurrent((data) => data?.entityType);
22+
public readonly name = this._data.createObservablePartOfCurrent((data) => data?.name);
23+
24+
constructor(host: UmbControllerHost) {
25+
super(host, {
26+
workspaceAlias: UMB_DOCUMENT_TYPE_FOLDER_WORKSPACE_ALIAS,
27+
entityType: UMB_DOCUMENT_TYPE_FOLDER_ENTITY_TYPE,
28+
detailRepositoryAlias: 'Umb.Repository.DocumentType.Folder',
29+
});
30+
31+
this.routes.setRoutes([
32+
{
33+
path: 'create/parent/:entityType/:parentUnique',
34+
component: UmbFolderWorkspaceEditorElement,
35+
setup: async (component: PageComponent, info: IRoutingInfo) => {
36+
const parentEntityType = info.match.params.entityType;
37+
const parentUnique = info.match.params.parentUnique === 'null' ? null : info.match.params.parentUnique;
38+
this.createScaffold({ parent: { entityType: parentEntityType, unique: parentUnique } });
39+
40+
new UmbWorkspaceIsNewRedirectController(
41+
this,
42+
this,
43+
this.getHostElement().shadowRoot!.querySelector('umb-router-slot')!,
44+
);
45+
},
46+
},
47+
{
48+
path: 'edit/:unique',
49+
component: UmbFolderWorkspaceEditorElement,
50+
setup: (component: PageComponent, info: IRoutingInfo) => {
51+
const unique = info.match.params.unique;
52+
this.load(unique);
53+
},
54+
},
55+
]);
56+
}
57+
58+
/**
59+
* @description Set the name of the script
60+
* @param {string} value
61+
* @memberof UmbScriptWorkspaceContext
62+
*/
63+
public setName(value: string) {
64+
this._data.updateCurrent({ name: value });
65+
}
66+
}
67+
68+
export { UmbScriptWorkspaceContext as api };
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { css, html, customElement } from '@umbraco-cms/backoffice/external/lit';
2+
import { UmbLitElement, umbFocus } from '@umbraco-cms/backoffice/lit-element';
3+
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
4+
5+
const elementName = 'umb-folder-workspace-editor';
6+
@customElement(elementName)
7+
export class UmbFolderWorkspaceEditorElement extends UmbLitElement {
8+
override render() {
9+
return html`<umb-workspace-editor alias="Umb.Workspace.DocumentType.Folder">
10+
<div id="header" slot="header">
11+
<uui-input label="Folder name" value="" ${umbFocus()}></uui-input>
12+
</div>
13+
</umb-workspace-editor>`;
14+
}
15+
16+
static override styles = [UmbTextStyles, css``];
17+
}
18+
19+
export { UmbFolderWorkspaceEditorElement as element };
20+
21+
declare global {
22+
interface HTMLElementTagNameMap {
23+
[elementName]: UmbFolderWorkspaceEditorElement;
24+
}
25+
}

0 commit comments

Comments
 (0)