@dxtmisha/wiki 0.39.7 → 0.56.0
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-149Ahniv.js} +4 -4
- package/dist/library.js +1 -1
- package/dist/media/descriptions/wikiDescriptionsArea.d.ts +7 -0
- package/dist/media/descriptions/wikiDescriptionsClientOnly.d.ts +7 -0
- package/dist/media/descriptions/wikiDescriptionsContainer.d.ts +7 -0
- package/dist/media/descriptions/wikiDescriptionsHeader.d.ts +7 -0
- package/dist/media/descriptions/wikiDescriptionsPageArea.d.ts +7 -0
- package/dist/media/mdx/Area/wikiMdxArea.d.ts +7 -0
- package/dist/media/mdx/ClientOnly/wikiMdxClientOnly.d.ts +7 -0
- package/dist/media/mdx/Container/wikiMdxContainer.d.ts +7 -0
- package/dist/media/mdx/Header/wikiMdxHeader.d.ts +7 -0
- package/dist/media/mdx/PageArea/wikiMdxPageArea.d.ts +7 -0
- package/dist/media.d.ts +1 -1
- package/dist/media.js +127 -68
- package/dist/storybook.js +2707 -1841
- package/dist/{wikiDescriptions-Cv4WzSNL.js → wikiDescriptions-7XaHU3Yk.js} +182 -0
- package/package.json +1 -1
- package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.en.mdx +43 -0
- package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.ru.mdx +43 -0
- package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.vi.mdx +41 -0
- package/src/media/functional/functional/composables/useApiRef/useApiRef.en.mdx +20 -4
- package/src/media/functional/functional/composables/useApiRef/useApiRef.ru.mdx +21 -3
- package/src/media/functional/functional/composables/useApiRef/useApiRef.vi.mdx +20 -2
- package/src/media/functional/functional/functions/computedAsync/computedAsync.en.mdx +8 -0
- package/src/media/functional/functional/functions/computedAsync/computedAsync.ru.mdx +8 -0
- package/src/media/functional/functional/functions/computedAsync/computedAsync.vi.mdx +8 -0
- package/src/media/functional/functional/functions/computedEternity/computedEternity.en.mdx +8 -0
- package/src/media/functional/functional/functions/computedEternity/computedEternity.ru.mdx +8 -0
- package/src/media/functional/functional/functions/computedEternity/computedEternity.vi.mdx +8 -0
- 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 +57 -54
- package/src/media/functional/functional-basic/classes/Api/Api.ru.mdx +57 -54
- package/src/media/functional/functional-basic/classes/Api/Api.vi.mdx +57 -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 +106 -51
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.ru.mdx +107 -52
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.vi.mdx +103 -49
- 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 +59 -21
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.ru.mdx +63 -25
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.vi.mdx +64 -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 +178 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.ru.mdx +178 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.vi.mdx +178 -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/Meta/Meta.en.mdx +16 -0
- package/src/media/functional/functional-basic/classes/Meta/Meta.ru.mdx +16 -0
- package/src/media/functional/functional-basic/classes/Meta/Meta.vi.mdx +17 -1
- package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.en.mdx +9 -0
- package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.ru.mdx +9 -0
- package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.vi.mdx +9 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.en.mdx +79 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.ru.mdx +79 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.vi.mdx +79 -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/functional-basic/icons/icons.en.mdx +3 -0
- package/src/media/functional/functional-basic/icons/icons.ru.mdx +3 -0
- package/src/media/functional/functional-basic/icons/icons.vi.mdx +3 -0
- package/src/media/functional/nitro-basic/functions/getInject.en.mdx +27 -0
- package/src/media/functional/nitro-basic/functions/getInject.ru.mdx +27 -0
- package/src/media/functional/nitro-basic/functions/getInject.vi.mdx +20 -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
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import {Meta} from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title='@dxtmisha/vi/functional-basic/Classes/StorageCallback - Storage Callbacks'/>
|
|
4
|
+
|
|
5
|
+
# Lớp StorageCallback
|
|
6
|
+
|
|
7
|
+
Một lớp tiện ích để quản lý các nhóm hàm callback liên kết với các khóa lưu trữ cụ thể. Nó cho phép nhiều thành phần hoặc chức năng phản hồi các thay đổi hoặc kích hoạt lưu trữ một cách phối hợp, bất đồng bộ.
|
|
8
|
+
|
|
9
|
+
## Các đặc điểm chính
|
|
10
|
+
|
|
11
|
+
- **Các thực thể có tên** — thực hiện mô hình singleton, trong đó các thực thể được truy xuất theo tên và nhóm, đảm bảo rằng các phần khác nhau của ứng dụng chia sẻ cùng một danh sách callback cho cùng một tài nguyên.
|
|
12
|
+
- **Phân tách theo nhóm** — cho phép tách biệt các danh sách callback theo nhóm (ví dụ: 'main', 'global', 'local'), ngăn chặn xung đột tên giữa các mô-đun khác nhau.
|
|
13
|
+
- **Thực thi bất đồng bộ** — hỗ trợ các callback dựa trên `Promise` và thực thi chúng theo trình tự trong quá trình `run`.
|
|
14
|
+
- **Theo dõi trạng thái tải** — cung cấp cờ `loading` có sẵn, được quản lý tự động trong giai đoạn thực thi callback.
|
|
15
|
+
|
|
16
|
+
## Khởi tạo
|
|
17
|
+
|
|
18
|
+
Để khởi tạo đối tượng, hãy gọi hàm tạo `StorageCallback(name, group)` hoặc sử dụng phương thức tĩnh `getInstance(name, group)`.
|
|
19
|
+
|
|
20
|
+
### Các ràng buộc Generic
|
|
21
|
+
|
|
22
|
+
Để đảm bảo kiểu dữ liệu nghiêm ngặt, lớp hỗ trợ các generic sau:
|
|
23
|
+
- `T = any` — Kiểu dữ liệu được truyền cho các callback.
|
|
24
|
+
- `Callback = (value: T) => void | Promise<void>` — Cấu trúc hàm callback.
|
|
25
|
+
|
|
26
|
+
**Tham số:**
|
|
27
|
+
- `name: string` — định danh duy nhất cho mục nhập lưu trữ.
|
|
28
|
+
- `group: string = 'main'` — phân loại tùy chọn để ngăn chặn xung đột tên.
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
import { StorageCallback } from '@dxtmisha/functional-basic'
|
|
32
|
+
|
|
33
|
+
// 1. Khởi tạo đơn giản (nhóm mặc định là 'main')
|
|
34
|
+
const storage = new StorageCallback('user-data')
|
|
35
|
+
|
|
36
|
+
// 2. Sử dụng phương thức tĩnh getInstance
|
|
37
|
+
const sharedStorage = StorageCallback.getInstance('settings', 'global')
|
|
38
|
+
|
|
39
|
+
// 3. Sử dụng generic để kiểm soát kiểu dữ liệu
|
|
40
|
+
const numberStorage = new StorageCallback<number>('counter')
|
|
41
|
+
numberStorage.addCallback((val) => console.log(val + 1))
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Các phương thức
|
|
45
|
+
|
|
46
|
+
### Thông tin
|
|
47
|
+
|
|
48
|
+
- `getName(): string` — trả về tên của thực thể lưu trữ.
|
|
49
|
+
- `isLoading(): boolean` — trả về trạng thái tải hiện tại.
|
|
50
|
+
- `getLoading(): boolean` — trả về trạng thái tải hiện tại (tương tự `isLoading`).
|
|
51
|
+
|
|
52
|
+
### Quản lý
|
|
53
|
+
|
|
54
|
+
- `addCallback(callback: Callback, isOnce?: boolean): this` — thêm một callback mới vào danh sách thực thi. Nếu `isOnce: true`, callback sẽ bị xóa sau lần thực thi đầu tiên.
|
|
55
|
+
- `removeCallback(callback: Callback): this` — xóa một callback cụ thể khỏi danh sách.
|
|
56
|
+
|
|
57
|
+
### Điều khiển (Control)
|
|
58
|
+
|
|
59
|
+
- `preparation(): this` — chuẩn bị trạng thái trước khi thực thi (đặt `loading` thành `true`). Được sử dụng thủ công khi bắt đầu các hoạt động bất đồng bộ.
|
|
60
|
+
- `run(value: T): Promise<this>` — thực thi tất cả các callback theo trình tự với giá trị được cung cấp. Đặt `loading` về `false` khi bắt đầu thực thi.
|
|
61
|
+
|
|
62
|
+
## Ví dụ sử dụng
|
|
63
|
+
|
|
64
|
+
### Quản lý trạng thái tải thủ công
|
|
65
|
+
|
|
66
|
+
Khi dữ liệu được lấy bất đồng bộ từ nguồn bên ngoài (ví dụ: Figma storage), bạn có thể quản lý trạng thái `loading` thủ công để điều phối nhiều yêu cầu.
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
const storage = new StorageCallback('figma-data')
|
|
70
|
+
|
|
71
|
+
// 1. Kiểm tra nếu không phải đang tải
|
|
72
|
+
if (!storage.isLoading()) {
|
|
73
|
+
// 2. Thiết lập trạng thái đang tải
|
|
74
|
+
storage.preparation()
|
|
75
|
+
|
|
76
|
+
// 3. Yêu cầu dữ liệu
|
|
77
|
+
fetchFromFigma((data) => {
|
|
78
|
+
// 4. Thực thi callback (run sẽ đưa loading về false)
|
|
79
|
+
storage.run(data)
|
|
80
|
+
})
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Callback một lần
|
|
85
|
+
|
|
86
|
+
Nếu bạn chỉ cần một hàm kích hoạt một lần (ví dụ: để nạp dữ liệu ban đầu), hãy sử dụng cờ `isOnce`.
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
const storage = new StorageCallback('initial-data')
|
|
90
|
+
|
|
91
|
+
storage.addCallback((data) => {
|
|
92
|
+
console.log('Đã thực thi một lần:', data)
|
|
93
|
+
}, true)
|
|
94
|
+
|
|
95
|
+
await storage.run('update 1') // 'Đã thực thi một lần: update 1'
|
|
96
|
+
await storage.run('update 2') // (không có đầu ra, callback đã bị xóa)
|
|
97
|
+
```
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/en/functional-basic/Functions/addTagHighlightMatch - Highlight matches in a string'/>
|
|
4
4
|
|
|
@@ -8,17 +8,20 @@ A utility for highlighting matches in a string by wrapping them in a `<span>` HT
|
|
|
8
8
|
|
|
9
9
|
**Parameters:**
|
|
10
10
|
- `value: string` — The initial string to process.
|
|
11
|
-
- `search?: string` — The search string (one or more words separated by spaces).
|
|
11
|
+
- `search?: string | RegExp` — The search string (one or more words separated by spaces) or a regular expression.
|
|
12
12
|
- `className: string = 'sys-highlight-match'` — The CSS class to be added to the `<span>` tag.
|
|
13
|
+
- `shouldEscape: boolean = false` — Whether to escape the string before adding highlighting.
|
|
13
14
|
|
|
14
15
|
**Returns:**
|
|
15
16
|
`string` — The string with HTML tags added for highlighting.
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
<Source
|
|
19
|
+
language='typescript'
|
|
20
|
+
code={`
|
|
18
21
|
import { addTagHighlightMatch } from '@dxtmisha/functional-basic'
|
|
19
22
|
|
|
20
23
|
// Highlight a single word
|
|
21
|
-
addTagHighlightMatch('Hello world', 'hello')
|
|
24
|
+
addTagHighlightMatch('Hello world', 'hello')
|
|
22
25
|
// '<span class="sys-highlight-match">Hello</span> world'
|
|
23
26
|
|
|
24
27
|
// Highlight multiple words (OR logic)
|
|
@@ -28,4 +31,9 @@ addTagHighlightMatch('Apple and Banana', 'apple banana')
|
|
|
28
31
|
// Custom class
|
|
29
32
|
addTagHighlightMatch('Test', 'test', 'text-red')
|
|
30
33
|
// '<span class="text-red">Test</span>'
|
|
31
|
-
|
|
34
|
+
|
|
35
|
+
// With escaping
|
|
36
|
+
addTagHighlightMatch('<b>bold</b>', 'bold', 'sys-highlight-match', true)
|
|
37
|
+
// '<b><span class="sys-highlight-match">bold</span></b>'
|
|
38
|
+
`}
|
|
39
|
+
/>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/ru/functional-basic/Functions/addTagHighlightMatch - Подсветка совпадений в строке'/>
|
|
4
4
|
|
|
@@ -8,17 +8,20 @@ import { Meta } from '@storybook/addon-docs/blocks'
|
|
|
8
8
|
|
|
9
9
|
**Параметры:**
|
|
10
10
|
- `value: string` — Исходная строка для обработки.
|
|
11
|
-
- `search?: string` — Строка поиска (одно или несколько слов через пробел)
|
|
11
|
+
- `search?: string | RegExp` — Строка поиска (одно или несколько слов через пробел) или регулярное выражение.
|
|
12
12
|
- `className: string = 'sys-highlight-match'` — CSS-класс, который будет добавлен к тегу `<span>`.
|
|
13
|
+
- `shouldEscape: boolean = false` — Нужно ли экранировать строку перед добавлением подсветки.
|
|
13
14
|
|
|
14
15
|
**Возвращает:**
|
|
15
16
|
`string` — Строка с добавленными HTML-тегами для подсветки.
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
<Source
|
|
19
|
+
language='typescript'
|
|
20
|
+
code={`
|
|
18
21
|
import { addTagHighlightMatch } from '@dxtmisha/functional-basic'
|
|
19
22
|
|
|
20
23
|
// Подсветка одного слова
|
|
21
|
-
addTagHighlightMatch('Hello world', 'hello')
|
|
24
|
+
addTagHighlightMatch('Hello world', 'hello')
|
|
22
25
|
// '<span class="sys-highlight-match">Hello</span> world'
|
|
23
26
|
|
|
24
27
|
// Подсветка нескольких слов (OR-логика)
|
|
@@ -28,4 +31,9 @@ addTagHighlightMatch('Apple and Banana', 'apple banana')
|
|
|
28
31
|
// Кастомный класс
|
|
29
32
|
addTagHighlightMatch('Test', 'test', 'text-red')
|
|
30
33
|
// '<span class="text-red">Test</span>'
|
|
31
|
-
|
|
34
|
+
|
|
35
|
+
// С экранированием
|
|
36
|
+
addTagHighlightMatch('<b>bold</b>', 'bold', 'sys-highlight-match', true)
|
|
37
|
+
// '<b><span class="sys-highlight-match">bold</span></b>'
|
|
38
|
+
`}
|
|
39
|
+
/>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/vi/functional-basic/Functions/addTagHighlightMatch - Làm nổi bật các kết quả khớp trong chuỗi'/>
|
|
4
4
|
|
|
@@ -8,17 +8,20 @@ Tiện ích để làm nổi bật các kết quả khớp trong một chuỗi b
|
|
|
8
8
|
|
|
9
9
|
**Tham số:**
|
|
10
10
|
- `value: string` — Chuỗi ban đầu để xử lý.
|
|
11
|
-
- `search?: string` — Chuỗi tìm kiếm (một hoặc nhiều từ phân tách bằng dấu cách).
|
|
11
|
+
- `search?: string | RegExp` — Chuỗi tìm kiếm (một hoặc nhiều từ phân tách bằng dấu cách) hoặc biễu thức chính quy.
|
|
12
12
|
- `className: string = 'sys-highlight-match'` — Class CSS sẽ được thêm vào thẻ `<span>`.
|
|
13
|
+
- `shouldEscape: boolean = false` — Có nên thoát chuỗi trước khi thêm làm nổi bật hay không.
|
|
13
14
|
|
|
14
15
|
**Trả về:**
|
|
15
16
|
`string` — Chuỗi với các thẻ HTML được thêm vào để làm nổi bật.
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
<Source
|
|
19
|
+
language='typescript'
|
|
20
|
+
code={`
|
|
18
21
|
import { addTagHighlightMatch } from '@dxtmisha/functional-basic'
|
|
19
22
|
|
|
20
23
|
// Làm nổi bật một từ đơn
|
|
21
|
-
addTagHighlightMatch('Hello world', 'hello')
|
|
24
|
+
addTagHighlightMatch('Hello world', 'hello')
|
|
22
25
|
// '<span class="sys-highlight-match">Hello</span> world'
|
|
23
26
|
|
|
24
27
|
// Làm nổi bật nhiều từ (logic OR)
|
|
@@ -28,4 +31,9 @@ addTagHighlightMatch('Apple and Banana', 'apple banana')
|
|
|
28
31
|
// Class tùy chỉnh
|
|
29
32
|
addTagHighlightMatch('Test', 'test', 'text-red')
|
|
30
33
|
// '<span class="text-red">Test</span>'
|
|
31
|
-
|
|
34
|
+
|
|
35
|
+
// Với thoát chuỗi (escaping)
|
|
36
|
+
addTagHighlightMatch('<b>bold</b>', 'bold', 'sys-highlight-match', true)
|
|
37
|
+
// '<b><span class="sys-highlight-match">bold</span></b>'
|
|
38
|
+
`}
|
|
39
|
+
/>
|
|
@@ -1,33 +1,51 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/en/functional-basic/Functions/anyToString - Conversion of a value to a string'/>
|
|
4
4
|
|
|
5
5
|
# `anyToString`
|
|
6
6
|
|
|
7
|
-
A utility
|
|
8
|
-
|
|
9
|
-
This is useful when outputting data to the interface when the variable type (object, array, boolean, or null) is not known in advance.
|
|
7
|
+
A utility for safely converting any input data into a string type.
|
|
10
8
|
|
|
11
9
|
**Parameters:**
|
|
12
|
-
- `value: V` —
|
|
13
|
-
- `isArrayString: boolean
|
|
10
|
+
- `value: V` — The value for conversion.
|
|
11
|
+
- `isArrayString: boolean = true` — If `true`, primitive arrays are joined by commas.
|
|
12
|
+
- `trim: boolean = true` — If `true`, trims leading and trailing whitespace (only for strings).
|
|
13
|
+
|
|
14
|
+
**Conversion Rules:**
|
|
15
|
+
- **Strings**: Returned as is (with `trim` if enabled).
|
|
16
|
+
- **Arrays**: If `isArrayString: true` and no objects are in the array, elements are joined by commas. Otherwise, JSON stringified.
|
|
17
|
+
- **Objects**: Converted to JSON. In case of error (e.g., circular reference), returns standard `toString()`.
|
|
18
|
+
- **Boolean**: `true` converts to `'1'`, `false` to `'0'`.
|
|
19
|
+
- **Other types**: `null` and `undefined` result in an empty string. Others call `toString()`.
|
|
14
20
|
|
|
15
21
|
**Returns:**
|
|
16
|
-
`string` — The string representation of the
|
|
22
|
+
`string` — The string representation of the value.
|
|
23
|
+
|
|
24
|
+
## Examples
|
|
17
25
|
|
|
18
|
-
|
|
26
|
+
<Source
|
|
27
|
+
language='typescript'
|
|
28
|
+
code={`
|
|
19
29
|
import { anyToString } from '@dxtmisha/functional-basic'
|
|
20
30
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
31
|
+
// 1. Strings
|
|
32
|
+
anyToString(' Hello ') // 'Hello'
|
|
33
|
+
anyToString(' Hello ', true, false) // ' Hello '
|
|
34
|
+
|
|
35
|
+
// 2. Arrays
|
|
36
|
+
anyToString([1, 2, 3]) // '1,2,3'
|
|
37
|
+
anyToString([1, 2, 3], false) // '[1,2,3]'
|
|
38
|
+
|
|
39
|
+
// 3. Objects
|
|
40
|
+
anyToString({ a: 1 }) // '{"a":1}'
|
|
24
41
|
|
|
25
|
-
|
|
26
|
-
|
|
42
|
+
// 4. Boolean values (1/0 conversion)
|
|
43
|
+
anyToString(true) // '1'
|
|
44
|
+
anyToString(false) // '0'
|
|
27
45
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
46
|
+
// 5. Empty values and types
|
|
47
|
+
anyToString(null) // ''
|
|
48
|
+
anyToString(123) // '123'
|
|
49
|
+
anyToString(Symbol('test')) // 'Symbol(test)'
|
|
50
|
+
`}
|
|
51
|
+
/>
|
|
@@ -1,33 +1,51 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/ru/functional-basic/Functions/anyToString - Преобразование значения в строку'/>
|
|
4
4
|
|
|
5
5
|
# `anyToString`
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Это полезно при выводе данных в интерфейс, когда заранее неизвестен тип переменной (объект, массив, boolean или null).
|
|
7
|
+
Утилита для безопасного приведения любых данных к строковому типу.
|
|
10
8
|
|
|
11
9
|
**Параметры:**
|
|
12
|
-
- `value: V` —
|
|
13
|
-
- `isArrayString: boolean
|
|
10
|
+
- `value: V` — Значение для преобразования.
|
|
11
|
+
- `isArrayString: boolean = true` — Если `true`, массивы примитивов объединяются через запятую.
|
|
12
|
+
- `trim: boolean = true` — Если `true`, обрезает лишние пробелы (только для строк).
|
|
13
|
+
|
|
14
|
+
**Правила преобразования:**
|
|
15
|
+
- **Строки**: Возвращаются как есть (с `trim`, если включено).
|
|
16
|
+
- **Массивы**: Если `isArrayString: true` и в массиве нет объектов, элементы объединяются через запятую. В остальных случаях — JSON.
|
|
17
|
+
- **Объекты**: Преобразуются в JSON. При ошибке (например, циклической ссылке) возвращается стандартный `toString()`.
|
|
18
|
+
- **Boolean**: `true` преобразуется в `'1'`, `false` — в `'0'`.
|
|
19
|
+
- **Прочие типы**: `null` и `undefined` дают пустую строку. Для остальных вызывается `toString()`.
|
|
14
20
|
|
|
15
21
|
**Возвращает:**
|
|
16
|
-
`string` — Строковое представление
|
|
22
|
+
`string` — Строковое представление значения.
|
|
23
|
+
|
|
24
|
+
## Примеры
|
|
17
25
|
|
|
18
|
-
|
|
26
|
+
<Source
|
|
27
|
+
language='typescript'
|
|
28
|
+
code={`
|
|
19
29
|
import { anyToString } from '@dxtmisha/functional-basic'
|
|
20
30
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
31
|
+
// 1. Строки
|
|
32
|
+
anyToString(' Hello ') // 'Hello'
|
|
33
|
+
anyToString(' Hello ', true, false) // ' Hello '
|
|
34
|
+
|
|
35
|
+
// 2. Массивы
|
|
36
|
+
anyToString([1, 2, 3]) // '1,2,3'
|
|
37
|
+
anyToString([1, 2, 3], false) // '[1,2,3]'
|
|
38
|
+
|
|
39
|
+
// 3. Объекты
|
|
40
|
+
anyToString({ a: 1 }) // '{"a":1}'
|
|
24
41
|
|
|
25
|
-
|
|
26
|
-
|
|
42
|
+
// 4. Логические значения (преобразование в 1/0)
|
|
43
|
+
anyToString(true) // '1'
|
|
44
|
+
anyToString(false) // '0'
|
|
27
45
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
46
|
+
// 5. Пустые значения и типы
|
|
47
|
+
anyToString(null) // ''
|
|
48
|
+
anyToString(123) // '123'
|
|
49
|
+
anyToString(Symbol('test')) // 'Symbol(test)'
|
|
50
|
+
`}
|
|
51
|
+
/>
|
|
@@ -1,33 +1,51 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/vi/functional-basic/Functions/anyToString - Chuyển đổi một giá trị thành chuỗi'/>
|
|
4
4
|
|
|
5
5
|
# `anyToString`
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Điều này rất hữu ích khi xuất dữ liệu ra giao diện mà không biết trước kiểu của biến (đối tượng, mảng, boolean hoặc null).
|
|
7
|
+
Tiện ích để chuyển đổi an toàn bất kỳ dữ liệu đầu vào nào thành kiểu chuỗi.
|
|
10
8
|
|
|
11
9
|
**Tham số:**
|
|
12
10
|
- `value: V` — Giá trị cần chuyển đổi.
|
|
13
|
-
- `isArrayString: boolean
|
|
11
|
+
- `isArrayString: boolean = true` — Nếu `true`, các mảng nguyên thủy sẽ được nối với nhau bằng dấu phẩy.
|
|
12
|
+
- `trim: boolean = true` — Nếu `true`, loại bỏ khoảng trắng dư thừa (chỉ dành cho chuỗi).
|
|
13
|
+
|
|
14
|
+
**Quy tắc chuyển đổi:**
|
|
15
|
+
- **Chuỗi**: Trả về nguyên bản (có `trim` nếu được bật).
|
|
16
|
+
- **Mảng**: Nếu `isArrayString: true` và không có đối tượng trong mảng, các phần tử sẽ được nối bằng dấu phẩy. Ngược lại — chuyển thành chuỗi JSON.
|
|
17
|
+
- **Đối tượng**: Chuyển đổi thành JSON. Trong trường hợp lỗi (ví dụ: tham chiếu vòng), trả về `toString()` tiêu chuẩn.
|
|
18
|
+
- **Boolean**: `true` chuyển thành `'1'`, `false` thành `'0'`.
|
|
19
|
+
- **Các kiểu khác**: `null` và `undefined` trả về chuỗi rỗng. Các kiểu khác gọi `toString()`.
|
|
14
20
|
|
|
15
21
|
**Trả về:**
|
|
16
22
|
`string` — Biểu diễn chuỗi của giá trị.
|
|
17
23
|
|
|
18
|
-
|
|
24
|
+
## Ví dụ
|
|
25
|
+
|
|
26
|
+
<Source
|
|
27
|
+
language='typescript'
|
|
28
|
+
code={`
|
|
19
29
|
import { anyToString } from '@dxtmisha/functional-basic'
|
|
20
30
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
31
|
+
// 1. Chuỗi (Strings)
|
|
32
|
+
anyToString(' Hello ') // 'Hello'
|
|
33
|
+
anyToString(' Hello ', true, false) // ' Hello '
|
|
34
|
+
|
|
35
|
+
// 2. Mảng (Arrays)
|
|
36
|
+
anyToString([1, 2, 3]) // '1,2,3'
|
|
37
|
+
anyToString([1, 2, 3], false) // '[1,2,3]'
|
|
38
|
+
|
|
39
|
+
// 3. Đối tượng (Objects)
|
|
40
|
+
anyToString({ a: 1 }) // '{"a":1}'
|
|
24
41
|
|
|
25
|
-
|
|
26
|
-
|
|
42
|
+
// 4. Giá trị Boolean (chuyển đổi thành 1/0)
|
|
43
|
+
anyToString(true) // '1'
|
|
44
|
+
anyToString(false) // '0'
|
|
27
45
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
46
|
+
// 5. Giá trị rỗng và các kiểu khác
|
|
47
|
+
anyToString(null) // ''
|
|
48
|
+
anyToString(123) // '123'
|
|
49
|
+
anyToString(Symbol('test')) // 'Symbol(test)'
|
|
50
|
+
`}
|
|
51
|
+
/>
|
|
@@ -1,35 +1,47 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/en/functional-basic/Functions/applyTemplate - Applying a template to text'/>
|
|
4
4
|
|
|
5
5
|
# `applyTemplate`
|
|
6
6
|
|
|
7
|
-
A utility for
|
|
8
|
-
|
|
9
|
-
It supports:
|
|
10
|
-
- Positional markers (`%d`, `%e`, etc.) to substitute values from an array in order.
|
|
11
|
-
- Named markers (`[key]`, `{key}`) to substitute values from an object by keys.
|
|
12
|
-
- Paired tags (`[key]content[/key]`, `{key}content{/key}`) to wrap content in HTML tags or other constructs (the word `[content]` inside the passed value is replaced by the tag's generic content).
|
|
7
|
+
A utility for replacing markers in text with values from an object or an array.
|
|
13
8
|
|
|
14
9
|
**Parameters:**
|
|
15
10
|
- `text: string` — The original text containing template markers.
|
|
16
|
-
- `replacement: Record<string, string | number> | string[]` — An object or array containing values
|
|
11
|
+
- `replacement: Record<string, string | number | boolean> | string[]` — An object or array containing values.
|
|
12
|
+
|
|
13
|
+
**Replacement formats (replacement)**
|
|
14
|
+
- **Array**: Used for positional markers like `%d`, `%e`, `%f`, and so on (alphabetically).
|
|
15
|
+
- **Object**: Used for named markers in brackets `[key]` or `{key}`, as well as paired tags `[tag]text[/tag]`.
|
|
17
16
|
|
|
18
17
|
**Returns:**
|
|
19
18
|
`string` — The text with substituted values.
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
## Examples
|
|
21
|
+
|
|
22
|
+
<Source
|
|
23
|
+
language='typescript'
|
|
24
|
+
code={`
|
|
22
25
|
import { applyTemplate } from '@dxtmisha/functional-basic'
|
|
23
26
|
|
|
24
|
-
// Positional markers
|
|
25
|
-
|
|
27
|
+
// 1. Positional markers (array)
|
|
28
|
+
applyTemplate('Hello, %d %e!', ['John', 'Doe']) // 'Hello, John Doe!'
|
|
29
|
+
|
|
30
|
+
// 2. Named markers (object)
|
|
31
|
+
applyTemplate('Price: [price] {currency}', { price: 100, currency: 'USD' }) // 'Price: 100 USD'
|
|
32
|
+
|
|
33
|
+
// 3. Handling 0 and false
|
|
34
|
+
applyTemplate('Value: [val]', { val: 0 }) // 'Value: 0'
|
|
35
|
+
applyTemplate('Status: [val]', { val: false }) // 'Status: false'
|
|
36
|
+
|
|
37
|
+
// 4. Skipping missing keys
|
|
38
|
+
applyTemplate('Missing: [none]', {}) // 'Missing: [none]'
|
|
26
39
|
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
40
|
+
// 5. Paired tags with content substitution
|
|
41
|
+
const tags = { link: '<a href="https://google.com">[content]</a>' }
|
|
42
|
+
applyTemplate('Click [link]here[/link]', tags) // 'Click <a href="https://google.com">here</a>'
|
|
30
43
|
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
```
|
|
44
|
+
// 6. List macros (handling out-of-bounds)
|
|
45
|
+
applyTemplate('Macros: %d, %e, %f', ['A', 'B']) // 'Macros: A, B, '
|
|
46
|
+
`}
|
|
47
|
+
/>
|
|
@@ -1,35 +1,47 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/ru/functional-basic/Functions/applyTemplate - Применение шаблона к тексту'/>
|
|
4
4
|
|
|
5
5
|
# `applyTemplate`
|
|
6
6
|
|
|
7
|
-
Утилита для
|
|
8
|
-
|
|
9
|
-
Она поддерживает:
|
|
10
|
-
- Позиционные маркеры (`%d`, `%e` и т.д.) для подстановки значений из массива по порядку.
|
|
11
|
-
- Именованные маркеры (`[key]`, `{key}`) для подстановки значений из объекта по ключам.
|
|
12
|
-
- Парные теги (`[key]контент[/key]`, `{key}контент{/key}`) для оборачивания контента в HTML-теги или другие конструкции (слово `[content]` внутри переданного значения заменяется на содержимое тега).
|
|
7
|
+
Утилита для замены меток в тексте на значения из объекта или массива.
|
|
13
8
|
|
|
14
9
|
**Параметры:**
|
|
15
10
|
- `text: string` — Исходный текст с шаблоном.
|
|
16
|
-
- `replacement: Record<string, string | number> | string[]` — Объект или массив со
|
|
11
|
+
- `replacement: Record<string, string | number | boolean> | string[]` — Объект или массив со значениями.
|
|
12
|
+
|
|
13
|
+
**Форматы замены (replacement)**
|
|
14
|
+
- **Массив**: Используется для позиционных меток `%d`, `%e`, `%f` и далее по алфавиту.
|
|
15
|
+
- **Объект**: Используется для именованных меток в скобках `[key]` или `{key}`, а также для парных тегов `[tag]текст[/tag]`.
|
|
17
16
|
|
|
18
17
|
**Возвращает:**
|
|
19
18
|
`string` — Текст с подставленными значениями.
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
## Примеры
|
|
21
|
+
|
|
22
|
+
<Source
|
|
23
|
+
language='typescript'
|
|
24
|
+
code={`
|
|
22
25
|
import { applyTemplate } from '@dxtmisha/functional-basic'
|
|
23
26
|
|
|
24
|
-
// Позиционные маркеры
|
|
25
|
-
|
|
27
|
+
// 1. Позиционные маркеры (массив)
|
|
28
|
+
applyTemplate('Привет, %d %e!', ['Иван', 'Иванов']) // 'Привет, Иван Иванов!'
|
|
29
|
+
|
|
30
|
+
// 2. Именованные маркеры (объект)
|
|
31
|
+
applyTemplate('Цена: [price] {currency}', { price: 100, currency: 'USD' }) // 'Цена: 100 USD'
|
|
32
|
+
|
|
33
|
+
// 3. Обработка 0 и false
|
|
34
|
+
applyTemplate('Значение: [val]', { val: 0 }) // 'Значение: 0'
|
|
35
|
+
applyTemplate('Статус: [val]', { val: false }) // 'Статус: false'
|
|
36
|
+
|
|
37
|
+
// 4. Пропуск отсутствующих ключей
|
|
38
|
+
applyTemplate('Отсутствует: [none]', {}) // 'Отсутствует: [none]'
|
|
26
39
|
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
40
|
+
// 5. Парные теги с подстановкой контента
|
|
41
|
+
const tags = { link: '<a href="https://google.com">[content]</a>' }
|
|
42
|
+
applyTemplate('Нажми [link]здесь[/link]', tags) // 'Нажми <a href="https://google.com">здесь</a>'
|
|
30
43
|
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
```
|
|
44
|
+
// 6. Макросы списка (выход за границы)
|
|
45
|
+
applyTemplate('Список: %d, %e, %f', ['A', 'B']) // 'Список: A, B, '
|
|
46
|
+
`}
|
|
47
|
+
/>
|