scripts handlers & data
This commit is contained in:
committed by
Jacob Overgaard
parent
96c277e513
commit
ad977e5191
@@ -1,6 +1,7 @@
|
||||
import { UmbEntityData } from './entity.data.js';
|
||||
import { createFileSystemTreeItem, createTextFileItem } from './utils.js';
|
||||
import {
|
||||
CreatePathFolderRequestModel,
|
||||
CreateTextFileViewModelBaseModel,
|
||||
FileSystemTreeItemPresentationModel,
|
||||
PagedFileSystemTreeItemPresentationModel,
|
||||
@@ -12,7 +13,7 @@ import {
|
||||
|
||||
type ScriptsDataItem = ScriptResponseModel & FileSystemTreeItemPresentationModel & { id: string };
|
||||
|
||||
export const treeData: Array<ScriptsDataItem> = [
|
||||
export const data: Array<ScriptsDataItem> = [
|
||||
{
|
||||
id: 'some-folder',
|
||||
path: 'some-folder',
|
||||
@@ -124,7 +125,7 @@ export const treeData: Array<ScriptsDataItem> = [
|
||||
|
||||
class UmbScriptsTreeData extends UmbEntityData<FileSystemTreeItemPresentationModel> {
|
||||
constructor() {
|
||||
super(treeData);
|
||||
super(data);
|
||||
}
|
||||
|
||||
getTreeRoot(): PagedFileSystemTreeItemPresentationModel {
|
||||
@@ -147,18 +148,47 @@ class UmbScriptsTreeData extends UmbEntityData<FileSystemTreeItemPresentationMod
|
||||
}
|
||||
}
|
||||
|
||||
class UmbScriptsFolderData extends UmbEntityData<ScriptResponseModel> {
|
||||
constructor() {
|
||||
super(data);
|
||||
}
|
||||
|
||||
getFolder(path: string): FileSystemTreeItemPresentationModel {
|
||||
const items = data.filter((item) => item.isFolder && item.path === path);
|
||||
const total = items.length;
|
||||
return items as FileSystemTreeItemPresentationModel;
|
||||
}
|
||||
|
||||
postFolder(payload: CreatePathFolderRequestModel) {
|
||||
const newFolder = {
|
||||
id: `${payload.parentPath ?? ''}/${payload.name}`,
|
||||
path: `${payload.parentPath ?? ''}/${payload.name}`,
|
||||
isFolder: true,
|
||||
name: payload.name,
|
||||
type: 'script',
|
||||
hasChildren: false,
|
||||
};
|
||||
return this.insert(newFolder);
|
||||
}
|
||||
|
||||
deleteFolder(path: string) {
|
||||
return this.delete([path]);
|
||||
}
|
||||
}
|
||||
|
||||
export const umbScriptsTreeData = new UmbScriptsTreeData();
|
||||
export const umbScriptsFolderData = new UmbScriptsFolderData();
|
||||
|
||||
class UmbScriptsData extends UmbEntityData<ScriptResponseModel> {
|
||||
constructor() {
|
||||
super(treeData);
|
||||
super(data);
|
||||
}
|
||||
|
||||
getPartialView(path: string): PartialViewResponseModel | undefined {
|
||||
getScript(path: string): ScriptResponseModel | undefined {
|
||||
return createTextFileItem(this.data.find((item) => item.path === path));
|
||||
}
|
||||
|
||||
insertPartialView(item: CreateTextFileViewModelBaseModel) {
|
||||
insertScript(item: CreateTextFileViewModelBaseModel) {
|
||||
const newItem: ScriptsDataItem = {
|
||||
...item,
|
||||
path: `${item.parentPath}/${item.name}.js}`,
|
||||
@@ -173,4 +203,4 @@ class UmbScriptsData extends UmbEntityData<ScriptResponseModel> {
|
||||
}
|
||||
}
|
||||
|
||||
export const umbPartialViewsData = new UmbScriptsData();
|
||||
export const umbScriptsData = new UmbScriptsData();
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
const { rest } = window.MockServiceWorker;
|
||||
import { RestHandler, MockedRequest, DefaultBodyType } from 'msw';
|
||||
import { umbracoPath } from '@umbraco-cms/backoffice/utils';
|
||||
import { CreatePathFolderRequestModel, CreateTextFileViewModelBaseModel } from '@umbraco-cms/backoffice/backend-api';
|
||||
import { umbScriptsTreeData, umbScriptsData, umbScriptsFolderData } from '../data/scripts.data.js';
|
||||
|
||||
const treeHandlers = [
|
||||
rest.get(umbracoPath('/tree/script/root'), (req, res, ctx) => {
|
||||
const response = umbScriptsTreeData.getTreeRoot();
|
||||
return res(ctx.status(200), ctx.json(response));
|
||||
}),
|
||||
|
||||
rest.get(umbracoPath('/tree/script/children'), (req, res, ctx) => {
|
||||
const path = req.url.searchParams.get('path');
|
||||
if (!path) return;
|
||||
|
||||
const response = umbScriptsTreeData.getTreeItemChildren(path);
|
||||
return res(ctx.status(200), ctx.json(response));
|
||||
}),
|
||||
|
||||
rest.get(umbracoPath('/tree/script/item'), (req, res, ctx) => {
|
||||
const paths = req.url.searchParams.getAll('paths');
|
||||
if (!paths) return;
|
||||
|
||||
const items = umbScriptsTreeData.getTreeItem(paths);
|
||||
return res(ctx.status(200), ctx.json(items));
|
||||
}),
|
||||
];
|
||||
|
||||
const detailHandlers: RestHandler<MockedRequest<DefaultBodyType>>[] = [
|
||||
rest.get(umbracoPath('/script'), (req, res, ctx) => {
|
||||
const path = decodeURIComponent(req.url.searchParams.get('path') ?? '').replace('-js', '.js');
|
||||
if (!path) return res(ctx.status(400));
|
||||
const response = umbScriptsData.getScript(path);
|
||||
return res(ctx.status(200), ctx.json(response));
|
||||
}),
|
||||
|
||||
rest.post(umbracoPath('/script'), (req, res, ctx) => {
|
||||
const requestBody = req.json() as CreateTextFileViewModelBaseModel;
|
||||
if (!requestBody) return res(ctx.status(400, 'no body found'));
|
||||
const response = umbScriptsData.insertScript(requestBody);
|
||||
return res(ctx.status(200), ctx.json(response));
|
||||
}),
|
||||
|
||||
rest.delete(umbracoPath('/script'), (req, res, ctx) => {
|
||||
const path = req.url.searchParams.get('path');
|
||||
if (!path) return res(ctx.status(400));
|
||||
const response = umbScriptsData.delete([path]);
|
||||
return res(ctx.status(200), ctx.json(response));
|
||||
}),
|
||||
rest.put(umbracoPath('/script'), (req, res, ctx) => {
|
||||
const requestBody = req.json() as CreateTextFileViewModelBaseModel;
|
||||
if (!requestBody) return res(ctx.status(400, 'no body found'));
|
||||
const response = umbScriptsData.updateData(requestBody);
|
||||
return res(ctx.status(200));
|
||||
}),
|
||||
];
|
||||
|
||||
const folderHandlers: RestHandler<MockedRequest<DefaultBodyType>>[] = [
|
||||
rest.get(umbracoPath('script/folder'), (req, res, ctx) => {
|
||||
const path = decodeURIComponent(req.url.searchParams.get('path') ?? '').replace('-js', '.js');
|
||||
if (!path) return res(ctx.status(400));
|
||||
const response = umbScriptsFolderData.getFolder(path);
|
||||
return res(ctx.status(200), ctx.json(response));
|
||||
}),
|
||||
rest.post(umbracoPath('script/folder'), (req, res, ctx) => {
|
||||
const requestBody = req.json() as CreatePathFolderRequestModel;
|
||||
if (!requestBody) return res(ctx.status(400, 'no body found'));
|
||||
const response = umbScriptsFolderData.postFolder(requestBody);
|
||||
return res(ctx.status(200));
|
||||
}),
|
||||
rest.delete(umbracoPath('script/folder'), (req, res, ctx) => {
|
||||
const path = decodeURIComponent(req.url.searchParams.get('path') ?? '').replace('-js', '.js');
|
||||
if (!path) return res(ctx.status(400));
|
||||
const response = umbScriptsFolderData.deleteFolder(path);
|
||||
return res(ctx.status(200), ctx.json(response));
|
||||
}),
|
||||
];
|
||||
|
||||
export const handlers = [...treeHandlers, ...detailHandlers, ...folderHandlers];
|
||||
Reference in New Issue
Block a user