Skip to content
This repository has been archived by the owner on Jan 13, 2023. It is now read-only.

Commit

Permalink
fix(generators): Fix navigation generator (#240 by @bryanstearns)
Browse files Browse the repository at this point in the history
  • Loading branch information
bryanstearns authored and jamonholmgren committed Aug 17, 2019
1 parent ed47368 commit 3dc9ba5
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 43 deletions.
92 changes: 49 additions & 43 deletions commands/generate/navigator.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ module.exports = {
}

// grab the closest package.json
const packageJSON = await require("read-pkg-up")()
const { package: packageJSON } = await require("read-pkg-up")()
if (!packageJSON) {
print.error(`Can't find a package.json here or in parent directories.`)
return
Expand All @@ -58,54 +58,60 @@ module.exports = {
const pascalName = pascalCase(navigatorName)
const camelName = camelCase(navigatorName)

const askForNavigatorType = {
type: "select",
name: "navigatorType",
message: "What type of navigator do you want to create?",
initial: "Stack",
choices: Object.keys(navigatorTypes),
}

const { navigatorType } = await ask(askForNavigatorType)

// get a list of current screens
const allKebabScreens = list(`${process.cwd()}/app/screens/`)
const allPascalScreens = allKebabScreens.map(s => pascalCase(s))
let pascalScreens = []

// ask which screens to include in navigator
if (allKebabScreens) {
const askForScreens = {
type: "multiselect",
name: "screens",
message: "What screens would you like to import to the navigator?",
choices: allPascalScreens,
// what navigator type to generate?
let navigatorType = parameters.options["type"]
if (!navigatorType) {
const askForNavigatorType = {
type: "select",
name: "navigatorType",
message: "What type of navigator do you want to create?",
initial: "Stack",
choices: Object.keys(navigatorTypes),
}

const result = await ask(askForScreens)
pascalScreens = result.screens
const result = await ask(askForNavigatorType)
navigatorType = result.navigatorType
}

// get a list of current screens
const allKebabNavigators = list(`${process.cwd()}/app/navigation/`).filter(
n => n.includes("-navigator.") && !n.includes("stateful-") && !n.includes("root-"),
)
const allPascalNavigators = allKebabNavigators.map(s =>
pascalCase(s.replace(".tsx", "").replace(".ts", "")),
)
let pascalNavigators = []

// ask which screens to include in navigator
if (allKebabNavigators) {
const askForNavigators = {
type: "multiselect",
name: "screens",
message: "What other navigators would you like to import to the navigator?",
choices: allPascalNavigators,
// which screens to include in the new navigator?
let pascalScreens = parameters.options["screens"] && parameters.options["screens"].split(",")
if (!pascalScreens) {
const allKebabScreens = list(`${process.cwd()}/app/screens/`)
const allPascalScreens = allKebabScreens.map(s => pascalCase(s))

if (allKebabScreens) {
const askForScreens = {
type: "multiselect",
name: "screens",
message: "What screens would you like to import to the navigator?",
choices: allPascalScreens,
}

pascalScreens = await ask(askForScreens).screens
}
}

const result = await ask(askForNavigators)
pascalNavigators = result.screens
// which screens to include in navigator?
let pascalNavigators =
parameters.options["navigators"] && parameters.options["navigators"].split(",")
if (!pascalNavigators) {
const allKebabNavigators = list(`${process.cwd()}/app/navigation/`).filter(
n => n.includes("-navigator.") && !n.includes("stateful-") && !n.includes("root-"),
)
const allPascalNavigators = allKebabNavigators.map(s =>
pascalCase(s.replace(".tsx", "").replace(".ts", "")),
)

if (allPascalNavigators) {
const askForNavigators = {
type: "multiselect",
name: "navigators",
message: "What other navigators would you like to import to the navigator?",
choices: allPascalNavigators,
}

pascalNavigators = await ask(askForNavigators).navigators
}
}

const props = {
Expand Down
22 changes: 22 additions & 0 deletions test/generators-integration.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,26 @@ describe("a generated app", () => {
const lint = await execa("npm", ["-s", "run", "lint"])
expect(lint.stderr).toBe("")
})

test("generates navigation", async () => {
const simpleNavigation = "test"
await execa(
IGNITE,
[
"g",
"navigator",
"test",
"--type",
"Stack",
"--screens",
"DemoScreen,WelcomeScreen",
"--navigators",
"PrimaryNavigator",
],
{ preferLocal: false },
)
expect(jetpack.exists(`app/navigation/${simpleNavigation}-navigator.ts`)).toBe("file")
const lint = await execa("npm", ["-s", "run", "lint"])
expect(lint.stderr).toBe("")
})
})

0 comments on commit 3dc9ba5

Please sign in to comment.