diff --git a/packages/eslint-plugin-pf-codemods/index.js b/packages/eslint-plugin-pf-codemods/index.js
index d48cba082..fed246f96 100644
--- a/packages/eslint-plugin-pf-codemods/index.js
+++ b/packages/eslint-plugin-pf-codemods/index.js
@@ -1,27 +1,36 @@
const createListOfRules = (version) => {
const rules = {};
- require('glob').sync(`./packages/eslint-plugin-pf-codemods/lib/rules/v${version}/*.js`).forEach( function( file ) {
- const ruleName = /.*\/([^.]+)/.exec(file)[1];
- rules[ruleName] = require(`./lib/rules/v${version}/${ruleName}`);
- });
+ require("glob")
+ .sync(`./packages/eslint-plugin-pf-codemods/lib/rules/v${version}/*.js`)
+ .forEach(function (file) {
+ const ruleName = /.*\/([^.]+)/.exec(file)[1];
+ rules[ruleName] = require(`./lib/rules/v${version}/${ruleName}`);
+ });
return rules;
-}
+};
const v5rules = createListOfRules("5");
const v4rules = createListOfRules("4");
// if you want a rule to have a severity that defaults to warning rather than error, add the rule name to the below array
-const warningRules = ["applicationLauncher-warn-input", "card-warn-component", "horizontalSubnav-ariaLabel", "tabs-warn-children-type-changed", "wizard-warn-button-order"]
+const warningRules = [
+ "applicationLauncher-warn-input",
+ "card-warn-component",
+ "horizontalSubnav-ariaLabel",
+ "react-dropzone-warn-upgrade",
+ "tabs-warn-children-type-changed",
+ "wizard-warn-button-order",
+];
const createRules = (rules) => {
return Object.keys(rules).reduce((acc, rule) => {
- const severity = warningRules.includes(rule) ? "warn" : "error"
+ const severity = warningRules.includes(rule) ? "warn" : "error";
acc[`@patternfly/pf-codemods/${rule}`] = severity;
return acc;
- }, {})
-}
+ }, {});
+};
-const mappedRules = {...createRules(v5rules), ...createRules(v4rules)};
+const mappedRules = { ...createRules(v5rules), ...createRules(v4rules) };
module.exports = {
configs: {
@@ -44,6 +53,6 @@ module.exports = {
rules: mappedRules,
},
},
- rules: {...v5rules, ...v4rules},
- ruleVersionMapping: {"v4": Object.keys(v4rules), "v5": Object.keys(v5rules)}
+ rules: { ...v5rules, ...v4rules },
+ ruleVersionMapping: { v4: Object.keys(v4rules), v5: Object.keys(v5rules) },
};
diff --git a/packages/eslint-plugin-pf-codemods/lib/rules/v5/react-dropzone-warn-upgrade.js b/packages/eslint-plugin-pf-codemods/lib/rules/v5/react-dropzone-warn-upgrade.js
new file mode 100644
index 000000000..228162b1c
--- /dev/null
+++ b/packages/eslint-plugin-pf-codemods/lib/rules/v5/react-dropzone-warn-upgrade.js
@@ -0,0 +1,26 @@
+// https://github.com/patternfly/patternfly-react/pull/7926
+module.exports = {
+ meta: {},
+ create: function (context) {
+ return {
+ ImportDeclaration(node) {
+ const importsWithDropzone = node.specifiers.find(
+ (specifier) =>
+ (["FileUpload", "MultipleFileUpload"].includes(
+ specifier.imported.name
+ ) &&
+ node.source.value === "@patternfly/react-core") ||
+ (specifier.imported.name === "CodeEditor" &&
+ node.source.value === "@patternfly/react-code-editor")
+ );
+
+ if (importsWithDropzone) {
+ context.report({
+ node,
+ message: `The react-dropzone dependency used within ${importsWithDropzone.imported.name} has been updated from version 9 to version 14.`,
+ });
+ }
+ },
+ };
+ },
+};
diff --git a/packages/eslint-plugin-pf-codemods/lib/rules/v5/wizard-warn-button-order.js b/packages/eslint-plugin-pf-codemods/lib/rules/v5/wizard-warn-button-order.js
index a504d40cf..8c3ffc95a 100644
--- a/packages/eslint-plugin-pf-codemods/lib/rules/v5/wizard-warn-button-order.js
+++ b/packages/eslint-plugin-pf-codemods/lib/rules/v5/wizard-warn-button-order.js
@@ -1,5 +1,3 @@
-const { getPackageImports } = require("../../helpers");
-
// https://github.com/patternfly/patternfly-react/pull/8409
module.exports = {
create: function (context) {
diff --git a/packages/eslint-plugin-pf-codemods/test/rules/v5/react-dropzone-warn-upgrade.js b/packages/eslint-plugin-pf-codemods/test/rules/v5/react-dropzone-warn-upgrade.js
new file mode 100644
index 000000000..3bc67ff6b
--- /dev/null
+++ b/packages/eslint-plugin-pf-codemods/test/rules/v5/react-dropzone-warn-upgrade.js
@@ -0,0 +1,38 @@
+const ruleTester = require("../../ruletester");
+const rule = require("../../../lib/rules/v5/react-dropzone-warn-upgrade");
+
+ruleTester.run("react-dropzone-warn-upgrade", rule, {
+ valid: [],
+ invalid: [
+ {
+ code: `import { FileUpload } from '@patternfly/react-core';`,
+ output: `import { FileUpload } from '@patternfly/react-core';`,
+ errors: [
+ {
+ message: `The react-dropzone dependency used within FileUpload has been updated from version 9 to version 14.`,
+ type: "ImportDeclaration",
+ },
+ ],
+ },
+ {
+ code: `import { MultipleFileUpload } from '@patternfly/react-core';`,
+ output: `import { MultipleFileUpload } from '@patternfly/react-core';`,
+ errors: [
+ {
+ message: `The react-dropzone dependency used within MultipleFileUpload has been updated from version 9 to version 14.`,
+ type: "ImportDeclaration",
+ },
+ ],
+ },
+ {
+ code: `import { CodeEditor } from '@patternfly/react-code-editor';`,
+ output: `import { CodeEditor } from '@patternfly/react-code-editor';`,
+ errors: [
+ {
+ message: `The react-dropzone dependency used within CodeEditor has been updated from version 9 to version 14.`,
+ type: "ImportDeclaration",
+ },
+ ],
+ },
+ ],
+});
diff --git a/packages/pf-codemods/README.md b/packages/pf-codemods/README.md
index 7a76ecf28..acc8298f3 100644
--- a/packages/pf-codemods/README.md
+++ b/packages/pf-codemods/README.md
@@ -386,6 +386,10 @@ Out:
/>
```
+### react-dropzone-warn-upgrade [(#7926)](// https://github.com/patternfly/patternfly-react/pull/7926)
+
+The `react-dropzone` dependency used with FileUpload, MultipleFileUpload, and CodeEditor has been updated from version 9 to version 14.
+
### remove-removeFindDomNode [(#8371)](https://github.com/patternfly/patternfly-react/pull/8371) [(#8316)](https://github.com/patternfly/patternfly-react/pull/8316)
We've removed the `removeFindDomNode` property as it is now the default behavior. The affected components are as follows: ApplicationLauncher, ClipboardCopy, ContextSelector, Dropdown, NavItem, OptionsMenu, Popover, SearchInput, Select, OverflowTab, Timepicker, Tooltip, Truncate.
@@ -458,58 +462,58 @@ We've removed the deprecated `ToggleMenuBaseProps` interface.
We've updated the default value of the `getResizeObserver` helper function's third parameter, `useRequestAnimationFrame`. This rule will only provide two suggestions detailing when to pass which boolean into this parameter.
-### tableComposable-remove-hasSelectableRowCaption [(#8352)](https://github.com/patternfly/patternfly-react/pull/8352)
+### simpleList-remove-isCurrent [(#8132)](https://github.com/patternfly/patternfly-react/pull/8132)
-We've removed the deprecated `hasSelectableRowCaption` prop.
+We've removed the deprecated the `isCurrent` prop. This rule wil replace it with `isActive`.
#### Examples
In:
```jsx
-
+
```
Out:
```jsx
-
+
```
-### simpleList-remove-isCurrent [(#8132)](https://github.com/patternfly/patternfly-react/pull/8132)
+### spinner-svg-default [(#8183)](https://github.com/patternfly/patternfly-react/pull/8183)
-We've removed the deprecated the `isCurrent` prop. This rule wil replace it with `isActive`.
+We've updated the Spinner to default to an svg, so the `isSVG` property is no longer required.
#### Examples
In:
```jsx
-
+
```
Out:
```jsx
-
+
```
-### spinner-svg-default [(#8183)](https://github.com/patternfly/patternfly-react/pull/8183)
+### tableComposable-remove-hasSelectableRowCaption [(#8352)](https://github.com/patternfly/patternfly-react/pull/8352)
-We've updated the Spinner to default to an svg, so the `isSVG` property is no longer required.
+We've removed the deprecated `hasSelectableRowCaption` prop.
#### Examples
In:
```jsx
-
+
```
Out:
```jsx
-
+
```
### tabs-rename-hasBorderBottom [(#8517)](https://github.com/patternfly/patternfly-react/pull/8517)
diff --git a/test/test.tsx b/test/test.tsx
index e08d36e1c..0781aaee8 100644
--- a/test/test.tsx
+++ b/test/test.tsx
@@ -1,15 +1,18 @@
import { AccordionExpandableContent } from "@patternfly/react-core";
import { ApplicationLauncher } from "@patternfly/react-core";
import { Card } from "@patternfly/react-core";
+import { CodeEditor } from "@patternfly/react-code-editor";
import { DropdownToggle, Toggle } from "@patternfly/react-core";
+import { FileUpload } from "@patternfly/react-core";
import { KEY_CODES } from "@patternfly/react-core";
+import { MultipleFileUpload } from "@patternfly/react-core";
import { Nav } from "@patternfly/react-core";
import { Tabs } from "@patternfly/react-core";
import { Wizard } from "@patternfly/react-core";
import { WizardFooter } from "@patternfly/react-core/next";
<>
-
- ;
-
->
+
+ ;
+
+>;