Add rules of hooks (#2131)

* Fix conditional hooks

* Add rules of hooks lint

* Install dependencies with node 14
This commit is contained in:
Timur Carpeev 2022-07-13 11:13:58 +02:00 committed by GitHub
parent e7f68f4c07
commit b9a53a6fde
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 35 additions and 30 deletions

View file

@ -14,7 +14,8 @@
"simple-import-sort", "simple-import-sort",
"cypress", "cypress",
"chai-friendly", "chai-friendly",
"formatjs" "formatjs",
"react-hooks"
], ],
"rules": { "rules": {
"@typescript-eslint/adjacent-overload-signatures": "error", "@typescript-eslint/adjacent-overload-signatures": "error",
@ -171,6 +172,8 @@
"prefer-object-spread": "error", "prefer-object-spread": "error",
"quote-props": "off", "quote-props": "off",
"radix": "error", "radix": "error",
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": "warn",
"simple-import-sort/sort": ["error"], "simple-import-sort/sort": ["error"],
"sort-imports": "off", // imports are handled by simple-import-sort/sort "sort-imports": "off", // imports are handled by simple-import-sort/sort
"sort-keys": "off", "sort-keys": "off",

12
package-lock.json generated
View file

@ -6228,12 +6228,6 @@
"@svgr/plugin-jsx": "^4.3.3", "@svgr/plugin-jsx": "^4.3.3",
"camelcase": "^5.3.1", "camelcase": "^5.3.1",
"cosmiconfig": "^5.2.1" "cosmiconfig": "^5.2.1"
},
"dependencies": {
"uuid": {
"version": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
}
} }
}, },
"@svgr/hast-util-to-babel-ast": { "@svgr/hast-util-to-babel-ast": {
@ -14715,6 +14709,12 @@
"integrity": "sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==", "integrity": "sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==",
"dev": true "dev": true
}, },
"eslint-plugin-react-hooks": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
"integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
"dev": true
},
"eslint-plugin-simple-import-sort": { "eslint-plugin-simple-import-sort": {
"version": "5.0.3", "version": "5.0.3",
"resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-5.0.3.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-5.0.3.tgz",

View file

@ -163,6 +163,7 @@
"eslint-plugin-import": "^2.19.1", "eslint-plugin-import": "^2.19.1",
"eslint-plugin-local-rules": "^0.1.1", "eslint-plugin-local-rules": "^0.1.1",
"eslint-plugin-prefer-arrow": "^1.1.6", "eslint-plugin-prefer-arrow": "^1.1.6",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-simple-import-sort": "^5.0.3", "eslint-plugin-simple-import-sort": "^5.0.3",
"file-loader": "^5.0.2", "file-loader": "^5.0.2",
"fork-ts-checker-webpack-plugin": "^3.1.1", "fork-ts-checker-webpack-plugin": "^3.1.1",

View file

@ -145,10 +145,6 @@ export const CustomAppDetails: React.FC<OrderListProps> = ({
}; };
const customApp = data?.app; const customApp = data?.app;
if (customApp === null) {
return <NotFoundPage backHref={appsListUrl()} />;
}
const onTokenCreate = (data: AppTokenCreateMutation) => { const onTokenCreate = (data: AppTokenCreateMutation) => {
if (data?.appTokenCreate?.errors.length === 0) { if (data?.appTokenCreate?.errors.length === 0) {
refetch(); refetch();
@ -216,6 +212,10 @@ export const CustomAppDetails: React.FC<OrderListProps> = ({
const currentToken = data?.app?.tokens?.find(token => token.id === params.id); const currentToken = data?.app?.tokens?.find(token => token.id === params.id);
if (customApp === null) {
return <NotFoundPage backHref={appsListUrl()} />;
}
return ( return (
<> <>
<WindowTitle title={getStringOrPlaceholder(customApp?.name)} /> <WindowTitle title={getStringOrPlaceholder(customApp?.name)} />

View file

@ -90,10 +90,6 @@ export const CategoryDetails: React.FC<CategoryDetailsProps> = ({
const category = data?.category; const category = data?.category;
if (category === null) {
return <NotFoundPage onBack={() => navigate(categoryListUrl())} />;
}
const handleCategoryDelete = (data: CategoryDeleteMutation) => { const handleCategoryDelete = (data: CategoryDeleteMutation) => {
if (data.categoryDelete.errors.length === 0) { if (data.categoryDelete.errors.length === 0) {
notify({ notify({
@ -208,6 +204,10 @@ export const CategoryDetails: React.FC<CategoryDetailsProps> = ({
variables => updatePrivateMetadata({ variables }), variables => updatePrivateMetadata({ variables }),
); );
if (category === null) {
return <NotFoundPage onBack={() => navigate(categoryListUrl())} />;
}
return ( return (
<PaginatorContext.Provider value={{ ...pageInfo, ...paginationFunctions }}> <PaginatorContext.Provider value={{ ...pageInfo, ...paginationFunctions }}>
<WindowTitle title={maybe(() => data.category.name)} /> <WindowTitle title={maybe(() => data.category.name)} />

View file

@ -173,9 +173,6 @@ export const CollectionDetails: React.FC<CollectionDetailsProps> = ({
}); });
const collection = data?.collection; const collection = data?.collection;
if (collection === null) {
return <NotFoundPage backHref={collectionListUrl()} />;
}
const allChannels = createCollectionChannels( const allChannels = createCollectionChannels(
availableChannels, availableChannels,
)?.sort((channel, nextChannel) => )?.sort((channel, nextChannel) =>
@ -261,6 +258,10 @@ export const CollectionDetails: React.FC<CollectionDetailsProps> = ({
paginationState, paginationState,
); );
if (collection === null) {
return <NotFoundPage backHref={collectionListUrl()} />;
}
return ( return (
<PaginatorContext.Provider value={{ ...pageInfo, ...paginationValues }}> <PaginatorContext.Provider value={{ ...pageInfo, ...paginationValues }}>
<WindowTitle title={data?.collection?.name} /> <WindowTitle title={data?.collection?.name} />

View file

@ -14,10 +14,6 @@ const GiftCardEnableDisableSection: React.FC = () => {
giftCard: { id, isActive, isExpired }, giftCard: { id, isActive, isExpired },
} = useGiftCardDetails(); } = useGiftCardDetails();
if (isExpired) {
return null;
}
const { const {
giftCardActivate, giftCardActivate,
giftCardDeactivate, giftCardDeactivate,
@ -35,6 +31,10 @@ const GiftCardEnableDisableSection: React.FC = () => {
? buttonMessages.disableLabel ? buttonMessages.disableLabel
: buttonMessages.enableLabel; : buttonMessages.enableLabel;
if (isExpired) {
return null;
}
return ( return (
<ConfirmButton <ConfirmButton
data-test-id="enable-button" data-test-id="enable-button"

View file

@ -20,10 +20,6 @@ export interface OrderFulfillStockExceededDialogLineProps {
const OrderFulfillStockExceededDialogLine: React.FC<OrderFulfillStockExceededDialogLineProps> = props => { const OrderFulfillStockExceededDialogLine: React.FC<OrderFulfillStockExceededDialogLineProps> = props => {
const { line: genericLine, warehouseId, formsetData } = props; const { line: genericLine, warehouseId, formsetData } = props;
if (!genericLine) {
return null;
}
const line = "orderLine" in genericLine ? genericLine.orderLine : genericLine; const line = "orderLine" in genericLine ? genericLine.orderLine : genericLine;
const classes = useStyles(props); const classes = useStyles(props);
@ -31,6 +27,10 @@ const OrderFulfillStockExceededDialogLine: React.FC<OrderFulfillStockExceededDia
stock => stock.warehouse.id === warehouseId, stock => stock.warehouse.id === warehouseId,
); );
if (!genericLine) {
return null;
}
return ( return (
<TableRow key={line?.id}> <TableRow key={line?.id}>
<TableCellAvatar <TableCellAvatar

View file

@ -90,10 +90,6 @@ export const ProductVariant: React.FC<ProductVariantCreateProps> = ({
const [updateMetadata] = useUpdateMetadataMutation({}); const [updateMetadata] = useUpdateMetadataMutation({});
const [updatePrivateMetadata] = useUpdatePrivateMetadataMutation({}); const [updatePrivateMetadata] = useUpdatePrivateMetadataMutation({});
if (product === null) {
return <NotFoundPage onBack={() => navigate(productListUrl())} />;
}
const [ const [
reorderProductVariants, reorderProductVariants,
reorderProductVariantsOpts, reorderProductVariantsOpts,
@ -214,6 +210,10 @@ export const ProductVariant: React.FC<ProductVariantCreateProps> = ({
variantCreateResult.loading || variantCreateResult.loading ||
reorderProductVariantsOpts.loading; reorderProductVariantsOpts.loading;
if (product === null) {
return <NotFoundPage onBack={() => navigate(productListUrl())} />;
}
return ( return (
<> <>
<WindowTitle <WindowTitle