mirror of
https://github.com/strapi/strapi.git
synced 2025-06-27 00:41:25 +00:00
83 lines
2.1 KiB
JavaScript
83 lines
2.1 KiB
JavaScript
'use strict';
|
|
|
|
const { join } = require('path');
|
|
const { flow, camelCase, upperFirst, lowerCase } = require('lodash');
|
|
const fileExistsInPackages = require('../utils/fileExistsInPackages');
|
|
const getPluginList = require('../utils/getPluginList');
|
|
const packagesFolder = require('../utils/packagesFolder');
|
|
|
|
const pascalCase = flow(camelCase, upperFirst);
|
|
|
|
const prompts = [
|
|
{
|
|
type: 'list',
|
|
name: 'plugin',
|
|
message: 'Which plugin should be targeted?',
|
|
choices: getPluginList,
|
|
},
|
|
{
|
|
type: 'input',
|
|
name: 'name',
|
|
message: 'What should be the name of the component?',
|
|
async validate(name, answers) {
|
|
if (!name) {
|
|
return 'The name cannot be empty.';
|
|
}
|
|
|
|
return (await fileExistsInPackages(`${answers.plugin}/admin/src/components/${name}`))
|
|
? 'This component already exists.'
|
|
: true;
|
|
},
|
|
filter: pascalCase,
|
|
},
|
|
{
|
|
type: 'confirm',
|
|
name: 'styled',
|
|
message: 'Is this a styled component?',
|
|
},
|
|
{
|
|
type: 'input',
|
|
name: 'htmlTag',
|
|
message: 'Which HTML tag should be used as a base?',
|
|
when: answers => answers.styled,
|
|
validate: htmlTag => (!htmlTag ? 'The HTML tag cannot be empty.' : true),
|
|
filter: lowerCase,
|
|
},
|
|
{
|
|
type: 'confirm',
|
|
name: 'useI18n',
|
|
message: 'Will it use i18n?',
|
|
when: answers => !answers.styled,
|
|
},
|
|
{
|
|
type: 'confirm',
|
|
name: 'useRedux',
|
|
message: 'Will it use Redux?',
|
|
when: answers => !answers.styled,
|
|
},
|
|
];
|
|
|
|
const actions = answers => {
|
|
const { useRedux } = answers;
|
|
const [pluginFolder, plugin] = answers.plugin.split('/');
|
|
answers.plugin = plugin;
|
|
const templatesFolder = 'component/templates';
|
|
const pattern = useRedux ? '**/**.hbs' : '**/index.*.hbs';
|
|
const path = join(packagesFolder, pluginFolder, '{{plugin}}/admin/src/components/{{name}}');
|
|
return [
|
|
{
|
|
type: 'addMany',
|
|
destination: path,
|
|
templateFiles: [`${templatesFolder}/${pattern}`],
|
|
base: templatesFolder,
|
|
},
|
|
// TODO: If redux will be used then 'append' created reducer inside 'reducers.js'
|
|
{
|
|
type: 'lint',
|
|
files: [path],
|
|
},
|
|
];
|
|
};
|
|
|
|
module.exports = { prompts, actions };
|