diff --git a/.mapping.json b/.mapping.json index dd09b6f8a..7f267445f 100644 --- a/.mapping.json +++ b/.mapping.json @@ -13566,6 +13566,8 @@ "client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/horizontal-orientation-with-wrap-content-constrained-children/firefoxMobile/horizontal-orientation-with-wrap-content-constrained-children.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/horizontal-orientation-with-wrap-content-constrained-children/firefoxMobile/horizontal-orientation-with-wrap-content-constrained-children.png", "client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/horizontal-orientation/chromeMobile/horizontal-orientation.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/horizontal-orientation/chromeMobile/horizontal-orientation.png", "client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/horizontal-orientation/firefoxMobile/horizontal-orientation.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/horizontal-orientation/firefoxMobile/horizontal-orientation.png", + "client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/item_builder/index/chromeMobile/index.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/item_builder/index/chromeMobile/index.png", + "client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/item_builder/index/firefoxMobile/index.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/item_builder/index/firefoxMobile/index.png", "client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/item_builder/item-builder/chromeMobile/item-builder.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/item_builder/item-builder/chromeMobile/item-builder.png", "client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/item_builder/item-builder/firefoxMobile/item-builder.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/item_builder/item-builder/firefoxMobile/item-builder.png", "client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/item_builder/nested-builders/chromeMobile/nested-builders.png":"divkit/public/client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/item_builder/nested-builders/chromeMobile/nested-builders.png", diff --git a/client/web/divkit/src/components/Root.svelte b/client/web/divkit/src/components/Root.svelte index 654564da1..9df897623 100644 --- a/client/web/divkit/src/components/Root.svelte +++ b/client/web/divkit/src/components/Root.svelte @@ -295,12 +295,19 @@ return prepared.applyVars(vars, keepComplex); } - function preparePrototypeVariables(name: string, data: Record): Map { + function preparePrototypeVariables( + name: string, + data: Record, + index: number + ): Map { const map = new Map(); const dict = createConstVariable(name, 'dict', data); map.set(name, dict); + const indexVar = createConstVariable('index', 'integer', index); + map.set('index', indexVar); + return map; } diff --git a/client/web/divkit/src/components/container/Container.svelte b/client/web/divkit/src/components/container/Container.svelte index aefa71bd2..e1a4db5b1 100644 --- a/client/web/divkit/src/components/container/Container.svelte +++ b/client/web/divkit/src/components/container/Container.svelte @@ -127,11 +127,11 @@ const builder = componentContext.json.item_builder; newItems = []; - $jsonItemBuilderData.forEach(it => { + $jsonItemBuilderData.forEach((it, index) => { if (it === null || typeof it !== 'object') { return; } - const additionalVars = rootCtx.preparePrototypeVariables(builder.data_element_name || 'it', it as Record); + const additionalVars = rootCtx.preparePrototypeVariables(builder.data_element_name || 'it', it as Record, index); let div: MaybeMissing | undefined; for (let i = 0; i < builder.prototypes.length; ++i) { diff --git a/client/web/divkit/src/context/root.ts b/client/web/divkit/src/context/root.ts index fbcc007e1..1155651bf 100644 --- a/client/web/divkit/src/context/root.ts +++ b/client/web/divkit/src/context/root.ts @@ -47,7 +47,7 @@ export interface RootCtxValue { unregisterFocusable(id: string): void; addSvgFilter(color: string, mode: TintMode): string; removeSvgFilter(color: string | undefined, mode: TintMode): void; - preparePrototypeVariables(name: string, data: Record): Map; + preparePrototypeVariables(name: string, data: Record, index: number): Map; getStore(id: string): Writable; getCustomization(prop: K): Customization[K] | undefined; getBuiltinProtocols(): Set; diff --git a/client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/item_builder/index/chromeMobile/index.png b/client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/item_builder/index/chromeMobile/index.png new file mode 100644 index 000000000..4eecabed1 Binary files /dev/null and b/client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/item_builder/index/chromeMobile/index.png differ diff --git a/client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/item_builder/index/firefoxMobile/index.png b/client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/item_builder/index/firefoxMobile/index.png new file mode 100644 index 000000000..4ab91e966 Binary files /dev/null and b/client/web/divkit/tests/hermione/screens/crossplatform/components/div-container/item_builder/index/firefoxMobile/index.png differ diff --git a/test_data/snapshot_test_data/div-container/item_builder/index.json b/test_data/snapshot_test_data/div-container/item_builder/index.json index 3eab2174b..013a49b21 100644 --- a/test_data/snapshot_test_data/div-container/item_builder/index.json +++ b/test_data/snapshot_test_data/div-container/item_builder/index.json @@ -1,7 +1,8 @@ { "description": "Container with item_builder using index value.", "platforms": [ - "ios" + "ios", + "web" ], "card": { "log_id": "test_card",