feat(command): update default commands

This commit is contained in:
liujuping 2024-01-30 14:19:30 +08:00 committed by 林熠
parent ed7befbff0
commit 80bb7102b6
2 changed files with 35 additions and 13 deletions

View File

@ -10,10 +10,7 @@ const sampleNodeSchema: IPublicTypePropType = {
value: [ value: [
{ {
name: 'id', name: 'id',
propType: { propType: 'string',
type: 'string',
isRequired: true,
},
}, },
{ {
name: 'componentName', name: 'componentName',
@ -277,10 +274,12 @@ export const nodeCommand = (ctx: IPublicModelPluginContext) => {
handler: (param: { handler: (param: {
parentNodeId: string; parentNodeId: string;
nodeSchema: IPublicTypeNodeSchema; nodeSchema: IPublicTypeNodeSchema;
index: number;
}) => { }) => {
const { const {
parentNodeId, parentNodeId,
nodeSchema, nodeSchema,
index,
} = param; } = param;
const { project } = ctx; const { project } = ctx;
const parentNode = project.currentDocument?.getNodeById(parentNodeId); const parentNode = project.currentDocument?.getNodeById(parentNodeId);
@ -296,7 +295,11 @@ export const nodeCommand = (ctx: IPublicModelPluginContext) => {
throw new Error('Invalid node.'); throw new Error('Invalid node.');
} }
project.currentDocument?.insertNode(parentNode, nodeSchema); if (index < 0 || index > (parentNode.children?.size || 0)) {
throw new Error(`Invalid index '${index}'.`);
}
project.currentDocument?.insertNode(parentNode, nodeSchema, index);
}, },
parameters: [ parameters: [
{ {
@ -309,6 +312,11 @@ export const nodeCommand = (ctx: IPublicModelPluginContext) => {
propType: nodeSchemaPropType, propType: nodeSchemaPropType,
description: 'The node to be added.', description: 'The node to be added.',
}, },
{
name: 'index',
propType: 'number',
description: 'The index of the node to be added.',
},
], ],
}); });
@ -326,6 +334,14 @@ export const nodeCommand = (ctx: IPublicModelPluginContext) => {
index = 0, index = 0,
} = param; } = param;
if (!nodeId) {
throw new Error('Invalid node id.');
}
if (!targetNodeId) {
throw new Error('Invalid target node id.');
}
const node = project.currentDocument?.getNodeById(nodeId); const node = project.currentDocument?.getNodeById(nodeId);
const targetNode = project.currentDocument?.getNodeById(targetNodeId); const targetNode = project.currentDocument?.getNodeById(targetNodeId);
if (!node) { if (!node) {
@ -350,12 +366,18 @@ export const nodeCommand = (ctx: IPublicModelPluginContext) => {
parameters: [ parameters: [
{ {
name: 'nodeId', name: 'nodeId',
propType: 'string', propType: {
type: 'string',
isRequired: true,
},
description: 'The id of the node to be moved.', description: 'The id of the node to be moved.',
}, },
{ {
name: 'targetNodeId', name: 'targetNodeId',
propType: 'string', propType: {
type: 'string',
isRequired: true,
},
description: 'The id of the target node.', description: 'The id of the target node.',
}, },
{ {
@ -393,8 +415,8 @@ export const nodeCommand = (ctx: IPublicModelPluginContext) => {
}); });
command.registerCommand({ command.registerCommand({
name: 'replace', name: 'update',
description: 'Replace a node with another node.', description: 'Update a node.',
handler(param: { handler(param: {
nodeId: string; nodeId: string;
nodeSchema: IPublicTypeNodeSchema; nodeSchema: IPublicTypeNodeSchema;
@ -419,12 +441,12 @@ export const nodeCommand = (ctx: IPublicModelPluginContext) => {
{ {
name: 'nodeId', name: 'nodeId',
propType: 'string', propType: 'string',
description: 'The id of the node to be replaced.', description: 'The id of the node to be updated.',
}, },
{ {
name: 'nodeSchema', name: 'nodeSchema',
propType: nodeSchemaPropType, propType: nodeSchemaPropType,
description: 'The node to replace.', description: 'The node to be updated.',
}, },
], ],
}); });

View File

@ -15,12 +15,12 @@ export interface IPublicApiCommand {
/** /**
* *
*/ */
executeCommand(name: string, args: IPublicTypeCommandHandlerArgs): void; executeCommand(name: string, args?: IPublicTypeCommandHandlerArgs): void;
/** /**
* *
*/ */
batchExecuteCommand(commands: { name: string; args: IPublicTypeCommandHandlerArgs }[]): void; batchExecuteCommand(commands: { name: string; args?: IPublicTypeCommandHandlerArgs }[]): void;
/** /**
* *