@axelor/aos-mobile-core 7.1.0 → 7.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/lib/api/metafile-api.d.ts +1 -0
  2. package/lib/api/metafile-api.js +6 -1
  3. package/lib/api/metafile-api.js.map +1 -1
  4. package/lib/apiProviders/utils.d.ts +7 -7
  5. package/lib/apiProviders/utils.js +18 -22
  6. package/lib/apiProviders/utils.js.map +1 -1
  7. package/lib/app/Module.d.ts +15 -2
  8. package/lib/auth/api/user-api.js +5 -3
  9. package/lib/auth/api/user-api.js.map +1 -1
  10. package/lib/auth/features/userSlice.js +7 -1
  11. package/lib/auth/features/userSlice.js.map +1 -1
  12. package/lib/auth/i18n/en.json +0 -16
  13. package/lib/auth/i18n/fr.json +0 -16
  14. package/lib/auth/index.js +1 -0
  15. package/lib/auth/index.js.map +1 -1
  16. package/lib/auth/models/objectFields.js +14 -0
  17. package/lib/auth/models/objectFields.js.map +1 -1
  18. package/lib/components/molecules/UploadFileInput/UploadFileInput.d.ts +8 -3
  19. package/lib/components/molecules/UploadFileInput/UploadFileInput.js +111 -19
  20. package/lib/components/molecules/UploadFileInput/UploadFileInput.js.map +1 -1
  21. package/lib/components/molecules/index.d.ts +0 -3
  22. package/lib/components/molecules/index.js +0 -3
  23. package/lib/components/molecules/index.js.map +1 -1
  24. package/lib/components/organisms/DateInput/DateInput.d.ts +2 -1
  25. package/lib/components/organisms/DateInput/DateInput.js +8 -5
  26. package/lib/components/organisms/DateInput/DateInput.js.map +1 -1
  27. package/lib/components/organisms/index.d.ts +1 -6
  28. package/lib/components/organisms/index.js +1 -6
  29. package/lib/components/organisms/index.js.map +1 -1
  30. package/lib/components/templates/index.d.ts +0 -3
  31. package/lib/components/templates/index.js +0 -3
  32. package/lib/components/templates/index.js.map +1 -1
  33. package/lib/header/HeaderActionsProvider.d.ts +3 -4
  34. package/lib/header/HeaderActionsProvider.js +16 -10
  35. package/lib/header/HeaderActionsProvider.js.map +1 -1
  36. package/lib/header/index.d.ts +2 -1
  37. package/lib/header/index.js +2 -1
  38. package/lib/header/index.js.map +1 -1
  39. package/lib/i18n/hooks/use-translator.d.ts +1 -1
  40. package/lib/i18n/translations/en.json +34 -4
  41. package/lib/i18n/translations/fr.json +34 -4
  42. package/lib/navigator/Navigator.js +19 -7
  43. package/lib/navigator/Navigator.js.map +1 -1
  44. package/lib/navigator/drawer/DrawerContent.js +39 -21
  45. package/lib/navigator/drawer/DrawerContent.js.map +1 -1
  46. package/lib/navigator/drawer/Header.js +26 -6
  47. package/lib/navigator/drawer/Header.js.map +1 -1
  48. package/lib/navigator/drawer/Menu.d.ts +2 -1
  49. package/lib/navigator/drawer/Menu.js +42 -17
  50. package/lib/navigator/drawer/Menu.js.map +1 -1
  51. package/lib/navigator/drawer/MenuItem.d.ts +8 -5
  52. package/lib/navigator/drawer/MenuItem.js +11 -51
  53. package/lib/navigator/drawer/MenuItem.js.map +1 -1
  54. package/lib/navigator/drawer/MenuItemEntry.d.ts +12 -0
  55. package/lib/navigator/drawer/MenuItemEntry.js +89 -0
  56. package/lib/navigator/drawer/MenuItemEntry.js.map +1 -0
  57. package/lib/navigator/drawer/SubMenuItem.d.ts +7 -0
  58. package/lib/navigator/drawer/SubMenuItem.js +34 -0
  59. package/lib/navigator/drawer/SubMenuItem.js.map +1 -0
  60. package/lib/navigator/drawer/SubMenuItemList.d.ts +10 -0
  61. package/lib/navigator/drawer/SubMenuItemList.js +46 -0
  62. package/lib/navigator/drawer/SubMenuItemList.js.map +1 -0
  63. package/lib/navigator/menu.helper.d.ts +9 -0
  64. package/lib/navigator/menu.helper.js +92 -0
  65. package/lib/navigator/menu.helper.js.map +1 -1
  66. package/lib/navigator/module.helper.d.ts +5 -0
  67. package/lib/navigator/module.helper.js +37 -1
  68. package/lib/navigator/module.helper.js.map +1 -1
  69. package/lib/screens/LoginScreen.js +47 -73
  70. package/lib/screens/LoginScreen.js.map +1 -1
  71. package/lib/screens/SessionManagementScreen.js +41 -21
  72. package/lib/screens/SessionManagementScreen.js.map +1 -1
  73. package/lib/sessions/SessionStorage.d.ts +4 -5
  74. package/lib/sessions/SessionStorage.js +30 -22
  75. package/lib/sessions/SessionStorage.js.map +1 -1
  76. package/lib/{components/templates/PopupCreateSession → sessions/components/alerts}/PopupCreateSession.d.ts +2 -2
  77. package/lib/sessions/components/alerts/PopupCreateSession.js +128 -0
  78. package/lib/sessions/components/alerts/PopupCreateSession.js.map +1 -0
  79. package/lib/sessions/components/alerts/PopupEditSession.d.ts +8 -0
  80. package/lib/sessions/components/alerts/PopupEditSession.js +83 -0
  81. package/lib/sessions/components/alerts/PopupEditSession.js.map +1 -0
  82. package/lib/sessions/components/alerts/PopupSession.d.ts +9 -0
  83. package/lib/sessions/components/alerts/PopupSession.js +84 -0
  84. package/lib/sessions/components/alerts/PopupSession.js.map +1 -0
  85. package/lib/sessions/components/alerts/index.d.ts +3 -0
  86. package/lib/sessions/components/alerts/index.js +21 -0
  87. package/lib/sessions/components/alerts/index.js.map +1 -0
  88. package/lib/sessions/components/buttons/DisabledButton.d.ts +7 -0
  89. package/lib/{components/molecules/LoginButton/LoginButton.js → sessions/components/buttons/DisabledButton.js} +5 -5
  90. package/lib/sessions/components/buttons/DisabledButton.js.map +1 -0
  91. package/lib/sessions/components/buttons/LoginButton.js +24 -0
  92. package/lib/sessions/components/buttons/LoginButton.js.map +1 -0
  93. package/lib/sessions/components/buttons/UpdateButton.d.ts +6 -0
  94. package/lib/sessions/components/buttons/UpdateButton.js +24 -0
  95. package/lib/sessions/components/buttons/UpdateButton.js.map +1 -0
  96. package/lib/sessions/components/buttons/index.d.ts +3 -0
  97. package/lib/sessions/components/buttons/index.js +21 -0
  98. package/lib/sessions/components/buttons/index.js.map +1 -0
  99. package/lib/sessions/components/display/LogoImage.js.map +1 -0
  100. package/lib/sessions/components/display/SessionCard.d.ts +9 -0
  101. package/lib/sessions/components/display/SessionCard.js +185 -0
  102. package/lib/sessions/components/display/SessionCard.js.map +1 -0
  103. package/lib/sessions/components/display/SessionListCard.d.ts +10 -0
  104. package/lib/sessions/components/display/SessionListCard.js +78 -0
  105. package/lib/sessions/components/display/SessionListCard.js.map +1 -0
  106. package/lib/sessions/components/display/index.d.ts +3 -0
  107. package/lib/sessions/components/display/index.js +21 -0
  108. package/lib/sessions/components/display/index.js.map +1 -0
  109. package/lib/{components/molecules/ErrorText → sessions/components/error}/ErrorText.js +2 -2
  110. package/lib/sessions/components/error/ErrorText.js.map +1 -0
  111. package/lib/sessions/components/error/index.d.ts +1 -0
  112. package/lib/sessions/components/error/index.js +19 -0
  113. package/lib/sessions/components/error/index.js.map +1 -0
  114. package/lib/sessions/components/index.d.ts +5 -0
  115. package/lib/sessions/components/index.js +23 -0
  116. package/lib/sessions/components/index.js.map +1 -0
  117. package/lib/sessions/components/inputs/DefaultCheckbox.d.ts +8 -0
  118. package/lib/sessions/components/inputs/DefaultCheckbox.js +36 -0
  119. package/lib/sessions/components/inputs/DefaultCheckbox.js.map +1 -0
  120. package/lib/{components/organisms/PasswordInput → sessions/components/inputs}/PasswordInput.d.ts +2 -1
  121. package/lib/{components/organisms/PasswordInput → sessions/components/inputs}/PasswordInput.js +5 -2
  122. package/lib/sessions/components/inputs/PasswordInput.js.map +1 -0
  123. package/lib/sessions/components/inputs/SessionInputs.d.ts +12 -0
  124. package/lib/sessions/components/inputs/SessionInputs.js +177 -0
  125. package/lib/sessions/components/inputs/SessionInputs.js.map +1 -0
  126. package/lib/{components/organisms/SessionNameInput → sessions/components/inputs}/SessionNameInput.d.ts +2 -1
  127. package/lib/{components/organisms/SessionNameInput → sessions/components/inputs}/SessionNameInput.js +5 -2
  128. package/lib/sessions/components/inputs/SessionNameInput.js.map +1 -0
  129. package/lib/{components/organisms/UrlInput → sessions/components/inputs}/UrlInput.d.ts +2 -1
  130. package/lib/{components/organisms/UrlInput → sessions/components/inputs}/UrlInput.js +14 -3
  131. package/lib/sessions/components/inputs/UrlInput.js.map +1 -0
  132. package/lib/{components/organisms/UsernameInput → sessions/components/inputs}/UsernameInput.js +10 -2
  133. package/lib/sessions/components/inputs/UsernameInput.js.map +1 -0
  134. package/lib/sessions/components/inputs/index.d.ts +6 -0
  135. package/lib/sessions/components/inputs/index.js +24 -0
  136. package/lib/sessions/components/inputs/index.js.map +1 -0
  137. package/lib/sessions/hook.d.ts +1 -1
  138. package/lib/sessions/hook.js +5 -5
  139. package/lib/sessions/hook.js.map +1 -1
  140. package/lib/sessions/index.d.ts +2 -1
  141. package/lib/sessions/index.js +2 -1
  142. package/lib/sessions/index.js.map +1 -1
  143. package/lib/sessions/type.d.ts +2 -1
  144. package/lib/sessions/type.js.map +1 -1
  145. package/lib/sessions/utils.d.ts +2 -1
  146. package/lib/sessions/utils.js +26 -7
  147. package/lib/sessions/utils.js.map +1 -1
  148. package/lib/tools/ContactProvider.d.ts +9 -0
  149. package/lib/tools/ContactProvider.js +98 -0
  150. package/lib/tools/ContactProvider.js.map +1 -0
  151. package/lib/tools/contact.helper.d.ts +21 -0
  152. package/lib/tools/contact.helper.js +136 -0
  153. package/lib/tools/contact.helper.js.map +1 -0
  154. package/lib/tools/index.d.ts +1 -0
  155. package/lib/tools/index.js +1 -0
  156. package/lib/tools/index.js.map +1 -1
  157. package/lib/utils/date.d.ts +16 -0
  158. package/lib/utils/date.js +41 -0
  159. package/lib/utils/date.js.map +1 -1
  160. package/lib/utils/index.d.ts +1 -1
  161. package/lib/utils/index.js +1 -1
  162. package/lib/utils/index.js.map +1 -1
  163. package/package.json +8 -5
  164. package/lib/components/molecules/ErrorText/ErrorText.js.map +0 -1
  165. package/lib/components/molecules/LoginButton/LoginButton.js.map +0 -1
  166. package/lib/components/molecules/SessionNumberIndicator/SessionNumberIndicator.d.ts +0 -4
  167. package/lib/components/molecules/SessionNumberIndicator/SessionNumberIndicator.js +0 -44
  168. package/lib/components/molecules/SessionNumberIndicator/SessionNumberIndicator.js.map +0 -1
  169. package/lib/components/organisms/LogoImage/LogoImage.js.map +0 -1
  170. package/lib/components/organisms/PasswordInput/PasswordInput.js.map +0 -1
  171. package/lib/components/organisms/SessionButtons/SessionButtons.d.ts +0 -17
  172. package/lib/components/organisms/SessionButtons/SessionButtons.js +0 -93
  173. package/lib/components/organisms/SessionButtons/SessionButtons.js.map +0 -1
  174. package/lib/components/organisms/SessionNameInput/SessionNameInput.js.map +0 -1
  175. package/lib/components/organisms/UrlInput/UrlInput.js.map +0 -1
  176. package/lib/components/organisms/UsernameInput/UsernameInput.js.map +0 -1
  177. package/lib/components/templates/PopupCreateSession/PopupCreateSession.js +0 -171
  178. package/lib/components/templates/PopupCreateSession/PopupCreateSession.js.map +0 -1
  179. package/lib/components/templates/PopupSession/PopupSession.d.ts +0 -8
  180. package/lib/components/templates/PopupSession/PopupSession.js +0 -135
  181. package/lib/components/templates/PopupSession/PopupSession.js.map +0 -1
  182. package/lib/components/templates/PopupSessionList/PopupSessionList.d.ts +0 -7
  183. package/lib/components/templates/PopupSessionList/PopupSessionList.js +0 -107
  184. package/lib/components/templates/PopupSessionList/PopupSessionList.js.map +0 -1
  185. /package/lib/{components/molecules/LoginButton → sessions/components/buttons}/LoginButton.d.ts +0 -0
  186. /package/lib/{components/organisms/LogoImage → sessions/components/display}/LogoImage.d.ts +0 -0
  187. /package/lib/{components/organisms/LogoImage → sessions/components/display}/LogoImage.js +0 -0
  188. /package/lib/{components/molecules/ErrorText → sessions/components/error}/ErrorText.d.ts +0 -0
  189. /package/lib/{components/organisms/UsernameInput → sessions/components/inputs}/UsernameInput.d.ts +0 -0
