@eohjsc/react-native-smart-city 0.3.7 → 0.3.10
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.
- package/README.md +36 -15
- package/package.json +10 -6
- package/react-native-smart-city.podspec +1 -0
- package/src/commons/Action/ItemQuickAction.js +16 -4
- package/src/commons/Action/__test__/ItemQuickAction.test.js +11 -6
- package/src/commons/ActionGroup/ColorPickerTemplate.js +37 -24
- package/src/commons/ActionGroup/CurtainButtonTemplate.js +10 -5
- package/src/commons/ActionGroup/OnOffSmartLock/AutoLock/__test__/index.test.js +4 -0
- package/src/commons/ActionGroup/OnOffSmartLock/PasscodeList/ItemPasscode.js +1 -1
- package/src/commons/ActionGroup/OnOffSmartLock/PasscodeList/__test__/ItemPasscode.test.js +24 -0
- package/src/commons/ActionGroup/OnOffSmartLock/SetupGeneratePasscode/__test__/index.test.js +14 -0
- package/src/commons/ActionGroup/OnOffSmartLock/SetupGeneratePasscode/index.js +1 -0
- package/src/commons/ActionGroup/OnOffTemplate/OnOffButtonTemplate.js +8 -2
- package/src/commons/ActionGroup/OnOffTemplate/OnOffSimpleTemplate.js +10 -10
- package/src/commons/ActionGroup/OnOffTemplate/index.js +3 -2
- package/src/commons/ActionGroup/SliderRangeTemplate.js +6 -2
- package/src/commons/ActionGroup/SmartTiviActionTemplate/SmartTiviActionTemplate.js +7 -3
- package/src/commons/ActionGroup/StatesGridActionTemplate.js +22 -8
- package/src/commons/ActionGroup/TimerActionTemplate.js +11 -3
- package/src/commons/ActionGroup/TwoButtonTemplate/index.js +1 -5
- package/src/commons/ActionGroup/__test__/CurtainButtonTemplate.test.js +53 -4
- package/src/commons/ActionGroup/__test__/OnOffButtonTemplate.test.js +14 -14
- package/src/commons/ActionGroup/__test__/OnOffTemplate.test.js +53 -78
- package/src/commons/ActionGroup/__test__/OneBigButtonTemplate.test.js +36 -20
- package/src/commons/ActionGroup/__test__/StatesGridActionTemplate.test.js +77 -0
- package/src/commons/ActionGroup/__test__/TimerActionTemplate.test.js +58 -6
- package/src/commons/ActionGroup/__test__/TwoButtonTemplate.test.js +49 -1
- package/src/commons/ActionGroup/__test__/index.test.js +135 -0
- package/src/commons/Auth/AccountList.js +1 -1
- package/src/commons/Automate/ItemAutomate.js +1 -3
- package/src/commons/Calendar/__test__/Calendar.test.js +33 -0
- package/src/commons/Connecting/__test__/Connecting.test.js +19 -2
- package/src/commons/ConnectingProcess/DeviceItem/DeviceItem.js +7 -3
- package/src/commons/ConnectingProcess/DeviceItem/DeviceItemStyles.js +8 -11
- package/src/commons/ConnectingProcess/__test__/Connecting.test.js +136 -3
- package/src/commons/ConnectingProcess/__test__/DeviceItem.test.js +3 -2
- package/src/commons/ConnectingProcess/index.js +76 -26
- package/src/commons/Dashboard/MyPinnedSharedUnit/__test__/MyPinnedSharedUnit.test.js +16 -13
- package/src/commons/Dashboard/MyPinnedSharedUnit/index.js +1 -1
- package/src/commons/Dashboard/MyUnit/__test__/MyUnit.test.js +0 -5
- package/src/commons/Device/ConnectedViewHeader.js +1 -1
- package/src/commons/Device/Hanet/ItemHanetDevice.test.js +58 -0
- package/src/commons/Device/HistoryChart.js +7 -3
- package/src/commons/Device/ItemDevice.js +34 -13
- package/src/commons/Device/LinearChart.js +15 -0
- package/src/commons/Device/PMSensor/PMSensorIndicatior.js +16 -12
- package/src/commons/Device/PMSensor/PMSensorIndicatorStyles.js +3 -0
- package/src/commons/Device/SonosSpeaker/index.js +1 -1
- package/src/commons/Device/WaterQualitySensor/ListQualityIndicator.js +1 -0
- package/src/commons/Device/WaterQualitySensor/QualityIndicatorsItem.js +7 -2
- package/src/commons/Explore/__test__/CityItem.test.js +33 -54
- package/src/commons/FieldTemplate/ChooseUserField/ChooseFieldStyles.js +25 -0
- package/src/commons/FieldTemplate/ChooseUserField/ChoosePopup.js +96 -0
- package/src/commons/FieldTemplate/ChooseUserField/ChoosePopupStyles.js +39 -0
- package/src/commons/FieldTemplate/ChooseUserField/__test__/index.test.js +118 -0
- package/src/commons/FieldTemplate/ChooseUserField/index.js +62 -0
- package/src/commons/FieldTemplate/PasscodeField/PasscodeFieldStyles.js +30 -0
- package/src/commons/FieldTemplate/PasscodeField/__test__/index.test.js +90 -0
- package/src/commons/FieldTemplate/PasscodeField/index.js +43 -0
- package/src/commons/FieldTemplate/ScheduleField/ScheduleFieldStyles.js +13 -0
- package/src/commons/FieldTemplate/ScheduleField/__test__/index.test.js +179 -0
- package/src/commons/FieldTemplate/ScheduleField/index.js +176 -0
- package/src/commons/Form/CurrencyInput.js +15 -1
- package/src/commons/Form/TextInputPassword.js +1 -1
- package/src/commons/FullLoading/index.js +2 -1
- package/src/commons/Header/HeaderCustom.js +2 -1
- package/src/commons/HeaderAni/index.js +6 -1
- package/src/commons/HorizontalPicker/index.js +2 -2
- package/src/commons/MediaPlayerDetail/Styles/MediaPlayerDetailStyles.js +0 -6
- package/src/commons/MediaPlayerDetail/index.js +29 -47
- package/src/commons/MenuActionAddnew/index.js +1 -0
- package/src/commons/MenuActionList/index.js +1 -0
- package/src/commons/MenuActionMore/index.js +1 -1
- package/src/commons/PreventAccess/__test__/PreventAccess.test.js +62 -0
- package/src/commons/PreventAccess/index.js +9 -1
- package/src/commons/Sharing/MemberList.js +10 -2
- package/src/commons/Sharing/WrapHeaderScrollable.js +2 -0
- package/src/commons/Sharing/__test__/DevicePermissionsCheckbox.test.js +0 -1
- package/src/commons/SubUnit/Favorites/index.js +2 -3
- package/src/commons/SubUnit/OneTap/__test__/SubUnitAutomate.test.js +8 -35
- package/src/commons/SubUnit/OneTap/index.js +1 -2
- package/src/commons/SubUnit/ShortDetail.js +25 -9
- package/src/commons/SubUnit/__test__/Item.test.js +0 -1
- package/src/commons/SubUnit/__test__/ShortDetail.test.js +9 -2
- package/src/commons/Unit/SharedUnit.js +1 -0
- package/src/commons/Unit/__test__/SharedUnit.test.js +38 -183
- package/src/commons/UnitSummary/ConfigHistoryChart/__test__/ConfigHistoryChart.test.js +28 -1
- package/src/commons/UnitSummary/ConfigHistoryChart/index.js +2 -13
- package/src/commons/UnitSummary/ConfigHistoryChart.js +55 -13
- package/src/commons/WheelDateTimePicker/index.js +4 -3
- package/src/configs/API.js +87 -143
- package/src/configs/Constants.js +80 -1
- package/src/configs/SCConfig.js +4 -0
- package/src/context/actionType.ts +11 -0
- package/src/context/mockStore.ts +12 -0
- package/src/context/reducer.ts +57 -2
- package/src/hooks/Common/index.js +2 -0
- package/src/hooks/Common/useGGHomeDeviceConnected.js +16 -0
- package/src/hooks/Common/useGetIdUser.js +1 -5
- package/src/hooks/Common/useSensorsStatus.js +4 -4
- package/src/hooks/IoT/__test__/useGGHomeConnection.test.js +199 -0
- package/src/hooks/IoT/__test__/useRemoteControl.test.js +198 -0
- package/src/hooks/IoT/index.js +4 -0
- package/src/hooks/IoT/useGGHomeConnection.js +93 -0
- package/src/hooks/IoT/useRemoteControl.js +79 -0
- package/src/hooks/index.js +4 -0
- package/src/hooks/useReceiveNotifications.js +12 -7
- package/src/iot/Monitor.js +3 -2
- package/src/iot/RemoteControl/Bluetooth.js +1 -1
- package/src/iot/RemoteControl/GoogleHome.js +75 -49
- package/src/iot/RemoteControl/Internet.js +1 -1
- package/src/iot/RemoteControl/__test__/GoogleHome.test.js +95 -48
- package/src/iot/RemoteControl/__test__/Internet.test.js +18 -7
- package/src/iot/RemoteControl/__test__/LgThinq.test.js +36 -177
- package/src/iot/RemoteControl/index.js +52 -52
- package/src/navigations/UnitStack.js +11 -20
- package/src/navigations/UnitStackStyles.js +21 -0
- package/src/screens/AQIGuide/index.js +1 -1
- package/src/screens/ActivityLog/FilterPopup.js +2 -0
- package/src/screens/ActivityLog/__test__/index.test.js +38 -23
- package/src/screens/ActivityLog/hooks/__test__/index.test.js +51 -90
- package/src/screens/ActivityLog/hooks/index.js +1 -1
- package/src/screens/ActivityLog/index.js +2 -2
- package/src/screens/AddCommon/SelectSubUnit.js +1 -0
- package/src/screens/AddCommon/SelectUnit.js +1 -0
- package/src/screens/AddCommon/__test__/SelectSubUnit.test.js +13 -24
- package/src/screens/AddCommon/__test__/SelectUnit.test.js +9 -33
- package/src/screens/AddLocationMaps/__test__/index.test.js +265 -0
- package/src/screens/AddLocationMaps/index.js +48 -21
- package/src/screens/AddNewAction/SelectAction.js +32 -13
- package/src/screens/AddNewAction/SelectSensorDevices.js +8 -2
- package/src/screens/AddNewAction/SetupSensor.js +67 -32
- package/src/screens/AddNewAction/__test__/SelectAction.test.js +10 -91
- package/src/screens/AddNewAction/__test__/SelectSensorDevices.test.js +40 -26
- package/src/screens/AddNewAction/__test__/SetupSensor.test.js +2 -0
- package/src/screens/AddNewAutoSmart/__test__/AddNewAutoSmart.test.js +3 -1
- package/src/screens/AddNewAutoSmart/index.js +5 -2
- package/src/screens/AddNewDevice/ConnectingDevices.js +3 -3
- package/src/screens/AddNewDevice/__test__/AddNewDevice.test.js +42 -34
- package/src/screens/AddNewDevice/__test__/ConnectDevices.test.js +0 -4
- package/src/screens/AddNewDevice/__test__/ConnectingDevices.test.js +22 -22
- package/src/screens/AddNewDevice/hooks/ConnectDevices.js +1 -1
- package/src/screens/AddNewDevice/index.js +1 -0
- package/src/screens/AddNewGateway/PlugAndPlay/ConnectWifiWarning.js +23 -17
- package/src/screens/AddNewGateway/PlugAndPlay/GatewayWifiList.js +46 -40
- package/src/screens/AddNewGateway/PlugAndPlay/__test__/GatewayWifiList.test.js +64 -10
- package/src/screens/AddNewGateway/SelectGateway.js +1 -0
- package/src/screens/AddNewGateway/SetupGatewayWifi.js +2 -0
- package/src/screens/AddNewGateway/__test__/AddNewGateway.test.js +4 -6
- package/src/screens/AddNewGateway/__test__/ConnectedGateway.test.js +0 -4
- package/src/screens/AddNewGateway/__test__/ConnectingGateway.test.js +5 -29
- package/src/screens/AddNewGateway/__test__/SelectGateway.test.js +0 -4
- package/src/screens/AddNewGateway/__test__/SetupGateway.test.js +0 -4
- package/src/screens/AddNewGateway/index.js +1 -0
- package/src/screens/AddNewOneTap/__test__/AddNewOneTap.test.js +10 -24
- package/src/screens/AddNewOneTap/index.js +3 -2
- package/src/screens/AllCamera/index.js +4 -4
- package/src/screens/Automate/MultiUnits.js +8 -8
- package/src/screens/Automate/__test__/MultiUnits.test.js +6 -9
- package/src/screens/Automate/__test__/index.test.js +7 -12
- package/src/screens/Automate/index.js +5 -3
- package/src/screens/ConfirmUnitDeletion/__test__/ConfirmUnitDeletion.test.js +36 -8
- package/src/screens/ConfirmUnitDeletion/index.js +7 -1
- package/src/screens/Device/EditDevice/__test__/EditDevice.test.js +71 -22
- package/src/screens/Device/EditDevice/index.js +17 -15
- package/src/screens/Device/__test__/detail.test.js +33 -86
- package/src/screens/Device/components/DetailHistoryChart.js +1 -1
- package/src/screens/Device/components/SensorConnectStatusViewHeader.js +44 -24
- package/src/screens/Device/components/SensorDisplayItem.js +5 -2
- package/src/screens/Device/detail.js +85 -26
- package/src/screens/Device/hooks/useDisconnectedDevice.js +4 -4
- package/src/screens/Device/hooks/useFavoriteDevice.js +5 -9
- package/src/screens/DeviceInfo/__test__/index.test.js +0 -2
- package/src/screens/EditActionsList/index.js +1 -1
- package/src/screens/EmergencyContacts/EmergencyContactsSelectContacts.js +6 -3
- package/src/screens/EmergencyContacts/__test__/EmergencyContactAddNew.test.js +7 -19
- package/src/screens/EmergencyContacts/__test__/EmergencyContactList.test.js +20 -2
- package/src/screens/EmergencyContacts/__test__/EmergencyContactsSelectContacts.test.js +40 -23
- package/src/screens/EmergencySetting/components/DropDownItem.js +2 -2
- package/src/screens/EmergencySetting/index.js +4 -1
- package/src/screens/EnterPassword/__test__/EnterPassword.test.js +41 -25
- package/src/screens/Explore/index.js +2 -0
- package/src/screens/GuestInfo/__test__/index.test.js +14 -41
- package/src/screens/GuestInfo/components/RecurringDetail.js +1 -0
- package/src/screens/GuestInfo/components/TemporaryDetail.js +2 -2
- package/src/screens/HanetCamera/Detail.js +1 -1
- package/src/screens/HanetCamera/__test__/CaptureFaceID.test.js +8 -12
- package/src/screens/HanetCamera/__test__/Detail.test.js +27 -42
- package/src/screens/HanetCamera/__test__/ManageAccess.test.js +8 -5
- package/src/screens/HanetCamera/__test__/MemberInfo.test.js +10 -32
- package/src/screens/HanetCamera/components/RequestFaceIDPopup.js +3 -2
- package/src/screens/HanetCamera/hooks/__test__/useHanetCheckinData.test.js +43 -35
- package/src/screens/HanetCamera/hooks/__test__/useHanetPlaceMembers.test.js +10 -21
- package/src/screens/HanetCamera/hooks/useHanetCheckinData.js +11 -11
- package/src/screens/HanetCamera/hooks/useHanetPlaceMembers.js +11 -11
- package/src/screens/ManageAccess/__test__/ManageAccess.test.js +33 -22
- package/src/screens/ManageAccess/hooks/__test__/useManageAccess.test.js +44 -45
- package/src/screens/ManageAccess/hooks/index.js +7 -4
- package/src/screens/ManageAccess/index.js +2 -1
- package/src/screens/MoveToAnotherSubUnit/__test__/index.test.js +35 -12
- package/src/screens/MoveToAnotherSubUnit/index.js +6 -6
- package/src/screens/Notification/__test__/Notification.test.js +31 -25
- package/src/screens/Notification/__test__/NotificationItem.test.js +8 -7
- package/src/screens/Notification/components/NotificationItem.js +17 -20
- package/src/screens/Notification/index.js +13 -2
- package/src/screens/PlayBackCamera/Timer.js +2 -2
- package/src/screens/PlayBackCamera/__test__/index.test.js +87 -2
- package/src/screens/PlayBackCamera/index.js +54 -35
- package/src/screens/ScanChipQR/__test__/ScanChipQR.test.js +7 -20
- package/src/screens/ScanChipQR/components/QRScan/index.js +1 -0
- package/src/screens/ScanChipQR/hooks/index.js +15 -16
- package/src/screens/ScanSensorQR/__test__/ScanSensorQR.test.js +8 -24
- package/src/screens/ScriptDetail/__test__/index.test.js +17 -86
- package/src/screens/ScriptDetail/index.js +19 -14
- package/src/screens/SelectUnit/__test__/index.test.js +12 -55
- package/src/screens/SelectUnit/index.js +9 -4
- package/src/screens/SetSchedule/index.js +15 -11
- package/src/screens/SharedUnit/__test__/TabHeader.test.js +0 -2
- package/src/screens/SharedUnit/index.js +2 -0
- package/src/screens/Sharing/Components/SensorItem.js +10 -12
- package/src/screens/Sharing/InfoMemberUnit.js +1 -1
- package/src/screens/Sharing/MemberList.js +12 -11
- package/src/screens/Sharing/SelectPermission.js +136 -83
- package/src/screens/Sharing/__test__/InfoMemberUnit.test.js +47 -29
- package/src/screens/Sharing/__test__/MemberList.test.js +13 -127
- package/src/screens/Sharing/__test__/MemberList2.test.js +80 -0
- package/src/screens/Sharing/__test__/SelectPermission.test.js +28 -38
- package/src/screens/Sharing/__test__/SelectUser.test.js +17 -38
- package/src/screens/Sharing/hooks/index.js +3 -0
- package/src/screens/SideMenuDetail/SideMenuDetailStyles.js +28 -0
- package/src/screens/SideMenuDetail/__test__/index.test.js +154 -0
- package/src/screens/SideMenuDetail/index.js +148 -0
- package/src/screens/SmartIr/components/GroupButtonByType/GroupButtonByType.js +3 -2
- package/src/screens/SmartIr/components/SelectBrand.js +1 -1
- package/src/screens/SubUnit/AddSubUnit.js +23 -17
- package/src/screens/SubUnit/Detail.js +1 -2
- package/src/screens/SubUnit/EditSubUnit.js +15 -13
- package/src/screens/SubUnit/ManageSubUnit.js +13 -7
- package/src/screens/SubUnit/__test__/AddSubUnit.test.js +29 -89
- package/src/screens/SubUnit/__test__/Detail.test.js +31 -8
- package/src/screens/SubUnit/__test__/EditSubUnit.test.js +21 -89
- package/src/screens/SubUnit/__test__/ManageSubUnit.test.js +27 -1
- package/src/screens/SubUnit/hooks/__test__/useManageSubUnit.test.js +48 -45
- package/src/screens/SubUnit/hooks/useManageSubUnit.js +7 -7
- package/src/screens/SyncLGDevice/AddLGDevice.js +1 -0
- package/src/screens/SyncLGDevice/__test__/AddLGDevice.test.js +22 -91
- package/src/screens/TDSGuide/index.js +4 -1
- package/src/screens/UVIndexGuide/index.js +1 -1
- package/src/screens/Unit/ChooseLocation.js +7 -14
- package/src/screens/Unit/Detail.js +32 -75
- package/src/screens/Unit/ManageUnit.js +1 -0
- package/src/screens/Unit/SelectAddress.js +45 -23
- package/src/screens/Unit/SmartAccount.js +4 -4
- package/src/screens/Unit/Station/index.js +4 -0
- package/src/screens/Unit/Summaries.js +18 -2
- package/src/screens/Unit/__test__/CheckSendEmail.test.js +24 -29
- package/src/screens/Unit/__test__/ChooseLocation.test.js +27 -14
- package/src/screens/Unit/__test__/Detail.test.js +98 -199
- package/src/screens/Unit/__test__/ManageUnit.test.js +18 -42
- package/src/screens/Unit/__test__/SelectAddress.test.js +159 -49
- package/src/screens/Unit/__test__/SmartAccount.test.js +17 -9
- package/src/screens/Unit/__test__/SmartAccountItem.test.js +0 -1
- package/src/screens/Unit/__test__/Summaries.test.js +100 -0
- package/src/screens/Unit/components/MyAllUnit/__test__/MyAllUnit.test.js +36 -0
- package/src/screens/Unit/components/MyAllUnit/__test__/index.test.js +54 -0
- package/src/screens/Unit/components/MyUnitDevice/index.js +4 -4
- package/src/screens/Unit/components/SharedUnit/index.js +1 -0
- package/src/screens/Unit/components/__test__/MyUnitDevice.test.js +2 -2
- package/src/screens/Unit/components/__test__/SharedUnit.test.js +31 -34
- package/src/screens/Unit/hook/useUnitConnectRemoteDevices.js +50 -0
- package/src/screens/Unit/styles.js +8 -0
- package/src/screens/UnitSummary/__test__/index.test.js +91 -30
- package/src/screens/UnitSummary/components/3PPowerConsumption/__test__/3PPowerConsumption.test.js +31 -2
- package/src/screens/UnitSummary/components/PowerConsumeHistoryChart/__test__/index.test.js +7 -4
- package/src/screens/UnitSummary/components/PowerConsumeHistoryChart/index.js +2 -13
- package/src/screens/UnitSummary/components/PowerConsumption/__test__/ItemPower.test.js +0 -1
- package/src/screens/UnitSummary/components/PowerConsumption/__test__/PowerConsumption.test.js +14 -16
- package/src/screens/UnitSummary/components/RunningDevices/__test__/index.test.js +11 -2
- package/src/screens/UnitSummary/components/RunningDevices/index.js +7 -10
- package/src/screens/UnitSummary/components/Temperature/index.js +4 -4
- package/src/screens/UnitSummary/components/WaterQuality/Item/index.js +10 -2
- package/src/screens/UnitSummary/index.js +15 -1
- package/src/screens/WaterQualityGuide/index.js +1 -1
- package/src/utils/Apis/axios.js +54 -31
- package/src/utils/Converter/time.js +0 -18
- package/src/utils/I18n/translations/en.json +11 -1
- package/src/utils/I18n/translations/vi.json +12 -1
- package/src/utils/Permission/common.js +67 -0
- package/src/utils/Route/index.js +1 -0
- package/src/utils/Setting/Location.js +30 -0
- package/src/utils/Utils.js +12 -7
- package/src/utils/__test__/Utils.test.js +12 -0
|
@@ -22,11 +22,11 @@ const Item = memo((props) => {
|
|
|
22
22
|
<View size={14} color={Colors.Gray8} style={styles.textTitleX}>
|
|
23
23
|
<Text>{title}</Text>
|
|
24
24
|
{waterType && (
|
|
25
|
-
<TouchableOpacity onPress={goToDetail}>
|
|
25
|
+
<TouchableOpacity onPress={goToDetail} style={styles.buttonInfo}>
|
|
26
26
|
<IconOutline
|
|
27
27
|
style={styles.row}
|
|
28
28
|
name="info-circle"
|
|
29
|
-
size={
|
|
29
|
+
size={20}
|
|
30
30
|
color={Colors.Black}
|
|
31
31
|
/>
|
|
32
32
|
</TouchableOpacity>
|
|
@@ -79,4 +79,12 @@ const styles = StyleSheet.create({
|
|
|
79
79
|
row: {
|
|
80
80
|
flexDirection: 'row',
|
|
81
81
|
},
|
|
82
|
+
buttonInfo: {
|
|
83
|
+
width: 40,
|
|
84
|
+
height: 40,
|
|
85
|
+
justifyContent: 'center',
|
|
86
|
+
alignItems: 'center',
|
|
87
|
+
marginTop: -10,
|
|
88
|
+
marginRight: -10,
|
|
89
|
+
},
|
|
82
90
|
});
|
|
@@ -3,9 +3,10 @@ import { View, StyleSheet } from 'react-native';
|
|
|
3
3
|
import { useNavigation } from '@react-navigation/native';
|
|
4
4
|
import { TouchableOpacity } from 'react-native';
|
|
5
5
|
import { IconOutline } from '@ant-design/icons-react-native';
|
|
6
|
-
import { useTranslations } from '../../hooks/Common/useTranslations';
|
|
7
6
|
import moment from 'moment';
|
|
8
7
|
|
|
8
|
+
import { useTranslations } from '../../hooks/Common/useTranslations';
|
|
9
|
+
import { useReceiveNotifications } from '../../hooks';
|
|
9
10
|
import { API, Colors } from '../../configs';
|
|
10
11
|
import Routes from '../../utils/Route';
|
|
11
12
|
import { axiosGet } from '../../utils/Apis/axios';
|
|
@@ -139,6 +140,19 @@ const UnitSummary = memo(({ route }) => {
|
|
|
139
140
|
fetchSummaryDetail();
|
|
140
141
|
}, [fetchSummaryDetail]);
|
|
141
142
|
|
|
143
|
+
const { dataNotification } = useReceiveNotifications();
|
|
144
|
+
|
|
145
|
+
useEffect(() => {
|
|
146
|
+
if (dataNotification) {
|
|
147
|
+
const { params = {} } = dataNotification;
|
|
148
|
+
const { summary_id } = params;
|
|
149
|
+
if (summary_id && summary_id === summaryId) {
|
|
150
|
+
fetchSummaryDetail();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
154
|
+
}, [dataNotification]);
|
|
155
|
+
|
|
142
156
|
const UnitSummaryDetail = getComponentAndGuide();
|
|
143
157
|
const ComponentName = UnitSummaryDetail?.componentName;
|
|
144
158
|
const GuideName = UnitSummaryDetail?.guideName;
|
|
@@ -270,7 +270,7 @@ const WaterQualityGuide = memo(({ route }) => {
|
|
|
270
270
|
|
|
271
271
|
return (
|
|
272
272
|
<SafeAreaView style={styles.container}>
|
|
273
|
-
<ScrollView style={styles.container}>
|
|
273
|
+
<ScrollView style={styles.container} scrollIndicatorInsets={{ right: 1 }}>
|
|
274
274
|
<View style={styles.wrapScroll}>
|
|
275
275
|
{titles.map((item, index) => {
|
|
276
276
|
const { title, des } = item;
|
package/src/utils/Apis/axios.js
CHANGED
|
@@ -1,35 +1,36 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { create } from 'apisauce';
|
|
2
|
+
import { getData, storeData } from '../Storage';
|
|
3
3
|
import { ToastBottomHelper } from '../Utils';
|
|
4
4
|
import NetInfo from '@react-native-community/netinfo';
|
|
5
|
+
import { PROBLEM_CODE } from '../../configs/Constants';
|
|
6
|
+
import { getTranslate } from '../I18n';
|
|
7
|
+
import { SCConfig } from '../../configs';
|
|
5
8
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
return _result;
|
|
14
|
-
};
|
|
9
|
+
const api = create({
|
|
10
|
+
headers: {
|
|
11
|
+
'Content-Type': 'application/json',
|
|
12
|
+
},
|
|
13
|
+
timeout: 30000,
|
|
14
|
+
});
|
|
15
15
|
|
|
16
16
|
const parseErrorResponse = async (error) => {
|
|
17
17
|
let message;
|
|
18
18
|
let data = {};
|
|
19
|
-
if (
|
|
20
|
-
error.
|
|
21
|
-
|
|
22
|
-
error.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const firstKey = Object.keys(error.response.data)[0];
|
|
26
|
-
message = error.response.data[firstKey];
|
|
19
|
+
if (error.data instanceof Array) {
|
|
20
|
+
message = error.data[0];
|
|
21
|
+
} else if (error.data instanceof Object) {
|
|
22
|
+
data = error.data;
|
|
23
|
+
const firstKey = Object.keys(error.data)[0];
|
|
24
|
+
message = error.data[firstKey];
|
|
27
25
|
|
|
28
26
|
if (message instanceof Array) {
|
|
29
27
|
message = message[0];
|
|
30
28
|
}
|
|
29
|
+
if (message?.message) {
|
|
30
|
+
message = message.message;
|
|
31
|
+
}
|
|
31
32
|
} else {
|
|
32
|
-
message = error.
|
|
33
|
+
message = error.data || error.problem;
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
if (typeof message === 'string') {
|
|
@@ -41,6 +42,11 @@ const parseErrorResponse = async (error) => {
|
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
44
|
if (!hideError) {
|
|
45
|
+
switch (error.problem) {
|
|
46
|
+
case PROBLEM_CODE.SERVER_ERROR:
|
|
47
|
+
message = getTranslate(SCConfig.language, 'server_error');
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
44
50
|
ToastBottomHelper.error(message);
|
|
45
51
|
}
|
|
46
52
|
}
|
|
@@ -50,7 +56,7 @@ const parseErrorResponse = async (error) => {
|
|
|
50
56
|
error,
|
|
51
57
|
message,
|
|
52
58
|
data,
|
|
53
|
-
resp_status: error?.response?.status,
|
|
59
|
+
resp_status: error?.status || error?.response?.status,
|
|
54
60
|
};
|
|
55
61
|
};
|
|
56
62
|
|
|
@@ -75,6 +81,7 @@ export async function fetchWithCache(url, config = {}, updateMethod) {
|
|
|
75
81
|
if (cacheResponse) {
|
|
76
82
|
updateMethod(cacheResponse);
|
|
77
83
|
}
|
|
84
|
+
// eslint-disable-next-line no-empty
|
|
78
85
|
} catch {}
|
|
79
86
|
const response = await axiosGet(url, config, true);
|
|
80
87
|
if (!response.cache) {
|
|
@@ -83,25 +90,34 @@ export async function fetchWithCache(url, config = {}, updateMethod) {
|
|
|
83
90
|
}
|
|
84
91
|
|
|
85
92
|
export async function axiosGet(URL, config = {}, cache = false) {
|
|
86
|
-
const cacheKey = `@CACHE_REQUEST_${URL}`;
|
|
87
93
|
let response;
|
|
88
94
|
try {
|
|
89
|
-
response = await
|
|
95
|
+
response = await api.get(URL, config.params, config);
|
|
90
96
|
} catch (error) {
|
|
91
97
|
if (cache) {
|
|
92
|
-
|
|
93
|
-
|
|
98
|
+
if (error.message === 'Network Error') {
|
|
99
|
+
return (
|
|
100
|
+
(await axiosCache(URL, 500)) || (await parseErrorResponse(error))
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
if (!error?.response || error?.response?.status >= 500) {
|
|
94
104
|
return (
|
|
95
|
-
(await axiosCache(URL, error
|
|
105
|
+
(await axiosCache(URL, error?.response?.status)) ||
|
|
96
106
|
(await parseErrorResponse(error))
|
|
97
107
|
);
|
|
98
|
-
} else {
|
|
99
|
-
await deleteData(cacheKey);
|
|
100
108
|
}
|
|
101
109
|
}
|
|
102
110
|
return await parseErrorResponse(error);
|
|
103
111
|
}
|
|
104
|
-
const { data } = response;
|
|
112
|
+
const { data, problem } = response;
|
|
113
|
+
if (problem) {
|
|
114
|
+
if (cache) {
|
|
115
|
+
return (
|
|
116
|
+
(await axiosCache(URL, 500)) || (await parseErrorResponse(response))
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
return await parseErrorResponse(response);
|
|
120
|
+
}
|
|
105
121
|
if (response.status === 200) {
|
|
106
122
|
if (cache) {
|
|
107
123
|
await storeData(`@CACHE_REQUEST_${URL}`, JSON.stringify(data));
|
|
@@ -121,18 +137,23 @@ export async function axiosGet(URL, config = {}, cache = false) {
|
|
|
121
137
|
async function axiosCall(method, ...args) {
|
|
122
138
|
let response;
|
|
123
139
|
try {
|
|
124
|
-
response = await
|
|
140
|
+
response = await api[method](...args);
|
|
125
141
|
} catch (error) {
|
|
126
142
|
return await parseErrorResponse(error);
|
|
127
143
|
}
|
|
128
144
|
|
|
129
|
-
const { data } = response;
|
|
145
|
+
const { data, problem } = response;
|
|
146
|
+
if (problem) {
|
|
147
|
+
return await parseErrorResponse(response);
|
|
148
|
+
}
|
|
149
|
+
|
|
130
150
|
if (response.status >= 200 && response.status < 300) {
|
|
131
151
|
return {
|
|
132
152
|
success: true,
|
|
133
153
|
data,
|
|
134
154
|
};
|
|
135
155
|
}
|
|
156
|
+
await parseErrorResponse(response);
|
|
136
157
|
|
|
137
158
|
return {
|
|
138
159
|
success: false,
|
|
@@ -186,3 +207,5 @@ export function createFormData(data, list_file_field) {
|
|
|
186
207
|
|
|
187
208
|
return formData;
|
|
188
209
|
}
|
|
210
|
+
|
|
211
|
+
export default api;
|
|
@@ -1,24 +1,6 @@
|
|
|
1
1
|
import t from '../../hooks/Common/useTranslations';
|
|
2
2
|
import moment from 'moment';
|
|
3
3
|
|
|
4
|
-
export const transformDatetime = (data = {}, listFieldName = []) => {
|
|
5
|
-
listFieldName.forEach((name) => {
|
|
6
|
-
const value = data[name];
|
|
7
|
-
const isArray = Array.isArray(value);
|
|
8
|
-
|
|
9
|
-
if (!data.hasOwnProperty(name)) {
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
if (isArray) {
|
|
14
|
-
data[name] = value.map((item) => (item ? moment(item) : item));
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
data[name] = value ? moment(value) : value;
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
|
-
|
|
22
4
|
export const timeDifference = (current, previous, symbol = false) => {
|
|
23
5
|
let msPerMinute = 60 * 1000;
|
|
24
6
|
let msPerHour = msPerMinute * 60;
|
|
@@ -985,5 +985,15 @@
|
|
|
985
985
|
"you_need_to_enter_password": "You need to enter password to perform this action",
|
|
986
986
|
"note": "Note",
|
|
987
987
|
"back": "Back",
|
|
988
|
-
"
|
|
988
|
+
"invaild_data": "Invaild data",
|
|
989
|
+
"This {name} was removed!" : "This {name} was removed!",
|
|
990
|
+
"camera_request_permission": "Camera request permission",
|
|
991
|
+
"camera_request_permission_des": "To use camera, please unlock camera permission",
|
|
992
|
+
"location_require_message": "EoH needs your location permission to get current location.",
|
|
993
|
+
"turn_on_location_service": "Turn on location service for your phone",
|
|
994
|
+
"turn_on_location_service_des": "To continue, let your device turn on location by turning on location service in Settings",
|
|
995
|
+
"detected": "Detected",
|
|
996
|
+
"not_detected": "Not detected",
|
|
997
|
+
"activated": "Activated",
|
|
998
|
+
"not_activated": "Not activated"
|
|
989
999
|
}
|
|
@@ -985,5 +985,16 @@
|
|
|
985
985
|
"maxmium_contacts": "Địa chỉ liên hệ tối đa",
|
|
986
986
|
"note": "Lưu ý ",
|
|
987
987
|
"back": "Quay lại",
|
|
988
|
-
"
|
|
988
|
+
"invaild_data": "Dữ liệu không hợp lệ",
|
|
989
|
+
"This {name} was removed!" : "{Name} này đã bị xóa!",
|
|
990
|
+
"location_perm_denied": "Ứng dụng không cho phép truy cập vị trí.",
|
|
991
|
+
"camera_request_permission": "Quyền yêu cầu máy ảnh",
|
|
992
|
+
"camera_request_permission_des": "Để sử dụng máy ảnh, vui lòng mở khóa quyền đối với máy ảnh",
|
|
993
|
+
"location_require_message": "Eoh cần quyền truy cập vị trí của bạn để lấy vị trí hiện tại.",
|
|
994
|
+
"turn_on_location_service": "Bật dịch vụ vị trí cho điện thoại của bạn",
|
|
995
|
+
"turn_on_location_service_des": "Để tiếp tục, bật dịch vụ vị trí cho điện thoại của bạn trong Cài Đặt",
|
|
996
|
+
"detected": "Phát hiện",
|
|
997
|
+
"not_detected": "Không phát hiện",
|
|
998
|
+
"activated": "Được kích hoạt",
|
|
999
|
+
"not_activated": "Không kích hoạt"
|
|
989
1000
|
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/* eslint-disable promise/prefer-await-to-then */
|
|
2
|
+
/* eslint-disable promise/prefer-await-to-callbacks */
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
check,
|
|
6
|
+
openSettings,
|
|
7
|
+
PERMISSIONS,
|
|
8
|
+
request,
|
|
9
|
+
RESULTS,
|
|
10
|
+
} from 'react-native-permissions';
|
|
11
|
+
import AlertAsync from 'react-native-alert-async';
|
|
12
|
+
import t from '../../hooks/Common/useTranslations';
|
|
13
|
+
import { Platform } from 'react-native';
|
|
14
|
+
|
|
15
|
+
const isAndroid = Platform.OS === 'android';
|
|
16
|
+
|
|
17
|
+
export const OpenSetting = async (alertTitle, alertMessage) => {
|
|
18
|
+
await AlertAsync(alertTitle, alertMessage, [
|
|
19
|
+
{
|
|
20
|
+
text: t('cancel'),
|
|
21
|
+
onPress: () => {},
|
|
22
|
+
style: 'cancel',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
text: t('ok'),
|
|
26
|
+
onPress: () => {
|
|
27
|
+
openSettings().then();
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
]);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export const permitPermissionFunction = (keyPermission, callback) => {
|
|
34
|
+
if (keyPermission) {
|
|
35
|
+
check(keyPermission).then((result) => {
|
|
36
|
+
switch (result) {
|
|
37
|
+
case RESULTS.DENIED:
|
|
38
|
+
case RESULTS.LIMITED:
|
|
39
|
+
request(keyPermission).then((res) => callback(res));
|
|
40
|
+
break;
|
|
41
|
+
case RESULTS.BLOCKED:
|
|
42
|
+
case RESULTS.GRANTED:
|
|
43
|
+
callback(result);
|
|
44
|
+
break;
|
|
45
|
+
default:
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export const keyPermission = {
|
|
53
|
+
SMS_RECEIVE: PERMISSIONS.ANDROID.RECEIVE_SMS,
|
|
54
|
+
LOCATION: isAndroid
|
|
55
|
+
? PERMISSIONS.ANDROID.ACCESS_FINE_LOCATION
|
|
56
|
+
: PERMISSIONS.IOS.LOCATION_WHEN_IN_USE,
|
|
57
|
+
CAMERA: isAndroid ? PERMISSIONS.ANDROID.CAMERA : PERMISSIONS.IOS.CAMERA,
|
|
58
|
+
SELECT_PHOTO: isAndroid
|
|
59
|
+
? PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE
|
|
60
|
+
: PERMISSIONS.IOS.PHOTO_LIBRARY,
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export const GEOLOCATION_ERROR = {
|
|
64
|
+
PERMISSION_DENIED: 1,
|
|
65
|
+
POSITION_UNAVAILABLE: 2,
|
|
66
|
+
TIMEOUT: 3,
|
|
67
|
+
};
|
package/src/utils/Route/index.js
CHANGED
|
@@ -136,6 +136,7 @@ const Routes = {
|
|
|
136
136
|
SmartAccount: 'SmartAccount',
|
|
137
137
|
SmartHomeDashboard: 'SmartHomeDashboard',
|
|
138
138
|
SetupGeneratePasscode: 'SetupGeneratePasscode',
|
|
139
|
+
SideMenuDetail: 'SideMenuDetail',
|
|
139
140
|
SelectDeviceType: 'SelectDeviceType',
|
|
140
141
|
SelectBrand: 'SelectBrand',
|
|
141
142
|
GroupButtonByType: 'GroupButtonByType',
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Platform } from 'react-native';
|
|
2
|
+
import RNAndroidLocationEnabler from 'react-native-android-location-enabler';
|
|
3
|
+
import AlertAsync from 'react-native-alert-async';
|
|
4
|
+
import t from '../../hooks/Common/useTranslations';
|
|
5
|
+
|
|
6
|
+
export const openPromptEnableLocation = async () => {
|
|
7
|
+
if (Platform.OS === 'android') {
|
|
8
|
+
try {
|
|
9
|
+
await RNAndroidLocationEnabler.promptForEnableLocationIfNeeded({
|
|
10
|
+
interval: 10000,
|
|
11
|
+
fastInterval: 5000,
|
|
12
|
+
});
|
|
13
|
+
return true;
|
|
14
|
+
} catch (err) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
} else {
|
|
18
|
+
await AlertAsync(
|
|
19
|
+
t('turn_on_location_service'),
|
|
20
|
+
t('turn_on_location_service_des'),
|
|
21
|
+
[
|
|
22
|
+
{
|
|
23
|
+
text: t('ok'),
|
|
24
|
+
onPress: () => {},
|
|
25
|
+
},
|
|
26
|
+
]
|
|
27
|
+
);
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
};
|
package/src/utils/Utils.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { PixelRatio, Linking } from 'react-native';
|
|
1
|
+
import { PixelRatio, Linking, Alert } from 'react-native';
|
|
2
2
|
import Toast from 'react-native-toast-message';
|
|
3
3
|
import validator from 'validator';
|
|
4
|
-
import axios from 'axios';
|
|
5
4
|
import { Constants } from '../configs';
|
|
5
|
+
import api from './Apis/axios';
|
|
6
6
|
|
|
7
7
|
export const setAxiosDefaultAuthToken = (token) => {
|
|
8
|
-
|
|
9
|
-
axios.defaults.headers.common.Authorization = `Token ${token}`;
|
|
8
|
+
api.setHeaders({ Authorization: `Token ${token}` });
|
|
10
9
|
};
|
|
11
10
|
|
|
12
11
|
export const setAxiosDefaultLanguage = (language) => {
|
|
13
|
-
|
|
14
|
-
language || Constants.LANGUAGE.DEFAULT
|
|
12
|
+
api.setHeaders({
|
|
13
|
+
'Accept-Language': language || Constants.LANGUAGE.DEFAULT,
|
|
14
|
+
});
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
export const deleteDefaultAuthToken = () => {
|
|
18
|
-
delete
|
|
18
|
+
delete api.headers.Authorization;
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
export const validateEmail = (text) => {
|
|
@@ -115,6 +115,7 @@ export const object_Ids = (data) => {
|
|
|
115
115
|
let configIds = [];
|
|
116
116
|
data?.forEach((station) => {
|
|
117
117
|
stationIds.push(station?.id);
|
|
118
|
+
//Todo change devices When production release end_devices
|
|
118
119
|
station?.sensors?.forEach((sensor) => {
|
|
119
120
|
sensorIds.push(sensor?.id);
|
|
120
121
|
sensor?.actions?.forEach((action) => {
|
|
@@ -129,6 +130,10 @@ export const object_Ids = (data) => {
|
|
|
129
130
|
return listObject;
|
|
130
131
|
};
|
|
131
132
|
|
|
133
|
+
export const notImplemented = (t) => {
|
|
134
|
+
Alert.alert(t('feature_under_development'));
|
|
135
|
+
};
|
|
136
|
+
|
|
132
137
|
export default {
|
|
133
138
|
validateEmail,
|
|
134
139
|
isObjectEmpty,
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { validateEmail, formatMoney } from '../Utils';
|
|
2
|
+
|
|
3
|
+
describe('Test utils', () => {
|
|
4
|
+
test('test validateEmail', () => {
|
|
5
|
+
const result = validateEmail('eoh.2020@gmail.com');
|
|
6
|
+
expect(result).toEqual(true);
|
|
7
|
+
});
|
|
8
|
+
test('test formatMoney', () => {
|
|
9
|
+
const result = formatMoney(10000);
|
|
10
|
+
expect(result).toEqual('10.000 đ');
|
|
11
|
+
});
|
|
12
|
+
});
|