Skip to content

Commit 7648cb4

Browse files
committed
fix(nx-flutter): restrict ios-language flag to plugin templates only
1 parent 96a78b5 commit 7648cb4

File tree

3 files changed

+105
-80
lines changed

3 files changed

+105
-80
lines changed

packages/nx-flutter/src/generators/project/generator.spec.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ describe('application generator', () => {
116116
async ({ template }) => {
117117
await projectGenerator(tree, { ...options, template: template });
118118

119-
if (['app', 'plugin'].includes(template)) {
119+
if (template === 'plugin') {
120120
expect(logger.info).toHaveBeenNthCalledWith(
121121
1,
122122
'⚙️ Generating project configuration...'
@@ -129,6 +129,19 @@ describe('application generator', () => {
129129
3,
130130
`Executing command: flutter create --project-name=${options.name} --android-language=kotlin --ios-language=swift --template=${template} --platforms="android,ios,web,linux,windows,macos" ${options.name}`
131131
);
132+
} else if (template === 'app') {
133+
expect(logger.info).toHaveBeenNthCalledWith(
134+
1,
135+
'⚙️ Generating project configuration...'
136+
);
137+
expect(logger.info).toHaveBeenNthCalledWith(
138+
2,
139+
`Generating Flutter project with following options : --project-name=${options.name} --android-language=kotlin --template=${template} --platforms="android,ios,web,linux,windows,macos" ...`
140+
);
141+
expect(logger.info).toHaveBeenNthCalledWith(
142+
3,
143+
`Executing command: flutter create --project-name=${options.name} --android-language=kotlin --template=${template} --platforms="android,ios,web,linux,windows,macos" ${options.name}`
144+
);
132145
} else {
133146
expect(logger.info).toHaveBeenNthCalledWith(
134147
1,

packages/nx-flutter/src/generators/project/lib/prompt-additional-options.ts

Lines changed: 87 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -13,84 +13,93 @@ type PromptResultType = {
1313
iosLanguage?: IosLanguageType;
1414
};
1515

16-
export async function promptAdditionalOptions(tree: Tree, options: NormalizedSchema) {
17-
if (process.env.NX_INTERACTIVE === 'true' && ['app', 'plugin'].includes(options.template)) {
18-
19-
await prompt([
16+
export async function promptAdditionalOptions(
17+
tree: Tree,
18+
options: NormalizedSchema
19+
) {
20+
if (
21+
process.env.NX_INTERACTIVE === 'true' &&
22+
['app', 'plugin'].includes(options.template)
23+
) {
24+
await prompt([
25+
{
26+
name: 'platforms',
27+
type: 'multiselect',
28+
choices: [
29+
{
30+
name: 'android',
31+
value: 'Android platform',
32+
},
33+
{
34+
name: 'ios',
35+
value: 'iOS platform',
36+
},
37+
{
38+
name: 'linux',
39+
value: 'Linux platform',
40+
},
41+
{
42+
name: 'windows',
43+
value: 'Windows platform',
44+
},
2045
{
21-
name: 'platforms',
22-
type: 'multiselect',
23-
choices: [
24-
{
25-
name: "android",
26-
value: "Android platform",
27-
},
28-
{
29-
name: "ios",
30-
value: "iOS platform",
31-
},
32-
{
33-
name: "linux",
34-
value: "Linux platform",
35-
},
36-
{
37-
name: "windows",
38-
value: "Windows platform",
39-
},
40-
{
41-
name: "macos",
42-
value: "MacOS platform",
43-
},
44-
{
45-
name: "web",
46-
value: "Web platform",
47-
}
48-
],
49-
validate: (platforms) => {
50-
return platforms?.length ? true : 'You must select at least one platform'
46+
name: 'macos',
47+
value: 'MacOS platform',
48+
},
49+
{
50+
name: 'web',
51+
value: 'Web platform',
52+
},
53+
],
54+
validate: (platforms) => {
55+
return platforms?.length
56+
? true
57+
: 'You must select at least one platform';
58+
},
59+
message: 'Which platforms would you like to use?',
60+
},
61+
]).then(async (result: Partial<PromptResultType>) => {
62+
const languages: Partial<PromptResultType> = await prompt([
63+
{
64+
skip: () => result.platforms?.indexOf('android') === -1,
65+
name: 'androidLanguage',
66+
type: 'select',
67+
initial: 1,
68+
choices: [
69+
{
70+
name: 'java',
71+
value: 'Java',
5172
},
52-
message: 'Which platforms would you like to use?'
53-
}]).then(async (result: Partial<PromptResultType>) => {
54-
55-
const languages: Partial<PromptResultType> = await prompt([
56-
{
57-
skip: () => result.platforms?.indexOf('android') === -1,
58-
name: 'androidLanguage',
59-
type: 'select',
60-
initial: 1,
61-
choices: [
62-
{
63-
name: "java",
64-
value: "Java"
65-
},
66-
{
67-
name: "kotlin",
68-
value: "Kotlin"
69-
}
70-
],
71-
message: "Which Android language would you like to use?",
72-
},
73-
{
74-
skip: () => result.platforms?.indexOf('ios') === -1,
75-
name: 'iosLanguage',
76-
type: 'select',
77-
initial: 1,
78-
choices: [
79-
{
80-
name: "objc",
81-
value: "Objective-C"
82-
},
83-
{
84-
name: "swift",
85-
value: "Swift"
86-
}
87-
],
88-
message: "Which iOS language would you like to use?",
89-
}
90-
]);
91-
options.platforms = result?.platforms;
92-
options.androidLanguage = languages?.androidLanguage;
93-
options.iosLanguage = languages?.iosLanguage;
94-
});
95-
}
73+
{
74+
name: 'kotlin',
75+
value: 'Kotlin',
76+
},
77+
],
78+
message: 'Which Android language would you like to use?',
79+
},
80+
{
81+
skip: () =>
82+
result.platforms?.indexOf('ios') === -1 ||
83+
options.template !== 'plugin',
84+
name: 'iosLanguage',
85+
type: 'select',
86+
initial: 1,
87+
choices: [
88+
{
89+
name: 'objc',
90+
value: 'Objective-C',
91+
},
92+
{
93+
name: 'swift',
94+
value: 'Swift',
95+
},
96+
],
97+
message: 'Which iOS language would you like to use?',
98+
},
99+
]);
100+
options.platforms = result?.platforms;
101+
options.androidLanguage = languages?.androidLanguage;
102+
options.iosLanguage = languages?.iosLanguage;
103+
});
104+
}
96105
}

packages/nx-flutter/src/utils/flutter-utils.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,10 @@ export function buildFlutterCreateOptions(options: NormalizedSchema) {
3636
{ key: 'org', value: options.org },
3737
{ key: 'description', value: quote(options.description) },
3838
{ key: 'android-language', value: options.androidLanguage },
39-
{ key: 'ios-language', value: options.iosLanguage },
39+
{
40+
key: 'ios-language',
41+
value: options.template === 'plugin' ? options.iosLanguage : null,
42+
},
4043
{ key: 'template', value: options.template },
4144
{ key: 'sample', value: options.sample },
4245
{

0 commit comments

Comments
 (0)