@@ -1,171 +0,0 @@
1
- /*
2
- * Axelor Business Solutions
3
- *
4
- * Copyright (C) 2023 Axelor (<http://axelor.com>).
5
- *
6
- * This program is free software: you can redistribute it and/or modify
7
- * it under the terms of the GNU Affero General Public License, version 3,
8
- * as published by the Free Software Foundation.
9
- *
10
- * This program is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- * GNU Affero General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU Affero General Public License
16
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
- */
18
- import React, { useCallback, useEffect, useMemo, useState } from 'react';
19
- import { ActivityIndicator, StyleSheet, View } from 'react-native';
20
- import { useDispatch, useSelector } from 'react-redux';
21
- import { Icon, PopUp, useThemeColor, WarningCard } from '@axelor/aos-mobile-ui';
22
- import { useTranslator } from '../../../i18n';
23
- import { PasswordInput, SessionNameInput, UrlInput, UsernameInput, } from '../../organisms';
24
- import { ErrorText, LoginButton } from '../../molecules';
25
- import { useScanActivator, useScannerDeviceActivator, } from '../../../hooks/use-scan-activator';
26
- import { useScannerSelector, useScannedValueByKey, } from '../../../features/scannerSlice';
27
- import { useCameraScannerValueByKey } from '../../../features/cameraScannerSlice';
28
- import { isUrlValid, login } from '../../../features/authSlice';
29
- import { getStorageUrl, sessionStorage } from '../../../sessions';
30
- import { checkNullString } from '../../../utils';
31
- import DeviceInfo from 'react-native-device-info';
32
- const urlScanKey = 'urlUsername_createSession_login';
33
- const PopupCreateSession = ({ sessionList, popupIsOpen, setPopupIsOpen, showUrlInput, modeDebug, testInstanceConfig, releaseInstanceConfig, }) => {
34
- const Colors = useThemeColor();
35
- const I18n = useTranslator();
36
- const dispatch = useDispatch();
37
- const { loading, error, baseUrl } = useSelector(state => state.auth);
38
- const { enable: onScanPress } = useScanActivator(urlScanKey);
39
- const { enable: enableScanner } = useScannerDeviceActivator(urlScanKey);
40
- const { isEnabled, scanKey } = useScannerSelector();
41
- const scannedValue = useScannedValueByKey(urlScanKey);
42
- const scanData = useCameraScannerValueByKey(urlScanKey);
43
- const urlStorage = useMemo(() => getStorageUrl(), []);
44
- const defaultUrl = useMemo(() => {
45
- if (urlStorage != null) {
46
- return urlStorage;
47
- }
48
- if (baseUrl != null) {
49
- return baseUrl;
50
- }
51
- if (modeDebug) {
52
- return testInstanceConfig?.defaultUrl;
53
- }
54
- return releaseInstanceConfig?.url;
55
- }, [
56
- baseUrl,
57
- modeDebug,
58
- releaseInstanceConfig?.url,
59
- testInstanceConfig?.defaultUrl,
60
- urlStorage,
61
- ]);
62
- const [isOpen, setIsOpen] = useState(false);
63
- const [showRequiredFields, setShowRequiredFields] = useState(false);
64
- const [sessionName, setSessionName] = useState(modeDebug ? DeviceInfo.getApplicationName() : '');
65
- const [url, setUrl] = useState(defaultUrl || '');
66
- const [username, setUsername] = useState(modeDebug ? testInstanceConfig?.defaultUsername : '');
67
- const [password, setPassword] = useState(modeDebug ? testInstanceConfig?.defaultPassword : '');
68
- const parseQrCode = useCallback(scanValue => {
69
- if (scanValue.includes('username') === true) {
70
- const parseScannnedData = JSON.parse(scanValue);
71
- setUrl(parseScannnedData.url);
72
- setUsername(parseScannnedData.username);
73
- }
74
- else {
75
- setUrl(scanValue);
76
- }
77
- setIsOpen(true);
78
- }, []);
79
- useEffect(() => {
80
- if (scannedValue) {
81
- parseQrCode(scannedValue);
82
- }
83
- else if (scanData?.value != null) {
84
- parseQrCode(scanData?.value);
85
- }
86
- }, [parseQrCode, scanData, scannedValue]);
87
- const nameSessionAlreadyExist = useMemo(() => {
88
- if (!Array.isArray(sessionList) || sessionList?.length === 0) {
89
- return false;
90
- }
91
- return sessionList.some(_session => _session.id === sessionName);
92
- }, [sessionList, sessionName]);
93
- const disabledLogin = useMemo(() => checkNullString(sessionName) ||
94
- checkNullString(url) ||
95
- checkNullString(username) ||
96
- checkNullString(password) ||
97
- loading ||
98
- nameSessionAlreadyExist, [loading, nameSessionAlreadyExist, password, sessionName, url, username]);
99
- const onPressLogin = useCallback(() => {
100
- dispatch(login({ url, username, password }));
101
- if (error == null) {
102
- sessionStorage.addSession({
103
- session: {
104
- id: sessionName,
105
- url: url,
106
- username: username,
107
- isActive: true,
108
- },
109
- });
110
- }
111
- }, [dispatch, password, sessionName, url, username, error]);
112
- const handleTestUrl = useCallback(() => {
113
- dispatch(isUrlValid({ url }));
114
- }, [dispatch, url]);
115
- useEffect(() => {
116
- setIsOpen(popupIsOpen);
117
- }, [popupIsOpen]);
118
- const handleScanPress = useCallback(() => {
119
- DeviceInfo.getManufacturer()
120
- .then(manufacturer => {
121
- if (manufacturer !== 'Zebra Technologies') {
122
- setIsOpen(false);
123
- }
124
- })
125
- .then(() => onScanPress());
126
- }, [onScanPress]);
127
- return (<PopUp visible={isOpen} title={I18n.t('Auth_Create_Session')} style={styles.popup}>
128
- <View style={styles.popupContainer}>
129
- <Icon name="times" size={20} touchable={true} onPress={() => setPopupIsOpen(false)} style={styles.closeIcon}/>
130
- <ErrorText error={error}/>
131
- <View>
132
- {!loading && nameSessionAlreadyExist && (<WarningCard style={styles.warningCard} errorMessage={I18n.t('Auth_Session_Name_Aleary_Exist')}/>)}
133
- </View>
134
- <SessionNameInput value={sessionName} onChange={setSessionName} readOnly={loading} style={styles.input} showRequiredFields={showRequiredFields}/>
135
- {showUrlInput && (<UrlInput value={url} onChange={setUrl} readOnly={loading} onScanPress={handleScanPress} onSelection={enableScanner} onEndFocus={handleTestUrl} scanIconColor={isEnabled && scanKey === urlScanKey
136
- ? Colors.primaryColor.background
137
- : Colors.secondaryColor_dark.background} style={styles.input} showRequiredFields={showRequiredFields}/>)}
138
- <UsernameInput value={username} onChange={setUsername} readOnly={loading} showScanIcon={!showUrlInput} onScanPress={handleScanPress} onSelection={enableScanner} scanIconColor={isEnabled && scanKey === urlScanKey
139
- ? Colors.primaryColor.background
140
- : Colors.secondaryColor_dark.background} style={styles.input} showRequiredFields={showRequiredFields}/>
141
- <PasswordInput value={password} onChange={setPassword} readOnly={loading} style={styles.input} showRequiredFields={showRequiredFields}/>
142
- {loading ? (<ActivityIndicator size="large"/>) : (<LoginButton onPress={onPressLogin} onDisabledPress={() => setShowRequiredFields(true)} disabled={disabledLogin}/>)}
143
- </View>
144
- </PopUp>);
145
- };
146
- const styles = StyleSheet.create({
147
- popup: {
148
- width: '90%',
149
- paddingHorizontal: 15,
150
- paddingRight: 15,
151
- paddingVertical: 15,
152
- },
153
- popupContainer: {
154
- flexDirection: 'column',
155
- alignItems: 'center',
156
- width: '120%',
157
- },
158
- closeIcon: {
159
- position: 'absolute',
160
- right: 0,
161
- top: '-10%',
162
- },
163
- input: {
164
- width: '100%',
165
- },
166
- warningCard: {
167
- width: '100%',
168
- },
169
- });
170
- export default PopupCreateSession;
171
- //# sourceMappingURL=PopupCreateSession.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PopupCreateSession.js","sourceRoot":"","sources":["../../../../src/components/templates/PopupCreateSession/PopupCreateSession.js"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- export default PopupSession;
2
- declare function PopupSession({ popupIsOpen, setPopupIsOpen, showUrlInput, sessionActive, testInstanceConfig, }: {
3
- popupIsOpen: any;
4
- setPopupIsOpen: any;
5
- showUrlInput: any;
6
- sessionActive: any;
7
- testInstanceConfig: any;
8
- }): JSX.Element;
@@ -1,135 +0,0 @@
1
- /*
2
- * Axelor Business Solutions
3
- *
4
- * Copyright (C) 2023 Axelor (<http://axelor.com>).
5
- *
6
- * This program is free software: you can redistribute it and/or modify
7
- * it under the terms of the GNU Affero General Public License, version 3,
8
- * as published by the Free Software Foundation.
9
- *
10
- * This program is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- * GNU Affero General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU Affero General Public License
16
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
- */
18
- import React, { useCallback, useEffect, useMemo, useState } from 'react';
19
- import { ActivityIndicator, StyleSheet, View } from 'react-native';
20
- import { useDispatch, useSelector } from 'react-redux';
21
- import DeviceInfo from 'react-native-device-info';
22
- import { Icon, PopUp, useThemeColor, LabelText } from '@axelor/aos-mobile-ui';
23
- import { PasswordInput, UsernameInput } from '../../organisms';
24
- import { ErrorText, LoginButton } from '../../molecules';
25
- import { useScanActivator, useScannerDeviceActivator, } from '../../../hooks/use-scan-activator';
26
- import { useScannedValueByKey, useScannerSelector, } from '../../../features/scannerSlice';
27
- import { useCameraScannerValueByKey } from '../../../features/cameraScannerSlice';
28
- import { login } from '../../../features/authSlice';
29
- import { sessionStorage } from '../../../sessions';
30
- import { checkNullString } from '../../../utils';
31
- const urlScanKey = 'urlUsername_FastConnection_login';
32
- const PopupSession = ({ popupIsOpen, setPopupIsOpen, showUrlInput, sessionActive, testInstanceConfig, }) => {
33
- const Colors = useThemeColor();
34
- const dispatch = useDispatch();
35
- const { loading, error } = useSelector(state => state.auth);
36
- const { enable: onScanPress } = useScanActivator(urlScanKey);
37
- const { enable: enableScanner } = useScannerDeviceActivator(urlScanKey);
38
- const { isEnabled, scanKey } = useScannerSelector();
39
- const scannedValue = useScannedValueByKey(urlScanKey);
40
- const scanData = useCameraScannerValueByKey(urlScanKey);
41
- const [isOpen, setIsOpen] = useState(false);
42
- const [showRequiredFields, setShowRequiredFields] = useState(false);
43
- const [username, setUsername] = useState(sessionActive?.username);
44
- const [password, setPassword] = useState('');
45
- const modeDebug = useMemo(() => __DEV__, []);
46
- useEffect(() => {
47
- if (sessionActive != null) {
48
- setUsername(sessionActive.username);
49
- setPassword(modeDebug ? testInstanceConfig?.defaultPassword : '');
50
- }
51
- }, [modeDebug, sessionActive, testInstanceConfig?.defaultPassword]);
52
- const onPressLogin = useCallback(() => {
53
- dispatch(login({ url: sessionActive.url, username, password }));
54
- }, [dispatch, password, sessionActive, username]);
55
- const deleteSession = useCallback(() => {
56
- sessionStorage.removeSession({ sessionId: sessionActive?.id });
57
- setPopupIsOpen(false);
58
- }, [sessionActive?.id, setPopupIsOpen]);
59
- const parseQrCode = useCallback(scanValue => {
60
- if (scanValue.includes('username') === true) {
61
- const parseScannnedData = JSON.parse(scanValue);
62
- setUsername(parseScannnedData.username);
63
- }
64
- setIsOpen(true);
65
- }, []);
66
- const disabledLogin = useMemo(() => checkNullString(username) || checkNullString(password) || loading, [loading, password, username]);
67
- useEffect(() => {
68
- if (scannedValue) {
69
- parseQrCode(scannedValue);
70
- }
71
- else if (scanData?.value != null) {
72
- parseQrCode(scanData?.value);
73
- }
74
- }, [parseQrCode, scanData, scannedValue]);
75
- useEffect(() => {
76
- setIsOpen(popupIsOpen);
77
- }, [popupIsOpen]);
78
- const handleScanPress = useCallback(() => {
79
- DeviceInfo.getManufacturer()
80
- .then(manufacturer => {
81
- if (manufacturer !== 'Zebra Technologies') {
82
- setIsOpen(false);
83
- }
84
- })
85
- .then(() => onScanPress());
86
- }, [onScanPress]);
87
- if (sessionActive == null) {
88
- return null;
89
- }
90
- return (<PopUp visible={isOpen} title={sessionActive?.id} style={styles.popup}>
91
- <View style={styles.popupContainer}>
92
- <Icon name="times" size={20} touchable={true} onPress={() => setPopupIsOpen(false)} style={styles.closeIcon}/>
93
- <ErrorText error={error}/>
94
- {showUrlInput && (<LabelText iconName="link" title={sessionActive.url} style={styles.labText} size={20}/>)}
95
- <UsernameInput value={username} onChange={setUsername} readOnly={loading} showScanIcon={!showUrlInput} onScanPress={handleScanPress} onSelection={enableScanner} scanIconColor={isEnabled && scanKey === urlScanKey
96
- ? Colors.primaryColor.background
97
- : Colors.secondaryColor_dark.background} style={styles.input} showRequiredFields={showRequiredFields}/>
98
- <PasswordInput value={password} onChange={setPassword} readOnly={loading} style={styles.input} showRequiredFields={showRequiredFields}/>
99
- {loading ? (<ActivityIndicator size="large"/>) : (<LoginButton onPress={onPressLogin} onDisabledPress={() => setShowRequiredFields(true)} disabled={disabledLogin}/>)}
100
- <Icon name="trash-alt" size={20} color={Colors.errorColor.background} touchable={true} onPress={deleteSession} style={styles.binIcon}/>
101
- </View>
102
- </PopUp>);
103
- };
104
- const styles = StyleSheet.create({
105
- popup: {
106
- width: '90%',
107
- paddingHorizontal: 15,
108
- paddingRight: 15,
109
- paddingVertical: 15,
110
- },
111
- popupContainer: {
112
- flexDirection: 'column',
113
- alignItems: 'center',
114
- width: '120%',
115
- },
116
- closeIcon: {
117
- position: 'absolute',
118
- right: 0,
119
- top: '-10%',
120
- },
121
- binIcon: {
122
- position: 'absolute',
123
- right: '1%',
124
- bottom: '5%',
125
- },
126
- input: {
127
- width: '100%',
128
- },
129
- labText: {
130
- width: '95%',
131
- marginVertical: 10,
132
- },
133
- });
134
- export default PopupSession;
135
- //# sourceMappingURL=PopupSession.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PopupSession.js","sourceRoot":"","sources":["../../../../src/components/templates/PopupSession/PopupSession.js"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- export default PopupSessionList;
2
- declare function PopupSessionList({ popupIsOpen, sessionList, setPopupIsOpen, setPopupSessionIsOpen, }: {
3
- popupIsOpen: any;
4
- sessionList: any;
5
- setPopupIsOpen: any;
6
- setPopupSessionIsOpen: any;
7
- }): JSX.Element;
@@ -1,107 +0,0 @@
1
- /*
2
- * Axelor Business Solutions
3
- *
4
- * Copyright (C) 2023 Axelor (<http://axelor.com>).
5
- *
6
- * This program is free software: you can redistribute it and/or modify
7
- * it under the terms of the GNU Affero General Public License, version 3,
8
- * as published by the Free Software Foundation.
9
- *
10
- * This program is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- * GNU Affero General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU Affero General Public License
16
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
- */
18
- import React, { useCallback, useMemo } from 'react';
19
- import { StyleSheet, View, TouchableOpacity } from 'react-native';
20
- import { Text, PopUp, useThemeColor, Icon, HorizontalRule, } from '@axelor/aos-mobile-ui';
21
- import { useTranslator } from '../../../i18n';
22
- import { sessionStorage } from '../../../sessions';
23
- const PopupSessionList = ({ popupIsOpen, sessionList, setPopupIsOpen, setPopupSessionIsOpen, }) => {
24
- const Colors = useThemeColor();
25
- const I18n = useTranslator();
26
- const sessions = useMemo(() => sessionList, [sessionList]);
27
- const styles = useMemo(() => getStyles(Colors), [Colors]);
28
- const changeActiveSession = useCallback(sessionId => {
29
- sessionStorage.changeActiveSession({ sessionId });
30
- setPopupIsOpen(false);
31
- setPopupSessionIsOpen(true);
32
- }, [setPopupIsOpen, setPopupSessionIsOpen]);
33
- const removeSession = useCallback(sessionId => {
34
- sessionStorage.removeSession({ sessionId });
35
- }, []);
36
- if (!Array.isArray(sessions) || sessions?.length === 0) {
37
- return null;
38
- }
39
- return (<PopUp visible={popupIsOpen} title={I18n.t('Auth_Saved_Sessions')}>
40
- <View style={styles.popupContainer}>
41
- {sessions.map((_session, index) => {
42
- return (<View key={index} style={styles.popupItemContainer}>
43
- <View style={_session.isActive ? styles.itemActive : styles.item}/>
44
- <View style={styles.popupItemChildren}>
45
- <TouchableOpacity onPress={() => changeActiveSession(_session.id)}>
46
- <Text style={styles.textTitle}>{_session.id}</Text>
47
- <Text numberOfLines={1}>{_session.url}</Text>
48
- <HorizontalRule style={styles.line}/>
49
- </TouchableOpacity>
50
- </View>
51
- <Icon name="close" color="red" FontAwesome5={false} touchable={true} onPress={() => removeSession(_session.id)}/>
52
- </View>);
53
- })}
54
- <View style={styles.closeBtn}>
55
- <TouchableOpacity onPress={() => setPopupIsOpen(false)}>
56
- <Text>{I18n.t('Auth_Close')}</Text>
57
- </TouchableOpacity>
58
- </View>
59
- </View>
60
- </PopUp>);
61
- };
62
- const getStyles = Colors => StyleSheet.create({
63
- popupContainer: {
64
- flexDirection: 'column',
65
- alignItems: 'center',
66
- width: '100%',
67
- },
68
- popupItemContainer: {
69
- flexDirection: 'row',
70
- alignItems: 'center',
71
- marginLeft: '-5%',
72
- marginVertical: '2%',
73
- },
74
- popupItemChildren: {
75
- flexDirection: 'column',
76
- justifyContent: 'space-between',
77
- width: '120%',
78
- marginLeft: '5%',
79
- },
80
- textTitle: {
81
- fontSize: 18,
82
- fontWeight: 'bold',
83
- marginBottom: 5,
84
- },
85
- line: {
86
- marginTop: 5,
87
- },
88
- closeBtn: {
89
- marginTop: '5%',
90
- },
91
- itemActive: {
92
- width: 7,
93
- height: 40,
94
- borderTopRightRadius: 8,
95
- borderBottomRightRadius: 8,
96
- backgroundColor: Colors.primaryColor.background_light,
97
- },
98
- item: {
99
- width: 7,
100
- height: 40,
101
- borderTopRightRadius: 8,
102
- borderBottomRightRadius: 8,
103
- backgroundColor: Colors.backgroundColor,
104
- },
105
- });
106
- export default PopupSessionList;
107
- //# sourceMappingURL=PopupSessionList.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PopupSessionList.js","sourceRoot":"","sources":["../../../../src/components/templates/PopupSessionList/PopupSessionList.js"],"names":[],"mappings":"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"}