import { Resolver } from '../Entity';
import { config, dataTypesMap, Entity, Enum, View, LEVEL_ENUM, utils } from '../..';
import { NameGroup, filterProperty, getExpression, getParamFromResolver, genEnumSelectBlock, genCallComponentLogic, genCallInterface } from '.';
export function genGetTemplate(entity: Entity, nameGroup: NameGroup) {
const propertyList = entity.propertyList
.filter(filterProperty('inDetail'));
return `
${propertyList.map((property) => {
let formItem = ` `;
if (dataTypesMap[property.typeKey].type === 'enum')
formItem += '';
else
formItem += '';
formItem += ` \n`;
return formItem;
}).join('')}
`;
}
function genLoadLogic(resolver: Resolver, nameGroup: NameGroup) {
const resSchema = {
$ref: `#/${resolver.entity.dataNode.service.id}/${resolver.entity.id}`,
};
const idParam = getParamFromResolver(resolver, 'id');
return {
level: 'logic',
expanded: false,
name: nameGroup.load,
description: '',
params: [] as any,
returns: [] as any,
body: [
{
level: 'logicNode',
type: 'Start',
label: '开始',
}, {
level: 'logicNode',
type: 'AssignmentExpression',
label: '赋值',
operator: '=',
left: {
level: 'expressionNode',
type: 'Identifier',
name: nameGroup.model,
},
right: genCallInterface(resolver.interface, [
{
parentAttr: 'params',
level: LEVEL_ENUM.param,
type: 'CallInterParam',
name: '',
callInterParam: `#/${idParam.id}`,
callInterParamValue: {
parentAttr: 'callInterParamValue',
level: 'expressionNode',
type: 'Identifier',
name: 'id',
},
},
]),
},
{
level: 'logicNode',
type: 'End',
label: '结束',
},
],
playground: [] as any,
serviceType: 'web',
};
}
export function genH5GetTemplate(entity: Entity, nameGroup: NameGroup) {
const propertyList = entity.propertyList
.filter(filterProperty('inDetail'));
return `
${propertyList.map((property) => {
let formItem = ` ';
else
formItem += ' :value="' + getExpression(property, `${nameGroup.model}.${property.name}`) + '">';
formItem += ` \n`;
return formItem;
}).join('')}
`;
}
export function genGetBlock(entity: Entity, view: View) {
const resolver = entity.resolvers.find((item) => item.name.startsWith('get') && !item.name.startsWith('getAll'));
const modelSchema = {
$ref: resolver.entity.schemaRef,
};
const existingNameSets = {
viewLogic: new Set(view.$def.logics.map((logic) => logic.name)),
};
const nameGroup: NameGroup = {
model: utils.firstLowerCase(resolver.entity.name),
};
nameGroup.load = utils.unique('load', existingNameSets.viewLogic);
return `
${config.scope === 'h5' ? genH5GetTemplate(entity, nameGroup) : genGetTemplate(entity, nameGroup)}
{
"params": [
{
"level": "param",
"type": "Identifier",
"name": "id",
"description": "",
"schema": {
"type": "integer",
"format": "long",
"isLeaf": true
},
"isLeaf": true,
"init": {
"type": "Identifier",
"name": "undefined"
}
}
],
"variables": [{
"level": "variable",
"type": "Identifier",
"name": "${nameGroup.model}",
"schema": ${JSON.stringify(modelSchema)}
}],
"lifecycles": [
{
"level": "lifecycle",
"name": "created",
"logicId": "${nameGroup.load}"
}
],
"logics": [
${JSON.stringify(genLoadLogic(resolver, nameGroup))}
]
}
`;
}
export default genGetBlock;