Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(ImageBaseOverlay): remove disableInteractive prop #7628

Merged
merged 8 commits into from
Sep 25, 2024
8 changes: 8 additions & 0 deletions packages/codemods/src/codemod-helpers.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { JSXSpreadAttribute } from 'jscodeshift';
import type {
API,
Collection,
Expand Down Expand Up @@ -91,6 +92,13 @@ export function swapBooleanValue(
});
}

export const removeAttribute = (
attributes: Array<JSXAttribute | JSXSpreadAttribute> | undefined,
attribute: JSXAttribute,
) => {
attributes?.splice(attributes?.indexOf(attribute), 1);
};

interface AttributeManipulatorAPI {
keyTo?: string | ((k?: string) => string);
reportText?: string | (() => string);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import { ImageBase } from '@vkontakte/vkui';
import { Icon12Add } from '@vkontakte/vkui-icons';
import React from 'react';

const App = () => {
const callback = () => {};
return (
<React.Fragment>
{/* test 1: disableInteractive={true} -> remove disableInteractive and onClick */}
<ImageBase
src="avatar_url"
alt="Приложение шторм онлайн"
>
<ImageBase.Overlay
aria-label="Кнопка для изображения"
disableInteractive={true}
onClick={undefined}
>
<Icon12Add />
</ImageBase.Overlay>
</ImageBase>

{/* test 2: disableInteractive -> remove disableInteractive and onClick */}
<ImageBase
src="avatar_url"
alt="Приложение шторм онлайн"
>
<ImageBase.Overlay
aria-label="Кнопка для изображения"
disableInteractive
onClick={undefined}
>
<Icon12Add />
</ImageBase.Overlay>
</ImageBase>

{/* test 3: disableInteractive={false} and onClick with Identifier -> remove disableInteractive, don't remove onClick */}
<ImageBase
src="avatar_url"
alt="Приложение шторм онлайн"
>
<ImageBase.Overlay
aria-label="Кнопка для изображения"
disableInteractive={false}
onClick={callback}
>
<Icon12Add />
</ImageBase.Overlay>
</ImageBase>

{/* test 4: disableInteractive={false} and onClick with ArrowFunction -> remove disableInteractive, don't remove onClick */}
<ImageBase
src="avatar_url"
alt="Приложение шторм онлайн"
>
<ImageBase.Overlay
aria-label="Кнопка для изображения"
disableInteractive={false}
onClick={() => callback()}
>
<Icon12Add />
</ImageBase.Overlay>
</ImageBase>
</React.Fragment>
);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import { Image } from '@vkontakte/vkui';
import { Icon12Add } from '@vkontakte/vkui-icons';
import React from 'react';

const App = () => {
const callback = () => {};
return (
<React.Fragment>
{/* test 1: disableInteractive={true} -> remove disableInteractive and onClick */}
<Image
src="avatar_url"
alt="Приложение шторм онлайн"
>
<Image.Overlay
aria-label="Кнопка для изображения"
disableInteractive={true}
onClick={undefined}
>
<Icon12Add />
</Image.Overlay>
</Image>

{/* test 2: disableInteractive -> remove disableInteractive and onClick */}
<Image
src="avatar_url"
alt="Приложение шторм онлайн"
>
<Image.Overlay
aria-label="Кнопка для изображения"
disableInteractive
onClick={undefined}
>
<Icon12Add />
</Image.Overlay>
</Image>

{/* test 3: disableInteractive={false} and onClick with Identifier -> remove disableInteractive, don't remove onClick */}
<Image
src="avatar_url"
alt="Приложение шторм онлайн"
>
<Image.Overlay
aria-label="Кнопка для изображения"
disableInteractive={false}
onClick={callback}
>
<Icon12Add />
</Image.Overlay>
</Image>

{/* test 4: disableInteractive={false} and onClick with ArrowFunction -> remove disableInteractive, don't remove onClick */}
<Image
src="avatar_url"
alt="Приложение шторм онлайн"
>
<Image.Overlay
aria-label="Кнопка для изображения"
disableInteractive={false}
onClick={() => callback()}
>
<Icon12Add />
</Image.Overlay>
</Image>
</React.Fragment>
);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`image-overlay transforms correctly 1`] = `
"import { Image } from '@vkontakte/vkui';
import { Icon12Add } from '@vkontakte/vkui-icons';
import React from 'react';

const App = () => {
const callback = () => {};
return (
(<React.Fragment>
{/* test 1: disableInteractive={true} -> remove disableInteractive and onClick */}
<Image
src="avatar_url"
alt="Приложение шторм онлайн"
>
<Image.Overlay aria-label="Кнопка для изображения">
<Icon12Add />
</Image.Overlay>
</Image>
{/* test 2: disableInteractive -> remove disableInteractive and onClick */}
<Image
src="avatar_url"
alt="Приложение шторм онлайн"
>
<Image.Overlay aria-label="Кнопка для изображения">
<Icon12Add />
</Image.Overlay>
</Image>
{/* test 3: disableInteractive={false} and onClick with Identifier -> remove disableInteractive, don't remove onClick */}
<Image
src="avatar_url"
alt="Приложение шторм онлайн"
>
<Image.Overlay aria-label="Кнопка для изображения" onClick={callback}>
<Icon12Add />
</Image.Overlay>
</Image>
{/* test 4: disableInteractive={false} and onClick with ArrowFunction -> remove disableInteractive, don't remove onClick */}
<Image
src="avatar_url"
alt="Приложение шторм онлайн"
>
<Image.Overlay aria-label="Кнопка для изображения" onClick={() => callback()}>
<Icon12Add />
</Image.Overlay>
</Image>
</React.Fragment>)
);
};"
`;

exports[`image-overlay transforms correctly 2`] = `
"import { ImageBase } from '@vkontakte/vkui';
import { Icon12Add } from '@vkontakte/vkui-icons';
import React from 'react';

const App = () => {
const callback = () => {};
return (
(<React.Fragment>
{/* test 1: disableInteractive={true} -> remove disableInteractive and onClick */}
<ImageBase
src="avatar_url"
alt="Приложение шторм онлайн"
>
<ImageBase.Overlay aria-label="Кнопка для изображения">
<Icon12Add />
</ImageBase.Overlay>
</ImageBase>
{/* test 2: disableInteractive -> remove disableInteractive and onClick */}
<ImageBase
src="avatar_url"
alt="Приложение шторм онлайн"
>
<ImageBase.Overlay aria-label="Кнопка для изображения">
<Icon12Add />
</ImageBase.Overlay>
</ImageBase>
{/* test 3: disableInteractive={false} and onClick with Identifier -> remove disableInteractive, don't remove onClick */}
<ImageBase
src="avatar_url"
alt="Приложение шторм онлайн"
>
<ImageBase.Overlay aria-label="Кнопка для изображения" onClick={callback}>
<Icon12Add />
</ImageBase.Overlay>
</ImageBase>
{/* test 4: disableInteractive={false} and onClick with ArrowFunction -> remove disableInteractive, don't remove onClick */}
<ImageBase
src="avatar_url"
alt="Приложение шторм онлайн"
>
<ImageBase.Overlay aria-label="Кнопка для изображения" onClick={() => callback()}>
<Icon12Add />
</ImageBase.Overlay>
</ImageBase>
</React.Fragment>)
);
};"
`;
11 changes: 11 additions & 0 deletions packages/codemods/src/transforms/v7/__tests__/image-overlay.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
jest.autoMockOff();
import { defineSnapshotTestFromFixture } from '../../../testHelpers/testHelper';

const name = 'image-overlay';
const fixtures = ['image', 'image-base'] as const;

describe(name, () => {
fixtures.forEach((test) =>
defineSnapshotTestFromFixture(__dirname, name, global.TRANSFORM_OPTIONS, `${name}/${test}`),
);
});
Loading
Loading