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(ToolbarGroup): rename button-group variant option #759

Merged
merged 2 commits into from
Sep 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
### toolbarGroup-updated-variant [(#10674)](https://github.com/patternfly/patternfly-react/pull/10674)

The `variant` prop of ToolbarGroup and ToolbarToggleGroup had these options renamed:

| Old variant option | New variant option |
| ------------------- | -------------------- |
| `button-group` | `action-group` |
| `icon-button-group` | `action-group-plain` |

#### Examples

In:

```jsx
%inputExample%
```

Out:

```jsx
%outputExample%
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
const ruleTester = require("../../ruletester");
import * as rule from "./toolbarGroup-updated-variant";
import {
ValidTests,
InvalidTests,
createInvalidTest,
createValidTest,
} from "../../helpers/testHelpers";
const applicableComponents = ["ToolbarGroup", "ToolbarToggleGroup"];
const renames = {
"button-group": "action-group",
"icon-button-group": "action-group-plain",
};
const oldVariantNames = Object.keys(renames) as (
| "button-group"
| "icon-button-group"
)[];

const validTests: ValidTests = [];
const invalidTests: InvalidTests = [];
for (const component of applicableComponents) {
for (const oldName of oldVariantNames) {
const newName = renames[oldName];

validTests.push(createValidTest(`<ToolbarGroup variant="${oldName}" />`));
validTests.push(
createValidTest(
`import { ToolbarGroup } from '@patternfly/react-core'; <ToolbarGroup variant={ToolbarGroupVariant["${oldName}"]} />`
)
);

const message = `The \`${oldName}\` variant of ${component} has been renamed to \`${newName}\`.`;
const errorObject = {
message,
type: "JSXOpeningElement",
};
invalidTests.push(
createInvalidTest(
`import { ${component} } from '@patternfly/react-core'; <${component} variant="${oldName}" />`,
`import { ${component} } from '@patternfly/react-core'; <${component} variant="${newName}" />`,
[errorObject]
)
);
invalidTests.push(
createInvalidTest(
`import { ${component} as CustomThing } from '@patternfly/react-core'; <CustomThing variant="${oldName}" />`,
`import { ${component} as CustomThing } from '@patternfly/react-core'; <CustomThing variant="${newName}" />`,
[errorObject]
)
);
invalidTests.push(
createInvalidTest(
`import { ${component}, ToolbarGroupVariant } from '@patternfly/react-core'; <${component} variant={ToolbarGroupVariant["${oldName}"]} />`,
`import { ${component}, ToolbarGroupVariant } from '@patternfly/react-core'; <${component} variant={ToolbarGroupVariant["${newName}"]} />`,
[errorObject]
)
);
invalidTests.push(
createInvalidTest(
`import { ${component}, ToolbarGroupVariant } from '@patternfly/react-core';
const variant = ToolbarGroupVariant["${oldName}"]; <${component} variant={variant} />`,
`import { ${component}, ToolbarGroupVariant } from '@patternfly/react-core';
const variant = ToolbarGroupVariant["${newName}"]; <${component} variant={variant} />`,
[errorObject]
)
);
invalidTests.push(
createInvalidTest(
`import { ${component}, ToolbarGroupVariant as CustomThing } from '@patternfly/react-core'; <${component} variant={CustomThing["${oldName}"]} />`,
`import { ${component}, ToolbarGroupVariant as CustomThing } from '@patternfly/react-core'; <${component} variant={CustomThing["${newName}"]} />`,
[errorObject]
)
);
invalidTests.push(
createInvalidTest(
`import { ${component} as CustomGroup, ToolbarGroupVariant as CustomThing } from '@patternfly/react-core'; <CustomGroup variant={CustomThing["${oldName}"]} />`,
`import { ${component} as CustomGroup, ToolbarGroupVariant as CustomThing } from '@patternfly/react-core'; <CustomGroup variant={CustomThing["${newName}"]} />`,
[errorObject]
)
);
invalidTests.push(
createInvalidTest(
`import { ${component}, ToolbarGroupVariant } from '@patternfly/react-core/dist/esm/components/Toolbar/index.js'; <${component} variant={ToolbarGroupVariant["${oldName}"]} />`,
`import { ${component}, ToolbarGroupVariant } from '@patternfly/react-core/dist/esm/components/Toolbar/index.js'; <${component} variant={ToolbarGroupVariant["${newName}"]} />`,
[errorObject]
)
);
invalidTests.push(
createInvalidTest(
`import { ${component}, ToolbarGroupVariant } from '@patternfly/react-core/dist/js/components/Toolbar/index.js'; <${component} variant={ToolbarGroupVariant["${oldName}"]} />`,
`import { ${component}, ToolbarGroupVariant } from '@patternfly/react-core/dist/js/components/Toolbar/index.js'; <${component} variant={ToolbarGroupVariant["${newName}"]} />`,
[errorObject]
)
);
invalidTests.push(
createInvalidTest(
`import { ${component}, ToolbarGroupVariant } from '@patternfly/react-core/dist/dynamic/components/Toolbar/index.js'; <${component} variant={ToolbarGroupVariant["${oldName}"]} />`,
`import { ${component}, ToolbarGroupVariant } from '@patternfly/react-core/dist/dynamic/components/Toolbar/index.js'; <${component} variant={ToolbarGroupVariant["${newName}"]} />`,
[errorObject]
)
);
}
}

