Skip to content

Commit

Permalink
Merge pull request #7 from Omar-Belghaouti/chore/dry-utils
Browse files Browse the repository at this point in the history
Chore: DRY utilities
  • Loading branch information
omdxp authored May 13, 2022
2 parents 7c0ac19 + fffb4af commit d24d922
Show file tree
Hide file tree
Showing 8 changed files with 64 additions and 33 deletions.
12 changes: 2 additions & 10 deletions bin/create/component/functions/create-component.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const {
componentTemplateTs,
stylesTemplate,
} = require("../templates");
const { config } = require("../../../utils");
const { config, getComponentName } = require("../../../utils");

/**
* @function createComponent
Expand All @@ -26,15 +26,7 @@ exports.createComponent = (
overwrite
) => {
const { withStyles, withProps, defaultExports, componentsRoot } = config;
let component =
componentName.charAt(0).toUpperCase() + componentName.slice(1);
if (componentName.includes("-")) {
component = "";
let words = componentName.split("-");
words.forEach((w) => {
component += w.charAt(0).toUpperCase() + w.slice(1);
});
}
let component = getComponentName(componentName);
if (ts) {
const path =
folder === ""
Expand Down
1 change: 0 additions & 1 deletion bin/create/redux/functions/create-redux-store.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ const { config } = require("../../../utils");
*/
exports.createReduxStore = (js, ts, overwrite) => {
const { reduxRoot } = config;

const path = `${reduxRoot}/`;
if (fs.existsSync(path) && !overwrite) {
console.log("Redux implementation already exists");
Expand Down
15 changes: 4 additions & 11 deletions bin/create/screen/functions/create-screen.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const {
screenFunctionTemplateTs,
stylesTemplate,
} = require("../templates");
const { config } = require("../../../utils");
const { config, getComponentName } = require("../../../utils");

/**
* @function createScreen
Expand All @@ -22,14 +22,7 @@ const { config } = require("../../../utils");
exports.createScreen = (screenName, js, ts, folder, template, overwrite) => {
const { withStyles, withFunctions, withProps, defaultExports, screensRoot } =
config;
let screen = screenName.charAt(0).toUpperCase() + screenName.slice(1);
if (screenName.includes("-")) {
screen = "";
let words = screenName.split("-");
words.forEach((w) => {
screen += w.charAt(0).toUpperCase() + w.slice(1);
});
}
let screen = getComponentName(screenName);
const path =
folder === ""
? `${screensRoot}/${screenName.toLowerCase()}/`
Expand All @@ -50,7 +43,7 @@ exports.createScreen = (screenName, js, ts, folder, template, overwrite) => {
});
fs.writeFile(
`${path}index.tsx`,
file.replace(/__COMPONENT__/g, page),
file.replace(/__COMPONENT__/g, screen),
(err) => {
if (err) {
console.log(`Unable to create ${screen} screen`);
Expand Down Expand Up @@ -130,7 +123,7 @@ exports.createScreen = (screenName, js, ts, folder, template, overwrite) => {
});
fs.writeFile(
`${path}index.jsx`,
file.replace(/__COMPONENT__/g, page),
file.replace(/__COMPONENT__/g, screen),
(err) => {
if (err) {
console.log(`Unable to create ${screen} screen`);
Expand Down
16 changes: 5 additions & 11 deletions bin/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const {
deleteConfig,
} = require("./delete");
const { combineComponents, combineScreens } = require("./combine");
const { loadConfig } = require("./utils");
const { loadConfig, rootChecker, languageChecker } = require("./utils");

yargs
.scriptName("rnhc")
Expand Down Expand Up @@ -83,7 +83,7 @@ yargs
});
},
(argv) => {
if (fs.existsSync("package.json")) {
if (rootChecker()) {
let {
component,
screen,
Expand All @@ -100,13 +100,7 @@ yargs
loadConfig();
} catch {}
// check if project is written in typescript
let faf = fs.readdirSync("."); // folders and files
for (let i = 0; i < faf.length; i++) {
if (faf[i].endsWith("tsx")) {
ts = true;
break;
}
}
ts = languageChecker() === "ts" ? true : ts;
if (component) {
component.forEach((c) =>
createComponent(c, js, ts, folder, template, overwrite)
Expand Down Expand Up @@ -170,7 +164,7 @@ yargs
});
},
(argv) => {
if (fs.existsSync("package.json")) {
if (rootChecker()) {
const { component, screen, redux, navigation, config, folder } = argv;
try {
loadConfig();
Expand Down Expand Up @@ -222,7 +216,7 @@ yargs
});
},
(argv) => {
if (fs.existsSync("package.json")) {
if (rootChecker()) {
const { component, screen, folder } = argv;
try {
loadConfig();
Expand Down
19 changes: 19 additions & 0 deletions bin/utils/get-component-name.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/**
* @function getComponentName
* @description Get the name of the component
* @param {string} name - name of component.
* @example getComponentName("component-name");
* @returns {string} "ComponentName"
* @author [Omar Belghaouti](https://github.com/Omar-Belghaouti)
*/
exports.getComponentName = (name) => {
let component = name.charAt(0).toUpperCase() + name.slice(1);
if (name.includes("-")) {
component = "";
let words = name.split("-");
words.forEach((w) => {
component += w.charAt(0).toUpperCase() + w.slice(1);
});
}
return component;
};
6 changes: 6 additions & 0 deletions bin/utils/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
const { config } = require("./configs");
const { loadConfig } = require("./load-config");
const { rootChecker } = require("./root-checker");
const { languageChecker } = require("./language-checker");
const { getComponentName } = require("./get-component-name");

exports.config = config;
exports.loadConfig = loadConfig;
exports.rootChecker = rootChecker;
exports.languageChecker = languageChecker;
exports.getComponentName = getComponentName;
17 changes: 17 additions & 0 deletions bin/utils/language-checker.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
const fs = require("file-system");

/**
* @function languageChecker
* @description Checks if the react project is written in javascript or typescript.
* @returns {string} "js" if the project is written in javascript and "ts" if the project is written in typescript.
* @author [Omar Belghaouti](https://github.com/Omar-Belghaouti)
*/
exports.languageChecker = () => {
let faf = fs.readdirSync("."); // folders and files
for (let i = 0; i < faf.length; i++) {
if (faf[i].endsWith("tsx")) {
return "ts";
}
}
return "js";
};
11 changes: 11 additions & 0 deletions bin/utils/root-checker.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
const fs = require("file-system");

/**
* @function rootChecker
* @description Check if the current directory is the root of a react project.
* @returns {boolean} true if the current directory is the root of a react project.
* @author [Omar Belghaouti](https://github.com/Omar-Belghaouti)
*/
exports.rootChecker = () => {
return fs.existsSync("package.json");
};

0 comments on commit d24d922

Please sign in to comment.