@dxtmisha/wiki 0.39.7 → 0.39.8
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/dist/{defineProperty-DblGXmzD.js → defineProperty-Bjg6wMoX.js} +4 -4
- package/dist/library.js +1 -1
- package/dist/media.js +12 -0
- package/dist/storybook.js +1 -1
- package/package.json +1 -1
- package/src/media/functional/functional-basic/api/api.en.mdx +45 -0
- package/src/media/functional/functional-basic/api/api.ru.mdx +45 -0
- package/src/media/functional/functional-basic/api/api.vi.mdx +45 -0
- package/src/media/functional/functional-basic/classes/Api/Api.en.mdx +54 -54
- package/src/media/functional/functional-basic/classes/Api/Api.ru.mdx +54 -54
- package/src/media/functional/functional-basic/classes/Api/Api.vi.mdx +54 -54
- package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.en.mdx +111 -0
- package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.ru.mdx +111 -0
- package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.vi.mdx +111 -0
- package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.en.mdx +32 -0
- package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.ru.mdx +32 -0
- package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.vi.mdx +32 -0
- package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.en.mdx +24 -28
- package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.ru.mdx +24 -28
- package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.vi.mdx +24 -28
- package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.en.mdx +28 -14
- package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.ru.mdx +33 -19
- package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.vi.mdx +33 -19
- package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.en.mdx +56 -0
- package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.ru.mdx +56 -0
- package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.vi.mdx +55 -0
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.en.mdx +101 -49
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.ru.mdx +101 -49
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.vi.mdx +98 -47
- package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.en.mdx +44 -26
- package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.ru.mdx +45 -27
- package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.vi.mdx +44 -26
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.en.mdx +50 -21
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.ru.mdx +54 -25
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.vi.mdx +55 -26
- package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.en.mdx +29 -32
- package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.ru.mdx +33 -36
- package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.vi.mdx +33 -36
- package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.en.mdx +34 -53
- package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.ru.mdx +33 -52
- package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.vi.mdx +39 -58
- package/src/media/functional/functional-basic/classes/Cache/Cache.en.mdx +7 -4
- package/src/media/functional/functional-basic/classes/Cache/Cache.ru.mdx +7 -4
- package/src/media/functional/functional-basic/classes/Cache/Cache.vi.mdx +28 -25
- package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.en.mdx +45 -53
- package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.ru.mdx +46 -54
- package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.vi.mdx +47 -55
- package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.en.mdx +13 -1
- package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.ru.mdx +13 -1
- package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.vi.mdx +13 -0
- package/src/media/functional/functional-basic/classes/Cookie/Cookie.en.mdx +88 -44
- package/src/media/functional/functional-basic/classes/Cookie/Cookie.ru.mdx +88 -44
- package/src/media/functional/functional-basic/classes/Cookie/Cookie.vi.mdx +85 -41
- package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.en.mdx +43 -22
- package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.ru.mdx +46 -25
- package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.vi.mdx +43 -22
- package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.en.mdx +84 -0
- package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.ru.mdx +84 -0
- package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.vi.mdx +100 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.en.mdx +153 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.ru.mdx +153 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.vi.mdx +153 -0
- package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.en.mdx +32 -25
- package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.ru.mdx +32 -25
- package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.vi.mdx +32 -27
- package/src/media/functional/functional-basic/classes/Datetime/Datetime.en.mdx +36 -4
- package/src/media/functional/functional-basic/classes/Datetime/Datetime.ru.mdx +36 -4
- package/src/media/functional/functional-basic/classes/Datetime/Datetime.vi.mdx +36 -4
- package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.en.mdx +101 -70
- package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.ru.mdx +100 -69
- package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.vi.mdx +101 -70
- package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.en.mdx +46 -42
- package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.ru.mdx +46 -42
- package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.vi.mdx +46 -42
- package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.en.mdx +44 -96
- package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.ru.mdx +44 -96
- package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.vi.mdx +44 -96
- package/src/media/functional/functional-basic/classes/EventItem/EventItem.en.mdx +49 -28
- package/src/media/functional/functional-basic/classes/EventItem/EventItem.ru.mdx +21 -0
- package/src/media/functional/functional-basic/classes/EventItem/EventItem.vi.mdx +63 -42
- package/src/media/functional/functional-basic/classes/Formatters/Formatters.en.mdx +97 -109
- package/src/media/functional/functional-basic/classes/Formatters/Formatters.ru.mdx +86 -98
- package/src/media/functional/functional-basic/classes/Formatters/Formatters.vi.mdx +99 -111
- package/src/media/functional/functional-basic/classes/Geo/Geo.en.mdx +3 -3
- package/src/media/functional/functional-basic/classes/Geo/Geo.ru.mdx +5 -5
- package/src/media/functional/functional-basic/classes/Geo/Geo.vi.mdx +5 -5
- package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.en.mdx +83 -40
- package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.ru.mdx +83 -40
- package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.vi.mdx +87 -44
- package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.en.mdx +81 -0
- package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.ru.mdx +81 -0
- package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.vi.mdx +81 -0
- package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.en.mdx +56 -105
- package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.ru.mdx +53 -102
- package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.vi.mdx +55 -105
- package/src/media/functional/functional-basic/classes/Hash/Hash.en.mdx +18 -7
- package/src/media/functional/functional-basic/classes/Hash/Hash.ru.mdx +18 -7
- package/src/media/functional/functional-basic/classes/Hash/Hash.vi.mdx +18 -7
- package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.en.mdx +54 -0
- package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.ru.mdx +54 -0
- package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.vi.mdx +54 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.en.mdx +78 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.ru.mdx +78 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.vi.mdx +78 -0
- package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.en.mdx +50 -0
- package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.ru.mdx +50 -0
- package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.vi.mdx +50 -0
- package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.en.mdx +131 -0
- package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.ru.mdx +131 -0
- package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.vi.mdx +131 -0
- package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.en.mdx +97 -0
- package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.ru.mdx +97 -0
- package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.vi.mdx +97 -0
- package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.en.mdx +13 -5
- package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.ru.mdx +13 -5
- package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.vi.mdx +13 -5
- package/src/media/functional/functional-basic/functions/anyToString/anyToString.en.mdx +37 -19
- package/src/media/functional/functional-basic/functions/anyToString/anyToString.ru.mdx +37 -19
- package/src/media/functional/functional-basic/functions/anyToString/anyToString.vi.mdx +35 -17
- package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.en.mdx +31 -19
- package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.ru.mdx +31 -19
- package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.vi.mdx +32 -20
- package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.en.mdx +29 -15
- package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.ru.mdx +28 -14
- package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.vi.mdx +28 -14
- package/src/media/functional/functional-basic/functions/capitalize/capitalize.en.mdx +7 -3
- package/src/media/functional/functional-basic/functions/capitalize/capitalize.ru.mdx +7 -3
- package/src/media/functional/functional-basic/functions/capitalize/capitalize.vi.mdx +7 -3
- package/src/media/functional/functional-basic/functions/copyObject/copyObject.en.mdx +17 -13
- package/src/media/functional/functional-basic/functions/copyObject/copyObject.ru.mdx +17 -13
- package/src/media/functional/functional-basic/functions/copyObject/copyObject.vi.mdx +17 -13
- package/src/media/functional/functional-basic/functions/createElement/createElement.en.mdx +2 -0
- package/src/media/functional/functional-basic/functions/createElement/createElement.ru.mdx +2 -0
- package/src/media/functional/functional-basic/functions/createElement/createElement.vi.mdx +2 -0
- package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.en.mdx +1 -3
- package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.ru.mdx +1 -3
- package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.vi.mdx +1 -3
- package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.en.mdx +13 -10
- package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.ru.mdx +14 -11
- package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.vi.mdx +12 -9
- package/src/media/functional/functional-basic/functions/executePromise/executePromise.en.mdx +14 -13
- package/src/media/functional/functional-basic/functions/executePromise/executePromise.ru.mdx +15 -14
- package/src/media/functional/functional-basic/functions/executePromise/executePromise.vi.mdx +14 -13
- package/src/media/functional/functional-basic/functions/forEach/forEach.en.mdx +1 -1
- package/src/media/functional/functional-basic/functions/forEach/forEach.ru.mdx +1 -1
- package/src/media/functional/functional-basic/functions/forEach/forEach.vi.mdx +1 -1
- package/src/media/functional/functional-basic/functions/frame/frame.en.mdx +7 -4
- package/src/media/functional/functional-basic/functions/frame/frame.ru.mdx +6 -3
- package/src/media/functional/functional-basic/functions/frame/frame.vi.mdx +7 -4
- package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.en.mdx +34 -0
- package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.ru.mdx +34 -0
- package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.vi.mdx +35 -0
- package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.en.mdx +2 -0
- package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.ru.mdx +2 -0
- package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.vi.mdx +2 -0
- package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.en.mdx +21 -0
- package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.ru.mdx +21 -0
- package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.vi.mdx +21 -0
- package/src/media/functional/functional-basic/functions/getElementId/getElementId.en.mdx +17 -3
- package/src/media/functional/functional-basic/functions/getElementId/getElementId.ru.mdx +17 -3
- package/src/media/functional/functional-basic/functions/getElementId/getElementId.vi.mdx +18 -4
- package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.en.mdx +31 -0
- package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.ru.mdx +31 -0
- package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.vi.mdx +31 -0
- package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.en.mdx +25 -0
- package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.ru.mdx +25 -0
- package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.vi.mdx +25 -0
- package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.en.mdx +11 -4
- package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.ru.mdx +14 -7
- package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.vi.mdx +13 -6
- package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.en.mdx +3 -2
- package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.ru.mdx +3 -2
- package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.vi.mdx +3 -2
- package/src/media/functional/functional-basic/functions/toNumber/toNumber.en.mdx +25 -9
- package/src/media/functional/functional-basic/functions/toNumber/toNumber.ru.mdx +25 -9
- package/src/media/functional/functional-basic/functions/toNumber/toNumber.vi.mdx +25 -9
- package/src/media/functional/functional-basic/functions/toString/toString.en.mdx +28 -0
- package/src/media/functional/functional-basic/functions/toString/toString.ru.mdx +28 -0
- package/src/media/functional/functional-basic/functions/toString/toString.vi.mdx +28 -0
- package/src/media/functional/ui/about/about.en.mdx +45 -0
- package/src/media/functional/ui/about/about.ru.mdx +45 -0
- package/src/media/functional/ui/about/about.vi.mdx +45 -0
- package/src/media/functional/ui/component/component.en.mdx +104 -0
- package/src/media/functional/ui/component/component.ru.mdx +106 -0
- package/src/media/functional/ui/component/component.vi.mdx +104 -0
- package/src/media/functional/ui/setup/setup.en.mdx +72 -0
- package/src/media/functional/ui/setup/setup.ru.mdx +72 -0
- package/src/media/functional/ui/setup/setup.vi.mdx +72 -0
- package/src/media/functional/ui/wiki-data.en.mdx +114 -0
- package/src/media/functional/ui/wiki-data.ru.mdx +114 -0
- package/src/media/functional/ui/wiki-data.vi.mdx +114 -0
|
@@ -1,139 +1,89 @@
|
|
|
1
1
|
import {Meta} from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
|
-
<Meta title='@dxtmisha/vi/functional-basic/Classes/GeoPhone - Mặt nạ
|
|
3
|
+
<Meta title='@dxtmisha/vi/functional-basic/Classes/GeoPhone - Mặt nạ điện thoại'/>
|
|
4
4
|
|
|
5
5
|
# Lớp GeoPhone
|
|
6
6
|
|
|
7
|
-
Lớp chuyên biệt để lưu trữ và xử lý
|
|
7
|
+
Lớp chuyên biệt để lưu trữ và xử lý mặt nạ số điện thoại quốc tế. Cung cấp cơ chế xác định quốc gia theo chuỗi số điện thoại, định dạng số thô thành mặt nạ được bản địa hóa và quản lý bản đồ mã điện thoại phức tạp dựa trên cây tiền tố (Trie). Lớp này được tích hợp chặt chẽ với dữ liệu địa lý `Geo`, cho phép tự động xác định mặt nạ dựa trên ngôn ngữ hiện tại của người dùng hoặc mã quốc gia được cung cấp.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## Tính năng chính
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
- **Khớp tự động** — Tự động xác định quốc gia và mẫu mặt nạ phù hợp thông qua tìm kiếm đệ quy trong cây tiền tố.
|
|
12
|
+
- **Tối ưu hóa cây tiền tố** — Sử dụng cấu trúc `map` chuyên biệt (Trie) để tìm kiếm hiệu suất cao.
|
|
13
|
+
- **Bình thường hóa thông minh** — Tự động xử lý các biến thể quay số khu vực như số 0 ở đầu hoặc tiền tố quốc gia.
|
|
14
|
+
- **Định dạng tiêu chuẩn** — Chuyển đổi các chuỗi số thô thành định dạng dễ đọc.
|
|
12
15
|
|
|
13
|
-
|
|
14
|
-
- **Tối ưu hóa Cây Tiền tố (Prefix Tree)** — Sử dụng cấu trúc `map` chuyên biệt (Prefix Tree) để tìm kiếm hiệu quả và hiệu suất cao trên các kế hoạch đánh số quốc tế.
|
|
15
|
-
- **Chuẩn hóa Thông minh** — Tự động xử lý các biến thể quay số theo vùng, chẳng hạn như số 0 ở đầu hoặc các tiền tố quốc gia (ví dụ: số '8' của Nga).
|
|
16
|
-
- **Định dạng Chuẩn hóa** — Chuyển đổi các chuỗi số thô thành các định dạng điện thoại dễ đọc, phù hợp với các tiêu chuẩn viễn thông quốc tế.
|
|
16
|
+
## Cách sử dụng cơ bản
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
### `getByPhone`
|
|
21
|
-
|
|
22
|
-
Phương thức định danh chính phân tích một chuỗi số điện thoại để trích xuất thông tin địa lý và mặt nạ đánh số phù hợp nhất.
|
|
23
|
-
|
|
24
|
-
**Tham số:**
|
|
25
|
-
- `phone: string` — Số điện thoại mục tiêu cần phân tích (chấp nhận các chuỗi thô hoặc đã được định dạng một phần).
|
|
26
|
-
|
|
27
|
-
**Trả về:** `GeoPhoneMapInfo` — Một đối tượng cấu trúc chứa mục `GeoPhoneMap` khớp được và phần số đã được chuẩn hóa của điện thoại.
|
|
18
|
+
Bạn có thể sử dụng các phương thức tĩnh của lớp để xác định nhanh quốc gia theo số điện thoại hoặc định dạng.
|
|
28
19
|
|
|
29
20
|
```javascript
|
|
30
21
|
import { GeoPhone } from '@dxtmisha/functional-basic'
|
|
31
22
|
|
|
23
|
+
// Xác định quốc gia theo số điện thoại
|
|
32
24
|
const info = GeoPhone.getByPhone('84901234567')
|
|
33
|
-
//
|
|
34
|
-
// {
|
|
35
|
-
// item: { info: { phone: 84, ... }, mask: ['+84 ** **** ****'], ... },
|
|
36
|
-
// phone: '901234567'
|
|
37
|
-
// }
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
### `get`
|
|
41
|
-
|
|
42
|
-
Truy xuất siêu dữ liệu điện thoại đã địa phương hóa được liên kết với một mã quốc gia cụ thể.
|
|
43
|
-
|
|
44
|
-
**Tham số:**
|
|
45
|
-
- `code: string` — Mã quốc gia tiêu chuẩn ISO 3166 (ví dụ: `'VN'`, `'RU'`, `'US'`).
|
|
25
|
+
console.log(info.item?.value) // 'VN'
|
|
46
26
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
GeoPhone.get('VN')
|
|
51
|
-
// { phone: 84, within: 0, mask: ['+** ** **** ****'], value: 'VN' }
|
|
27
|
+
// Định dạng theo mặt nạ
|
|
28
|
+
const formatted = GeoPhone.toMask('901234567', ['+** (***) ***-***'])
|
|
29
|
+
console.log(formatted) // '+84 (901) 234-567'
|
|
52
30
|
```
|
|
53
31
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
Phương thức truy xuất mở rộng trả về dữ liệu mặt nạ đầy đủ bao gồm cả nút cây tìm kiếm cho một mã quốc gia nhất định.
|
|
57
|
-
|
|
58
|
-
**Tham số:**
|
|
59
|
-
- `code: string` — Chuỗi mã quốc gia mục tiêu.
|
|
60
|
-
|
|
61
|
-
**Trả về:** `GeoPhoneMap | undefined` — Đối tượng nút bản đồ đầy đủ cho mã được yêu cầu.
|
|
62
|
-
|
|
63
|
-
```javascript
|
|
64
|
-
GeoPhone.getByCode('US')
|
|
65
|
-
// { info: { phone: 1, ... }, mask: ['1 (***) ***-****'], ... }
|
|
66
|
-
```
|
|
32
|
+
## Các phương thức
|
|
67
33
|
|
|
68
|
-
|
|
34
|
+
### Thông tin
|
|
69
35
|
|
|
70
|
-
- `getList(): GeoPhoneValue[]` — Trả về danh sách phẳng đầy đủ, đã được sắp xếp của tất cả
|
|
71
|
-
- `getMap(): Record<string, GeoPhoneMap>` — Trả về nút gốc của cây tiền tố nội bộ được sử dụng để
|
|
36
|
+
- `getList(): GeoPhoneValue[]` — Trả về danh sách phẳng đầy đủ, đã được sắp xếp của tất cả dữ liệu meta điện thoại quốc tế.
|
|
37
|
+
- `getMap(): Record<string, GeoPhoneMap>` — Trả về nút gốc của cây tiền tố nội bộ được sử dụng để tìm kiếm.
|
|
72
38
|
|
|
73
|
-
|
|
39
|
+
### Lựa chọn
|
|
74
40
|
|
|
75
|
-
|
|
41
|
+
- `get(code: string): GeoPhoneValue | undefined` — Lấy dữ liệu meta điện thoại liên kết với một mã quốc gia cụ thể.
|
|
42
|
+
- `getByPhone(phone: string): GeoPhoneMapInfo` — Phân tích chuỗi số điện thoại để trích xuất thông tin và mặt nạ phù hợp.
|
|
43
|
+
- `getByCode(code: string): GeoPhoneMap | undefined` — Trả về thông tin mặt nạ đầy đủ cho một mã nhất định.
|
|
76
44
|
|
|
77
|
-
|
|
45
|
+
### Phụ trợ
|
|
78
46
|
|
|
79
|
-
|
|
80
|
-
- `phone: string` —
|
|
81
|
-
- `masks?: string[]` — Một mảng các chuỗi mặt nạ hợp lệ để lặp qua nhằm tìm kiếm sự phù hợp.
|
|
47
|
+
- `toMask(phone: string, masks?: string[]): string | undefined` — Chuyển đổi chuỗi số điện thoại thô thành phiên bản đã định dạng.
|
|
48
|
+
- `removeZero(phone: string): string` — Bình thường hóa biểu diễn nội bộ của số bằng cách loại bỏ các số 0 ở đầu hoặc điều chỉnh tiền tố khu vực.
|
|
82
49
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
```javascript
|
|
86
|
-
GeoPhone.toMask('901234567', ['+** ** **** ****'])
|
|
87
|
-
// '+84 90 1234 567'
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
### `removeZero`
|
|
91
|
-
|
|
92
|
-
Chuẩn hóa biểu diễn số nội bộ bằng cách loại bỏ các số 0 ở đầu hoặc sửa các tiền tố quay số vùng để đảm bảo logic tìm kiếm nhất quán.
|
|
93
|
-
|
|
94
|
-
**Tham số:**
|
|
95
|
-
- `phone: string` — Chuỗi số điện thoại đầu vào.
|
|
96
|
-
|
|
97
|
-
**Trả về:** `string` — Chuỗi số đã được chuẩn hóa.
|
|
98
|
-
|
|
99
|
-
```javascript
|
|
100
|
-
GeoPhone.removeZero('0901234567') // '901234567'
|
|
101
|
-
GeoPhone.removeZero('89001234567') // '9001234567'
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
## Các đối tượng GeoPhone
|
|
50
|
+
## Kiểu dữ liệu
|
|
105
51
|
|
|
106
52
|
### `GeoPhoneValue`
|
|
107
53
|
Cấu trúc siêu dữ liệu cơ bản cho cấu hình điện thoại của mỗi quốc gia:
|
|
108
|
-
- `phone: number` — Mã
|
|
109
|
-
- `within: number` — Mã quy tắc
|
|
110
|
-
- `mask: string[]` — Mảng các mẫu mặt
|
|
111
|
-
- `value: string` —
|
|
54
|
+
- `phone: number` — Mã điện thoại quốc gia (ví dụ: `84`).
|
|
55
|
+
- `within: number` — Mã quy tắc gọi nội bộ (dùng để chọn ký tự đặc biệt trong mặt nạ).
|
|
56
|
+
- `mask: string[]` — Mảng các mẫu mặt nạ được gán cho quốc gia.
|
|
57
|
+
- `value: string` — Mã định danh quốc gia (ISO 3166).
|
|
112
58
|
|
|
113
59
|
### `GeoPhoneMap`
|
|
114
|
-
Một nút trong cây tiền tố nội
|
|
115
|
-
- `items: GeoPhoneValue[]` — Danh sách các mục
|
|
116
|
-
- `info: GeoPhoneValue | undefined` —
|
|
117
|
-
- `
|
|
60
|
+
Một nút trong cây tiền tố nội bộ (Trie) được sử dụng để tìm kiếm:
|
|
61
|
+
- `items: GeoPhoneValue[]` — Danh sách tất cả các mục có sẵn trong nhánh này của cây.
|
|
62
|
+
- `info: GeoPhoneValue | undefined` — Dữ liệu meta điện thoại nếu nút hiện tại là một mã đầy đủ.
|
|
63
|
+
- `value: string | undefined` — Mã định danh quốc gia cho nút này.
|
|
64
|
+
- `mask: string[]` — Mảng các mặt nạ với các ký tự nội bộ đã được thay thế (`~`, `=`, `$`).
|
|
65
|
+
- `maskFull: string[]` — Mặt nạ đầy đủ bao gồm cả mã quốc tế.
|
|
66
|
+
- `next: Record<string, GeoPhoneMap>` — Con trỏ đến các chữ số tiếp theo trong cây tìm kiếm.
|
|
67
|
+
|
|
68
|
+
### `GeoPhoneMapInfo`
|
|
69
|
+
Kết quả của phương thức tìm kiếm `getByPhone`:
|
|
70
|
+
- `item?: GeoPhoneMap` — Nút cây tìm thấy với thông tin quốc gia và mặt nạ.
|
|
71
|
+
- `phone?: string` — Phần còn lại của số sau khi tách mã quốc gia.
|
|
118
72
|
|
|
119
73
|
## Ví dụ
|
|
120
74
|
|
|
75
|
+
### Logic ký tự nội bộ (Within)
|
|
76
|
+
Logic nội bộ của lớp sẽ thay thế dấu "sao" đầu tiên trong mặt nạ bằng một ký tự đặc biệt tùy thuộc vào quy tắc khu vực:
|
|
77
|
+
- `~` — cho Nga (mã nội bộ 8).
|
|
78
|
+
- `=` — cho các khu vực mặc định/khác (ví dụ: Việt Nam, Hoa Kỳ).
|
|
79
|
+
|
|
80
|
+
```javascript
|
|
81
|
+
const mapInfo = GeoPhone.getByCode('RU')
|
|
82
|
+
console.log(mapInfo.mask[0]) // '~ (***) ***-**-**'
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Nhiều mặt nạ
|
|
121
86
|
```javascript
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
// 1. Định danh quốc gia bằng số điện thoại
|
|
125
|
-
const lookup = GeoPhone.getByPhone('+84901234567')
|
|
126
|
-
if (lookup.item) {
|
|
127
|
-
console.log('Quốc gia:', lookup.item.value) // 'VN'
|
|
128
|
-
console.log('Mặt nạ chính:', lookup.item.mask[0])
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// 2. Định dạng thủ công
|
|
132
|
-
const formatted = GeoPhone.toMask('442071234567', ['+** (**) **** ****'])
|
|
133
|
-
console.log(formatted) // '+44 (20) 7123 4567'
|
|
134
|
-
|
|
135
|
-
// 3. Chuẩn hóa đầu vào để tìm kiếm
|
|
136
|
-
const rawInput = '0084901234567'
|
|
137
|
-
const normalized = GeoPhone.removeZero(rawInput.replace(/^00/, ''))
|
|
138
|
-
console.log(normalized) // '84901234567'
|
|
87
|
+
const masks = ['+** (***) ***-***', '+** (***) ***-**-**']
|
|
88
|
+
console.log(GeoPhone.toMask('84901234567', masks)) // 11 số -> '+84 (901) 234-567'
|
|
139
89
|
```
|
|
@@ -4,7 +4,9 @@ import {Meta} from '@storybook/addon-docs/blocks'
|
|
|
4
4
|
|
|
5
5
|
# Hash Class
|
|
6
6
|
|
|
7
|
-
A static class for managing data stored in the URL hash (`#`). It
|
|
7
|
+
A static facade class for managing data stored in the URL hash (`#`). It delegates execution to the `HashInstance` class, providing centralized access and state isolation (e.g., for SSR).
|
|
8
|
+
|
|
9
|
+
It automatically synchronizes application state with the URL — every `set` call updates the browser's hash string, while the `hashchange` event refreshes the internal state.
|
|
8
10
|
|
|
9
11
|
## Key Features
|
|
10
12
|
|
|
@@ -12,10 +14,11 @@ A static class for managing data stored in the URL hash (`#`). It automatically
|
|
|
12
14
|
- **Reactivity via Watchers** — The `addWatch` method allows subscribing to changes on a specific variable.
|
|
13
15
|
- **Auto-initialization** — When the page loads, data is automatically read from the URL.
|
|
14
16
|
- **Smart Typing** — Values are deserialized from a string: numbers, booleans, and objects are restored to their original types.
|
|
17
|
+
- **SSR Isolation** — `ServerStorage` ensures a unique data instance for each request on the server.
|
|
15
18
|
|
|
16
19
|
## Initialization
|
|
17
20
|
|
|
18
|
-
The class is static and initializes automatically
|
|
21
|
+
The class is static and initializes automatically upon the first access.
|
|
19
22
|
|
|
20
23
|
```javascript
|
|
21
24
|
// URL: https://myapp.com/#page=2;filter=active
|
|
@@ -28,11 +31,19 @@ const filter = Hash.get('filter') // 'active' (string)
|
|
|
28
31
|
|
|
29
32
|
## Methods
|
|
30
33
|
|
|
31
|
-
|
|
32
|
-
- `
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
- `
|
|
34
|
+
### Instance
|
|
35
|
+
- `static getItem(): HashInstance` — Returns the current `HashInstance` (isolated for the current request).
|
|
36
|
+
|
|
37
|
+
### Reading and Writing
|
|
38
|
+
- `static get<T>(name: string, defaultValue?: T | (() => T)): T` — Returns the value of a hash variable.
|
|
39
|
+
- `static set<T>(name: string, callback: T | (() => T)): void` — Sets a variable's value and updates the URL hash.
|
|
40
|
+
|
|
41
|
+
### Watchers
|
|
42
|
+
- `static addWatch<T>(name: string, callback: (value: T) => void): void` — Subscribes to changes for a specific hash variable.
|
|
43
|
+
- `static removeWatch<T>(name: string, callback: (value: T) => void): void` — Unsubscribes from changes for a specific variable.
|
|
44
|
+
|
|
45
|
+
### Management
|
|
46
|
+
- `static reload(): void` — Forces synchronization of the state with the current URL hash.
|
|
36
47
|
|
|
37
48
|
## Examples
|
|
38
49
|
|
|
@@ -4,7 +4,9 @@ import {Meta} from '@storybook/addon-docs/blocks'
|
|
|
4
4
|
|
|
5
5
|
# Класс Hash
|
|
6
6
|
|
|
7
|
-
Статический
|
|
7
|
+
Статический класс-фасад для управления данными, которые хранятся в URL-хэше (`#`). Он делегирует выполнение классу `HashInstance`, обеспечивая централизованный доступ и изоляцию состояния (например, при SSR).
|
|
8
|
+
|
|
9
|
+
Автоматически синхронизирует состояние приложения с URL — каждый вызов `set` обновляет строку хэша в браузере, а событие `hashchange` обновляет внутреннее состояние.
|
|
8
10
|
|
|
9
11
|
## Ключевые особенности
|
|
10
12
|
|
|
@@ -12,10 +14,11 @@ import {Meta} from '@storybook/addon-docs/blocks'
|
|
|
12
14
|
- **Реактивность через watchers** — Метод `addWatch` позволяет подписаться на изменение конкретной переменной.
|
|
13
15
|
- **Авто-инициализация** — При загрузке страницы данные автоматически считываются из URL.
|
|
14
16
|
- **Умный тип** — Значения десериализуются из строки: числа, булевые значения и объекты восстанавливаются.
|
|
17
|
+
- **SSR-изоляция** — Через `ServerStorage` обеспечивается уникальный экземпляр данных для каждого запроса на сервере.
|
|
15
18
|
|
|
16
19
|
## Инициализация
|
|
17
20
|
|
|
18
|
-
Класс является статическим и инициализируется автоматически при
|
|
21
|
+
Класс является статическим и инициализируется автоматически при первом обращении.
|
|
19
22
|
|
|
20
23
|
```javascript
|
|
21
24
|
// URL: https://myapp.com/#page=2;filter=active
|
|
@@ -28,11 +31,19 @@ const filter = Hash.get('filter') // 'active' (string)
|
|
|
28
31
|
|
|
29
32
|
## Методы
|
|
30
33
|
|
|
31
|
-
|
|
32
|
-
- `
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
- `
|
|
34
|
+
### Экземпляр
|
|
35
|
+
- `static getItem(): HashInstance` — Возвращает текущий экземпляр `HashInstance` (изолированный для текущего запроса).
|
|
36
|
+
|
|
37
|
+
### Чтение и запись
|
|
38
|
+
- `static get<T>(name: string, defaultValue?: T | (() => T)): T` — Возвращает значение переменной из хэша.
|
|
39
|
+
- `static set<T>(name: string, callback: T | (() => T)): void` — Устанавливает значение переменной и обновляет URL-хэш.
|
|
40
|
+
|
|
41
|
+
### Наблюдение (Watchers)
|
|
42
|
+
- `static addWatch<T>(name: string, callback: (value: T) => void): void` — Подписывается на изменение переменной.
|
|
43
|
+
- `static removeWatch<T>(name: string, callback: (value: T) => void): void` — Отписывается от изменений.
|
|
44
|
+
|
|
45
|
+
### Управление
|
|
46
|
+
- `static reload(): void` — Принудительно синхронизирует состояние с текущим URL-хэшем.
|
|
36
47
|
|
|
37
48
|
## Примеры
|
|
38
49
|
|
|
@@ -4,7 +4,9 @@ import {Meta} from '@storybook/addon-docs/blocks'
|
|
|
4
4
|
|
|
5
5
|
# Lớp Hash
|
|
6
6
|
|
|
7
|
-
Một lớp tĩnh để quản lý dữ liệu được lưu trữ trong URL hash (`#`).
|
|
7
|
+
Một lớp facade tĩnh để quản lý dữ liệu được lưu trữ trong URL hash (`#`). Nó ủy quyền thực thi cho lớp `HashInstance`, cung cấp khả năng truy cập tập trung и cách ly trạng thái (ví dụ: cho SSR).
|
|
8
|
+
|
|
9
|
+
Nó tự động đồng bộ hóa trạng thái ứng dụng với URL — mỗi lần gọi `set` sẽ cập nhật chuỗi hash trên trình duyệt, và sự kiện `hashchange` sẽ làm mới trạng thái nội bộ.
|
|
8
10
|
|
|
9
11
|
## Tính năng chính
|
|
10
12
|
|
|
@@ -12,10 +14,11 @@ Một lớp tĩnh để quản lý dữ liệu được lưu trữ trong URL has
|
|
|
12
14
|
- **Phản hồi qua Watcher** — Phương thức `addWatch` cho phép đăng ký theo dõi thay đổi của một biến cụ thể.
|
|
13
15
|
- **Tự động khởi tạo** — Khi tải trang, dữ liệu được tự động đọc từ URL.
|
|
14
16
|
- **Phân tích kiểu thông minh** — Giá trị được giải mã từ chuỗi: số, boolean và đối tượng được khôi phục về kiểu gốc.
|
|
17
|
+
- **Cách ly SSR** — `ServerStorage` đảm bảo mỗi yêu cầu trên máy chủ có một phiên bản dữ liệu riêng.
|
|
15
18
|
|
|
16
19
|
## Khởi tạo
|
|
17
20
|
|
|
18
|
-
Lớp này là tĩnh và khởi tạo tự động khi
|
|
21
|
+
Lớp này là tĩnh và khởi tạo tự động khi truy cập lần đầu.
|
|
19
22
|
|
|
20
23
|
```javascript
|
|
21
24
|
// URL: https://myapp.com/#page=2;filter=active
|
|
@@ -28,11 +31,19 @@ const filter = Hash.get('filter') // 'active' (string)
|
|
|
28
31
|
|
|
29
32
|
## Phương thức
|
|
30
33
|
|
|
31
|
-
|
|
32
|
-
- `
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
- `
|
|
34
|
+
### Phiên bản
|
|
35
|
+
- `static getItem(): HashInstance` — Trả về phiên bản `HashInstance` hiện tại (được cách ly cho yêu cầu hiện tại).
|
|
36
|
+
|
|
37
|
+
### Đọc и Ghi
|
|
38
|
+
- `static get<T>(name: string, defaultValue?: T | (() => T)): T` — Trả về giá trị của biến hash.
|
|
39
|
+
- `static set<T>(name: string, callback: T | (() => T)): void` — Thiết lập giá trị của biến и cập nhật URL hash.
|
|
40
|
+
|
|
41
|
+
### Theo dõi (Watchers)
|
|
42
|
+
- `static addWatch<T>(name: string, callback: (value: T) => void): void` — Đăng ký theo dõi thay đổi của một biến hash cụ thể.
|
|
43
|
+
- `static removeWatch<T>(name: string, callback: (value: T) => void): void` — Hủy đăng ký theo dõi thay đổi của một biến.
|
|
44
|
+
|
|
45
|
+
### Quản lý
|
|
46
|
+
- `static reload(): void` — Ép buộc đồng bộ hóa trạng thái với URL hash hiện tại.
|
|
36
47
|
|
|
37
48
|
## Ví dụ
|
|
38
49
|
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import {Meta} from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title='@dxtmisha/en/functional-basic/Classes/HashInstance - URL Hash Instance'/>
|
|
4
|
+
|
|
5
|
+
# HashInstance Class
|
|
6
|
+
|
|
7
|
+
`HashInstance` is the core class that implements the logic for managing data in the URL hash. It provides state storage, mechanisms for subscribing to changes, and synchronization with the browser API.
|
|
8
|
+
|
|
9
|
+
You can use this class directly if you need isolated hash management separate from the global `Hash` state.
|
|
10
|
+
|
|
11
|
+
## Key Features
|
|
12
|
+
|
|
13
|
+
- **Isolated State** — Stores its own set of hash variables.
|
|
14
|
+
- **Chainable API** — Most methods return `this`, allowing for concise code.
|
|
15
|
+
- **Automatic Synchronization** — Upon initialization, it reads data from the URL and subscribes to the `hashchange` event.
|
|
16
|
+
- **SSR Compatibility** — Works safely in server-side environments using stubs for DOM APIs.
|
|
17
|
+
|
|
18
|
+
## Initialization
|
|
19
|
+
|
|
20
|
+
To create an instance, use the `HashInstance()` constructor.
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { HashInstance } from '@dxtmisha/functional-basic'
|
|
24
|
+
|
|
25
|
+
const myHash = new HashInstance()
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Methods
|
|
29
|
+
|
|
30
|
+
### Reading and Writing
|
|
31
|
+
- `get<T>(name: string, defaultValue?: T | (() => T)): T` — Returns the value of a variable. If it doesn't exist, sets `defaultValue` and returns it.
|
|
32
|
+
- `set<T>(name: string, callback: T | (() => T)): this` — Updates the variable's value and synchronizes the URL.
|
|
33
|
+
|
|
34
|
+
### Watchers
|
|
35
|
+
- `addWatch<T>(name: string, callback: (value: T) => void): this` — Adds a handler for variable changes.
|
|
36
|
+
- `removeWatch<T>(name: string, callback: (value: T) => void): this` — Removes a handler.
|
|
37
|
+
|
|
38
|
+
### Management
|
|
39
|
+
- `reload(): this` — Refreshes the internal state from the current URL hash.
|
|
40
|
+
|
|
41
|
+
## Examples
|
|
42
|
+
|
|
43
|
+
### Using an Isolated Instance
|
|
44
|
+
```typescript
|
|
45
|
+
const searchHash = new HashInstance()
|
|
46
|
+
|
|
47
|
+
// Subscribe
|
|
48
|
+
searchHash.addWatch('query', (q) => {
|
|
49
|
+
console.log('Search:', q)
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
// Set value (will update URL)
|
|
53
|
+
searchHash.set('query', 'smartphones')
|
|
54
|
+
```
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import {Meta} from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title='@dxtmisha/ru/functional-basic/Classes/HashInstance - Экземпляр URL Hash'/>
|
|
4
|
+
|
|
5
|
+
# Класс HashInstance
|
|
6
|
+
|
|
7
|
+
`HashInstance` — это основной класс, реализующий логику управления данными в URL-хэше. Он обеспечивает хранение состояния, механизмы подписки на изменения и синхронизацию с браузерным API.
|
|
8
|
+
|
|
9
|
+
Вы можете использовать этот класс напрямую, если вам требуется изолированное управление хэшем, отличное от глобального состояния `Hash`.
|
|
10
|
+
|
|
11
|
+
## Ключевые особенности
|
|
12
|
+
|
|
13
|
+
- **Изолированное состояние** — Хранит свой набор переменных хэша.
|
|
14
|
+
- **Поддержка цепочки вызовов** — Большинство методов возвращают `this`, позволяя писать компактный код.
|
|
15
|
+
- **Автоматическая синхронизация** — При инициализации считывает данные из URL и подписывается на событие `hashchange`.
|
|
16
|
+
- **SSR-совместимость** — Безопасно работает в серверном окружении, используя заглушки для DOM API.
|
|
17
|
+
|
|
18
|
+
## Инициализация
|
|
19
|
+
|
|
20
|
+
Для создания экземпляра используйте конструктор `HashInstance()`.
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { HashInstance } from '@dxtmisha/functional-basic'
|
|
24
|
+
|
|
25
|
+
const myHash = new HashInstance()
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Методы
|
|
29
|
+
|
|
30
|
+
### Чтение и запись
|
|
31
|
+
- `get<T>(name: string, defaultValue?: T | (() => T)): T` — Возвращает значение переменной. Если её нет, устанавливает `defaultValue` и возвращает его.
|
|
32
|
+
- `set<T>(name: string, callback: T | (() => T)): this` — Обновляет значение переменной и синхронизирует URL.
|
|
33
|
+
|
|
34
|
+
### Наблюдение (Watchers)
|
|
35
|
+
- `addWatch<T>(name: string, callback: (value: T) => void): this` — Добавляет обработчик изменения переменной.
|
|
36
|
+
- `removeWatch<T>(name: string, callback: (value: T) => void): this` — Удаляет обработчик.
|
|
37
|
+
|
|
38
|
+
### Управление
|
|
39
|
+
- `reload(): this` — Обновляет внутреннее состояние из текущего URL-хэша.
|
|
40
|
+
|
|
41
|
+
## Примеры
|
|
42
|
+
|
|
43
|
+
### Использование изолированного экземпляра
|
|
44
|
+
```typescript
|
|
45
|
+
const searchHash = new HashInstance()
|
|
46
|
+
|
|
47
|
+
// Подписка
|
|
48
|
+
searchHash.addWatch('query', (q) => {
|
|
49
|
+
console.log('Поиск:', q)
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
// Установка значения (обновит URL)
|
|
53
|
+
searchHash.set('query', 'smartphones')
|
|
54
|
+
```
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import {Meta} from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title='@dxtmisha/vi/functional-basic/Classes/HashInstance - Phiên bản URL Hash'/>
|
|
4
|
+
|
|
5
|
+
# Lớp HashInstance
|
|
6
|
+
|
|
7
|
+
`HashInstance` là lớp cốt lõi triển khai logic quản lý dữ liệu trong URL hash. Nó cung cấp khả năng lưu trữ trạng thái, các cơ chế để đăng ký theo dõi thay đổi và đồng bộ hóa với browser API.
|
|
8
|
+
|
|
9
|
+
Bạn có thể sử dụng lớp này trực tiếp nếu cần quản lý hash riêng biệt, tách rời khỏi trạng thái `Hash` toàn cục.
|
|
10
|
+
|
|
11
|
+
## Tính năng chính
|
|
12
|
+
|
|
13
|
+
- **Trạng thái biệt lập** — Lưu trữ bộ biến hash riêng của nó.
|
|
14
|
+
- **Chainable API** — Hầu hết các phương thức trả về `this`, cho phép viết mã ngắn gọn.
|
|
15
|
+
- **Đồng bộ hóa tự động** — Khi khởi tạo, nó đọc dữ liệu từ URL và đăng ký sự kiện `hashchange`.
|
|
16
|
+
- **Tương thích SSR** — Hoạt động an toàn trong môi trường máy chủ bằng cách sử dụng các bản giả cho DOM API.
|
|
17
|
+
|
|
18
|
+
## Khởi tạo
|
|
19
|
+
|
|
20
|
+
Để tạo một phiên bản, hãy sử dụng hàm khởi tạo `HashInstance()`.
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { HashInstance } from '@dxtmisha/functional-basic'
|
|
24
|
+
|
|
25
|
+
const myHash = new HashInstance()
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Phương thức
|
|
29
|
+
|
|
30
|
+
### Đọc và Ghi
|
|
31
|
+
- `get<T>(name: string, defaultValue?: T | (() => T)): T` — Trả về giá trị của một biến. Nếu nó không tồn tại, thiết lập `defaultValue` và trả về nó.
|
|
32
|
+
- `set<T>(name: string, callback: T | (() => T)): this` — Cập nhật giá trị của biến và đồng bộ hóa URL.
|
|
33
|
+
|
|
34
|
+
### Theo dõi (Watchers)
|
|
35
|
+
- `addWatch<T>(name: string, callback: (value: T) => void): this` — Thêm bộ xử lý cho các thay đổi của biến.
|
|
36
|
+
- `removeWatch<T>(name: string, callback: (value: T) => void): this` — Xóa bộ xử lý.
|
|
37
|
+
|
|
38
|
+
### Quản lý
|
|
39
|
+
- `reload(): this` — Làm mới trạng thái nội bộ từ URL hash hiện tại.
|
|
40
|
+
|
|
41
|
+
## Ví dụ
|
|
42
|
+
|
|
43
|
+
### Sử dụng một phiên bản biệt lập
|
|
44
|
+
```typescript
|
|
45
|
+
const searchHash = new HashInstance()
|
|
46
|
+
|
|
47
|
+
// Đăng ký theo dõi
|
|
48
|
+
searchHash.addWatch('query', (q) => {
|
|
49
|
+
console.log('Tìm kiếm:', q)
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
// Thiết lập giá trị (sẽ cập nhật URL)
|
|
53
|
+
searchHash.set('query', 'smartphones')
|
|
54
|
+
```
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import {Meta} from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title='@dxtmisha/en/functional-basic/Classes/MetaStatic - Meta Tags Management (Static)'/>
|
|
4
|
+
|
|
5
|
+
# Class MetaStatic
|
|
6
|
+
|
|
7
|
+
The `MetaStatic` class is a **static entry point** for managing page meta tags, Open Graph (OG), and Twitter Card data. It acts as a static wrapper around a globally managed `Meta` instance, providing a clean singleton interface for SEO and social sharing management.
|
|
8
|
+
|
|
9
|
+
## Key Features
|
|
10
|
+
|
|
11
|
+
- **Static Interface** — Manage page titles, descriptions, and more without manual instantiation.
|
|
12
|
+
- **Unified Management** — Automatically syncs titles and other information across standard meta, OG, and Twitter.
|
|
13
|
+
- **SSR Isolation** — Uses `ServerStorage` to handle instance isolation during server-side rendering.
|
|
14
|
+
- **Fluent API** — Support for method chaining in setter methods.
|
|
15
|
+
|
|
16
|
+
## Methods
|
|
17
|
+
|
|
18
|
+
### Access
|
|
19
|
+
|
|
20
|
+
- `getItem(): Meta` — Returns the underlying `Meta` instance.
|
|
21
|
+
- `getOg(): MetaOg` — Gets the MetaOg instance for advanced Open Graph operations.
|
|
22
|
+
- `getTwitter(): MetaTwitter` — Gets the MetaTwitter instance for advanced Twitter Card operations.
|
|
23
|
+
|
|
24
|
+
### Getters
|
|
25
|
+
|
|
26
|
+
- `getTitle(): string` — Gets the current page title (without suffix).
|
|
27
|
+
- `getDescription(): string` — Gets the current description meta tag.
|
|
28
|
+
- `getKeywords(): string` — Gets the current keywords.
|
|
29
|
+
- `getImage(): string` — Gets the image URL (from OG settings).
|
|
30
|
+
- `getCanonical(): string` — Gets the canonical URL.
|
|
31
|
+
- `getRobots(): MetaRobots` — Gets the current robots directive.
|
|
32
|
+
- `getAuthor(): string` — Gets the author name.
|
|
33
|
+
- `getSiteName(): string` — Gets the site name (from OG settings).
|
|
34
|
+
- `getLocale(): string` — Gets the locale (from OG settings).
|
|
35
|
+
|
|
36
|
+
### Setters
|
|
37
|
+
|
|
38
|
+
All setter methods return `typeof MetaStatic` to support method chaining.
|
|
39
|
+
|
|
40
|
+
- `setTitle(title: string): typeof MetaStatic` — Sets the page title and updates OG/Twitter titles.
|
|
41
|
+
- `setDescription(description: string): typeof MetaStatic` — Sets the description meta tag.
|
|
42
|
+
- `setKeywords(keywords: string | string[]): typeof MetaStatic` — Sets the keywords (string or array).
|
|
43
|
+
- `setImage(image: string): typeof MetaStatic` — Sets the image for OG and Twitter.
|
|
44
|
+
- `setCanonical(canonical: string): typeof MetaStatic` — Sets the canonical URL and updates OG/Twitter URLs.
|
|
45
|
+
- `setRobots(robots: MetaRobots): typeof MetaStatic` — Sets the robots directive.
|
|
46
|
+
- `setAuthor(author: string): typeof MetaStatic` — Sets the author meta tag.
|
|
47
|
+
- `setSiteName(siteName: string): typeof MetaStatic` — Sets the site name for OG and Twitter.
|
|
48
|
+
- `setLocale(locale: string): typeof MetaStatic` — Sets the locale for Open Graph.
|
|
49
|
+
- `setSuffix(suffix?: string): typeof MetaStatic` — Sets a suffix (e.g., " | My Site") appended to titles.
|
|
50
|
+
|
|
51
|
+
### Output
|
|
52
|
+
|
|
53
|
+
- `html(): string` — Generates a complete string of HTML meta tags for all managed properties.
|
|
54
|
+
|
|
55
|
+
## Architecture
|
|
56
|
+
|
|
57
|
+
`MetaStatic` works as a **static proxy**. All calls are forwarded to an internal `Meta` instance managed via `ServerStorage`.
|
|
58
|
+
|
|
59
|
+
### Request Isolation (SSR)
|
|
60
|
+
|
|
61
|
+
By using `ServerStorage`, `MetaStatic` ensures that during Server-Side Rendering (SSR), meta information for one request does not leak into another. Each request gets its own isolated context.
|
|
62
|
+
|
|
63
|
+
### Examples
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
import { MetaStatic } from '@dxtmisha/functional-basic';
|
|
67
|
+
|
|
68
|
+
MetaStatic
|
|
69
|
+
.setSuffix('My Online Store')
|
|
70
|
+
.setTitle('Summer Collection')
|
|
71
|
+
.setDescription('Explore our new arrivals.')
|
|
72
|
+
.setImage('https://example.com/cover.jpg')
|
|
73
|
+
.setLocale('en_US');
|
|
74
|
+
|
|
75
|
+
console.log(MetaStatic.getTitle()); // "Summer Collection"
|
|
76
|
+
document.title; // "Summer Collection - My Online Store"
|
|
77
|
+
```
|
|
78
|
+
|