GitHostSetup: Simplify the entire process

We are now no longer shown an option to choose between an existing repo
or creating a new one. We just directly jump into choosing a hosting
provider.

I'm trying to optimize the git host setup for the happy path.
This commit is contained in:
Vishesh Handa
2019-02-13 22:45:44 +01:00
parent c5c4d44431
commit af8d30165f
2 changed files with 77 additions and 73 deletions

View File

@ -37,7 +37,9 @@ class GitHostSetupAutoConfigureState extends State<GitHostSetupAutoConfigure> {
GitRepo repo; GitRepo repo;
try { try {
// FIXME: What if repo already exists?
repo = await gitHost.createRepo("journal"); repo = await gitHost.createRepo("journal");
var publicKey = await generateSSHKeys(comment: "GitJournal"); var publicKey = await generateSSHKeys(comment: "GitJournal");
await gitHost.addDeployKey(publicKey, repo.fullName); await gitHost.addDeployKey(publicKey, repo.fullName);

View File

@ -25,17 +25,15 @@ class GitHostSetupScreen extends StatefulWidget {
} }
} }
enum PageChoice0 { Unknown, CreateRepo, UseExisting } enum PageChoice0 { Unknown, KnownProvider, CustomProvider }
enum PageChoice1 { None } enum PageChoice1 { Unknown, Manual, Auto }
enum PageChoice2 { Unknown, Manual, Auto }
class GitHostSetupScreenState extends State<GitHostSetupScreen> { class GitHostSetupScreenState extends State<GitHostSetupScreen> {
var _pageCount = 1; var _pageCount = 1;
var _pageChoice = [ var _pageChoice = [
PageChoice0.Unknown, PageChoice0.Unknown,
PageChoice1.None, PageChoice1.Unknown,
PageChoice2.Unknown,
]; ];
GitHostType _gitHostType = GitHostType.Unknown; GitHostType _gitHostType = GitHostType.Unknown;
@ -56,17 +54,18 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
assert(_pageCount >= 1); assert(_pageCount >= 1);
if (pos == 0) { if (pos == 0) {
return GitHostSetupInitialChoice( return GitHostChoicePage(
onCreateNewRepo: () { onKnownGitHost: (GitHostType gitHostType) {
setState(() { setState(() {
_pageChoice[0] = PageChoice0.CreateRepo; _gitHostType = gitHostType;
_pageChoice[0] = PageChoice0.KnownProvider;
_pageCount = pos + 2; _pageCount = pos + 2;
_nextPage(); _nextPage();
}); });
}, },
onExistingRepo: () { onCustomGitHost: () {
setState(() { setState(() {
_pageChoice[0] = PageChoice0.UseExisting; _pageChoice[0] = PageChoice0.CustomProvider;
_pageCount = pos + 2; _pageCount = pos + 2;
_nextPage(); _nextPage();
}); });
@ -77,18 +76,7 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
if (pos == 1) { if (pos == 1) {
assert(_pageChoice[0] != PageChoice0.Unknown); assert(_pageChoice[0] != PageChoice0.Unknown);
if (_pageChoice[0] == PageChoice0.CreateRepo) { if (_pageChoice[0] == PageChoice0.CustomProvider) {
return GitHostChoicePage(
onDone: (GitHostType gitHostType) {
setState(() {
_gitHostType = gitHostType;
_pageCount = pos + 2;
_nextPage();
});
},
);
} else if (_pageChoice[0] == PageChoice0.UseExisting) {
return GitCloneUrlPage(doneFunction: (String sshUrl) { return GitCloneUrlPage(doneFunction: (String sshUrl) {
setState(() { setState(() {
_gitCloneUrl = sshUrl; _gitCloneUrl = sshUrl;
@ -99,10 +87,30 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
}); });
}); });
} }
return GitHostAutoConfigureChoicePage(
onDone: (GitHostSetupType setupType) {
if (setupType == GitHostSetupType.Manual) {
setState(() {
_launchCreateRepoPage();
_pageCount = pos + 2;
_pageChoice[1] = PageChoice1.Manual;
_nextPage();
});
} else if (setupType == GitHostSetupType.Auto) {
setState(() {
_pageCount = pos + 2;
_pageChoice[1] = PageChoice1.Auto;
_nextPage();
});
}
},
);
} }
if (pos == 2) { if (pos == 2) {
if (_pageChoice[0] == PageChoice0.UseExisting) { if (_pageChoice[0] == PageChoice0.CustomProvider) {
return GitHostSetupSshKey( return GitHostSetupSshKey(
doneFunction: () { doneFunction: () {
setState(() { setState(() {
@ -118,33 +126,20 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
); );
} }
return GitHostAutoConfigureChoicePage( assert(_pageChoice[1] != PageChoice1.Unknown);
onDone: (GitHostSetupType setupType) {
if (setupType == GitHostSetupType.Manual) {
setState(() {
_launchCreateRepoPage();
_pageCount = pos + 2; if (_pageChoice[1] == PageChoice1.Manual) {
_pageChoice[2] = PageChoice2.Manual; // FIXME: Create a new page with better instructions
_nextPage(); return GitCloneUrlPage(doneFunction: (String sshUrl) {
});
} else if (setupType == GitHostSetupType.Auto) {
setState(() { setState(() {
_pageCount = pos + 2; _pageCount = pos + 2;
_pageChoice[2] = PageChoice2.Auto; _gitCloneUrl = sshUrl;
_nextPage(); _nextPage();
_generateSshKey();
}); });
} });
}, } else if (_pageChoice[1] == PageChoice1.Auto) {
);
}
if (pos == 3) {
if (_pageChoice[0] == PageChoice0.UseExisting) {
return GitHostSetupGitClone(errorMessage: gitCloneErrorMessage);
}
if (_pageChoice[2] == PageChoice2.Auto) {
return GitHostSetupAutoConfigure( return GitHostSetupAutoConfigure(
gitHostType: _gitHostType, gitHostType: _gitHostType,
onDone: (String gitCloneUrl) { onDone: (String gitCloneUrl) {
@ -157,27 +152,16 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
}); });
}, },
); );
} else if (_pageChoice[2] == PageChoice2.Manual) { }
return GitCloneUrlPage(doneFunction: (String sshUrl) {
setState(() {
_pageCount = pos + 2;
_gitCloneUrl = sshUrl;
_nextPage();
_generateSshKey();
});
});
} }
assert(false); if (pos == 3) {
} if (_pageChoice[0] == PageChoice0.CustomProvider) {
assert(_pageChoice[0] != PageChoice0.UseExisting);
if (pos == 4) {
if (_pageChoice[2] == PageChoice2.Auto) {
return GitHostSetupGitClone(errorMessage: gitCloneErrorMessage); return GitHostSetupGitClone(errorMessage: gitCloneErrorMessage);
} else if (_pageChoice[2] == PageChoice2.Manual) { }
if (_pageChoice[1] == PageChoice1.Manual) {
// FIXME: Create a new page with better instructions
return GitHostSetupSshKey( return GitHostSetupSshKey(
doneFunction: () { doneFunction: () {
setState(() { setState(() {
@ -192,13 +176,20 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
openDeployKeyPage: _launchDeployKeyPage, openDeployKeyPage: _launchDeployKeyPage,
canOpenDeployKeyPage: _canLaunchDeployKeyPage, canOpenDeployKeyPage: _canLaunchDeployKeyPage,
); );
} } else if (_pageChoice[1] == PageChoice1.Auto) {
return GitHostSetupGitClone(errorMessage: gitCloneErrorMessage);
} }
if (pos == 5) { assert(false);
assert(_pageChoice[2] == PageChoice2.Manual); }
assert(_pageChoice[0] != PageChoice0.CustomProvider);
if (pos == 4) {
if (_pageChoice[1] == PageChoice1.Manual) {
return GitHostSetupGitClone(errorMessage: gitCloneErrorMessage); return GitHostSetupGitClone(errorMessage: gitCloneErrorMessage);
} }
}
assert(false); assert(false);
return null; return null;
@ -455,9 +446,13 @@ class GitHostSetupInitialChoice extends StatelessWidget {
} }
class GitHostChoicePage extends StatelessWidget { class GitHostChoicePage extends StatelessWidget {
final Function onDone; final Function onKnownGitHost;
final Function onCustomGitHost;
GitHostChoicePage({@required this.onDone}); GitHostChoicePage({
@required this.onKnownGitHost,
@required this.onCustomGitHost,
});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -465,7 +460,7 @@ class GitHostChoicePage extends StatelessWidget {
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
Text( Text(
"Select a Git hosting provider -", "Select a Git Hosting Provider -",
style: Theme.of(context).textTheme.headline, style: Theme.of(context).textTheme.headline,
), ),
SizedBox(height: 16.0), SizedBox(height: 16.0),
@ -473,7 +468,7 @@ class GitHostChoicePage extends StatelessWidget {
text: "GitHub", text: "GitHub",
iconUrl: 'assets/icon/github-icon.png', iconUrl: 'assets/icon/github-icon.png',
onPressed: () { onPressed: () {
onDone(GitHostType.GitHub); onKnownGitHost(GitHostType.GitHub);
}, },
), ),
SizedBox(height: 8.0), SizedBox(height: 8.0),
@ -481,7 +476,14 @@ class GitHostChoicePage extends StatelessWidget {
text: "GitLab", text: "GitLab",
iconUrl: 'assets/icon/gitlab-icon.png', iconUrl: 'assets/icon/gitlab-icon.png',
onPressed: () async { onPressed: () async {
onDone(GitHostType.GitLab); onKnownGitHost(GitHostType.GitLab);
},
),
SizedBox(height: 8.0),
GitHostSetupButton(
text: "Custom",
onPressed: () async {
onCustomGitHost();
}, },
), ),
], ],