@dxtmisha/wiki 0.39.6 → 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-Bjg6wMoX.js +39 -0
- package/dist/library.d.ts +0 -1
- package/dist/library.js +25 -25
- package/dist/media.js +12 -0
- package/dist/storybook.js +26929 -11
- package/package.json +1 -1
- package/src/library.ts +0 -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
- package/dist/WikiStorybookDescriptions-IKMchHA-.js +0 -26959
|
@@ -46,7 +46,7 @@ const fromTs = new Datetime(1710460800000)
|
|
|
46
46
|
- `getHoursType(): GeoHours` — Determines the hour format (12 or 24) for the current locale.
|
|
47
47
|
- `getHour24(): boolean` — Returns the current setting for displaying the 24-hour format.
|
|
48
48
|
- `getTimeZoneOffset(): number` — Returns the time zone offset in minutes.
|
|
49
|
-
- `getTimeZone(style?: GeoTimeZoneStyle): string` — Returns the time zone (supports `minute`, `hour`, `RFC` styles).
|
|
49
|
+
- `getTimeZone(style?: GeoTimeZoneStyle): string` — Returns the time zone (supports `minute`, `hour`, `RFC` styles; default format with colon).
|
|
50
50
|
- `getFirstDayCode(): GeoFirstDay` — Returns the code for the first day of the week (0 for Sunday, 1 for Monday, 6 for Saturday).
|
|
51
51
|
|
|
52
52
|
### Value Retrieval
|
|
@@ -57,7 +57,7 @@ const fromTs = new Datetime(1710460800000)
|
|
|
57
57
|
- `getHour(): number` — Returns the hours.
|
|
58
58
|
- `getMinute(): number` — Returns the minutes.
|
|
59
59
|
- `getSecond(): number` — Returns the seconds.
|
|
60
|
-
- `getMaxDay(): number` — Returns the number of
|
|
60
|
+
- `getMaxDay(): number` — Returns the number of the last day of the current month (28-31).
|
|
61
61
|
|
|
62
62
|
### Value Setting
|
|
63
63
|
|
|
@@ -92,7 +92,7 @@ Modify the current `Datetime` object.
|
|
|
92
92
|
- `moveWeekdayFirst(): this` — Move to the first day of the current week.
|
|
93
93
|
- `moveWeekdayLast(): this` — Move to the last day of the current week.
|
|
94
94
|
- `moveWeekdayFirstByMonth(): this` — Move to the first day of the first week of the month.
|
|
95
|
-
- `moveWeekdayLastByMonth(): this` — Move to the
|
|
95
|
+
- `moveWeekdayLastByMonth(): this` — Move to the last day of the last week of the current month.
|
|
96
96
|
- `moveWeekdayNext(): this` — Shift one week forward.
|
|
97
97
|
- `moveWeekdayPrevious(): this` — Shift one week backward.
|
|
98
98
|
- `moveDayFirst(): this` — Move to the first day of the current month.
|
|
@@ -113,7 +113,7 @@ Create copies of the data.
|
|
|
113
113
|
- `cloneWeekdayFirst(): Datetime` — Copy set to the beginning of the current week.
|
|
114
114
|
- `cloneWeekdayLast(): Datetime` — Copy set to the end of the current week.
|
|
115
115
|
- `cloneWeekdayFirstByMonth(): Datetime` — Copy to the beginning of the first week of the month.
|
|
116
|
-
- `cloneWeekdayLastByMonth(): Datetime` — Copy to the
|
|
116
|
+
- `cloneWeekdayLastByMonth(): Datetime` — Copy to the end of the last week of the month.
|
|
117
117
|
- `cloneWeekdayNext(): Datetime` — Copy with a shift of one week forward.
|
|
118
118
|
- `cloneWeekdayPrevious(): Datetime` — Copy with a shift of one week backward.
|
|
119
119
|
- `cloneDayFirst(): Datetime` — Copy to the first day of the current month.
|
|
@@ -159,6 +159,38 @@ dt.standard() // "2024-03-15T00:00:00+03:00"
|
|
|
159
159
|
dt.standard(false) // "2024-03-15T00:00:00"
|
|
160
160
|
```
|
|
161
161
|
|
|
162
|
+
## SSR and Hydration
|
|
163
|
+
|
|
164
|
+
> **Warning (SSR):** Creating a `Datetime` instance without a specific date (using the current time) for rendering in SSR may lead to hydration mismatches because the time or time zone on the server may differ from the time on the client.
|
|
165
|
+
|
|
166
|
+
### Recommended Practices
|
|
167
|
+
|
|
168
|
+
When using `Datetime` in SSR environments:
|
|
169
|
+
|
|
170
|
+
1. **Always provide specific dates**: Pass explicit dates to the constructor instead of relying on the current time.
|
|
171
|
+
|
|
172
|
+
2. **Use server-side date initialization**: Initialize dates on the server with specific values to ensure consistency.
|
|
173
|
+
|
|
174
|
+
3. **Client-side only for dynamic dates**: For dates that need to show the current time, initialize them only on the client side (e.g., in `useEffect`).
|
|
175
|
+
|
|
176
|
+
4. **Consider timezone differences**: Be aware that server and client timezones may differ, affecting date calculations and formatting.
|
|
177
|
+
|
|
178
|
+
### Example of Safe SSR Usage
|
|
179
|
+
|
|
180
|
+
```javascript
|
|
181
|
+
// ✅ Good: Specific date for SSR
|
|
182
|
+
const serverDate = new Datetime('2024-03-15')
|
|
183
|
+
|
|
184
|
+
// ✅ Good: Initialize on client for current time
|
|
185
|
+
useEffect(() => {
|
|
186
|
+
const now = new Datetime()
|
|
187
|
+
setCurrentTime(now.locale('datetime'))
|
|
188
|
+
}, [])
|
|
189
|
+
|
|
190
|
+
// ❌ Avoid: Current time in SSR
|
|
191
|
+
const now = new Datetime() // May cause hydration mismatch
|
|
192
|
+
```
|
|
193
|
+
|
|
162
194
|
## Usage Examples
|
|
163
195
|
|
|
164
196
|
### Working with Intervals and Navigation
|
|
@@ -46,7 +46,7 @@ const fromTs = new Datetime(1710460800000)
|
|
|
46
46
|
- `getHoursType(): GeoHours` — Определяет формат часов (12 или 24) для текущей локали.
|
|
47
47
|
- `getHour24(): boolean` — Возвращает текущую настройку отображения 24-часового формата.
|
|
48
48
|
- `getTimeZoneOffset(): number` — Возвращает смещение часового пояса в минутах.
|
|
49
|
-
- `getTimeZone(style?: GeoTimeZoneStyle): string` — Возвращает часовой пояс (поддерживает стили `minute`, `hour`, `RFC
|
|
49
|
+
- `getTimeZone(style?: GeoTimeZoneStyle): string` — Возвращает часовой пояс (поддерживает стили `minute`, `hour`, `RFC`; по умолчанию формат с двоеточием).
|
|
50
50
|
- `getFirstDayCode(): GeoFirstDay` — Возвращает код первого дня недели (0 для воскресенья, 1 для понедельника, 6 для субботы).
|
|
51
51
|
|
|
52
52
|
### Получение значений
|
|
@@ -57,7 +57,7 @@ const fromTs = new Datetime(1710460800000)
|
|
|
57
57
|
- `getHour(): number` — Возвращает часы.
|
|
58
58
|
- `getMinute(): number` — Возвращает минуты.
|
|
59
59
|
- `getSecond(): number` — Возвращает секунды.
|
|
60
|
-
- `getMaxDay(): number` — Возвращает
|
|
60
|
+
- `getMaxDay(): number` — Возвращает число последнего дня текущего месяца (28-31).
|
|
61
61
|
|
|
62
62
|
### Установка значений
|
|
63
63
|
|
|
@@ -92,7 +92,7 @@ const fromTs = new Datetime(1710460800000)
|
|
|
92
92
|
- `moveWeekdayFirst(): this` — Переход к первому дню текущей недели.
|
|
93
93
|
- `moveWeekdayLast(): this` — Переход к последнему дню текущей недели.
|
|
94
94
|
- `moveWeekdayFirstByMonth(): this` — Переход к первому дню первой недели месяца.
|
|
95
|
-
- `moveWeekdayLastByMonth(): this` — Переход к
|
|
95
|
+
- `moveWeekdayLastByMonth(): this` — Переход к последнему дню последней недели текущего месяца.
|
|
96
96
|
- `moveWeekdayNext(): this` — Смещение на одну неделю вперед.
|
|
97
97
|
- `moveWeekdayPrevious(): this` — Смещение на одну неделю назад.
|
|
98
98
|
- `moveDayFirst(): this` — Переход к первому числу текущего месяца.
|
|
@@ -113,7 +113,7 @@ const fromTs = new Datetime(1710460800000)
|
|
|
113
113
|
- `cloneWeekdayFirst(): Datetime` — Копия, установленная на начало текущей недели.
|
|
114
114
|
- `cloneWeekdayLast(): Datetime` — Копия, установленная на конец текущей недели.
|
|
115
115
|
- `cloneWeekdayFirstByMonth(): Datetime` — Копия на начало первой недели месяца.
|
|
116
|
-
- `cloneWeekdayLastByMonth(): Datetime` — Копия на
|
|
116
|
+
- `cloneWeekdayLastByMonth(): Datetime` — Копия на конец последней недели месяца.
|
|
117
117
|
- `cloneWeekdayNext(): Datetime` — Копия со сдвигом на неделю вперед.
|
|
118
118
|
- `cloneWeekdayPrevious(): Datetime` — Копия со сдвигом на неделю назад.
|
|
119
119
|
- `cloneDayFirst(): Datetime` — Копия на первое число текущего месяца.
|
|
@@ -159,6 +159,38 @@ dt.standard() // "2024-03-15T00:00:00+03:00"
|
|
|
159
159
|
dt.standard(false) // "2024-03-15T00:00:00"
|
|
160
160
|
```
|
|
161
161
|
|
|
162
|
+
## SSR и Гидратация
|
|
163
|
+
|
|
164
|
+
> **Внимание (SSR):** Создание экземпляра `Datetime` без указания конкретной даты (использование текущего времени) для отрисовки в SSR может привести к ошибкам гидратации, так как время или часовой пояс сервера могут отличаться от времени на стороне клиента.
|
|
165
|
+
|
|
166
|
+
### Рекомендуемые практики
|
|
167
|
+
|
|
168
|
+
При использовании `Datetime` в SSR-окружениях:
|
|
169
|
+
|
|
170
|
+
1. **Всегда указывайте конкретные даты**: Передавайте явные даты в конструктор вместо использования текущего времени.
|
|
171
|
+
|
|
172
|
+
2. **Используйте инициализацию даты на сервере**: Инициализируйте даты на сервере с конкретными значениями для обеспечения согласованности.
|
|
173
|
+
|
|
174
|
+
3. **Только клиентская инициализация для динамических дат**: Для дат, которые должны показывать текущее время, инициализируйте их только на стороне клиента (например, в `useEffect`).
|
|
175
|
+
|
|
176
|
+
4. **Учитывайте различия часовых поясов**: Помните, что часовые пояса сервера и клиента могут отличаться, что влияет на вычисления и форматирование дат.
|
|
177
|
+
|
|
178
|
+
### Пример безопасного использования в SSR
|
|
179
|
+
|
|
180
|
+
```javascript
|
|
181
|
+
// ✅ Хорошо: Конкретная дата для SSR
|
|
182
|
+
const serverDate = new Datetime('2024-03-15')
|
|
183
|
+
|
|
184
|
+
// ✅ Хорошо: Инициализация на клиенте для текущего времени
|
|
185
|
+
useEffect(() => {
|
|
186
|
+
const now = new Datetime()
|
|
187
|
+
setCurrentTime(now.locale('datetime'))
|
|
188
|
+
}, [])
|
|
189
|
+
|
|
190
|
+
// ❌ Избегайте: Текущее время в SSR
|
|
191
|
+
const now = new Datetime() // Может вызвать ошибку гидратации
|
|
192
|
+
```
|
|
193
|
+
|
|
162
194
|
## Примеры использования
|
|
163
195
|
|
|
164
196
|
### Работа с интервалами и навигацией
|
|
@@ -46,7 +46,7 @@ const fromTs = new Datetime(1710460800000)
|
|
|
46
46
|
- `getHoursType(): GeoHours` — Xác định định dạng giờ (12 hoặc 24) cho địa phương hiện tại.
|
|
47
47
|
- `getHour24(): boolean` — Trả về thiết lập hiện tại cho việc hiển thị định dạng 24 giờ.
|
|
48
48
|
- `getTimeZoneOffset(): number` — Trả về độ lệch múi giờ tính bằng phút.
|
|
49
|
-
- `getTimeZone(style?: GeoTimeZoneStyle): string` — Trả về múi giờ (hỗ trợ các kiểu `minute`, `hour`, `RFC
|
|
49
|
+
- `getTimeZone(style?: GeoTimeZoneStyle): string` — Trả về múi giờ (hỗ trợ các kiểu `minute`, `hour`, `RFC`; định dạng mặc định với dấu hai chấm).
|
|
50
50
|
- `getFirstDayCode(): GeoFirstDay` — Trả về mã cho ngày đầu tiên của tuần (0 cho Chủ Nhật, 1 cho Thứ Hai, 6 cho Thứ Bảy).
|
|
51
51
|
|
|
52
52
|
### Lấy giá trị
|
|
@@ -57,7 +57,7 @@ const fromTs = new Datetime(1710460800000)
|
|
|
57
57
|
- `getHour(): number` — Trả về giờ.
|
|
58
58
|
- `getMinute(): number` — Trả về phút.
|
|
59
59
|
- `getSecond(): number` — Trả về giây.
|
|
60
|
-
- `getMaxDay(): number` — Trả về số ngày trong tháng hiện tại.
|
|
60
|
+
- `getMaxDay(): number` — Trả về số của ngày cuối cùng trong tháng hiện tại (28-31).
|
|
61
61
|
|
|
62
62
|
### Thiết lập giá trị
|
|
63
63
|
|
|
@@ -92,7 +92,7 @@ Thay đổi đối tượng `Datetime` hiện tại.
|
|
|
92
92
|
- `moveWeekdayFirst(): this` — Chuyển đến ngày đầu tiên của tuần hiện tại.
|
|
93
93
|
- `moveWeekdayLast(): this` — Chuyển đến ngày cuối cùng của tuần hiện tại.
|
|
94
94
|
- `moveWeekdayFirstByMonth(): this` — Chuyển đến ngày đầu tiên của tuần đầu tiên trong tháng.
|
|
95
|
-
- `moveWeekdayLastByMonth(): this` — Chuyển đến ngày
|
|
95
|
+
- `moveWeekdayLastByMonth(): this` — Chuyển đến ngày cuối cùng của tuần cuối cùng trong tháng hiện tại.
|
|
96
96
|
- `moveWeekdayNext(): this` — Dịch chuyển một tuần về phía trước.
|
|
97
97
|
- `moveWeekdayPrevious(): this` — Dịch chuyển một tuần về phía sau.
|
|
98
98
|
- `moveDayFirst(): this` — Chuyển đến ngày đầu tiên của tháng hiện tại.
|
|
@@ -113,7 +113,7 @@ Tạo bản sao của dữ liệu.
|
|
|
113
113
|
- `cloneWeekdayFirst(): Datetime` — Sao chép được thiết lập vào đầu tuần hiện tại.
|
|
114
114
|
- `cloneWeekdayLast(): Datetime` — Sao chép được thiết lập vào cuối tuần hiện tại.
|
|
115
115
|
- `cloneWeekdayFirstByMonth(): Datetime` — Sao chép đến đầu tuần đầu tiên của tháng.
|
|
116
|
-
- `cloneWeekdayLastByMonth(): Datetime` — Sao chép đến
|
|
116
|
+
- `cloneWeekdayLastByMonth(): Datetime` — Sao chép đến cuối tuần cuối cùng của tháng.
|
|
117
117
|
- `cloneWeekdayNext(): Datetime` — Sao chép với việc dịch chuyển một tuần về phía trước.
|
|
118
118
|
- `cloneWeekdayPrevious(): Datetime` — Sao chép với việc dịch chuyển một tuần về phía sau.
|
|
119
119
|
- `cloneDayFirst(): Datetime` — Sao chép đến ngày đầu tiên của tháng hiện tại.
|
|
@@ -159,6 +159,38 @@ dt.standard() // "2024-03-15T00:00:00+03:00"
|
|
|
159
159
|
dt.standard(false) // "2024-03-15T00:00:00"
|
|
160
160
|
```
|
|
161
161
|
|
|
162
|
+
## SSR và Hydration
|
|
163
|
+
|
|
164
|
+
> **Cảnh báo (SSR):** Việc tạo một thực thể `Datetime` mà không có ngày cụ thể (sử dụng thời gian hiện tại) để render trong SSR có thể dẫn đến lỗi hydration mismatch vì thời gian hoặc múi giờ trên máy chủ có thể khác với thời gian trên máy khách.
|
|
165
|
+
|
|
166
|
+
### Thực tiễn khuyến nghị
|
|
167
|
+
|
|
168
|
+
Khi sử dụng `Datetime` trong môi trường SSR:
|
|
169
|
+
|
|
170
|
+
1. **Luôn cung cấp ngày cụ thể**: Truyền ngày cụ thể vào hàm khởi tạo thay vì sử dụng thời gian hiện tại.
|
|
171
|
+
|
|
172
|
+
2. **Sử dụng khởi tạo ngày ở phía máy chủ**: Khởi tạo ngày ở máy chủ với các giá trị cụ thể để đảm bảo tính nhất quán.
|
|
173
|
+
|
|
174
|
+
3. **Chỉ khởi tạo ở phía máy khách cho ngày động**: Đối với ngày cần hiển thị thời gian hiện tại, chỉ khởi tạo ở phía máy khách (ví dụ: trong `useEffect`).
|
|
175
|
+
|
|
176
|
+
4. **Cân nhắc sự khác biệt múi giờ**: Lưu ý rằng múi giờ máy chủ và máy khách có thể khác nhau, ảnh hưởng đến tính toán và định dạng ngày.
|
|
177
|
+
|
|
178
|
+
### Ví dụ về sử dụng an toàn trong SSR
|
|
179
|
+
|
|
180
|
+
```javascript
|
|
181
|
+
// ✅ Tốt: Ngày cụ thể cho SSR
|
|
182
|
+
const serverDate = new Datetime('2024-03-15')
|
|
183
|
+
|
|
184
|
+
// ✅ Tốt: Khởi tạo ở máy khách cho thời gian hiện tại
|
|
185
|
+
useEffect(() => {
|
|
186
|
+
const now = new Datetime()
|
|
187
|
+
setCurrentTime(now.locale('datetime'))
|
|
188
|
+
}, [])
|
|
189
|
+
|
|
190
|
+
// ❌ Tránh: Thời gian hiện tại trong SSR
|
|
191
|
+
const now = new Datetime() // Có thể gây lỗi hydration
|
|
192
|
+
```
|
|
193
|
+
|
|
162
194
|
## Ví dụ sử dụng
|
|
163
195
|
|
|
164
196
|
### Làm việc với Khoảng thời gian và Điều hướng
|
|
@@ -2,94 +2,125 @@ import {Meta} from '@storybook/addon-docs/blocks'
|
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/en/functional-basic/Classes/ErrorCenter - Error Management'/>
|
|
4
4
|
|
|
5
|
-
# ErrorCenter
|
|
5
|
+
# ErrorCenter Class
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
`ErrorCenter` is the central tool for managing all errors in the application. It allows you to register possible error causes in one place, configure the reaction to them (e.g., showing notifications), and trigger them from any part of the code.
|
|
8
8
|
|
|
9
|
-
The class
|
|
9
|
+
The class acts as a static bridge (Static Bridge), directing all requests to a single `ErrorCenterInstance`.
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Methods
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
- **Group-Based Handling** — Allows registering multiple callbacks for specific error categories.
|
|
16
|
-
- **Chainable API** — Methods for adding causes and handlers support fluent interface design.
|
|
17
|
-
- **Predefined Defaults** — Comes pre-configured with standard network error causes (`timeout`, `offline`, `notFound`, etc.).
|
|
13
|
+
### Action
|
|
14
|
+
- `on(cause: ErrorCenterCauseItem): void` — Starts the processing. Searches the registry, merges data, and calls the appropriate callbacks.
|
|
18
15
|
|
|
19
|
-
|
|
16
|
+
### Verification
|
|
17
|
+
- `has(code: string, group?: string): boolean` — Checks if an error is registered.
|
|
18
|
+
- `get(code: string, group?: string): ErrorCenterCauseItem | undefined` — Returns error data from the registry.
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
- `
|
|
20
|
+
### Configuration
|
|
21
|
+
- `add(cause: ErrorCenterCauseItem): void` — Adds a single error cause.
|
|
22
|
+
- `addList(causes: ErrorCenterCauseList): void` — Adds a list of errors (batch registration).
|
|
23
|
+
- `addHandler(group: ErrorCenterGroup, handler: ErrorCenterHandlerCallback): void` — Registers a reaction to a group of errors.
|
|
24
|
+
- `addHandlerList(handlers: ErrorCenterHandlerList): void` — Batch registration of several handlers.
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
- `getItem(): ErrorCenterInstance` — Returns the underlying instance used by the static wrapper.
|
|
27
|
-
|
|
28
|
-
## Configuration
|
|
29
|
-
|
|
30
|
-
- `add(cause: ErrorCenterCauseItem): this` — Adds a single error cause to the global storage.
|
|
31
|
-
- `addList(causes: ErrorCenterCauseList): this` — Adds multiple error causes to the registry at once.
|
|
32
|
-
- `addHandler(group: ErrorCenterGroup, handler: ErrorCenterHandlerCallback): this` — Registers a callback function for a specific group.
|
|
33
|
-
- `addHandlerList(handlers: ErrorCenterHandlerList): this` — Registers a batch of handlers.
|
|
34
|
-
|
|
35
|
-
## Action Methods
|
|
36
|
-
|
|
37
|
-
### `on`
|
|
38
|
-
|
|
39
|
-
Triggers error handling for the specified cause. It merges the provided cause with stored data (if any), executes all registered handlers for the group, and logs the error to the console.
|
|
40
|
-
|
|
41
|
-
**Parameters:**
|
|
42
|
-
- `cause: ErrorCenterCauseItem` — The cause to trigger. Only `code` and `group` are required if the cause was previously registered via `add()`.
|
|
43
|
-
|
|
44
|
-
**Returns:** `this`
|
|
26
|
+
### Auxiliary
|
|
27
|
+
- `getItem(): ErrorCenterInstance` — Returns the internal instance of the class.
|
|
45
28
|
|
|
46
29
|
## Types
|
|
47
30
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
The main object used to define an error cause.
|
|
31
|
+
#### `ErrorCenterGroup`
|
|
32
|
+
Group name (e.g., 'api', 'auth') or `undefined` for a general handler.
|
|
51
33
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
- `label?: string` — Human-readable name of the error.
|
|
55
|
-
- `message?: string` — Detailed description of the error.
|
|
56
|
-
- `details?: any` — Optional object for additional context or technical data.
|
|
34
|
+
#### `ErrorCenterCauseItem`
|
|
35
|
+
Object describing an error: `group`, `code` (required), `priority`, `label`, `message`, `details`.
|
|
57
36
|
|
|
58
|
-
|
|
37
|
+
## Usage Guide
|
|
59
38
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
39
|
+
### Step 1: Registration (Registry)
|
|
40
|
+
Create an error dictionary to store texts separately from the code.
|
|
41
|
+
```typescript
|
|
42
|
+
ErrorCenter.add({
|
|
43
|
+
group: 'auth',
|
|
44
|
+
code: 'LOGIN_FAILED',
|
|
45
|
+
label: 'Login Failed',
|
|
46
|
+
message: 'Invalid password.'
|
|
47
|
+
})
|
|
48
|
+
```
|
|
65
49
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
50
|
+
### Step 2: Subscription (Handlers)
|
|
51
|
+
Specify how the application should react to an error group.
|
|
52
|
+
```typescript
|
|
53
|
+
ErrorCenter.addHandler('auth', (cause) => {
|
|
54
|
+
alert(cause.message);
|
|
55
|
+
});
|
|
56
|
+
```
|
|
71
57
|
|
|
72
|
-
|
|
58
|
+
### Step 3: Execution (Execution)
|
|
59
|
+
Trigger the error by its code and group.
|
|
60
|
+
```typescript
|
|
61
|
+
ErrorCenter.on({ group: 'auth', code: 'LOGIN_FAILED' });
|
|
62
|
+
```
|
|
73
63
|
|
|
74
|
-
|
|
64
|
+
## Standard Error Causes
|
|
65
|
+
|
|
66
|
+
The class already contains pre-defined descriptions for common situations.
|
|
67
|
+
|
|
68
|
+
#### API Group (`api`)
|
|
69
|
+
Used for network request errors.
|
|
70
|
+
- **forbidden** — Forbidden (403).
|
|
71
|
+
- **notFound** — Resource not found (404).
|
|
72
|
+
- **offline** — No internet connection.
|
|
73
|
+
- **server** — Internal server error (500).
|
|
74
|
+
- **timeout** — Request timeout.
|
|
75
|
+
- **unauthorized** — Authorization error (401).
|
|
76
|
+
- **unknown** — Unknown error.
|
|
77
|
+
- **cacheClear**, **cacheGet**, **cacheRemove**, **cacheSet** — Cache errors.
|
|
78
|
+
|
|
79
|
+
#### Intl Group (`intl`)
|
|
80
|
+
Errors during data formatting (dates, numbers, etc.).
|
|
81
|
+
- **datetime**, **display**, **number**, **plural**, **relative**.
|
|
82
|
+
- **invalid** — Invalid date or incorrect format.
|
|
83
|
+
|
|
84
|
+
#### Storage Group (`storage`)
|
|
85
|
+
Errors during interaction with local or server storage.
|
|
86
|
+
- **context** — Missing context.
|
|
87
|
+
- **error** — General read/write failure.
|
|
88
|
+
|
|
89
|
+
#### Other Groups
|
|
90
|
+
These groups use a universal error code `error`. Triggering is done via `ErrorCenter.on({ group: 'group_name', code: 'error' })`.
|
|
91
|
+
- **broadcast** — Errors in data exchange between browser tabs.
|
|
92
|
+
- **hydration** — Error during data synchronization between server and client.
|
|
93
|
+
- **share** — Error when trying to share content (Sharing API).
|
|
94
|
+
- **transformation** — Error during data transformation or parsing.
|
|
95
|
+
|
|
96
|
+
## Examples
|
|
97
|
+
|
|
98
|
+
### Integration with Notification System
|
|
99
|
+
```typescript
|
|
75
100
|
import { ErrorCenter } from '@dxtmisha/functional-basic'
|
|
76
101
|
|
|
77
|
-
//
|
|
102
|
+
// Set up once at app startup
|
|
78
103
|
ErrorCenter.addHandler('api', (cause) => {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
})
|
|
104
|
+
Toast.show(cause.label || 'Error', cause.message);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// Use in any service
|
|
108
|
+
async function loadData() {
|
|
109
|
+
try {
|
|
110
|
+
const data = await fetch('/api');
|
|
111
|
+
} catch (e) {
|
|
112
|
+
ErrorCenter.on({ group: 'api', code: 'server', details: e });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
92
116
|
|
|
93
|
-
|
|
94
|
-
|
|
117
|
+
### Working with Custom Groups
|
|
118
|
+
```typescript
|
|
119
|
+
// On-the-fly registration
|
|
120
|
+
ErrorCenter.on({
|
|
121
|
+
group: 'upload',
|
|
122
|
+
code: 'SIZE_LIMIT',
|
|
123
|
+
label: 'File Too Large',
|
|
124
|
+
message: 'Max 5MB'
|
|
125
|
+
});
|
|
95
126
|
```
|
|
@@ -2,94 +2,125 @@ import {Meta} from '@storybook/addon-docs/blocks'
|
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/ru/functional-basic/Classes/ErrorCenter - Управление ошибками'/>
|
|
4
4
|
|
|
5
|
-
# ErrorCenter
|
|
5
|
+
# Класс ErrorCenter
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
`ErrorCenter` — это центральный инструмент для управления всеми ошибками в приложении. Он позволяет в одном месте регистрировать возможные причины ошибок, настраивать реакцию на них (например, показ уведомлений) и вызывать их из любой части кода.
|
|
8
8
|
|
|
9
|
-
Класс
|
|
9
|
+
Класс работает как статическая обертка (Static Bridge), направляя все запросы к единственному экземпляру `ErrorCenterInstance`.
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Методы
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
- **Групповая обработка** — позволяет регистрировать несколько функций обратного вызова для конкретных категорий.
|
|
16
|
-
- **Chainable API** — методы добавления причин и обработчиков поддерживают цепочки вызовов.
|
|
17
|
-
- **Предустановленные значения** — по умолчанию настроен стандартными сетевыми ошибками (`timeout`, `offline`, `notFound` и т.д.).
|
|
13
|
+
### Действие
|
|
14
|
+
- `on(cause: ErrorCenterCauseItem): void` — Запускает процесс обработки. Ищет данные в реестре, объединяет их и вызывает нужные функции обратного вызова.
|
|
18
15
|
|
|
19
|
-
|
|
16
|
+
### Проверка
|
|
17
|
+
- `has(code: string, group?: string): boolean` — Проверяет, зарегистрирована ли ошибка.
|
|
18
|
+
- `get(code: string, group?: string): ErrorCenterCauseItem | undefined` — Возвращает данные ошибки из реестра.
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
- `
|
|
20
|
+
### Конфигурация
|
|
21
|
+
- `add(cause: ErrorCenterCauseItem): void` — Добавляет одну причину ошибки.
|
|
22
|
+
- `addList(causes: ErrorCenterCauseList): void` — Добавляет список ошибок (массовая регистрация).
|
|
23
|
+
- `addHandler(group: ErrorCenterGroup, handler: ErrorCenterHandlerCallback): void` — Регистрирует реакцию на группу ошибок.
|
|
24
|
+
- `addHandlerList(handlers: ErrorCenterHandlerList): void` — Пакетная регистрация нескольких обработчиков.
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
- `getItem(): ErrorCenterInstance` — Возвращает базовый экземпляр, используемый оберткой.
|
|
27
|
-
|
|
28
|
-
## Конфигурация
|
|
29
|
-
|
|
30
|
-
- `add(cause: ErrorCenterCauseItem): this` — Добавляет одну причину ошибки в хранилище.
|
|
31
|
-
- `addList(causes: ErrorCenterCauseList): this` — Добавляет список причин ошибок в реестр.
|
|
32
|
-
- `addHandler(group: ErrorCenterGroup, handler: ErrorCenterHandlerCallback): this` — Регистрирует функцию обратного вызова для группы.
|
|
33
|
-
- `addHandlerList(handlers: ErrorCenterHandlerList): this` — Регистрирует набор обработчиков.
|
|
34
|
-
|
|
35
|
-
## Методы действий
|
|
36
|
-
|
|
37
|
-
### `on`
|
|
38
|
-
|
|
39
|
-
Запускает обработку указанной ошибки. Метод ищет предварительно зарегистрированные данные для указанного кода ошибки, объединяет их с входной причиной (`cause`), выполняет все зарегистрированные обработчики для этой группы и выводит ошибку в консоль.
|
|
40
|
-
|
|
41
|
-
**Параметры:**
|
|
42
|
-
- `cause: ErrorCenterCauseItem` — Причина для запуска. Код и группа обязательны, если причина была зарегистрирована ранее через `add()`.
|
|
43
|
-
|
|
44
|
-
**Возвращает:** `this`
|
|
26
|
+
### Вспомогательные
|
|
27
|
+
- `getItem(): ErrorCenterInstance` — Возвращает внутренний экземпляр класса.
|
|
45
28
|
|
|
46
29
|
## Типы
|
|
47
30
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
Основной объект, используемый для определения причины ошибки.
|
|
31
|
+
#### `ErrorCenterGroup`
|
|
32
|
+
Имя группы (например, 'api', 'auth') или `undefined` для общего обработчика.
|
|
51
33
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
- `label?: string` — понятное человеку название ошибки.
|
|
55
|
-
- `message?: string` — подробное описание ошибки.
|
|
56
|
-
- `details?: any` — необязательный объект для дополнительных данных.
|
|
34
|
+
#### `ErrorCenterCauseItem`
|
|
35
|
+
Объект, описывающий ошибку: `group`, `code` (обязательно), `priority`, `label`, `message`, `details`.
|
|
57
36
|
|
|
58
|
-
|
|
37
|
+
## Руководство по работе
|
|
59
38
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
39
|
+
### Шаг 1: Регистрация (Registry)
|
|
40
|
+
Составьте словарь ошибок, чтобы хранить тексты отдельно от кода.
|
|
41
|
+
```typescript
|
|
42
|
+
ErrorCenter.add({
|
|
43
|
+
group: 'auth',
|
|
44
|
+
code: 'LOGIN_FAILED',
|
|
45
|
+
label: 'Ошибка входа',
|
|
46
|
+
message: 'Неверный пароль.'
|
|
47
|
+
})
|
|
48
|
+
```
|
|
63
49
|
|
|
64
|
-
|
|
50
|
+
### Шаг 2: Подписка (Handlers)
|
|
51
|
+
Укажите, как приложение должно реагировать на группу ошибок.
|
|
52
|
+
```typescript
|
|
53
|
+
ErrorCenter.addHandler('auth', (cause) => {
|
|
54
|
+
alert(cause.message);
|
|
55
|
+
});
|
|
56
|
+
```
|
|
65
57
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
58
|
+
### Шаг 3: Вызов (Execution)
|
|
59
|
+
Вызовите ошибку по её коду и группе.
|
|
60
|
+
```typescript
|
|
61
|
+
ErrorCenter.on({ group: 'auth', code: 'LOGIN_FAILED' });
|
|
62
|
+
```
|
|
71
63
|
|
|
72
|
-
##
|
|
64
|
+
## Стандартные причины ошибок
|
|
73
65
|
|
|
74
|
-
|
|
66
|
+
Класс уже содержит готовые описания для частых ситуаций.
|
|
67
|
+
|
|
68
|
+
#### Группа API (`api`)
|
|
69
|
+
Используется для ошибок сетевых запросов.
|
|
70
|
+
- **forbidden** — Доступ запрещен (403).
|
|
71
|
+
- **notFound** — Ресурс не найден (404).
|
|
72
|
+
- **offline** — Нет интернет-соединения.
|
|
73
|
+
- **server** — Внутренняя ошибка сервера (500).
|
|
74
|
+
- **timeout** — Тайм-аут запроса.
|
|
75
|
+
- **unauthorized** — Ошибка авторизации (401).
|
|
76
|
+
- **unknown** — Неизвестная ошибка.
|
|
77
|
+
- **cacheClear**, **cacheGet**, **cacheRemove**, **cacheSet** — Ошибки при работе с кэшем.
|
|
78
|
+
|
|
79
|
+
#### Группа Intl (`intl`)
|
|
80
|
+
Ошибки при форматировании данных (даты, числа и т.д.).
|
|
81
|
+
- **datetime**, **display**, **number**, **plural**, **relative**.
|
|
82
|
+
- **invalid** — Невалидная дата или неверный формат.
|
|
83
|
+
|
|
84
|
+
#### Группа Storage (`storage`)
|
|
85
|
+
Ошибки при работе с локальным или серверным хранилищем.
|
|
86
|
+
- **context** — Отсутствует контекст.
|
|
87
|
+
- **error** — Общий сбой записи/чтения.
|
|
88
|
+
|
|
89
|
+
#### Прочие группы
|
|
90
|
+
Для данных групп предусмотрен универсальный код ошибки `error`. Вызов осуществляется через `ErrorCenter.on({ group: 'название_группы', code: 'error' })`.
|
|
91
|
+
- **broadcast** — Ошибки при обмене данными между вкладками браузера.
|
|
92
|
+
- **hydration** — Ошибка при синхронизации данных между сервером и клиентом.
|
|
93
|
+
- **share** — Ошибка при попытке поделиться контентом (Sharing API).
|
|
94
|
+
- **transformation** — Ошибка при преобразовании или парсинге данных.
|
|
95
|
+
|
|
96
|
+
## Примеры
|
|
97
|
+
|
|
98
|
+
### Интеграция с системой уведомлений
|
|
99
|
+
```typescript
|
|
75
100
|
import { ErrorCenter } from '@dxtmisha/functional-basic'
|
|
76
101
|
|
|
77
|
-
//
|
|
102
|
+
// Настраиваем один раз при старте приложения
|
|
78
103
|
ErrorCenter.addHandler('api', (cause) => {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
})
|
|
104
|
+
Toast.show(cause.label || 'Ошибка', cause.message);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// Используем в любом сервисе
|
|
108
|
+
async function loadData() {
|
|
109
|
+
try {
|
|
110
|
+
const data = await fetch('/api');
|
|
111
|
+
} catch (e) {
|
|
112
|
+
ErrorCenter.on({ group: 'api', code: 'server', details: e });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
92
116
|
|
|
93
|
-
|
|
94
|
-
|
|
117
|
+
### Работа с кастомными группами
|
|
118
|
+
```typescript
|
|
119
|
+
// Регистрация на лету
|
|
120
|
+
ErrorCenter.on({
|
|
121
|
+
group: 'upload',
|
|
122
|
+
code: 'SIZE_LIMIT',
|
|
123
|
+
label: 'Файл слишком велик',
|
|
124
|
+
message: 'Максимум 5МБ'
|
|
125
|
+
});
|
|
95
126
|
```
|