mirror of
https://github.com/immich-app/immich.git
synced 2025-02-04 01:09:14 -05:00
feat(mobile): render login fields/buttons based on server configuration (#3339)
* WIP: Show login fields/buttons based on server configuration * PR: change login disabled message to use translation * added localization string) * text --------- Co-authored-by: Alex Tran <Alex.Tran@conductix.com>
This commit is contained in:
parent
ed64c91da6
commit
baf1ea313e
2 changed files with 38 additions and 24 deletions
|
@ -186,6 +186,7 @@
|
||||||
"login_form_save_login": "Stay logged in",
|
"login_form_save_login": "Stay logged in",
|
||||||
"login_form_server_empty": "Enter a server URL.",
|
"login_form_server_empty": "Enter a server URL.",
|
||||||
"login_form_server_error": "Could not connect to server.",
|
"login_form_server_error": "Could not connect to server.",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
"motion_photos_page_title": "Motion Photos",
|
"motion_photos_page_title": "Motion Photos",
|
||||||
"notification_permission_dialog_cancel": "Cancel",
|
"notification_permission_dialog_cancel": "Cancel",
|
||||||
|
@ -290,4 +291,4 @@
|
||||||
"version_announcement_overlay_text_2": "please take your time to visit the ",
|
"version_announcement_overlay_text_2": "please take your time to visit the ",
|
||||||
"version_announcement_overlay_text_3": " and ensure your docker-compose and .env setup is up-to-date to prevent any misconfigurations, especially if you use WatchTower or any mechanism that handles updating your server application automatically.",
|
"version_announcement_overlay_text_3": " and ensure your docker-compose and .env setup is up-to-date to prevent any misconfigurations, especially if you use WatchTower or any mechanism that handles updating your server application automatically.",
|
||||||
"version_announcement_overlay_title": "New Server Version Available \uD83C\uDF89"
|
"version_announcement_overlay_title": "New Server Version Available \uD83C\uDF89"
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@ class LoginForm extends HookConsumerWidget {
|
||||||
final isLoading = useState<bool>(false);
|
final isLoading = useState<bool>(false);
|
||||||
final isLoadingServer = useState<bool>(false);
|
final isLoadingServer = useState<bool>(false);
|
||||||
final isOauthEnable = useState<bool>(false);
|
final isOauthEnable = useState<bool>(false);
|
||||||
|
final isPasswordLoginEnable = useState<bool>(false);
|
||||||
final oAuthButtonLabel = useState<String>('OAuth');
|
final oAuthButtonLabel = useState<String>('OAuth');
|
||||||
final logoAnimationController = useAnimationController(
|
final logoAnimationController = useAnimationController(
|
||||||
duration: const Duration(seconds: 60),
|
duration: const Duration(seconds: 60),
|
||||||
|
@ -69,9 +70,11 @@ class LoginForm extends HookConsumerWidget {
|
||||||
|
|
||||||
if (loginConfig != null) {
|
if (loginConfig != null) {
|
||||||
isOauthEnable.value = loginConfig.enabled;
|
isOauthEnable.value = loginConfig.enabled;
|
||||||
|
isPasswordLoginEnable.value = loginConfig.passwordLoginEnabled;
|
||||||
oAuthButtonLabel.value = loginConfig.buttonText ?? 'OAuth';
|
oAuthButtonLabel.value = loginConfig.buttonText ?? 'OAuth';
|
||||||
} else {
|
} else {
|
||||||
isOauthEnable.value = false;
|
isOauthEnable.value = false;
|
||||||
|
isPasswordLoginEnable.value = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
serverEndpoint.value = endpoint;
|
serverEndpoint.value = endpoint;
|
||||||
|
@ -82,6 +85,7 @@ class LoginForm extends HookConsumerWidget {
|
||||||
toastType: ToastType.error,
|
toastType: ToastType.error,
|
||||||
);
|
);
|
||||||
isOauthEnable.value = false;
|
isOauthEnable.value = false;
|
||||||
|
isPasswordLoginEnable.value = true;
|
||||||
isLoadingServer.value = false;
|
isLoadingServer.value = false;
|
||||||
return false;
|
return false;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -91,6 +95,7 @@ class LoginForm extends HookConsumerWidget {
|
||||||
toastType: ToastType.error,
|
toastType: ToastType.error,
|
||||||
);
|
);
|
||||||
isOauthEnable.value = false;
|
isOauthEnable.value = false;
|
||||||
|
isPasswordLoginEnable.value = true;
|
||||||
isLoadingServer.value = false;
|
isLoadingServer.value = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -262,18 +267,20 @@ class LoginForm extends HookConsumerWidget {
|
||||||
style: Theme.of(context).textTheme.displaySmall,
|
style: Theme.of(context).textTheme.displaySmall,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
),
|
),
|
||||||
const SizedBox(height: 18),
|
if (isPasswordLoginEnable.value) ...[
|
||||||
EmailInput(
|
const SizedBox(height: 18),
|
||||||
controller: usernameController,
|
EmailInput(
|
||||||
focusNode: emailFocusNode,
|
controller: usernameController,
|
||||||
onSubmit: passwordFocusNode.requestFocus,
|
focusNode: emailFocusNode,
|
||||||
),
|
onSubmit: passwordFocusNode.requestFocus,
|
||||||
const SizedBox(height: 8),
|
),
|
||||||
PasswordInput(
|
const SizedBox(height: 8),
|
||||||
controller: passwordController,
|
PasswordInput(
|
||||||
focusNode: passwordFocusNode,
|
controller: passwordController,
|
||||||
onSubmit: login,
|
focusNode: passwordFocusNode,
|
||||||
),
|
onSubmit: login,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
|
||||||
// Note: This used to have an AnimatedSwitcher, but was removed
|
// Note: This used to have an AnimatedSwitcher, but was removed
|
||||||
// because of https://github.com/flutter/flutter/issues/120874
|
// because of https://github.com/flutter/flutter/issues/120874
|
||||||
|
@ -295,19 +302,21 @@ class LoginForm extends HookConsumerWidget {
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(height: 18),
|
const SizedBox(height: 18),
|
||||||
LoginButton(onPressed: login),
|
if (isPasswordLoginEnable.value)
|
||||||
|
LoginButton(onPressed: login),
|
||||||
if (isOauthEnable.value) ...[
|
if (isOauthEnable.value) ...[
|
||||||
Padding(
|
if (isPasswordLoginEnable.value)
|
||||||
padding: const EdgeInsets.symmetric(
|
Padding(
|
||||||
horizontal: 16.0,
|
padding: const EdgeInsets.symmetric(
|
||||||
|
horizontal: 16.0,
|
||||||
|
),
|
||||||
|
child: Divider(
|
||||||
|
color: Brightness.dark ==
|
||||||
|
Theme.of(context).brightness
|
||||||
|
? Colors.white
|
||||||
|
: Colors.black,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
child: Divider(
|
|
||||||
color:
|
|
||||||
Brightness.dark == Theme.of(context).brightness
|
|
||||||
? Colors.white
|
|
||||||
: Colors.black,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
OAuthLoginButton(
|
OAuthLoginButton(
|
||||||
serverEndpointController: serverEndpointController,
|
serverEndpointController: serverEndpointController,
|
||||||
buttonLabel: oAuthButtonLabel.value,
|
buttonLabel: oAuthButtonLabel.value,
|
||||||
|
@ -317,6 +326,10 @@ class LoginForm extends HookConsumerWidget {
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
if (!isOauthEnable.value && !isPasswordLoginEnable.value)
|
||||||
|
Center(
|
||||||
|
child: const Text('login_disabled').tr(),
|
||||||
|
),
|
||||||
const SizedBox(height: 12),
|
const SizedBox(height: 12),
|
||||||
TextButton.icon(
|
TextButton.icon(
|
||||||
icon: const Icon(Icons.arrow_back),
|
icon: const Icon(Icons.arrow_back),
|
||||||
|
|
Loading…
Add table
Reference in a new issue