diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/partial-views.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/partial-views.data.ts index 2088f3efbc..184b23cbd9 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/partial-views.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/partial-views.data.ts @@ -1,6 +1,7 @@ import { UmbEntityData } from './entity.data.js'; -import { createFileSystemTreeItem } from './utils.js'; +import { createFileSystemTreeItem, createTextFileItem } from './utils.js'; import { + CreateTextFileViewModelBaseModel, FileSystemTreeItemPresentationModel, PagedFileSystemTreeItemPresentationModel, PartialViewResponseModel, @@ -8,10 +9,11 @@ import { SnippetItemResponseModel, } from '@umbraco-cms/backoffice/backend-api'; -type PartialViewsDataItem = PartialViewResponseModel & FileSystemTreeItemPresentationModel; +type PartialViewsDataItem = PartialViewResponseModel & FileSystemTreeItemPresentationModel & { id: string }; export const treeData: Array = [ { + id: 'blockgrid', path: 'blockgrid', isFolder: true, name: 'blockgrid', @@ -19,6 +21,7 @@ export const treeData: Array = [ hasChildren: true, }, { + id: 'blocklist', path: 'blocklist', isFolder: true, name: 'blocklist', @@ -26,6 +29,7 @@ export const treeData: Array = [ hasChildren: true, }, { + id: 'grid', path: 'grid', isFolder: true, name: 'grid', @@ -33,6 +37,7 @@ export const treeData: Array = [ hasChildren: true, }, { + id: 'blockgrid/area.cshtml', path: 'blockgrid/area.cshtml', isFolder: false, name: 'area.cshtml', @@ -51,6 +56,7 @@ export const treeData: Array = [ `, }, { + id: 'blockgrid/items.cshtml', path: 'blockgrid/items.cshtml', isFolder: false, name: 'items.cshtml', @@ -59,6 +65,7 @@ export const treeData: Array = [ content: '@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage', }, { + id: 'blocklist/default.cshtml', path: 'blocklist/default.cshtml', isFolder: false, name: 'default.cshtml', @@ -78,7 +85,8 @@ export const treeData: Array = [ `, }, { - path: 'grid/editors', + id: 'grid/embed.cshtm', + path: 'grid/embed.cshtm', isFolder: false, name: 'embed.cshtml', type: 'partial-view', @@ -97,6 +105,7 @@ export const treeData: Array = [ `, }, { + id: 'grid/default.cshtml', path: 'grid/default.cshtml', isFolder: false, name: 'items.cshtml', @@ -341,4 +350,30 @@ class UmbPartialViewSnippetsData extends UmbEntityData } } -export const umbPartialViewSnippetsData = new UmbPartialViewSnippetsData(); \ No newline at end of file +class UmbPartialViewsData extends UmbEntityData { + constructor() { + super(treeData); + } + + getPartialView(path: string): PartialViewResponseModel | undefined { + debugger; + return createTextFileItem(this.data.find((item) => item.path === path)); + } + + insertPartialView(item: CreateTextFileViewModelBaseModel) { + const newItem: PartialViewsDataItem = { + ...item, + path: `${item.parentPath}/${item.name}.cshtml}`, + id: `${item.parentPath}/${item.name}.cshtml}`, + isFolder: false, + hasChildren: false, + type: 'partial-view', + }; + + this.insert(newItem); + return newItem; + } +} + +export const umbPartialViewSnippetsData = new UmbPartialViewSnippetsData(); +export const umbPartialViewsData = new UmbPartialViewsData(); \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/utils.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/utils.ts index 272efad196..df924c2e71 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/utils.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/utils.ts @@ -7,6 +7,7 @@ import type { DocumentTypeResponseModel, FileSystemTreeItemPresentationModel, DocumentResponseModel, + TextFileResponseModelBaseModel, } from '@umbraco-cms/backoffice/backend-api'; export const createEntityTreeItem = (item: any): EntityTreeItemResponseModel => { @@ -73,3 +74,9 @@ export const createFileSystemTreeItem = (item: any): FileSystemTreeItemPresentat isFolder: item.isFolder, }; }; + +export const createTextFileItem = (item: any): TextFileResponseModelBaseModel => ({ + path: item.path, + name: item.name, + content: item.content, +}); diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/partial-views.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/partial-views.handlers.ts index 9c91bca140..4adb4b0f09 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/partial-views.handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/partial-views.handlers.ts @@ -1,7 +1,8 @@ const { rest } = window.MockServiceWorker; import { RestHandler, MockedRequest, DefaultBodyType } from 'msw'; -import { umbPartialViewsTreeData } from '../data/partial-views.data.js'; +import { umbPartialViewsData, umbPartialViewsTreeData } from '../data/partial-views.data.js'; import { umbracoPath } from '@umbraco-cms/backoffice/utils'; +import { CreateTextFileViewModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; const treeHandlers = [ rest.get(umbracoPath('/tree/partial-view/root'), (req, res, ctx) => { @@ -26,7 +27,35 @@ const treeHandlers = [ }), ]; -const detailHandlers: RestHandler>[] = []; +const detailHandlers: RestHandler>[] = [ + rest.get(umbracoPath('/partial-view'), (req, res, ctx) => { + debugger; + const path = decodeURIComponent(req.url.searchParams.get('path') ?? '').replace('-cshtml', '.cshtml'); + if (!path) return res(ctx.status(400)); + const response = umbPartialViewsData.getPartialView(path); + return res(ctx.status(200), ctx.json(response)); + }), + + rest.post(umbracoPath('/partial-view'), (req, res, ctx) => { + const requestBody = req.json() as CreateTextFileViewModelBaseModel; + if (!requestBody) return res(ctx.status(400, 'no body found')); + const response = umbPartialViewsData.insertPartialView(requestBody); + return res(ctx.status(200), ctx.json(response)); + }), + + rest.delete(umbracoPath('/partial-view'), (req, res, ctx) => { + const path = req.url.searchParams.get('path'); + if (!path) return res(ctx.status(400)); + const response = umbPartialViewsData.delete([path]); + return res(ctx.status(200), ctx.json(response)); + }), + rest.put(umbracoPath('/partial-view'), (req, res, ctx) => { + const requestBody = req.json() as CreateTextFileViewModelBaseModel; + if (!requestBody) return res(ctx.status(400, 'no body found')); + const response = umbPartialViewsData.updateData(requestBody); + return res(ctx.status(200)); + }), +]; const folderHandlers: RestHandler>[] = []; export const handlers = [...treeHandlers, ...detailHandlers, ...folderHandlers] \ No newline at end of file