Skip to content

Commit

Permalink
feat: ask to use recommended template (#564)
Browse files Browse the repository at this point in the history
## Summary

This is an effort to implement a recommended template. See the [Golden
Template
RFC](react-native-community/discussions-and-proposals#721)
for context.

This adds a new parameter called `--with-recommended-options` and the
corresponding question to the CLI.
Here's how the CLI prompt looks like:
![Screenshot 2024-06-12 at 17 07
18](https://github.com/callstack/react-native-builder-bob/assets/23079646/9567f352-2e46-4073-a5b6-f30f1d97b49d)

This also adds the text `(Recommended)` at the end of the recommended
options (View + Module with backward compats and Kotlin + Obj-c at the
moment).

## Test plan

### A. Happy Path

1. Run `create-react-native-library` and answer the mail address, git
repo, etc. questions.
2. Make sure the CLI asks `Do you want to customize the library type and
languages?`.
3. Select `Use recommended defaults`.
4. Wait until the library is generated and make sure the library is a
view + module, kotlin + objective-c library.

### B. Pick Customize

1. Run `create-react-native-library` and answer the mail address, git
repo, etc. questions.
2. Make sure the CLI asks `Do you want to customize the library type and
languages?`.
3. Select `Customize`.
4. Make sure the `Fabric view and Turbo module with backward compat`
option has the `(Recommended)` text.

### C. Pass `--with-recommended-options`

1. Run `create-react-native-library` with `--with-recommended-options`
parameter.
2. Make sure the library doesn't ask you about library or type
selection.
3. Make sure the generated library uses the golden template.

### D. Pass `--with-recommended-options` with bad parameters

1. Run `create-react-native-library` with `--with-recommended-options`
and `--type module-view-new`.
2. Make sure it emits an error.

---------

Co-authored-by: Satyajit Sahoo <[email protected]>
  • Loading branch information
atlj and satya164 authored Jun 20, 2024
1 parent a75cf32 commit 71f3874
Showing 1 changed file with 64 additions and 4 deletions.
68 changes: 64 additions & 4 deletions packages/create-react-native-library/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,8 @@ type ArgName =
| 'type'
| 'local'
| 'example'
| 'react-native-version';
| 'react-native-version'
| 'with-recommended-options';

type ProjectLanguages = 'kotlin-objc' | 'kotlin-swift' | 'cpp' | 'js';

Expand All @@ -140,6 +141,7 @@ type Answers = {
type?: ProjectType;
example?: boolean;
reactNativeVersion?: string;
withRecommendedOptions?: boolean;
};

const LANGUAGE_CHOICES: {
Expand All @@ -148,7 +150,7 @@ const LANGUAGE_CHOICES: {
types: ProjectType[];
}[] = [
{
title: 'Kotlin & Objective-C',
title: `Kotlin & Objective-C`,
value: 'kotlin-objc',
types: ['view-module-legacy', 'view-module-mixed', 'view-module-new'],
},
Expand Down Expand Up @@ -219,6 +221,16 @@ const TYPE_CHOICES: {
},
];

const RECOMMENDED_TEMPLATE: {
type: ProjectType;
languages: ProjectLanguages;
description: string;
} = {
type: 'view-module-mixed',
languages: 'kotlin-objc',
description: `Backward compatible Fabric view & Turbo module with Kotlin & Objective-C`,
};

const args: Record<ArgName, yargs.Options> = {
'slug': {
description: 'Name of the npm package',
Expand Down Expand Up @@ -265,6 +277,10 @@ const args: Record<ArgName, yargs.Options> = {
type: 'boolean',
default: true,
},
'with-recommended-options': {
description: `Whether to use the recommended template. ${RECOMMENDED_TEMPLATE.description}`,
type: 'boolean',
},
};

// FIXME: fix the type
Expand Down Expand Up @@ -432,24 +448,68 @@ async function create(argv: yargs.Arguments<any>) {
},
validate: (input) => /^https?:\/\//.test(input) || 'Must be a valid URL',
},
'with-recommended-options': {
type: 'select',
name: 'withRecommendedOptions',
message: 'Do you want to customize the library type and languages?',
choices: [
{
title: 'Use recommended defaults',
value: true,
description: RECOMMENDED_TEMPLATE.description,
},
{
title: 'Customize',
value: false,
},
],
},
'type': {
type: 'select',
name: 'type',
message: 'What type of library do you want to develop?',
choices: TYPE_CHOICES,
choices: (_, values) => {
if (values.withRecommendedOptions) {
return TYPE_CHOICES.filter(
(choice) => choice.value === RECOMMENDED_TEMPLATE.type
);
}

return TYPE_CHOICES.map((choice) =>
choice.value === RECOMMENDED_TEMPLATE.type
? {
...choice,
title: `${choice.title} ${kleur.yellow('(Recommended)')}`,
}
: choice
);
},
},
'languages': {
type: 'select',
name: 'languages',
message: 'Which languages do you want to use?',
choices: (_, values) => {
if (values.withRecommendedOptions) {
return LANGUAGE_CHOICES.filter((choice) => {
return choice.value === RECOMMENDED_TEMPLATE.languages;
});
}

return LANGUAGE_CHOICES.filter((choice) => {
if (choice.types) {
return choice.types.includes(values.type);
}

return true;
});
}).map((choice) =>
choice.value === RECOMMENDED_TEMPLATE.languages
? {
...choice,
title: `${choice.title} ${kleur.yellow('(Recommended)')}`,
}
: choice
);
},
},
};
Expand Down

0 comments on commit 71f3874

Please sign in to comment.