ruleTester.run("toolbarGroup-updated-iconButtonGroup-variant", rule, {
valid: validTests,
invalid: invalidTests,
});
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ module.exports = {
(specifier) => specifier.imported.name === "ToolbarGroupVariant"
);

const renames = {
"button-group": "action-group",
"icon-button-group": "action-group-plain",
};
const oldVariantNames = Object.keys(renames);

return !componentImports.length
? {}
: {
Expand All @@ -32,28 +38,27 @@ module.exports = {
}

const variantValue = getAttributeValue(context, variant.value);
const isEnumValueIconButtonGroup =
const isEnumToRename =
variantEnumImport &&
variantValue.object?.name === variantEnumImport.local.name &&
variantValue.property.value === "icon-button-group";
if (
variantValue !== "icon-button-group" &&
!isEnumValueIconButtonGroup
) {
oldVariantNames.includes(variantValue.property.value);

if (!oldVariantNames.includes(variantValue) && !isEnumToRename) {
return;
}

const variantToRename: "button-group" | "icon-button-group" =
variantValue.property?.value ?? variantValue;

context.report({
node,
message: `The \`icon-button-group\` variant of ${applicableComponent.imported.name} has been renamed to \`action-group-plain\`.`,
message: `The \`${variantToRename}\` variant of ${applicableComponent.imported.name} has been renamed to \`${renames[variantToRename]}\`.`,
fix(fixer) {
return fixer.replaceText(
isEnumValueIconButtonGroup
? variantValue.property
: variant,
isEnumValueIconButtonGroup
? '"action-group-plain"'
: 'variant="action-group-plain"'
isEnumToRename ? variantValue.property : variant,
isEnumToRename
? `"${renames[variantToRename]}"`
: `variant="${renames[variantToRename]}"`
);
},
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ import {
ToolbarGroupVariant,
} from "@patternfly/react-core";

export const ToolbarGroupUpdatedIconButtonGroupVariantInput = () => (
export const ToolbarGroupUpdatedVariantInput = () => (
<>
<ToolbarGroup variant='icon-button-group' />
<ToolbarGroup variant='button-group' />
<ToolbarGroup variant={ToolbarGroupVariant["icon-button-group"]} />
<ToolbarToggleGroup variant='icon-button-group' />
<ToolbarToggleGroup variant={ToolbarGroupVariant["icon-button-group"]} />
<ToolbarToggleGroup variant={ToolbarGroupVariant["button-group"]} />
</>
);
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ import {
ToolbarGroupVariant,
} from "@patternfly/react-core";

export const ToolbarGroupUpdatedIconButtonGroupVariantInput = () => (
export const ToolbarGroupUpdatedVariantInput = () => (
<>
<ToolbarGroup variant="action-group-plain" />
<ToolbarGroup variant="action-group" />
<ToolbarGroup variant={ToolbarGroupVariant["action-group-plain"]} />
<ToolbarToggleGroup variant="action-group-plain" />
<ToolbarToggleGroup variant={ToolbarGroupVariant["action-group-plain"]} />
<ToolbarToggleGroup variant={ToolbarGroupVariant["action-group"]} />
</>
);
Loading