@eohjsc/react-native-smart-city 0.2.45 → 0.2.49
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 +9 -0
- package/index.js +6 -0
- package/package.json +23 -3
- package/src/Images/Common/logo.png +0 -0
- package/src/Images/Common/logo@2x.png +0 -0
- package/src/Images/Common/logo@3x.png +0 -0
- package/src/commons/ActionTemplate/index.js +40 -25
- package/src/commons/Automate/ItemAutomate.js +2 -2
- package/src/commons/Dashboard/MyPinnedSharedUnit/index.js +82 -0
- package/src/commons/Dashboard/MyPinnedSharedUnit/styles.js +78 -0
- package/src/commons/Dashboard/MyUnit/__test__/MyUnit.test.js +60 -0
- package/src/commons/Dashboard/MyUnit/index.js +111 -0
- package/src/commons/Dashboard/MyUnit/styles.js +61 -0
- package/src/commons/Device/ConnectedViewHeader.js +4 -1
- package/src/commons/Form/TextInput.js +1 -1
- package/src/commons/MediaPlayer/index.js +6 -1
- package/src/commons/OneTapTemplate/OptionsDropdownActionTemplate.js +3 -3
- package/src/{screens/Unit/components → commons}/SearchLocation/RowLocation.js +2 -2
- package/src/{screens/Unit/components → commons}/SearchLocation/RowLocationStyles.js +1 -1
- package/src/{screens/Unit/components → commons}/SearchLocation/SearchBarLocationStyles.js +1 -1
- package/src/{screens/Unit/components → commons}/SearchLocation/__test__/RowLocation.test.js +2 -2
- package/src/{screens/Unit/components → commons}/SearchLocation/index.js +2 -2
- package/src/commons/SubUnit/OneTap/ItemOneTap.js +3 -1
- package/src/commons/SubUnit/OneTap/__test__/SubUnitAutomate.test.js +2 -0
- package/src/commons/SubUnit/ShortDetail.js +1 -1
- package/src/commons/Unit/SharedUnit.js +2 -2
- package/src/configs/API.js +11 -4
- package/src/configs/Constants.js +19 -6
- package/src/configs/Images.js +1 -0
- package/src/iot/RemoteControl/Bluetooth.js +10 -1
- package/src/iot/RemoteControl/Internet.js +0 -2
- package/src/navigations/AddDeviceStack.js +5 -0
- package/src/navigations/AddUnitStack.js +2 -0
- package/src/navigations/UnitStack.js +8 -0
- package/src/screens/ActivityLog/FilterPopup.js +24 -17
- package/src/screens/ActivityLog/ItemLog.js +26 -22
- package/src/screens/ActivityLog/__test__/FilterPopup.test.js +1 -0
- package/src/screens/ActivityLog/__test__/ItemLog.test.js +0 -20
- package/src/screens/ActivityLog/__test__/index.test.js +3 -0
- package/src/screens/ActivityLog/hooks/__test__/index.test.js +8 -0
- package/src/screens/ActivityLog/hooks/index.js +5 -9
- package/src/screens/ActivityLog/index.js +4 -4
- package/src/screens/ActivityLog/styles/filterPopupStyles.js +3 -0
- package/src/screens/AddCommon/SelectSubUnit.js +10 -1
- package/src/screens/AddCommon/SelectUnit.js +11 -0
- package/src/screens/AddLocationMaps/index.js +124 -74
- package/src/screens/AddLocationMaps/indexStyle.js +58 -0
- package/src/screens/AddNewAction/SelectAction.js +59 -4
- package/src/screens/AddNewAction/SelectSensorDevices.js +27 -5
- package/src/screens/AddNewAction/SetupSensor.js +1 -6
- package/src/screens/AddNewAction/__test__/SelectAction.test.js +6 -4
- package/src/screens/AddNewAutoSmart/__test__/AddNewAutoSmart.test.js +11 -1
- package/src/screens/AddNewAutoSmart/index.js +24 -13
- package/src/screens/AddNewDevice/ConnectingDevices.js +3 -0
- package/src/screens/AddNewGateway/ConnectingGatewayStyles.js +10 -1
- package/src/screens/AddNewOneTap/__test__/AddNewOneTap.test.js +9 -1
- package/src/screens/AddNewOneTap/index.js +11 -6
- package/src/screens/Automate/MultiUnits.js +14 -53
- package/src/screens/Automate/__test__/MultiUnits.test.js +5 -246
- package/src/screens/Automate/__test__/index.test.js +1 -0
- package/src/screens/Automate/index.js +1 -0
- package/src/screens/Device/__test__/detail.test.js +14 -0
- package/src/screens/Device/components/DetailHistoryChart.js +63 -0
- package/src/screens/Device/components/EmergencyCountdown.js +29 -0
- package/src/screens/Device/components/SensorConnectStatusViewHeader.js +57 -0
- package/src/screens/Device/components/SensorDisplayItem.js +127 -0
- package/src/screens/Device/detail.js +81 -294
- package/src/screens/Device/hooks/useDisconnectedDevice.js +63 -0
- package/src/screens/Device/styles.js +0 -10
- package/src/screens/GuestInfo/components/RecurringDetail.js +2 -2
- package/src/screens/Notification/components/NotificationItem.js +31 -14
- package/src/screens/Notification/styles/NotificationItemStyles.js +5 -0
- package/src/screens/ScanChipQR/__test__/ScanChipQR.test.js +12 -3
- package/src/screens/ScanChipQR/components/QRScan/__test__/QRScan.test.js +11 -2
- package/src/screens/ScanSensorQR/__test__/ScanSensorQR.test.js +12 -3
- package/src/screens/ScriptDetail/__test__/index.test.js +83 -3
- package/src/screens/ScriptDetail/hooks/index.js +4 -0
- package/src/screens/ScriptDetail/index.js +65 -4
- package/src/screens/SetSchedule/__test__/SelectWeekday.test.js +2 -2
- package/src/screens/SetSchedule/__test__/index.test.js +8 -0
- package/src/screens/SetSchedule/components/SelectWeekday.js +13 -7
- package/src/screens/SetSchedule/index.js +28 -6
- package/src/screens/Sharing/Components/__test__/TitleCheckBox.test.js +38 -0
- package/src/screens/SubUnit/AddSubUnit.js +113 -29
- package/src/screens/SubUnit/AddSubUnitStyles.js +10 -0
- package/src/screens/SubUnit/__test__/AddSubUnit.test.js +1 -0
- package/src/screens/TDSGuide/index.js +15 -19
- package/src/screens/Unit/MoreMenu.js +6 -1
- package/src/screens/Unit/SelectLocation.js +2 -3
- package/src/screens/Unit/SmartAccount.js +141 -0
- package/src/screens/Unit/SmartAccountItem.js +51 -0
- package/src/screens/Unit/SmartAccountStyles.js +46 -0
- package/src/screens/Unit/__test__/SmartAccount.test.js +58 -0
- package/src/screens/Unit/hook/useStateAlertRemove.js +36 -0
- package/src/utils/I18n/translations/en.json +26 -2
- package/src/utils/I18n/translations/vi.json +38 -14
- package/src/utils/Route/index.js +4 -0
- package/src/utils/Validation.js +3 -1
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import renderer, { act } from 'react-test-renderer';
|
|
3
|
+
import axios from 'axios';
|
|
4
|
+
|
|
5
|
+
import { SCProvider } from '../../../context';
|
|
6
|
+
import { mockSCStore } from '../../../context/mockStore';
|
|
7
|
+
import ListSmartAccount from '../SmartAccount';
|
|
8
|
+
import { SmartAccountItem } from '../SmartAccountItem';
|
|
9
|
+
|
|
10
|
+
const wrapComponent = (route, navigation) => (
|
|
11
|
+
<SCProvider initState={mockSCStore({})}>
|
|
12
|
+
<ListSmartAccount />
|
|
13
|
+
</SCProvider>
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
jest.mock('react', () => {
|
|
17
|
+
return {
|
|
18
|
+
...jest.requireActual('react'),
|
|
19
|
+
memo: (x) => x,
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
jest.mock('axios');
|
|
24
|
+
describe('Test SmartAccount', () => {
|
|
25
|
+
let tree;
|
|
26
|
+
test('test render SmartAccount', async () => {
|
|
27
|
+
axios.get.mockImplementationOnce(() => ({
|
|
28
|
+
status: 200,
|
|
29
|
+
data: [
|
|
30
|
+
{
|
|
31
|
+
brand: 'google_home',
|
|
32
|
+
id: 9,
|
|
33
|
+
logo: null,
|
|
34
|
+
username: 'dienquangsmart08@gmail.com',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
brand: 'google home',
|
|
38
|
+
id: 7,
|
|
39
|
+
logo: 'https://eoh-gateway-backend.eoh.io/logolgggggg.png',
|
|
40
|
+
username: 'do.loi@eoh.io',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
brand: 'google home',
|
|
44
|
+
id: 5,
|
|
45
|
+
logo: 'https://eoh-gateway-backend.eoh.io/reminderpopup2.png',
|
|
46
|
+
username: 'loitest3',
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
}));
|
|
50
|
+
await act(async () => {
|
|
51
|
+
tree = await renderer.create(wrapComponent());
|
|
52
|
+
});
|
|
53
|
+
const instance = tree.root;
|
|
54
|
+
|
|
55
|
+
const smartAccountItem = instance.findAllByType(SmartAccountItem);
|
|
56
|
+
expect(smartAccountItem.length).toEqual(3);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useCallback, useState } from 'react';
|
|
2
|
+
import { useTranslations } from '../../../hooks/Common/useTranslations';
|
|
3
|
+
|
|
4
|
+
export const useStateAlertRemove = () => {
|
|
5
|
+
const t = useTranslations();
|
|
6
|
+
const [stateAlertRemove, setStateAlertRemove] = useState({
|
|
7
|
+
visible: false,
|
|
8
|
+
title: t('delete_smart_account'),
|
|
9
|
+
message: '',
|
|
10
|
+
leftButton: t('cancel'),
|
|
11
|
+
rightButton: t('remove'),
|
|
12
|
+
});
|
|
13
|
+
const hideAlertAction = useCallback(() => {
|
|
14
|
+
setStateAlertRemove((state) => ({
|
|
15
|
+
...state,
|
|
16
|
+
visible: false,
|
|
17
|
+
}));
|
|
18
|
+
}, []);
|
|
19
|
+
|
|
20
|
+
const onShowRemoveAlert = useCallback(
|
|
21
|
+
(brand) => () => {
|
|
22
|
+
setStateAlertRemove((state) => ({
|
|
23
|
+
...state,
|
|
24
|
+
visible: true,
|
|
25
|
+
message: `${t('are_you_sure_want_to_delete', { text: brand })}`,
|
|
26
|
+
}));
|
|
27
|
+
},
|
|
28
|
+
[t]
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
return {
|
|
32
|
+
stateAlertRemove,
|
|
33
|
+
hideAlertAction,
|
|
34
|
+
onShowRemoveAlert,
|
|
35
|
+
};
|
|
36
|
+
};
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"account_logout_do_you_really_want_to_logout": "Do you really want to log out?",
|
|
6
6
|
"add_new": "Add new",
|
|
7
7
|
"add_user_title": "Add new member",
|
|
8
|
-
"add_user_sub_title": "Invite a member to your unit by entering their phone number",
|
|
8
|
+
"add_user_sub_title": "Invite a member to your unit by entering their phone number or email",
|
|
9
9
|
"add_user_phone_number": "Phone number",
|
|
10
10
|
"add_user_invite": "Invite",
|
|
11
11
|
"add_user_note": "Please note that your personal data including records of your control of the connected devices and services will be shared with other members in the same unit.",
|
|
@@ -183,6 +183,10 @@
|
|
|
183
183
|
"text_low_level": "Low",
|
|
184
184
|
"text_high_level": "High",
|
|
185
185
|
"launch_one_tap": "Launch One-Tap",
|
|
186
|
+
"explanation": "Do everything with just one button",
|
|
187
|
+
"value_change": "Value change",
|
|
188
|
+
"schedule": "Schedule",
|
|
189
|
+
"short_explanation": "Short explanation",
|
|
186
190
|
"des_launch_one_tap": "Quick button create at the dashboard",
|
|
187
191
|
"active_list": "Actions List",
|
|
188
192
|
"text_very_good_level": "Very good",
|
|
@@ -264,6 +268,7 @@
|
|
|
264
268
|
"add_sub_unit_wallpaper": "Wallpaper",
|
|
265
269
|
"text_create_sub_unit_success": "Create new sub-unit success!",
|
|
266
270
|
"text_create_sub_unit_fail": "Failed to create new sub-unit!",
|
|
271
|
+
"text_create_unit_fail": "Failed to create new unit!",
|
|
267
272
|
"manage_unit": "Manage unit",
|
|
268
273
|
"text_bad": "Bad",
|
|
269
274
|
"text_select_a_unit": "Select a unit",
|
|
@@ -654,6 +659,7 @@
|
|
|
654
659
|
"text_notification_content_pay_fine_successfully": "Your violation **%{booking}** has been paid successfully.",
|
|
655
660
|
"text_notification_content_pay_fine_and_extend_successfully": "Your violation **%{booking_id_old}** has been paid successfully. The new parking session **%{booking_id_new}** is now extended until **%{leave_time}**.",
|
|
656
661
|
"text_notification_content_stop_violation_free_parking_zone": "Free parking zone. You have an unpaid violation. Please complete your fine.",
|
|
662
|
+
"text_notification_content_update_reminder": "You have an Update Health Value schedule need to complete.",
|
|
657
663
|
"this_spot_does_not_exsit": "This spot does not exist",
|
|
658
664
|
"please_scan_again_or_contact_the_parking_manager": "Please scan again or contact the parking manager",
|
|
659
665
|
"this_spot_does_not_support_to_scan": "This spot does not support to scan",
|
|
@@ -731,7 +737,7 @@
|
|
|
731
737
|
"modbus_fail": "Modbus failrate",
|
|
732
738
|
"rssi_node": "RSSI Node",
|
|
733
739
|
"edit_actions_list": "Edit Actions List",
|
|
734
|
-
"des_edit_actions_list": "
|
|
740
|
+
"des_edit_actions_list": "Hold and hover to rearrange actions order",
|
|
735
741
|
"please_add_your_phone_number_and_chip_name": "Please add your phone number and chip name",
|
|
736
742
|
"phone_number_of_data_sim": "Phone number of data sim",
|
|
737
743
|
"select_a_sub_unit": "Select a sub-unit that you want to add this gateway",
|
|
@@ -746,6 +752,7 @@
|
|
|
746
752
|
"lg_sync_success": "Sync LG device success!",
|
|
747
753
|
"setting_at": "Setting at",
|
|
748
754
|
"name_your_button": "Name your button",
|
|
755
|
+
"name_your_script": "Name your script",
|
|
749
756
|
"continue": "Continue",
|
|
750
757
|
"multi_units_automate": "Multi-Units Smart",
|
|
751
758
|
"tap_to_run": "Tap to run",
|
|
@@ -779,6 +786,9 @@
|
|
|
779
786
|
"update_smart": "Update Smart",
|
|
780
787
|
"automate": "Automate",
|
|
781
788
|
"smart": "Smart",
|
|
789
|
+
"smart_account": "Smart account",
|
|
790
|
+
"delete_smart_account": "Delete smart account",
|
|
791
|
+
"are_you_sure_want_to_delete": "Are you sure you want to delete {text} ?",
|
|
782
792
|
"multi_unit": "Multi Units",
|
|
783
793
|
"edit_device": "Edit Device",
|
|
784
794
|
"device_name": "Device name",
|
|
@@ -789,6 +799,7 @@
|
|
|
789
799
|
"choose_the_automation_method_you_want": "Choose the automation method you want",
|
|
790
800
|
"auto_activated": "Auto Activated",
|
|
791
801
|
"activated_by": "Activated by",
|
|
802
|
+
"delete": "Delete",
|
|
792
803
|
"apply": "Apply",
|
|
793
804
|
"by_date": "By Date",
|
|
794
805
|
"by_user": "By User",
|
|
@@ -811,6 +822,19 @@
|
|
|
811
822
|
"quick_button_create_at_dashboard": "Quick button create at dashboard",
|
|
812
823
|
"every_day_at": "Every day at {time}",
|
|
813
824
|
"you_do_not_have_the_device_or_have_share_control_device": "You do not have the device or you haven’t been shared the control for the device.",
|
|
825
|
+
"your_internet_is_disconnected_change_to_control_via_bluetooth_connection": "Your internet is disconnected, change to control {name} via Bluetooth connection",
|
|
826
|
+
"your_connection_to_the_server_was_disconnected_please_open_the_bluetooth_to_continue": "Your connection to the server was disconnected, Please open the Bluetooth to continue",
|
|
814
827
|
"error_please_try_later": "Error! Please try later",
|
|
828
|
+
"mon": "Mon",
|
|
829
|
+
"tue": "Tue",
|
|
830
|
+
"wed": "Wed",
|
|
831
|
+
"thu": "Thu",
|
|
832
|
+
"fri": "Fri",
|
|
833
|
+
"sat": "Sat",
|
|
834
|
+
"sun": "Sun",
|
|
835
|
+
"connected_via_bluetooth": "Connected via Bluetooth",
|
|
836
|
+
"connected_via_internet": "Connected via Internet",
|
|
837
|
+
"name_your_unit": "Name your unit",
|
|
838
|
+
"script_updated_by": "Script updated by",
|
|
815
839
|
"qr_scan_guidelines": "The QR code will be detected automatically when it’s positioned within the guide lines."
|
|
816
840
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"account_logout_do_you_really_want_to_logout": "Bạn muốn đăng xuất khỏi tài khoản?",
|
|
3
|
-
"add_new": "Thêm",
|
|
3
|
+
"add_new": "Thêm mới",
|
|
4
4
|
"by_signing_up_you_agree_to_our_cterms_of_usec": "Bằng việc nhấn nút đăng ký, bạn đã đồng ý với các",
|
|
5
5
|
"cancel": "Hủy",
|
|
6
6
|
"confirm_password": "Xác nhận mật khẩu",
|
|
@@ -28,10 +28,10 @@
|
|
|
28
28
|
"remove_device": "Xoá thiết bị",
|
|
29
29
|
"activity_log": "Nhật kí hoạt động",
|
|
30
30
|
"no_activity": "Không có nhật kí hoạt động",
|
|
31
|
-
"by": "
|
|
31
|
+
"by": "bởi",
|
|
32
32
|
"create_by": "Tạo bởi",
|
|
33
|
-
"today": "
|
|
34
|
-
"yesterday": "
|
|
33
|
+
"today": "Hôm nay",
|
|
34
|
+
"yesterday": "Hôm qua",
|
|
35
35
|
"at": "lúc",
|
|
36
36
|
"video_detail": "Chi tiết Video",
|
|
37
37
|
"Yesterday": "Hôm qua",
|
|
@@ -41,6 +41,10 @@
|
|
|
41
41
|
"tank_working_normally": "Máy lọc hoạt động bình thường.",
|
|
42
42
|
"filters": "Lõi lọc",
|
|
43
43
|
"launch_one_tap": "Khởi chạy một lần chạm",
|
|
44
|
+
"explanation": "Làm mọi thứ chỉ với một nút",
|
|
45
|
+
"value_change": "Thay đổi giá trị",
|
|
46
|
+
"short_explanation": "Giải thích ngắn gọn",
|
|
47
|
+
"schedule": "Lịch trình",
|
|
44
48
|
"des_launch_one_tap": "Tạo nút nhanh trên trang tổng quan",
|
|
45
49
|
"active_list": "Danh sách hành động",
|
|
46
50
|
"filtering": "Đang sục rửa",
|
|
@@ -71,7 +75,7 @@
|
|
|
71
75
|
"is_below": "dưới",
|
|
72
76
|
"is_above": "trên",
|
|
73
77
|
"edit_actions_list": "Chỉnh sửa danh sách hành động",
|
|
74
|
-
"des_edit_actions_list": "
|
|
78
|
+
"des_edit_actions_list": "Nhấn giữ và di chuyển để sắp xếp lại thứ tự các hành động",
|
|
75
79
|
"sub_unit": "Khu vực",
|
|
76
80
|
"sub_units": "Khu vực",
|
|
77
81
|
"device": "Thiết bị",
|
|
@@ -134,7 +138,7 @@
|
|
|
134
138
|
"text_not_available": "--",
|
|
135
139
|
"text_not_available_word": "Hiện tại không có số liệu",
|
|
136
140
|
"add_user_title": "Thêm thành viên",
|
|
137
|
-
"add_user_sub_title": "Hãy mời thành viên bằng cách nhập số điện thoại của họ",
|
|
141
|
+
"add_user_sub_title": "Hãy mời thành viên bằng cách nhập số điện thoại hoặc email của họ ",
|
|
138
142
|
"add_user_phone_number": "Số điện thoại",
|
|
139
143
|
"add_user_invite": "Mời",
|
|
140
144
|
"add_user_note": "Họ sẽ có thể điều khiển thiết bị tại địa điểm này. Vui lòng lưu ý rằng dữ liệu cá nhân của bạn bao gồm các hồ sơ về việc bạn kiểm soát dịch vụ và các thiết bị được kết nối của từng khu vực sẽ được chia sẻ với các thành viên khác cùng địa điểm.",
|
|
@@ -299,6 +303,7 @@
|
|
|
299
303
|
"add_sub_unit_wallpaper": "Hình nền",
|
|
300
304
|
"text_create_sub_unit_success": "Tạo khu vực thành công!",
|
|
301
305
|
"text_create_sub_unit_fail": "Tạo khu vực thất bại!",
|
|
306
|
+
"text_create_unit_fail": "Tạo khu vực thất bại!",
|
|
302
307
|
"manage_unit": "Quản lý địa điểm",
|
|
303
308
|
"text_bad": "Xấu",
|
|
304
309
|
"text_select_a_unit": "Chọn một địa điểm",
|
|
@@ -648,20 +653,21 @@
|
|
|
648
653
|
"text_notification_title_system_cancel_emergency_situation": "Đặt chỗ bị huỷ do tình huống khẩn cấp",
|
|
649
654
|
"text_notification_title_booking_successfully": "Xác nhận đặt chỗ thành công",
|
|
650
655
|
"text_notification_title_parking_completed": "Hoàn tất đỗ xe",
|
|
651
|
-
"
|
|
652
|
-
"
|
|
653
|
-
"
|
|
654
|
-
"
|
|
655
|
-
"
|
|
656
|
+
"text_notification_content_remind_to_make_payment": "Đặt chỗ **%{booking}** chưa hoàn tất. Vui lòng thực hiện thanh toán trước **%{time}** để giữ đặt trước của bạn.",
|
|
657
|
+
"text_notification_content_expire_parking_session": "Phiên đỗ xe **%{booking}** sẽ sớm kết thúc. Vui lòng di chuyển xe trước **%{time}** hoặc thêm giờ đỗ xe.",
|
|
658
|
+
"text_notification_content_remind_to_scan_qr_code": "Đặt chỗ **%{booking}** chưa được kích hoạt. Vui lòng quét mã QR tại vị trí đỗ xe được cung cấp để kích hoạt đặt chỗ trước của bạn.",
|
|
659
|
+
"text_notification_content_user_cancel": "Yêu cầu huỷ đặt chỗ trước của bạn đã được chấp nhận. Đặt chỗ **%{booking}** đã được huỷ thành công.",
|
|
660
|
+
"text_notification_content_system_cancel_no_payment": "Đặt chỗ **%{booking}** đã tự động huỷ bởi hệ thống do quá hạn thanh toán.",
|
|
656
661
|
"text_notification_content_system_cancel_emergency_situation_%{spot}": "Chúng tôi rất tiếc vì đặt chỗ %{spot} đã bị huỷ vì một tình huống khẩn cấp. Bạn sẽ nhận được phiếu giảm giá cho lần đỗ xe tiếp theo. ",
|
|
657
|
-
"
|
|
658
|
-
"
|
|
662
|
+
"text_notification_content_booking_successfully": "Đặt chỗ **%{booking}** đã được xác nhận.",
|
|
663
|
+
"text_notification_content_parking_completed": "Đặt chỗ **%{booking}** đã hoàn tất. Cảm ơn đã sử dụng dịch vụ của chúng tôi.",
|
|
659
664
|
"text_notification_content_invite_member": "**%{unit_owner_name}** mời bạn đến địa điểm **%{unit_name}**.",
|
|
660
665
|
"text_notification_content_not_move_car_after_parking_session_expire": "Xe của bạn (booking **%{booking}**) đã bị khóa do vi phạm quy định về giờ đỗ xe của chúng tôi. Vui lòng nộp phạt để mở khóa và di chuyển xe của bạn.",
|
|
661
666
|
"text_notification_content_move_car_without_pay_violation": "Bạn có một vi phạm chưa được thanh toán. Vui lòng hoàn thành tiền phạt của bạn.",
|
|
662
667
|
"text_notification_content_pay_fine_successfully": "Đỗ xe vi phạm **%{booking}** của bạn đã được thanh toán.",
|
|
663
668
|
"text_notification_content_pay_fine_and_extend_successfully": "Đỗ xe vi phạm **%{oldbooking}** của bạn đã được thanh toán thành công. Phiên đỗ xe mới **%{newbooking}** sẽ kết thúc vào lúc **%{time}**.",
|
|
664
669
|
"text_notification_content_stop_violation_free_parking_zone": "Thời gian đậu xe miễn phí. Bạn có một vi phạm chưa được thanh toán. Vui lòng hoàn thành tiền phạt của bạn.",
|
|
670
|
+
"text_notification_content_update_reminder": "Bạn có một nhắc nhở cập nhật chỉ số sức khỏe cần hoàn thành.",
|
|
665
671
|
"this_spot_does_not_exsit": "Vị trí đỗ này không tồn tại",
|
|
666
672
|
"please_scan_again_or_contact_the_parking_manager": "Vui lòng quét lại hoặc liên hệ với người quản lý bãi đậu xe",
|
|
667
673
|
"this_spot_does_not_support_to_scan": "Vị trí đỗ này không hỗ trợ quét",
|
|
@@ -676,8 +682,8 @@
|
|
|
676
682
|
"are_you_sure_this_resolved": "Bạn có chắc tình huống khẩn cấp này đã được xử lý xong? Các thành viên thuộc địa điểm này cũng sẽ nhận được thông báo.",
|
|
677
683
|
"resolve_emergency": "Xử lý tình huống khẩn cấp",
|
|
678
684
|
"resolve": "Xử lý",
|
|
679
|
-
"alert": "Cảnh báo",
|
|
680
685
|
"your_account_has_not_been_authorized_to_control": "Tài khoản của bạn chưa được phân quyền để điều khiển",
|
|
686
|
+
"alert": "Cảnh báo",
|
|
681
687
|
"take_photo": "Chụp Ảnh",
|
|
682
688
|
"choose_from_library": "Chọn Ảnh từ Thư Viện",
|
|
683
689
|
"setup_my_emergency_contact": "Danh sách liên hệ khẩn cấp của tôi",
|
|
@@ -749,6 +755,7 @@
|
|
|
749
755
|
"lg_sync_success": "Đồng bộ thiết bị LG thành công!",
|
|
750
756
|
"setting_at": "Thiết lập tại",
|
|
751
757
|
"name_your_button": "Đặt tên cho nút nhấn của bạn",
|
|
758
|
+
"name_your_script": "Đặt tên cho kịch bản của bạn",
|
|
752
759
|
"continue": "Tiếp tục",
|
|
753
760
|
"tap_to_run": "Nhấn để chạy",
|
|
754
761
|
"how_to_start": "Cách khởi động",
|
|
@@ -780,6 +787,9 @@
|
|
|
780
787
|
"update_smart": "Cập nhật thông minh",
|
|
781
788
|
"automate": "Tự động",
|
|
782
789
|
"smart": "Thông minh",
|
|
790
|
+
"smart_account": "Tài khoản thông minh",
|
|
791
|
+
"delete_smart_account": "Xóa tài khoản thông minh",
|
|
792
|
+
"are_you_sure_want_to_delete": "Bạn có muốn xóa {text} ?",
|
|
783
793
|
"edit_device": "Chỉnh sửa thiết bị",
|
|
784
794
|
"device_name": "Tên thiết bị",
|
|
785
795
|
"rename_successfully": "Đổi tên thành công!",
|
|
@@ -790,6 +800,7 @@
|
|
|
790
800
|
"choose_the_automation_method_you_want": "Chọn phương thức tự động hóa mà bạn mong muốn",
|
|
791
801
|
"auto_activated": "Tự động kích hoạt",
|
|
792
802
|
"activated_by": "Đã kích hoạt bởi",
|
|
803
|
+
"delete": "Xóa",
|
|
793
804
|
"apply": "Xác nhận",
|
|
794
805
|
"by_date": "By Date",
|
|
795
806
|
"by_user": "By User",
|
|
@@ -812,6 +823,19 @@
|
|
|
812
823
|
"quick_button_create_at_dashboard": "Tạo nút nhanh trên bảng điều khiển",
|
|
813
824
|
"every_day_at": "Mỗi ngày vào lúc {time}",
|
|
814
825
|
"you_do_not_have_the_device_or_have_share_control_device": "Bạn không có thiết bị nào hoặc chưa được cấp quyền để điều khiển thiết bị.",
|
|
826
|
+
"your_internet_is_disconnected_change_to_control_via_bluetooth_connection":"Internet của bạn bị ngắt kết nối, thay đổi sang điều khiển {name} qua kết nối Bluetooth",
|
|
827
|
+
"your_connection_to_the_server_was_disconnected_please_open_the_bluetooth_to_continue": "Kết nối của bạn với máy chủ đã bị ngắt, vui lòng mở Bluetooth để tiếp tục",
|
|
815
828
|
"error_please_try_later": "Lỗi! Vui lòng thử lại sau",
|
|
829
|
+
"mon": "T2",
|
|
830
|
+
"tue": "T3",
|
|
831
|
+
"wed": "T4",
|
|
832
|
+
"thu": "T5",
|
|
833
|
+
"fri": "T6",
|
|
834
|
+
"sat": "T7",
|
|
835
|
+
"sun": "CN",
|
|
836
|
+
"connected_via_bluetooth": "Đã kết nối điều khiển thông qua Bluetooth",
|
|
837
|
+
"connected_via_internet": "Đã kết nối điều khiển thông qua Internet",
|
|
838
|
+
"name_your_unit": "Đặt tên cho khu vực của bạn",
|
|
839
|
+
"script_updated_by": "Kịch bản được cập nhật bởi",
|
|
816
840
|
"qr_scan_guidelines": "Mã QR sẽ được phát hiện tự động khi nó được định vị trong các dòng hướng dẫn."
|
|
817
841
|
}
|
package/src/utils/Route/index.js
CHANGED
|
@@ -114,6 +114,10 @@ const Routes = {
|
|
|
114
114
|
EditDevice: 'EditDevice',
|
|
115
115
|
SetSchedule: 'SetSchedule',
|
|
116
116
|
Notification: 'Notification',
|
|
117
|
+
PersonalHealthStack: 'PersonalHealthStack',
|
|
118
|
+
ListSmartAccount: 'ListSmartAccount',
|
|
119
|
+
ListDeviceSmartAccount: 'ListDeviceSmartAccount',
|
|
120
|
+
SmartAccountConnecting: 'SmartAccountConnecting',
|
|
117
121
|
};
|
|
118
122
|
|
|
119
123
|
export default Routes;
|
package/src/utils/Validation.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export const isValidPhoneNumber = (phoneNumber) => {
|
|
2
|
-
return
|
|
2
|
+
return /^(0?)(3[2-9]|5[6|8|9]|7[0|6-9]|8[0-6|8|9]|9[0-4|6-9])[0-9]{7}$/.test(
|
|
3
|
+
phoneNumber
|
|
4
|
+
);
|
|
3
5
|
};
|
|
4
6
|
|
|
5
7
|
export const isValidEmailAddress = (emailAddress) => {
|