const api = (plop) => { plop.setGenerator('api', { description: 'Создает апи', prompts: [ { type: 'list', name: 'apiType', message: 'Какой тип запроса?', choices: [ { name: 'Запрос списка (fetchNames)', value: 'fetchList', }, { name: 'Запрос по id (fetchNameById)', value: 'fetchById', }, { name: 'Создание слайса (createName)', value: 'create', }, { name: 'Обновление слайса (updateName)', value: 'update', }, { name: 'Удаление слайса (deleteName)', value: 'delete', }, ], }, { type: 'list', name: 'layerName', message: 'В какой слой положить?', choices: [ { name: 'entities', value: 'entities', }, { name: 'features', value: 'features', }, { name: 'widgets', value: 'widgets', }, ], }, { type: 'input', name: 'sliceName', message: 'В какой слайс?', }, ], actions: (data) => { let actionList = []; switch (data.apiType) { case 'fetchList': actionList = [ { type: 'add', path: '../src/{{layerName}}/{{sliceName}}/api/fetch{{sliceName}}s.ts', templateFile: './templates/api/fetchApi.hbs', }, { type: 'add', path: '../src/{{layerName}}/{{sliceName}}/lib/query/useFetch{{sliceName}}s.tsx', templateFile: './templates/query/fetchQuery.hbs', }, ]; break; case 'fetchById': actionList = [ { type: 'add', path: '../src/{{layerName}}/{{sliceName}}/api/fetch{{sliceName}}ById.ts', templateFile: './templates/api/fetchByIdApi.hbs', }, { type: 'add', path: '../src/{{layerName}}/{{sliceName}}/lib/query/useFetch{{sliceName}}ById.tsx', templateFile: './templates/query/fetchByIdQuery.hbs', }, ]; break; case 'create': actionList = [ { type: 'add', path: '../src/{{layerName}}/{{sliceName}}/api/create{{sliceName}}.ts', templateFile: './templates/api/createApi.hbs', }, { type: 'add', path: '../src/{{layerName}}/{{sliceName}}/lib/query/useCreate{{sliceName}}.tsx', templateFile: './templates/query/createQuery.hbs', }, ]; break; case 'update': actionList = [ { type: 'add', path: '../src/{{layerName}}/{{sliceName}}/api/update{{sliceName}}.ts', templateFile: './templates/api/updateApi.hbs', }, { type: 'add', path: '../src/{{layerName}}/{{sliceName}}/lib/query/useUpdate{{sliceName}}.tsx', templateFile: './templates/query/updateQuery.hbs', }, ]; break; case 'delete': actionList = [ { type: 'add', path: '../src/{{layerName}}/{{sliceName}}/api/delete{{sliceName}}.ts', templateFile: './templates/api/deleteApi.hbs', }, { type: 'add', path: '../src/{{layerName}}/{{sliceName}}/lib/query/useDelete{{sliceName}}.tsx', templateFile: './templates/query/deleteQuery.hbs', }, ]; break; default: console.log('Нет такого типа'); break; } return actionList; }, }); }; module.exports = api;