11import { useState , type ReactElement } from 'react' ;
22import { shallowEqual } from 'react-redux' ;
33import Animated , { Easing , useAnimatedStyle , useSharedValue , withTiming } from 'react-native-reanimated' ;
4+ import { Linking } from 'react-native' ;
45
56import { type IServices } from '../../selectors/login' ;
67import { useAppSelector } from '../../lib/hooks/useAppSelector' ;
8+ import I18n from '../../i18n' ;
79import { type IItemService , type IServiceList } from './interfaces' ;
810import { SERVICES_COLLAPSED_HEIGHT , SERVICE_HEIGHT } from './styles' ;
911import ServicesSeparator from './ServicesSeparator' ;
1012import Service from './Service' ;
13+ import Button from '../Button' ;
1114
12- const ServiceList = ( { services, CAS_enabled, CAS_login_url, Gitlab_URL, server, collapsed } : IServiceList ) => (
15+ const ServiceList = ( {
16+ services,
17+ CAS_enabled,
18+ CAS_login_url,
19+ Gitlab_URL,
20+ server,
21+ collapsed,
22+ showLoginOnWeb
23+ } : IServiceList & { showLoginOnWeb : boolean } ) => (
1324 < >
1425 { Object . values ( services ) . map ( ( service : IItemService , index : number ) => {
1526 if ( index > 2 && collapsed ) return null ;
27+
1628 return (
1729 < Service
1830 key = { service . _id }
@@ -24,6 +36,14 @@ const ServiceList = ({ services, CAS_enabled, CAS_login_url, Gitlab_URL, server,
2436 />
2537 ) ;
2638 } ) }
39+ { showLoginOnWeb && (
40+ < Button
41+ title = { I18n . t ( 'Login_on_web' ) }
42+ onPress = { ( ) => {
43+ Linking . openURL ( `${ server } /home?loginClient=mobile` ) ;
44+ } }
45+ />
46+ ) }
2747 </ >
2848) ;
2949
@@ -40,7 +60,11 @@ const LoginServices = ({ separator }: { separator: boolean }): ReactElement => {
4060 ) ;
4161 const server = useAppSelector ( state => state . server . server ) ;
4262 const services = useAppSelector ( state => state . login . services as IServices , shallowEqual ) ;
43- const { length } = Object . values ( services ) ;
63+ const showLoginOnWeb = Boolean ( Object . values ( services ) . find ( ( service : IItemService ) => service . hideButtonOnMobile === true ) ) ;
64+ const filteredServices = Object . fromEntries (
65+ Object . entries ( services ) . filter ( ( [ , service ] ) => ! service . hideButtonOnMobile )
66+ ) as IServices ;
67+ const { length } = Object . values ( filteredServices ) ;
4468
4569 const heightButtons = useSharedValue ( SERVICES_COLLAPSED_HEIGHT ) ;
4670
@@ -50,7 +74,7 @@ const LoginServices = ({ separator }: { separator: boolean }): ReactElement => {
5074 } ) ) ;
5175
5276 const onPressButtonSeparator = ( ) => {
53- heightButtons . value = collapsed ? SERVICE_HEIGHT * length : SERVICES_COLLAPSED_HEIGHT ;
77+ heightButtons . value = collapsed ? SERVICE_HEIGHT * ( length + ( showLoginOnWeb ? 1 : 0 ) ) : SERVICES_COLLAPSED_HEIGHT ;
5478 setCollapsed ( prevState => ! prevState ) ;
5579 } ;
5680
@@ -59,29 +83,41 @@ const LoginServices = ({ separator }: { separator: boolean }): ReactElement => {
5983 < >
6084 < Animated . View style = { animatedStyle } >
6185 < ServiceList
62- services = { services }
86+ services = { filteredServices }
6387 CAS_enabled = { CAS_enabled }
6488 CAS_login_url = { CAS_login_url }
6589 Gitlab_URL = { Gitlab_URL }
6690 server = { server }
6791 collapsed = { collapsed }
92+ showLoginOnWeb = { showLoginOnWeb }
6893 />
6994 </ Animated . View >
70- < ServicesSeparator services = { services } separator = { separator } collapsed = { collapsed } onPress = { onPressButtonSeparator } />
95+ < ServicesSeparator
96+ services = { filteredServices }
97+ separator = { separator }
98+ collapsed = { collapsed }
99+ onPress = { onPressButtonSeparator }
100+ />
71101 </ >
72102 ) ;
73103 }
74104 return (
75105 < >
76106 < ServiceList
77- services = { services }
107+ services = { filteredServices }
78108 CAS_enabled = { CAS_enabled }
79109 CAS_login_url = { CAS_login_url }
80110 Gitlab_URL = { Gitlab_URL }
81111 server = { server }
82112 collapsed = { collapsed }
113+ showLoginOnWeb = { showLoginOnWeb }
114+ />
115+ < ServicesSeparator
116+ services = { filteredServices }
117+ separator = { separator }
118+ collapsed = { collapsed }
119+ onPress = { onPressButtonSeparator }
83120 />
84- < ServicesSeparator services = { services } separator = { separator } collapsed = { collapsed } onPress = { onPressButtonSeparator } />
85121 </ >
86122 ) ;
87123} ;
0 commit comments