@escapenavigator/hooks 2.0.8 → 2.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -52,6 +52,7 @@ const format_amount_1 = require("@escapenavigator/utils/dist/format-amount");
|
|
|
52
52
|
const get_players_price_1 = require("@escapenavigator/utils/dist/get-players-price");
|
|
53
53
|
const get_prices_1 = require("@escapenavigator/utils/dist/get-prices");
|
|
54
54
|
const react_1 = __importStar(require("react"));
|
|
55
|
+
const react_i18next_1 = require("react-i18next");
|
|
55
56
|
const use_players_and_variation_picker_1 = require("../use-players-and-variation-picker");
|
|
56
57
|
/**
|
|
57
58
|
* Single shared component that renders the "Variation + Players" picker used
|
|
@@ -64,6 +65,24 @@ const use_players_and_variation_picker_1 = require("../use-players-and-variation
|
|
|
64
65
|
*/
|
|
65
66
|
const PlayersAndVariationPicker = ({ slot, currentTariffId, currentDuration, loadSlotDetails, onVariationChange, onVariationResolved, onDetailsLoaded, players = 0, child = 0, tariff: tariffOverride, currency, minPlayers, maxPlayersLimit, slotDiscount, error, t, onChange, onSave, orderId, onLoadingChange, hidePriceHints = false, flexPlayersOption, }) => {
|
|
66
67
|
var _a, _b;
|
|
68
|
+
/**
|
|
69
|
+
* Страховка от «голых ключей» перевода. Пикер рендерит `prices:*` /
|
|
70
|
+
* `common:*` через переданный хостом `t`, но сам хост часто берёт
|
|
71
|
+
* `t` из `useTranslation()` без этих namespace'ов. В CRM `prices`
|
|
72
|
+
* грузится лениво — если юзер открыл карточку игры раньше, чем
|
|
73
|
+
* какой-либо экран задекларировал этот ns, бандл никогда не
|
|
74
|
+
* запрашивался и вместо переводов светились ключи/фолбэки.
|
|
75
|
+
*
|
|
76
|
+
* Декларируем namespace'ы прямо здесь: react-i18next сам догрузит
|
|
77
|
+
* недостающие бандлы и перерендерит компонент, когда они приедут.
|
|
78
|
+
* `useSuspense: false` — чтобы не требовать Suspense-границу у всех
|
|
79
|
+
* хостов; вместо этого до готовности показываем скелетон ниже.
|
|
80
|
+
* При ошибке загрузки i18next помечает ns как «loaded (failed)»,
|
|
81
|
+
* так что вечного скелетона не будет.
|
|
82
|
+
*/
|
|
83
|
+
const { ready: translationsReady } = (0, react_i18next_1.useTranslation)(['prices', 'common'], {
|
|
84
|
+
useSuspense: false,
|
|
85
|
+
});
|
|
67
86
|
const { loading: pickerLoading, options: pickerOptions, selectedOptionId, selectedVariation, buildVariationChange, selectVariation, details, } = (0, use_players_and_variation_picker_1.usePlayersAndVariationPicker)({
|
|
68
87
|
slot,
|
|
69
88
|
currentTariffId,
|
|
@@ -228,7 +247,9 @@ const PlayersAndVariationPicker = ({ slot, currentTariffId, currentDuration, loa
|
|
|
228
247
|
// not yet available (initial render before fetch starts, in-flight fetch,
|
|
229
248
|
// or backend returned no details). This prevents the brief flash of an
|
|
230
249
|
// empty picker UI between "slot prop arrived" and "loading=true".
|
|
231
|
-
|
|
250
|
+
// Also wait for the `prices`/`common` translation bundles so the picker
|
|
251
|
+
// never flashes raw i18n keys.
|
|
252
|
+
if (!translationsReady || (slot && !details)) {
|
|
232
253
|
return (react_1.default.createElement(flex_columns_1.FlexColumns, { columns: 1, gr: 16 },
|
|
233
254
|
react_1.default.createElement(skeleton_1.Skeleton, { visible: true, animate: true },
|
|
234
255
|
react_1.default.createElement("div", { style: { height: 80 } })),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@escapenavigator/hooks",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.10",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
"test": "jest"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@escapenavigator/services": "^2.0.
|
|
18
|
-
"@escapenavigator/types": "^2.0.
|
|
19
|
-
"@escapenavigator/utils": "^2.0.
|
|
17
|
+
"@escapenavigator/services": "^2.0.10",
|
|
18
|
+
"@escapenavigator/types": "^2.0.9",
|
|
19
|
+
"@escapenavigator/utils": "^2.0.10",
|
|
20
20
|
"libphonenumber-js": "^1.12.24",
|
|
21
21
|
"react": "19.2.6",
|
|
22
22
|
"react-phone-input-2": "^2.15.1"
|
|
@@ -32,5 +32,5 @@
|
|
|
32
32
|
"ts-jest": "^29.1.1",
|
|
33
33
|
"typescript": "^5.6"
|
|
34
34
|
},
|
|
35
|
-
"gitHead": "
|
|
35
|
+
"gitHead": "f6880726301abd10e18e00f30e11e96c0eff3d12"
|
|
36
36
|
}
|