Skip to content

Commit b502121

Browse files
authored
Merge pull request #64 from shapkarin/issue_60
Define propTypes in propNames input (prop:type or prop:type*)
2 parents 39c8fcf + d5c2af3 commit b502121

File tree

4 files changed

+26
-7
lines changed

4 files changed

+26
-7
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ If you leave that empty generator creates folder with module name, and index.js
7070

7171
* `-f` Generate only file and use module as filename
7272

73+
#### Define propNames
74+
At "Prop names" question you can use "*" to mark as required `title*` and also you can define type `title:string` and sure you can write `title:string*`
75+
If you didn't define a type cli will ask you to choose it from the list.
7376

7477
---------------------------------------
7578

bin/initialize.js

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,14 +178,13 @@ program
178178
{
179179
type: 'input',
180180
name: 'propNames',
181-
message: 'Prop names (place "*" at the end each name that required)',
181+
message: 'Prop names',
182182
paginated: true,
183183
when: function(answer) {
184184
return answer.propTypes === 'yes';
185185
},
186186
validate: function(input) {
187187
let propNames = input.split(' ');
188-
numberOfPropTypes = propNames.length;
189188

190189
if (!checkDuplicates(propNames)) {
191190
return 'duplicate prop names';
@@ -217,6 +216,20 @@ program
217216
} else {
218217
let opts = [];
219218
let propNames = answers.propNames.split(' ');
219+
const withTypes = {};
220+
221+
for (prop of propNames){
222+
if(/:/.test(prop)){
223+
const [name, type, required] = prop.match(/^[a-z0-9]+|(?<=:).[a-z0-9]+|\*$/ig);
224+
const key = name + (required ? '*' : '');
225+
withTypes[key] = type
226+
}
227+
}
228+
229+
propNames = propNames.filter(function(prop) {
230+
return !/:/.test(prop);
231+
});
232+
numberOfPropTypes = propNames.length;
220233

221234
for (
222235
let count = 0;
@@ -241,11 +254,12 @@ program
241254
opts.push(propTypeChoice);
242255
}
243256
inquirer.prompt(opts).then(function(answersInner) {
257+
const __answersInner = {...withTypes, ...answersInner};
244258
generate.createComponent(
245259
modulename,
246260
name,
247261
answers,
248-
answersInner,
262+
__answersInner,
249263
options.file,
250264
function(status) {
251265
if (status) {

lib/generate.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,11 @@ generate.prototype.createModFile = function(_modFile, answersInner, componentNam
106106
* @param {string} componentName - component name
107107
*/
108108
generate.prototype.generatePropTypesSet = function(answersInner, componentName) {
109-
let __propTypes = {},
110-
match;
109+
let __propTypes = {};
111110

112111
for(let propName in answersInner) {
113-
match = propName.match(/^[a-z0-9]+|\*$/gi);
114-
__propTypes[match[0]] = `React.PropTypes.${answersInner[propName]}${match[1] ? '.isRequired' : ''}`;
112+
const [prop, required] = propName.match(/^[a-z0-9]+|\*$/gi);
113+
__propTypes[prop] = `React.PropTypes.${answersInner[propName]}${required ? '.isRequired' : ''}`;
115114
}
116115

117116
const _answersInner = JSON.stringify(__propTypes, null, 2);

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
"name": "react-scaffolder",
33
"version": "0.3.2",
44
"description": "Scaffolding tool for React",
5+
"engines": {
6+
"node": ">=5.12.0"
7+
},
58
"bin": {
69
"react": "./bin/initialize.js"
710
},

0 commit comments

Comments
 (0)