mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-29 02:07:39 +08:00
GitHostSetup: Simplify the code drastically
Also add an extra screen where it asks if we should set it up automatically. The code base is now in a much much more managable state and I feel comfortable adding more pages.
This commit is contained in:
@ -25,219 +25,165 @@ class GitHostSetupScreen extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class GitHostSetupScreenState extends State<GitHostSetupScreen> {
|
enum PageChoice0 { Unknown, CreateRepo, UseExisting }
|
||||||
var _createNewRepo = false;
|
enum PageChoice1 { None }
|
||||||
|
enum PageChoice2 { Unknown, Manual, Auto }
|
||||||
|
|
||||||
|
class GitHostSetupScreenState extends State<GitHostSetupScreen> {
|
||||||
|
var _pageCount = 1;
|
||||||
|
|
||||||
|
var _pageChoice = [
|
||||||
|
PageChoice0.Unknown,
|
||||||
|
PageChoice1.None,
|
||||||
|
PageChoice2.Unknown,
|
||||||
|
];
|
||||||
|
|
||||||
var _pageInitalScreenDone = false;
|
|
||||||
var _pageCreateNewRepoDone = false;
|
|
||||||
var _pageInputUrlDone = false;
|
|
||||||
var _pageSshKeyDone = false;
|
|
||||||
var _autoConfigureStarted = false;
|
|
||||||
var _autoConfigureDone = false;
|
|
||||||
GitHostType _gitHostType;
|
GitHostType _gitHostType;
|
||||||
|
|
||||||
var _gitCloneUrl = "";
|
var _gitCloneUrl = "";
|
||||||
String gitCloneErrorMessage = "";
|
String gitCloneErrorMessage = "";
|
||||||
|
|
||||||
|
String publicKey = "";
|
||||||
|
bool _canLaunchDeployKeyPage = false;
|
||||||
|
|
||||||
var pageController = PageController();
|
var pageController = PageController();
|
||||||
int _currentPageIndex = 0;
|
int _currentPageIndex = 0;
|
||||||
|
|
||||||
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
|
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
|
||||||
|
|
||||||
String publicKey = "";
|
Widget _buildPage(BuildContext context, int pos) {
|
||||||
bool _canLaunchDeployKeyPage = false;
|
print("_buildPage " + pos.toString());
|
||||||
|
assert(_pageCount >= 1);
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
var pageCount = 1;
|
|
||||||
if (_pageInitalScreenDone) {
|
|
||||||
pageCount = 2;
|
|
||||||
}
|
|
||||||
if (_pageCreateNewRepoDone) {
|
|
||||||
pageCount = 3;
|
|
||||||
}
|
|
||||||
if (_autoConfigureDone) {
|
|
||||||
pageCount = 4;
|
|
||||||
}
|
|
||||||
if (_pageInputUrlDone) {
|
|
||||||
pageCount++;
|
|
||||||
}
|
|
||||||
if (_pageSshKeyDone) {
|
|
||||||
pageCount++;
|
|
||||||
}
|
|
||||||
print("_pageInitalScreenDone: " + _pageInitalScreenDone.toString());
|
|
||||||
print("_pageCreateNewRepoDone: " + _pageCreateNewRepoDone.toString());
|
|
||||||
print("_autoConfigureDone: " + _autoConfigureDone.toString());
|
|
||||||
print("_pageInputUrlDone: " + _pageInputUrlDone.toString());
|
|
||||||
print("_pageSshKeyDone: " + _pageSshKeyDone.toString());
|
|
||||||
|
|
||||||
var pageView = PageView.builder(
|
|
||||||
controller: pageController,
|
|
||||||
itemBuilder: (BuildContext context, int pos) {
|
|
||||||
if (pos == 0) {
|
if (pos == 0) {
|
||||||
return GitHostSetupInitialChoice(
|
return GitHostSetupInitialChoice(
|
||||||
onCreateNewRepo: () {
|
onCreateNewRepo: () {
|
||||||
setState(() {
|
setState(() {
|
||||||
_createNewRepo = true;
|
_pageChoice[0] = PageChoice0.CreateRepo;
|
||||||
_pageInitalScreenDone = true;
|
_pageCount = 2;
|
||||||
|
_nextPage();
|
||||||
_autoConfigureStarted = false;
|
|
||||||
_autoConfigureDone = false;
|
|
||||||
_pageSshKeyDone = false;
|
|
||||||
|
|
||||||
pageController.nextPage(
|
|
||||||
duration: Duration(milliseconds: 200),
|
|
||||||
curve: Curves.easeIn,
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onExistingRepo: () {
|
onExistingRepo: () {
|
||||||
setState(() {
|
setState(() {
|
||||||
_createNewRepo = false;
|
_pageChoice[0] = PageChoice0.UseExisting;
|
||||||
_pageInitalScreenDone = true;
|
_pageCount = 2;
|
||||||
|
_nextPage();
|
||||||
_autoConfigureStarted = false;
|
|
||||||
_autoConfigureDone = false;
|
|
||||||
_pageSshKeyDone = false;
|
|
||||||
|
|
||||||
pageController.nextPage(
|
|
||||||
duration: Duration(milliseconds: 200),
|
|
||||||
curve: Curves.easeIn,
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_createNewRepo) {
|
|
||||||
if (pos == 1) {
|
if (pos == 1) {
|
||||||
return GitHostSetupCreateRepo(
|
assert(_pageChoice[0] != PageChoice0.Unknown);
|
||||||
onDone: (GitHostType gitHostType, bool autoConfigure) {
|
|
||||||
if (!autoConfigure) {
|
if (_pageChoice[0] == PageChoice0.CreateRepo) {
|
||||||
_launchCreateRepoPage(gitHostType);
|
return GitHostChoicePage(
|
||||||
|
onDone: (GitHostType gitHostType) {
|
||||||
|
setState(() {
|
||||||
|
_pageCount = 3;
|
||||||
|
_gitHostType = gitHostType;
|
||||||
|
_nextPage();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
} else if (_pageChoice[0] == PageChoice0.UseExisting) {
|
||||||
|
return GitHostSetupUrl(doneFunction: (String sshUrl) {
|
||||||
|
setState(() {
|
||||||
|
_pageCount = 3;
|
||||||
|
_gitCloneUrl = sshUrl;
|
||||||
|
|
||||||
|
_nextPage();
|
||||||
|
_generateSshKey();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pos == 2) {
|
||||||
|
if (_pageChoice[0] == PageChoice0.UseExisting) {
|
||||||
|
return GitHostSetupSshKey(
|
||||||
|
doneFunction: () {
|
||||||
setState(() {
|
setState(() {
|
||||||
_createNewRepo = true;
|
_pageCount = 4;
|
||||||
_pageCreateNewRepoDone = true;
|
|
||||||
_autoConfigureStarted = autoConfigure;
|
|
||||||
_autoConfigureDone = false;
|
|
||||||
_gitHostType = gitHostType;
|
|
||||||
|
|
||||||
pageController.nextPage(
|
_nextPage();
|
||||||
duration: Duration(milliseconds: 200),
|
_startGitClone(context);
|
||||||
curve: Curves.easeIn,
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
publicKey: publicKey,
|
||||||
|
copyKeyFunction: _copyKeyToClipboard,
|
||||||
|
openDeployKeyPage: _launchDeployKeyPage,
|
||||||
|
canOpenDeployKeyPage: _canLaunchDeployKeyPage,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return GitHostAutoConfigureChoicePage(
|
||||||
|
onDone: (GitHostSetupType setupType) {
|
||||||
|
if (setupType == GitHostSetupType.Manual) {
|
||||||
|
setState(() {
|
||||||
|
_pageCount = 4;
|
||||||
|
_pageChoice[2] = PageChoice2.Manual;
|
||||||
|
_nextPage();
|
||||||
|
});
|
||||||
|
} else if (setupType == GitHostSetupType.Auto) {
|
||||||
|
setState(() {
|
||||||
|
_pageCount = 4;
|
||||||
|
_pageChoice[2] = PageChoice2.Auto;
|
||||||
|
_nextPage();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_autoConfigureStarted) {
|
if (pos == 3) {
|
||||||
if (pos == 2) {
|
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) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_gitCloneUrl = gitCloneUrl;
|
_gitCloneUrl = gitCloneUrl;
|
||||||
_autoConfigureDone = true;
|
_pageCount = 5;
|
||||||
|
|
||||||
pageController.nextPage(
|
_nextPage();
|
||||||
duration: Duration(milliseconds: 200),
|
_startGitClone(context);
|
||||||
curve: Curves.easeIn,
|
|
||||||
);
|
|
||||||
|
|
||||||
var appState = StateContainer.of(context).appState;
|
|
||||||
_startGitClone(context, appState.gitBaseDirectory);
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
} else if (_pageChoice[2] == PageChoice2.Manual) {
|
||||||
|
|
||||||
if (pos == 3 && _autoConfigureDone) {
|
|
||||||
return GitHostSetupGitClone(errorMessage: gitCloneErrorMessage);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (pos == 2) {
|
|
||||||
return GitHostSetupUrl(doneFunction: (String sshUrl) {
|
return GitHostSetupUrl(doneFunction: (String sshUrl) {
|
||||||
setPageInputUrlDone();
|
setState(() {
|
||||||
pageController.nextPage(
|
_pageCount = 5;
|
||||||
duration: Duration(milliseconds: 200),
|
_gitCloneUrl = sshUrl;
|
||||||
curve: Curves.easeIn,
|
|
||||||
);
|
|
||||||
|
|
||||||
// We aren't calling setState as this isn't being used for rendering
|
_nextPage();
|
||||||
_gitCloneUrl = sshUrl.trim();
|
_generateSshKey();
|
||||||
|
});
|
||||||
this._generateSshKey();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pos == 3) {
|
assert(false);
|
||||||
return GitHostSetupSshKey(
|
|
||||||
doneFunction: () {
|
|
||||||
setPageSshKeyDone();
|
|
||||||
pageController.nextPage(
|
|
||||||
duration: Duration(milliseconds: 200),
|
|
||||||
curve: Curves.easeIn,
|
|
||||||
);
|
|
||||||
|
|
||||||
var appState = StateContainer.of(context).appState;
|
|
||||||
_startGitClone(context, appState.gitBaseDirectory);
|
|
||||||
|
|
||||||
getAnalytics().logEvent(
|
|
||||||
name: "onboarding_public_key_copied",
|
|
||||||
parameters: <String, dynamic>{},
|
|
||||||
);
|
|
||||||
},
|
|
||||||
publicKey: publicKey,
|
|
||||||
copyKeyFunction: _copyKeyToClipboard,
|
|
||||||
openDeployKeyPage: _launchDeployKeyPage,
|
|
||||||
canOpenDeployKeyPage: _canLaunchDeployKeyPage,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert(_pageChoice[0] != PageChoice0.UseExisting);
|
||||||
|
|
||||||
if (pos == 4) {
|
if (pos == 4) {
|
||||||
|
if (_pageChoice[2] == PageChoice2.Auto) {
|
||||||
return GitHostSetupGitClone(errorMessage: gitCloneErrorMessage);
|
return GitHostSetupGitClone(errorMessage: gitCloneErrorMessage);
|
||||||
}
|
} else if (_pageChoice[2] == PageChoice2.Manual) {
|
||||||
}
|
|
||||||
} // create new repo
|
|
||||||
|
|
||||||
if (pos == 1) {
|
|
||||||
return GitHostSetupUrl(doneFunction: (String sshUrl) {
|
|
||||||
setPageInputUrlDone();
|
|
||||||
pageController.nextPage(
|
|
||||||
duration: Duration(milliseconds: 200),
|
|
||||||
curve: Curves.easeIn,
|
|
||||||
);
|
|
||||||
|
|
||||||
// We aren't calling setState as this isn't being used for rendering
|
|
||||||
_gitCloneUrl = sshUrl.trim();
|
|
||||||
|
|
||||||
this._generateSshKey();
|
|
||||||
|
|
||||||
getAnalytics().logEvent(
|
|
||||||
name: "onboarding_git_url_enterred",
|
|
||||||
parameters: <String, dynamic>{},
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (pos == 2) {
|
|
||||||
return GitHostSetupSshKey(
|
return GitHostSetupSshKey(
|
||||||
doneFunction: () {
|
doneFunction: () {
|
||||||
setPageSshKeyDone();
|
setState(() {
|
||||||
pageController.nextPage(
|
_pageCount = 6;
|
||||||
duration: Duration(milliseconds: 200),
|
|
||||||
curve: Curves.easeIn,
|
|
||||||
);
|
|
||||||
|
|
||||||
var appState = StateContainer.of(context).appState;
|
_nextPage();
|
||||||
_startGitClone(context, appState.gitBaseDirectory);
|
_startGitClone(context);
|
||||||
|
});
|
||||||
getAnalytics().logEvent(
|
|
||||||
name: "onboarding_public_key_copied",
|
|
||||||
parameters: <String, dynamic>{},
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
publicKey: publicKey,
|
publicKey: publicKey,
|
||||||
copyKeyFunction: _copyKeyToClipboard,
|
copyKeyFunction: _copyKeyToClipboard,
|
||||||
@ -245,12 +191,26 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
|
|||||||
canOpenDeployKeyPage: _canLaunchDeployKeyPage,
|
canOpenDeployKeyPage: _canLaunchDeployKeyPage,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (pos == 3) {
|
if (pos == 5) {
|
||||||
|
assert(_pageChoice[2] == PageChoice2.Manual);
|
||||||
return GitHostSetupGitClone(errorMessage: gitCloneErrorMessage);
|
return GitHostSetupGitClone(errorMessage: gitCloneErrorMessage);
|
||||||
}
|
}
|
||||||
},
|
|
||||||
itemCount: pageCount,
|
assert(false);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
print("build _pageCount " + _pageCount.toString());
|
||||||
|
print("build _currentPageIndex " + _currentPageIndex.toString());
|
||||||
|
|
||||||
|
var pageView = PageView.builder(
|
||||||
|
controller: pageController,
|
||||||
|
itemBuilder: _buildPage,
|
||||||
|
itemCount: _pageCount,
|
||||||
onPageChanged: (int pageNum) {
|
onPageChanged: (int pageNum) {
|
||||||
print("PageView onPageChanged: " + pageNum.toString());
|
print("PageView onPageChanged: " + pageNum.toString());
|
||||||
/*
|
/*
|
||||||
@ -279,6 +239,7 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
|
|||||||
|
|
||||||
setState(() {
|
setState(() {
|
||||||
_currentPageIndex = pageNum;
|
_currentPageIndex = pageNum;
|
||||||
|
_pageCount = _currentPageIndex + 1;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -293,7 +254,7 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
|
|||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
pageView,
|
pageView,
|
||||||
DotsIndicator(
|
DotsIndicator(
|
||||||
numberOfDot: pageCount,
|
numberOfDot: _pageCount,
|
||||||
position: _currentPageIndex,
|
position: _currentPageIndex,
|
||||||
dotActiveColor: Theme.of(context).primaryColorDark,
|
dotActiveColor: Theme.of(context).primaryColorDark,
|
||||||
)
|
)
|
||||||
@ -318,16 +279,11 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setPageInputUrlDone() {
|
void _nextPage() {
|
||||||
setState(() {
|
pageController.nextPage(
|
||||||
this._pageInputUrlDone = true;
|
duration: Duration(milliseconds: 200),
|
||||||
});
|
curve: Curves.easeIn,
|
||||||
}
|
);
|
||||||
|
|
||||||
void setPageSshKeyDone() {
|
|
||||||
setState(() {
|
|
||||||
this._pageSshKeyDone = true;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _generateSshKey() {
|
void _generateSshKey() {
|
||||||
@ -391,7 +347,10 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _startGitClone(BuildContext context, String basePath) async {
|
void _startGitClone(BuildContext context) async {
|
||||||
|
var appState = StateContainer.of(context).appState;
|
||||||
|
var basePath = appState.gitBaseDirectory;
|
||||||
|
|
||||||
// Just in case it was half cloned because of an error
|
// Just in case it was half cloned because of an error
|
||||||
await _removeExistingClone(basePath);
|
await _removeExistingClone(basePath);
|
||||||
|
|
||||||
@ -491,19 +450,10 @@ class GitHostSetupInitialChoice extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class GitHostSetupCreateRepo extends StatefulWidget {
|
class GitHostChoicePage extends StatelessWidget {
|
||||||
final Function onDone;
|
final Function onDone;
|
||||||
|
|
||||||
GitHostSetupCreateRepo({@required this.onDone});
|
GitHostChoicePage({@required this.onDone});
|
||||||
|
|
||||||
@override
|
|
||||||
GitHostSetupCreateRepoState createState() {
|
|
||||||
return GitHostSetupCreateRepoState();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class GitHostSetupCreateRepoState extends State<GitHostSetupCreateRepo> {
|
|
||||||
bool switchValue = true;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -519,8 +469,7 @@ class GitHostSetupCreateRepoState extends State<GitHostSetupCreateRepo> {
|
|||||||
text: "GitHub",
|
text: "GitHub",
|
||||||
iconUrl: 'assets/icon/github-icon.png',
|
iconUrl: 'assets/icon/github-icon.png',
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
print("SwitchValue: " + switchValue.toString());
|
onDone(GitHostType.GitHub);
|
||||||
widget.onDone(GitHostType.GitHub, switchValue);
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
SizedBox(height: 8.0),
|
SizedBox(height: 8.0),
|
||||||
@ -528,29 +477,50 @@ class GitHostSetupCreateRepoState extends State<GitHostSetupCreateRepo> {
|
|||||||
text: "GitLab",
|
text: "GitLab",
|
||||||
iconUrl: 'assets/icon/gitlab-icon.png',
|
iconUrl: 'assets/icon/gitlab-icon.png',
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
widget.onDone(GitHostType.GitLab, switchValue);
|
onDone(GitHostType.GitLab);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum GitHostSetupType {
|
||||||
|
Auto,
|
||||||
|
Manual,
|
||||||
|
}
|
||||||
|
|
||||||
|
class GitHostAutoConfigureChoicePage extends StatelessWidget {
|
||||||
|
final Function onDone;
|
||||||
|
|
||||||
|
GitHostAutoConfigureChoicePage({@required this.onDone});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
child: Column(
|
||||||
|
children: <Widget>[
|
||||||
|
Text(
|
||||||
|
"How do you want to do this?",
|
||||||
|
style: Theme.of(context).textTheme.headline,
|
||||||
|
),
|
||||||
|
SizedBox(height: 16.0),
|
||||||
|
GitHostSetupButton(
|
||||||
|
text: "Setup everything automatically",
|
||||||
|
onPressed: () {
|
||||||
|
onDone(GitHostSetupType.Auto);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
SizedBox(height: 8.0),
|
SizedBox(height: 8.0),
|
||||||
Row(
|
GitHostSetupButton(
|
||||||
children: <Widget>[
|
text: "Let me do it manually",
|
||||||
Switch(
|
onPressed: () async {
|
||||||
value: switchValue,
|
onDone(GitHostSetupType.Manual);
|
||||||
onChanged: (bool value) {
|
|
||||||
setState(() {
|
|
||||||
print("Changing switchValue " + value.toString());
|
|
||||||
switchValue = value;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
Text(
|
|
||||||
"Auto Configure",
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
style: Theme.of(context).textTheme.headline,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
@ -27,7 +27,7 @@ class GitHostSetupUrlState extends State<GitHostSetupUrl> {
|
|||||||
_formKey.currentState.save();
|
_formKey.currentState.save();
|
||||||
|
|
||||||
var url = sshUrlKey.currentState.value;
|
var url = sshUrlKey.currentState.value;
|
||||||
this.widget.doneFunction(url);
|
this.widget.doneFunction(url.trim());
|
||||||
inputFormFocus.unfocus();
|
inputFormFocus.unfocus();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user