diff --git a/packages/manager/.changeset/pr-10236-tech-stories-1709140341110.md b/packages/manager/.changeset/pr-10236-tech-stories-1709140341110.md
new file mode 100644
index 00000000000..9186cba4493
--- /dev/null
+++ b/packages/manager/.changeset/pr-10236-tech-stories-1709140341110.md
@@ -0,0 +1,5 @@
+---
+"@linode/manager": Tech Stories
+---
+
+Upgrade to TanStack Query v4 ([#10236](https://github.com/linode/manager/pull/10236))
diff --git a/packages/manager/package.json b/packages/manager/package.json
index d34a381a11a..064df438018 100644
--- a/packages/manager/package.json
+++ b/packages/manager/package.json
@@ -23,6 +23,8 @@
"@paypal/react-paypal-js": "^7.8.3",
"@reach/tabs": "^0.10.5",
"@sentry/react": "^7.57.0",
+ "@tanstack/react-query": "4.36.1",
+ "@tanstack/react-query-devtools": "4.36.1",
"algoliasearch": "^4.14.3",
"axios": "~1.6.5",
"braintree-web": "^3.92.2",
@@ -55,7 +57,6 @@
"react-dom": "^18.2.0",
"react-dropzone": "~11.2.0",
"react-number-format": "^3.5.0",
- "react-query": "^3.3.2",
"react-redux": "~7.1.3",
"react-router-dom": "~5.3.4",
"react-router-hash-link": "^2.3.1",
diff --git a/packages/manager/src/components/PaymentMethodRow/PaymentMethodRow.tsx b/packages/manager/src/components/PaymentMethodRow/PaymentMethodRow.tsx
index 93fee8560f6..4914207f1d7 100644
--- a/packages/manager/src/components/PaymentMethodRow/PaymentMethodRow.tsx
+++ b/packages/manager/src/components/PaymentMethodRow/PaymentMethodRow.tsx
@@ -3,7 +3,7 @@ import { PaymentMethod } from '@linode/api-v4/lib/account/types';
import { useTheme } from '@mui/material/styles';
import { useSnackbar } from 'notistack';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { useHistory } from 'react-router-dom';
import { Action, ActionMenu } from 'src/components/ActionMenu/ActionMenu';
@@ -48,7 +48,7 @@ export const PaymentMethodRow = (props: Props) => {
const makeDefault = (id: number) => {
makeDefaultPaymentMethod(id)
- .then(() => queryClient.invalidateQueries(`${queryKey}-all`))
+ .then(() => queryClient.invalidateQueries([`${queryKey}-all`]))
.catch((errors) =>
enqueueSnackbar(
errors[0]?.reason || 'Unable to change your default payment method.',
diff --git a/packages/manager/src/components/TagCell/AddTag.tsx b/packages/manager/src/components/TagCell/AddTag.tsx
index 18558ebe91e..7d470503b00 100644
--- a/packages/manager/src/components/TagCell/AddTag.tsx
+++ b/packages/manager/src/components/TagCell/AddTag.tsx
@@ -1,6 +1,6 @@
import { styled } from '@mui/material/styles';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import Select, { Item } from 'src/components/EnhancedSelect/Select';
import { useProfile } from 'src/queries/profile';
diff --git a/packages/manager/src/components/TagsInput/TagsInput.tsx b/packages/manager/src/components/TagsInput/TagsInput.tsx
index 2d3cb5495b4..5a5a5fe6d81 100644
--- a/packages/manager/src/components/TagsInput/TagsInput.tsx
+++ b/packages/manager/src/components/TagsInput/TagsInput.tsx
@@ -1,7 +1,7 @@
import { APIError } from '@linode/api-v4/lib/types';
import { concat } from 'ramda';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import Select, {
Item,
diff --git a/packages/manager/src/components/TagsPanel/TagsPanel.tsx b/packages/manager/src/components/TagsPanel/TagsPanel.tsx
index be5b9e4388a..66fb2a4fa8f 100644
--- a/packages/manager/src/components/TagsPanel/TagsPanel.tsx
+++ b/packages/manager/src/components/TagsPanel/TagsPanel.tsx
@@ -1,5 +1,5 @@
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import {
StyledPlusIcon,
diff --git a/packages/manager/src/components/Uploaders/ImageUploader/ImageUploader.tsx b/packages/manager/src/components/Uploaders/ImageUploader/ImageUploader.tsx
index 4dc9c18b7f5..7d120b9480e 100644
--- a/packages/manager/src/components/Uploaders/ImageUploader/ImageUploader.tsx
+++ b/packages/manager/src/components/Uploaders/ImageUploader/ImageUploader.tsx
@@ -3,7 +3,7 @@ import { useSnackbar } from 'notistack';
import * as React from 'react';
import { flushSync } from 'react-dom';
import { FileRejection, useDropzone } from 'react-dropzone';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { useDispatch } from 'react-redux';
import { useHistory } from 'react-router-dom';
@@ -234,7 +234,7 @@ export const ImageUploader = React.memo((props: ImageUploaderProps) => {
redirectToLogin('/images');
}, 3000);
} else {
- queryClient.invalidateQueries(`${queryKey}-list`);
+ queryClient.invalidateQueries([`${queryKey}-list`]);
history.push('/images');
}
};
diff --git a/packages/manager/src/components/Uploaders/ObjectUploader/ObjectUploader.tsx b/packages/manager/src/components/Uploaders/ObjectUploader/ObjectUploader.tsx
index 7aa380e9f38..cc81f9af594 100644
--- a/packages/manager/src/components/Uploaders/ObjectUploader/ObjectUploader.tsx
+++ b/packages/manager/src/components/Uploaders/ObjectUploader/ObjectUploader.tsx
@@ -3,7 +3,7 @@ import { AxiosProgressEvent } from 'axios';
import { useSnackbar } from 'notistack';
import * as React from 'react';
import { FileRejection, useDropzone } from 'react-dropzone';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { debounce } from 'throttle-debounce';
import { Button } from 'src/components/Button/Button';
diff --git a/packages/manager/src/containers/account.container.ts b/packages/manager/src/containers/account.container.ts
index b698936ad8b..b4c3cec138e 100644
--- a/packages/manager/src/containers/account.container.ts
+++ b/packages/manager/src/containers/account.container.ts
@@ -1,7 +1,7 @@
import { Account } from '@linode/api-v4/lib';
import { APIError } from '@linode/api-v4/lib/types';
import * as React from 'react';
-import { UseQueryResult } from 'react-query';
+import { UseQueryResult } from '@tanstack/react-query';
import { useAccount } from 'src/queries/account';
diff --git a/packages/manager/src/containers/accountSettings.container.ts b/packages/manager/src/containers/accountSettings.container.ts
index 3d0aec2eddd..1615c17e46f 100644
--- a/packages/manager/src/containers/accountSettings.container.ts
+++ b/packages/manager/src/containers/accountSettings.container.ts
@@ -1,7 +1,7 @@
import { AccountSettings } from '@linode/api-v4/lib';
import { APIError } from '@linode/api-v4/lib/types';
import * as React from 'react';
-import { UseQueryResult } from 'react-query';
+import { UseQueryResult } from '@tanstack/react-query';
import { useAccountSettings } from 'src/queries/accountSettings';
diff --git a/packages/manager/src/containers/profile.container.ts b/packages/manager/src/containers/profile.container.ts
index 917fdfff8d7..0e8a0d986cb 100644
--- a/packages/manager/src/containers/profile.container.ts
+++ b/packages/manager/src/containers/profile.container.ts
@@ -1,7 +1,7 @@
import { Grants, Profile } from '@linode/api-v4/lib';
import { APIError } from '@linode/api-v4/lib/types';
import * as React from 'react';
-import { UseQueryResult } from 'react-query';
+import { UseQueryResult } from '@tanstack/react-query';
import { useGrants, useProfile } from 'src/queries/profile';
diff --git a/packages/manager/src/containers/withQueryClient.container.tsx b/packages/manager/src/containers/withQueryClient.container.tsx
index 3b1cc135393..06a70807e3b 100644
--- a/packages/manager/src/containers/withQueryClient.container.tsx
+++ b/packages/manager/src/containers/withQueryClient.container.tsx
@@ -1,5 +1,5 @@
import React from 'react';
-import { QueryClient, useQueryClient } from 'react-query';
+import { QueryClient, useQueryClient } from '@tanstack/react-query';
export interface WithQueryClientProps {
queryClient: QueryClient;
diff --git a/packages/manager/src/features/Account/Agreements/withAgreements.ts b/packages/manager/src/features/Account/Agreements/withAgreements.ts
index 3197857457b..76eb159a758 100644
--- a/packages/manager/src/features/Account/Agreements/withAgreements.ts
+++ b/packages/manager/src/features/Account/Agreements/withAgreements.ts
@@ -1,7 +1,7 @@
import { Agreements } from '@linode/api-v4/lib';
import { APIError } from '@linode/api-v4/lib/types';
import * as React from 'react';
-import { UseQueryResult } from 'react-query';
+import { UseQueryResult } from '@tanstack/react-query';
import { useAccountAgreements } from 'src/queries/accountAgreements';
diff --git a/packages/manager/src/features/Account/EnableManaged.tsx b/packages/manager/src/features/Account/EnableManaged.tsx
index 0ae8c14cbce..d3acd2b5894 100644
--- a/packages/manager/src/features/Account/EnableManaged.tsx
+++ b/packages/manager/src/features/Account/EnableManaged.tsx
@@ -2,7 +2,7 @@ import { enableManaged } from '@linode/api-v4/lib/managed';
import { APIError } from '@linode/api-v4/lib/types';
import Grid from '@mui/material/Unstable_Grid2';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { Accordion } from 'src/components/Accordion';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
diff --git a/packages/manager/src/features/Account/EnableObjectStorage.tsx b/packages/manager/src/features/Account/EnableObjectStorage.tsx
index 899f7e76ac8..f8d5960735b 100644
--- a/packages/manager/src/features/Account/EnableObjectStorage.tsx
+++ b/packages/manager/src/features/Account/EnableObjectStorage.tsx
@@ -3,7 +3,7 @@ import { cancelObjectStorage } from '@linode/api-v4/lib/object-storage';
import { APIError } from '@linode/api-v4/lib/types';
import Grid from '@mui/material/Unstable_Grid2';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { Accordion } from 'src/components/Accordion';
import { Button } from 'src/components/Button/Button';
@@ -89,8 +89,8 @@ export const EnableObjectStorage = (props: Props) => {
.then(() => {
updateAccountSettingsData({ object_storage: 'disabled' }, queryClient);
handleClose();
- queryClient.invalidateQueries(`${queryKey}-buckets`);
- queryClient.invalidateQueries(`${queryKey}-access-keys`);
+ queryClient.invalidateQueries([`${queryKey}-buckets`]);
+ queryClient.invalidateQueries([`${queryKey}-access-keys`]);
})
.catch(handleError);
};
diff --git a/packages/manager/src/features/Account/SwitchAccounts/ChildAccountList.tsx b/packages/manager/src/features/Account/SwitchAccounts/ChildAccountList.tsx
index 3f9075bb849..993fd12f963 100644
--- a/packages/manager/src/features/Account/SwitchAccounts/ChildAccountList.tsx
+++ b/packages/manager/src/features/Account/SwitchAccounts/ChildAccountList.tsx
@@ -1,6 +1,6 @@
import _ from 'lodash';
import React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { Waypoint } from 'react-waypoint';
import ErrorStateCloud from 'src/assets/icons/error-state-cloud.svg';
diff --git a/packages/manager/src/features/Backups/utils.ts b/packages/manager/src/features/Backups/utils.ts
index 87768021c88..c00d8f60895 100644
--- a/packages/manager/src/features/Backups/utils.ts
+++ b/packages/manager/src/features/Backups/utils.ts
@@ -1,5 +1,5 @@
import { enableBackups } from '@linode/api-v4';
-import { useMutation, useQueryClient } from 'react-query';
+import { useMutation, useQueryClient } from '@tanstack/react-query';
import { queryKey } from 'src/queries/linodes/linodes';
import { pluralize } from 'src/utilities/pluralize';
diff --git a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/GooglePayButton.tsx b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/GooglePayButton.tsx
index ab11bedecbd..0de6edd239f 100644
--- a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/GooglePayButton.tsx
+++ b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/GooglePayButton.tsx
@@ -2,7 +2,7 @@ import { APIWarning } from '@linode/api-v4/lib/types';
import Grid from '@mui/material/Unstable_Grid2';
import { Theme } from '@mui/material/styles';
import * as React from 'react';
-import { QueryClient, useQueryClient } from 'react-query';
+import { QueryClient, useQueryClient } from '@tanstack/react-query';
import { makeStyles } from 'tss-react/mui';
import GooglePayIcon from 'src/assets/icons/payment/gPayButton.svg';
diff --git a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PayPalButton.tsx b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PayPalButton.tsx
index c2062c251fa..9219ad5d8d6 100644
--- a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PayPalButton.tsx
+++ b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PayPalButton.tsx
@@ -10,7 +10,7 @@ import {
usePayPalScriptReducer,
} from '@paypal/react-paypal-js';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { makeStyles } from 'tss-react/mui';
import { CircleProgress } from 'src/components/CircleProgress';
@@ -179,7 +179,7 @@ export const PayPalButton = (props: Props) => {
setProcessing(false);
});
if (response) {
- queryClient.invalidateQueries(`${accountBillingKey}-payments`);
+ queryClient.invalidateQueries([`${accountBillingKey}-payments`]);
setSuccess(
`Payment for $${response.usd} successfully submitted with PayPal`,
diff --git a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.tsx b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.tsx
index 6ce794aa8f9..58e9f5d22fc 100644
--- a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.tsx
+++ b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.tsx
@@ -4,7 +4,7 @@ import { APIWarning } from '@linode/api-v4/lib/types';
import Grid from '@mui/material/Unstable_Grid2';
import { useSnackbar } from 'notistack';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { makeStyles } from 'tss-react/mui';
import { Button } from 'src/components/Button/Button';
@@ -189,7 +189,7 @@ export const PaymentDrawer = (props: Props) => {
true,
response.warnings
);
- queryClient.invalidateQueries(`${queryKey}-payments`);
+ queryClient.invalidateQueries([`${queryKey}-payments`]);
})
.catch((errorResponse) => {
setSubmitting(false);
diff --git a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PromoDialog.tsx b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PromoDialog.tsx
index 47822bf9cd3..cb9ec1bc799 100644
--- a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PromoDialog.tsx
+++ b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PromoDialog.tsx
@@ -2,7 +2,7 @@ import { addPromotion } from '@linode/api-v4/lib';
import { APIError } from '@linode/api-v4/lib/types';
import { useSnackbar } from 'notistack';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { makeStyles } from 'tss-react/mui';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
@@ -51,7 +51,7 @@ const PromoDialog = (props: Props) => {
enqueueSnackbar('Successfully applied promo to your account.', {
variant: 'success',
});
- queryClient.invalidateQueries(queryKey);
+ queryClient.invalidateQueries([queryKey]);
onClose();
})
.catch((error: APIError[]) => {
diff --git a/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/AddPaymentMethodDrawer/AddCreditCardForm.tsx b/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/AddPaymentMethodDrawer/AddCreditCardForm.tsx
index e5c34763de0..3f1e4f523d5 100644
--- a/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/AddPaymentMethodDrawer/AddCreditCardForm.tsx
+++ b/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/AddPaymentMethodDrawer/AddCreditCardForm.tsx
@@ -7,7 +7,7 @@ import { useFormik, yupToFormErrors } from 'formik';
import { useSnackbar } from 'notistack';
import * as React from 'react';
import NumberFormat, { NumberFormatProps } from 'react-number-format';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { makeStyles } from 'tss-react/mui';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
@@ -81,7 +81,7 @@ const AddCreditCardForm = (props: Props) => {
enqueueSnackbar('Successfully added Credit Card', {
variant: 'success',
});
- queryClient.invalidateQueries('account-payment-methods-all');
+ queryClient.invalidateQueries(['account-payment-methods-all']);
onClose();
} catch (errors) {
handleAPIErrors(errors, setFieldError, setError);
diff --git a/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/GooglePayChip.tsx b/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/GooglePayChip.tsx
index 439b1e46e18..72e599a0e33 100644
--- a/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/GooglePayChip.tsx
+++ b/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/GooglePayChip.tsx
@@ -1,6 +1,6 @@
import Grid from '@mui/material/Unstable_Grid2';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { makeStyles } from 'tss-react/mui';
import GooglePayIcon from 'src/assets/icons/payment/googlePay.svg';
diff --git a/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/PayPalChip.tsx b/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/PayPalChip.tsx
index ca211b3a5ed..2dee35c0171 100644
--- a/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/PayPalChip.tsx
+++ b/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/PayPalChip.tsx
@@ -11,7 +11,7 @@ import {
} from '@paypal/react-paypal-js';
import { useSnackbar } from 'notistack';
import React, { useEffect } from 'react';
-import { QueryClient, useQueryClient } from 'react-query';
+import { QueryClient, useQueryClient } from '@tanstack/react-query';
import { makeStyles } from 'tss-react/mui';
import { CircleProgress } from 'src/components/CircleProgress';
@@ -115,7 +115,7 @@ export const PayPalChip = (props: Props) => {
type: 'payment_method_nonce',
})
.then(() => {
- queryClient.invalidateQueries(`${accountPaymentKey}-all`);
+ queryClient.invalidateQueries([`${accountPaymentKey}-all`]);
onClose();
diff --git a/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/PaymentInformation.tsx b/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/PaymentInformation.tsx
index 1846e7e6588..b0d0dab7c59 100644
--- a/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/PaymentInformation.tsx
+++ b/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/PaymentInformation.tsx
@@ -2,7 +2,7 @@ import { PaymentMethod, deletePaymentMethod } from '@linode/api-v4/lib/account';
import { APIError } from '@linode/api-v4/lib/types';
import Grid from '@mui/material/Unstable_Grid2';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { useHistory, useRouteMatch } from 'react-router-dom';
import { DeletePaymentMethodDialog } from 'src/components/PaymentMethodRow/DeletePaymentMethodDialog';
@@ -63,7 +63,7 @@ const PaymentInformation = (props: Props) => {
.then(() => {
setDeleteLoading(false);
closeDeleteDialog();
- queryClient.invalidateQueries(`${queryKey}-all`);
+ queryClient.invalidateQueries([`${queryKey}-all`]);
})
.catch((e: APIError[]) => {
setDeleteLoading(false);
diff --git a/packages/manager/src/features/Billing/GooglePayProvider.ts b/packages/manager/src/features/Billing/GooglePayProvider.ts
index 4a6c20a8482..1050d7b871d 100644
--- a/packages/manager/src/features/Billing/GooglePayProvider.ts
+++ b/packages/manager/src/features/Billing/GooglePayProvider.ts
@@ -5,7 +5,7 @@ import {
import { APIWarning } from '@linode/api-v4/lib/types';
import braintree, { GooglePayment } from 'braintree-web';
import { VariantType } from 'notistack';
-import { QueryClient } from 'react-query';
+import { QueryClient } from '@tanstack/react-query';
import { GPAY_CLIENT_ENV, GPAY_MERCHANT_ID } from 'src/constants';
import { reportException } from 'src/exceptionReporting';
@@ -116,7 +116,7 @@ export const gPay = async (
nonce,
usd: transactionInfo.totalPrice as string,
});
- queryClient.invalidateQueries(`${accountBillingKey}-payments`);
+ queryClient.invalidateQueries([`${accountBillingKey}-payments`]);
const message = {
text: `Payment for $${transactionInfo.totalPrice} successfully submitted with Google Pay`,
variant: 'success' as VariantType,
@@ -130,7 +130,7 @@ export const gPay = async (
is_default: true,
type: 'payment_method_nonce',
});
- queryClient.invalidateQueries(`${accountPaymentKey}-all`);
+ queryClient.invalidateQueries([`${accountPaymentKey}-all`]);
setMessage({
text: 'Successfully added Google Pay',
variant: 'success',
diff --git a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseSummary/DatabaseSummaryConnectionDetails.tsx b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseSummary/DatabaseSummaryConnectionDetails.tsx
index 5f6fddeccaf..e8b6d8a1ec1 100644
--- a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseSummary/DatabaseSummaryConnectionDetails.tsx
+++ b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseSummary/DatabaseSummaryConnectionDetails.tsx
@@ -242,7 +242,7 @@ export const DatabaseSummaryConnectionDetails = (props: Props) => {
password = {password}
- {credentialsLoading ? (
+ {showCredentials && credentialsLoading ? (
diff --git a/packages/manager/src/features/EntityTransfers/EntityTransfersCreate/EntityTransfersCreate.tsx b/packages/manager/src/features/EntityTransfers/EntityTransfersCreate/EntityTransfersCreate.tsx
index 860de6d7051..8b52c6a3aba 100644
--- a/packages/manager/src/features/EntityTransfers/EntityTransfersCreate/EntityTransfersCreate.tsx
+++ b/packages/manager/src/features/EntityTransfers/EntityTransfersCreate/EntityTransfersCreate.tsx
@@ -2,7 +2,7 @@ import { CreateTransferPayload } from '@linode/api-v4/lib/entity-transfers';
import Grid from '@mui/material/Unstable_Grid2';
import { curry } from 'ramda';
import * as React from 'react';
-import { QueryClient, useQueryClient } from 'react-query';
+import { QueryClient, useQueryClient } from '@tanstack/react-query';
import { useHistory } from 'react-router-dom';
import { DocumentTitleSegment } from 'src/components/DocumentTitle';
@@ -70,7 +70,7 @@ export const EntityTransfersCreate = () => {
const entityCount = countByEntity(transfer.entities);
sendEntityTransferCreateEvent(entityCount);
- queryClient.invalidateQueries(queryKey);
+ queryClient.invalidateQueries([queryKey]);
push({ pathname: '/account/service-transfers', state: { transfer } });
},
}).catch((_) => null);
diff --git a/packages/manager/src/features/EntityTransfers/EntityTransfersLanding/ConfirmTransferCancelDialog.tsx b/packages/manager/src/features/EntityTransfers/EntityTransfersLanding/ConfirmTransferCancelDialog.tsx
index ebc25ebd369..4476bf5b782 100644
--- a/packages/manager/src/features/EntityTransfers/EntityTransfersLanding/ConfirmTransferCancelDialog.tsx
+++ b/packages/manager/src/features/EntityTransfers/EntityTransfersLanding/ConfirmTransferCancelDialog.tsx
@@ -5,7 +5,7 @@ import {
import { APIError } from '@linode/api-v4/lib/types';
import { useSnackbar } from 'notistack';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { ConfirmationDialog } from 'src/components/ConfirmationDialog/ConfirmationDialog';
@@ -55,7 +55,7 @@ export const ConfirmTransferCancelDialog = React.memo((props: Props) => {
sendEntityTransferCancelEvent();
// Refresh the query for Entity Transfers.
- queryClient.invalidateQueries(queryKey);
+ queryClient.invalidateQueries([queryKey]);
onClose();
setSubmitting(false);
diff --git a/packages/manager/src/features/EntityTransfers/EntityTransfersLanding/ConfirmTransferDialog.tsx b/packages/manager/src/features/EntityTransfers/EntityTransfersLanding/ConfirmTransferDialog.tsx
index ab63e1cc1b6..e811635f9ac 100644
--- a/packages/manager/src/features/EntityTransfers/EntityTransfersLanding/ConfirmTransferDialog.tsx
+++ b/packages/manager/src/features/EntityTransfers/EntityTransfersLanding/ConfirmTransferDialog.tsx
@@ -5,7 +5,7 @@ import {
import { APIError } from '@linode/api-v4/lib/types';
import { useSnackbar } from 'notistack';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { Checkbox } from 'src/components/Checkbox';
import { CircleProgress } from 'src/components/CircleProgress';
diff --git a/packages/manager/src/features/Firewalls/FirewallDetail/Devices/AddNodebalancerDrawer.tsx b/packages/manager/src/features/Firewalls/FirewallDetail/Devices/AddNodebalancerDrawer.tsx
index 98710cb41e0..17061da3771 100644
--- a/packages/manager/src/features/Firewalls/FirewallDetail/Devices/AddNodebalancerDrawer.tsx
+++ b/packages/manager/src/features/Firewalls/FirewallDetail/Devices/AddNodebalancerDrawer.tsx
@@ -2,7 +2,7 @@ import { NodeBalancer } from '@linode/api-v4';
import { useTheme } from '@mui/material';
import { useSnackbar } from 'notistack';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { useParams } from 'react-router-dom';
import sanitize from 'sanitize-html';
diff --git a/packages/manager/src/features/Firewalls/FirewallDetail/Devices/RemoveDeviceDialog.tsx b/packages/manager/src/features/Firewalls/FirewallDetail/Devices/RemoveDeviceDialog.tsx
index 771b1b33c6c..39cb445108b 100644
--- a/packages/manager/src/features/Firewalls/FirewallDetail/Devices/RemoveDeviceDialog.tsx
+++ b/packages/manager/src/features/Firewalls/FirewallDetail/Devices/RemoveDeviceDialog.tsx
@@ -1,7 +1,7 @@
import { FirewallDevice } from '@linode/api-v4';
import { useSnackbar } from 'notistack';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { ConfirmationDialog } from 'src/components/ConfirmationDialog/ConfirmationDialog';
diff --git a/packages/manager/src/features/Firewalls/FirewallLanding/CreateFirewallDrawer.tsx b/packages/manager/src/features/Firewalls/FirewallLanding/CreateFirewallDrawer.tsx
index 89c1eced39e..530be79abe6 100644
--- a/packages/manager/src/features/Firewalls/FirewallLanding/CreateFirewallDrawer.tsx
+++ b/packages/manager/src/features/Firewalls/FirewallLanding/CreateFirewallDrawer.tsx
@@ -11,7 +11,7 @@ import { CreateFirewallSchema } from '@linode/validation/lib/firewalls.schema';
import { useFormik } from 'formik';
import { useSnackbar } from 'notistack';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Box } from 'src/components/Box';
diff --git a/packages/manager/src/features/Firewalls/FirewallLanding/FirewallDialog.tsx b/packages/manager/src/features/Firewalls/FirewallLanding/FirewallDialog.tsx
index 47573efb469..33fd6a16ce3 100644
--- a/packages/manager/src/features/Firewalls/FirewallLanding/FirewallDialog.tsx
+++ b/packages/manager/src/features/Firewalls/FirewallLanding/FirewallDialog.tsx
@@ -1,6 +1,6 @@
import { useSnackbar } from 'notistack';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { ConfirmationDialog } from 'src/components/ConfirmationDialog/ConfirmationDialog';
diff --git a/packages/manager/src/features/GlobalNotifications/ComplianceUpdateModal.tsx b/packages/manager/src/features/GlobalNotifications/ComplianceUpdateModal.tsx
index 17bc9f31f19..21d4ee82a23 100644
--- a/packages/manager/src/features/GlobalNotifications/ComplianceUpdateModal.tsx
+++ b/packages/manager/src/features/GlobalNotifications/ComplianceUpdateModal.tsx
@@ -1,5 +1,5 @@
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { ConfirmationDialog } from 'src/components/ConfirmationDialog/ConfirmationDialog';
diff --git a/packages/manager/src/features/Images/ImagesLanding.tsx b/packages/manager/src/features/Images/ImagesLanding.tsx
index 49d9b65514e..1bc17a33f5c 100644
--- a/packages/manager/src/features/Images/ImagesLanding.tsx
+++ b/packages/manager/src/features/Images/ImagesLanding.tsx
@@ -5,7 +5,7 @@ import { makeStyles } from 'tss-react/mui';
import produce from 'immer';
import { useSnackbar } from 'notistack';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { useHistory } from 'react-router-dom';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
diff --git a/packages/manager/src/features/Linodes/CloneLanding/CloneLanding.tsx b/packages/manager/src/features/Linodes/CloneLanding/CloneLanding.tsx
index 148c7c40aad..2582f476159 100644
--- a/packages/manager/src/features/Linodes/CloneLanding/CloneLanding.tsx
+++ b/packages/manager/src/features/Linodes/CloneLanding/CloneLanding.tsx
@@ -339,8 +339,7 @@ const CloneLanding = () => {
selectedDisks={disksInState.filter((disk) => {
return (
// This disk has been individually selected ...
- state.diskSelection[disk.id].isSelected &&
- // ... AND it's associated configs are NOT selected
+ state.diskSelection[disk.id].isSelected && // ... AND it's associated configs are NOT selected
intersection(
pathOr(
[],
diff --git a/packages/manager/src/features/Linodes/LinodeEntityDetailHeader.tsx b/packages/manager/src/features/Linodes/LinodeEntityDetailHeader.tsx
index b792be8fac7..885e22b3609 100644
--- a/packages/manager/src/features/Linodes/LinodeEntityDetailHeader.tsx
+++ b/packages/manager/src/features/Linodes/LinodeEntityDetailHeader.tsx
@@ -3,7 +3,7 @@ import { LinodeBackups } from '@linode/api-v4/lib/linodes';
import { Typography } from '@mui/material';
import { useTheme } from '@mui/material/styles';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { Box } from 'src/components/Box';
import { Button } from 'src/components/Button/Button';
diff --git a/packages/manager/src/features/Linodes/LinodesCreate/AttachVLAN.tsx b/packages/manager/src/features/Linodes/LinodesCreate/AttachVLAN.tsx
index 4332e95edaa..50a00436090 100644
--- a/packages/manager/src/features/Linodes/LinodesCreate/AttachVLAN.tsx
+++ b/packages/manager/src/features/Linodes/LinodesCreate/AttachVLAN.tsx
@@ -2,7 +2,7 @@ import { Interface } from '@linode/api-v4/lib/linodes';
import Grid from '@mui/material/Unstable_Grid2';
import { useTheme } from '@mui/material/styles';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { Link } from 'src/components/Link';
import { Paper } from 'src/components/Paper';
@@ -46,7 +46,7 @@ export const AttachVLAN = React.memo((props: Props) => {
React.useEffect(() => {
// Ensure VLANs are fresh.
- queryClient.invalidateQueries(vlansQueryKey);
+ queryClient.invalidateQueries([vlansQueryKey]);
}, []);
const regions = useRegionsQuery().data ?? [];
diff --git a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx
index 10bcd964208..20fed84b85d 100644
--- a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx
+++ b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx
@@ -53,11 +53,7 @@ import withAgreements, {
AgreementsProps,
} from 'src/features/Account/Agreements/withAgreements';
import { hasPlacementGroupReachedCapacity } from 'src/features/PlacementGroups/utils';
-import {
- accountAgreementsQueryKey,
- reportAgreementSigningError,
-} from 'src/queries/accountAgreements';
-import { simpleMutationHandlers } from 'src/queries/base';
+import { reportAgreementSigningError } from 'src/queries/accountAgreements';
import { vpcQueryKey } from 'src/queries/vpcs';
import { CreateTypes } from 'src/store/linodeCreate/linodeCreate.actions';
import { MapState } from 'src/store/types';
@@ -67,11 +63,11 @@ import {
} from 'src/utilities/analytics';
import { getAPIErrorOrDefault } from 'src/utilities/errorUtils';
import { ExtendedType, extendType } from 'src/utilities/extendType';
-import { isEURegion } from 'src/utilities/formatRegion';
import {
getGDPRDetails,
getSelectedRegionGroup,
} from 'src/utilities/formatRegion';
+import { isEURegion } from 'src/utilities/formatRegion';
import { ExtendedIP } from 'src/utilities/ipUtils';
import { UNKNOWN_PRICE } from 'src/utilities/pricing/constants';
import { getLinodeRegionPrice } from 'src/utilities/pricing/linodes';
@@ -79,8 +75,8 @@ import { getQueryParamsFromQueryString } from 'src/utilities/queryParams';
import { scrollErrorIntoView } from 'src/utilities/scrollErrorIntoView';
import { validatePassword } from 'src/utilities/validatePassword';
-import LinodeCreate from './LinodeCreate';
import { deriveDefaultLabel } from './deriveDefaultLabel';
+import LinodeCreate from './LinodeCreate';
import { HandleSubmit, Info, LinodeCreateValidation, TypeInfo } from './types';
import type {
@@ -877,20 +873,18 @@ class LinodeCreateContainer extends React.PureComponent {
this.setState({ formIsSubmitting: false });
if (signedAgreement) {
- this.props.queryClient.executeMutation<
- {},
- APIError[],
- Partial
- >({
- mutationFn: signAgreement,
- mutationKey: accountAgreementsQueryKey,
- onError: reportAgreementSigningError,
- variables: { eu_model: true, privacy_policy: true },
- ...simpleMutationHandlers(
- accountAgreementsQueryKey,
- this.props.queryClient
- ),
- });
+ const agreeData = { eu_model: true, privacy_policy: true };
+ signAgreement(agreeData)
+ .then(() => {
+ this.props.queryClient.setQueryData(
+ ['account', 'agreements'],
+ (prev) => ({
+ ...(prev ?? {}),
+ ...agreeData,
+ })
+ );
+ })
+ .catch(reportAgreementSigningError);
}
/** Analytics creation event */
diff --git a/packages/manager/src/features/Linodes/LinodesCreate/SelectLinodePanel/SelectLinodeRow.tsx b/packages/manager/src/features/Linodes/LinodesCreate/SelectLinodePanel/SelectLinodeRow.tsx
index 5e4bf419a29..e1cdd70fa47 100644
--- a/packages/manager/src/features/Linodes/LinodesCreate/SelectLinodePanel/SelectLinodeRow.tsx
+++ b/packages/manager/src/features/Linodes/LinodesCreate/SelectLinodePanel/SelectLinodeRow.tsx
@@ -1,7 +1,7 @@
import ErrorOutline from '@mui/icons-material/ErrorOutline';
import { useTheme } from '@mui/material';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { Box } from 'src/components/Box';
import { CircleProgress } from 'src/components/CircleProgress';
diff --git a/packages/manager/src/features/Linodes/LinodesCreate/VLANAccordion.tsx b/packages/manager/src/features/Linodes/LinodesCreate/VLANAccordion.tsx
index 3a9cc92b3e3..9cb966e6fb9 100644
--- a/packages/manager/src/features/Linodes/LinodesCreate/VLANAccordion.tsx
+++ b/packages/manager/src/features/Linodes/LinodesCreate/VLANAccordion.tsx
@@ -1,6 +1,6 @@
import { Interface } from '@linode/api-v4/lib/linodes';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { Accordion } from 'src/components/Accordion';
import { Box } from 'src/components/Box';
@@ -41,7 +41,7 @@ export const VLANAccordion = React.memo((props: VLANAccordionProps) => {
React.useEffect(() => {
// Ensure VLANs are fresh.
- queryClient.invalidateQueries(vlansQueryKey);
+ queryClient.invalidateQueries([vlansQueryKey]);
}, []);
const regions = useRegionsQuery().data ?? [];
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeBackup/LinodeBackups.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeBackup/LinodeBackups.tsx
index 6a4fd7829d6..fe2f7e5d2e7 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeBackup/LinodeBackups.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeBackup/LinodeBackups.tsx
@@ -74,12 +74,6 @@ export const LinodeBackups = () => {
setSelectedBackup(backup);
};
- if (error) {
- return (
-
- );
- }
-
const backupsMonthlyPrice:
| PriceObject['monthly']
| undefined = getMonthlyBackupsPrice({
@@ -87,10 +81,6 @@ export const LinodeBackups = () => {
type,
});
- if (isLoading) {
- return ;
- }
-
if (!linode?.backups.enabled) {
return (
{
);
}
+ if (error) {
+ return (
+
+ );
+ }
+
+ if (isLoading) {
+ return ;
+ }
+
const hasBackups =
backups !== undefined &&
(backups?.automatic.length > 0 ||
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeConfigs/LinodeConfigDialog.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeConfigs/LinodeConfigDialog.tsx
index 072c1bfeeba..56676a7edb6 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeConfigs/LinodeConfigDialog.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeConfigs/LinodeConfigDialog.tsx
@@ -10,7 +10,7 @@ import { useFormik } from 'formik';
import { useSnackbar } from 'notistack';
import { equals, pathOr, repeat } from 'ramda';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Box } from 'src/components/Box';
@@ -391,7 +391,7 @@ export const LinodeConfigDialog = (props: Props) => {
(thisInterface) => thisInterface.purpose === 'vlan'
)
) {
- queryClient.invalidateQueries(vlansQueryKey);
+ queryClient.invalidateQueries([vlansQueryKey]);
}
// Ensure VPC query data is up-to-date
@@ -400,7 +400,7 @@ export const LinodeConfigDialog = (props: Props) => {
(thisInterface) => thisInterface.purpose === 'vpc'
)
) {
- queryClient.invalidateQueries(vpcQueryKey);
+ queryClient.invalidateQueries([vpcQueryKey]);
}
enqueueSnackbar(
@@ -451,7 +451,7 @@ export const LinodeConfigDialog = (props: Props) => {
React.useEffect(() => {
if (open) {
// Ensure VLANs are fresh.
- queryClient.invalidateQueries(vlansQueryKey);
+ queryClient.invalidateQueries([vlansQueryKey]);
/**
* If config is defined, we're editing. Set the state
diff --git a/packages/manager/src/features/Linodes/LinodesLanding/DeleteLinodeDialog.tsx b/packages/manager/src/features/Linodes/LinodesLanding/DeleteLinodeDialog.tsx
index e0b5dd916bb..f77a0b1f351 100644
--- a/packages/manager/src/features/Linodes/LinodesLanding/DeleteLinodeDialog.tsx
+++ b/packages/manager/src/features/Linodes/LinodesLanding/DeleteLinodeDialog.tsx
@@ -1,5 +1,5 @@
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { Notice } from 'src/components/Notice/Notice';
import { TypeToConfirmDialog } from 'src/components/TypeToConfirmDialog/TypeToConfirmDialog';
diff --git a/packages/manager/src/features/ObjectStorage/BucketDetail/BucketDetail.tsx b/packages/manager/src/features/ObjectStorage/BucketDetail/BucketDetail.tsx
index bf76d4729c7..21aee455a88 100644
--- a/packages/manager/src/features/ObjectStorage/BucketDetail/BucketDetail.tsx
+++ b/packages/manager/src/features/ObjectStorage/BucketDetail/BucketDetail.tsx
@@ -5,10 +5,10 @@ import {
getObjectList,
getObjectURL,
} from '@linode/api-v4/lib/object-storage';
+import { useQueryClient } from '@tanstack/react-query';
import produce from 'immer';
import { useSnackbar } from 'notistack';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
import { useHistory, useLocation, useRouteMatch } from 'react-router-dom';
import { Waypoint } from 'react-waypoint';
import { debounce } from 'throttle-debounce';
@@ -271,7 +271,10 @@ export const BucketDetail = () => {
const dataCopy = [...copy[copy.length - 1].data];
dataCopy.push(object);
- copy[copy.length - 1].data = dataCopy;
+ copy[copy.length - 1] = {
+ ...copy[copy.length - 1],
+ data: dataCopy,
+ };
updateStore(copy);
};
diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsCreateDrawer.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsCreateDrawer.tsx
index 6b2e80cbe58..46c709c88e4 100644
--- a/packages/manager/src/features/PlacementGroups/PlacementGroupsCreateDrawer.tsx
+++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsCreateDrawer.tsx
@@ -2,7 +2,7 @@ import { createPlacementGroupSchema } from '@linode/validation';
import { useFormik } from 'formik';
import { useSnackbar } from 'notistack';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { Drawer } from 'src/components/Drawer';
import { useFormValidateOnChange } from 'src/hooks/useFormValidateOnChange';
diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsRenameDrawer.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsRenameDrawer.tsx
index 1eb03f28b6a..0a898e3b52f 100644
--- a/packages/manager/src/features/PlacementGroups/PlacementGroupsRenameDrawer.tsx
+++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsRenameDrawer.tsx
@@ -2,7 +2,7 @@ import { renamePlacementGroupSchema } from '@linode/validation';
import { useFormik } from 'formik';
import { useSnackbar } from 'notistack';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { Drawer } from 'src/components/Drawer';
import { useFormValidateOnChange } from 'src/hooks/useFormValidateOnChange';
diff --git a/packages/manager/src/features/Profile/APITokens/EditAPITokenDrawer.test.tsx b/packages/manager/src/features/Profile/APITokens/EditAPITokenDrawer.test.tsx
index 03fd219e1e3..05c526a8bf6 100644
--- a/packages/manager/src/features/Profile/APITokens/EditAPITokenDrawer.test.tsx
+++ b/packages/manager/src/features/Profile/APITokens/EditAPITokenDrawer.test.tsx
@@ -42,7 +42,7 @@ describe('Edit API Token Drawer', () => {
await act(async () => {
const labelField = getByTestId('textfield-input');
- userEvent.type(labelField, 'updated-token-label');
+ await userEvent.type(labelField, 'updated-token-label');
const saveButton = getByTestId('save-button');
@@ -58,7 +58,7 @@ describe('Edit API Token Drawer', () => {
await act(async () => {
const labelField = getByTestId('textfield-input');
- userEvent.type(labelField, 'my-token-updated');
+ await userEvent.type(labelField, 'my-token-updated');
const saveButton = getByTestId('save-button');
diff --git a/packages/manager/src/features/Profile/AuthenticationSettings/PhoneVerification/PhoneVerification.tsx b/packages/manager/src/features/Profile/AuthenticationSettings/PhoneVerification/PhoneVerification.tsx
index b1ba84369c3..f2ab35d106b 100644
--- a/packages/manager/src/features/Profile/AuthenticationSettings/PhoneVerification/PhoneVerification.tsx
+++ b/packages/manager/src/features/Profile/AuthenticationSettings/PhoneVerification/PhoneVerification.tsx
@@ -3,7 +3,7 @@ import { useFormik } from 'formik';
import { CountryCode, parsePhoneNumber } from 'libphonenumber-js';
import { useSnackbar } from 'notistack';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { Box } from 'src/components/Box';
import { Button } from 'src/components/Button/Button';
@@ -98,7 +98,7 @@ export const PhoneVerification = ({
);
} else {
// Cloud Manager does not know about the country, so lets refetch the user's phone number so we know it's displaying correctly
- queryClient.invalidateQueries(queryKey);
+ queryClient.invalidateQueries([queryKey]);
}
// reset form states
diff --git a/packages/manager/src/features/Profile/AuthenticationSettings/TwoFactor/TwoFactor.tsx b/packages/manager/src/features/Profile/AuthenticationSettings/TwoFactor/TwoFactor.tsx
index 0d1b89a8c7b..655b8c5c1f7 100644
--- a/packages/manager/src/features/Profile/AuthenticationSettings/TwoFactor/TwoFactor.tsx
+++ b/packages/manager/src/features/Profile/AuthenticationSettings/TwoFactor/TwoFactor.tsx
@@ -1,7 +1,7 @@
import { getTFAToken } from '@linode/api-v4/lib/profile';
import { APIError } from '@linode/api-v4/lib/types';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { StyledLinkButton } from 'src/components/Button/StyledLinkButton';
import { Notice } from 'src/components/Notice/Notice';
@@ -61,7 +61,7 @@ export const TwoFactor = (props: TwoFactorProps) => {
*/
const handleEnableSuccess = (scratchCode: string) => {
// Refetch Profile with React Query so profile is up to date
- queryClient.invalidateQueries(queryKey);
+ queryClient.invalidateQueries([queryKey]);
setSuccess('Two-factor authentication has been enabled.');
setShowQRCode(false);
setTwoFactorEnabled(true);
diff --git a/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.test.tsx b/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.test.tsx
index 6d9de4f6fe6..d6595d73a1e 100644
--- a/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.test.tsx
+++ b/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.test.tsx
@@ -1,7 +1,7 @@
import { Grants, Profile } from '@linode/api-v4/lib';
import { APIError } from '@linode/api-v4/lib/types';
import * as React from 'react';
-import { UseQueryResult } from 'react-query';
+import { UseQueryResult } from '@tanstack/react-query';
import { reactRouterProps } from 'src/__data__/reactRouterProps';
import { imageFactory, normalizeEntities, profileFactory } from 'src/factories';
diff --git a/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.tsx b/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.tsx
index 30c51fa3a6e..f4971810641 100644
--- a/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.tsx
+++ b/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.tsx
@@ -9,7 +9,7 @@ import {
import { APIError } from '@linode/api-v4/lib/types';
import { equals } from 'ramda';
import * as React from 'react';
-import { QueryClient } from 'react-query';
+import { QueryClient } from '@tanstack/react-query';
import { RouteComponentProps, withRouter } from 'react-router-dom';
import { compose } from 'recompose';
import { debounce } from 'throttle-debounce';
@@ -78,7 +78,7 @@ export class StackScriptCreate extends React.Component {
},
} = this.props;
const valuesFromStorage = storage.stackScriptInProgress.get();
- const account = this.props.queryClient.getQueryData('account');
+ const account = this.props.queryClient.getQueryData(['account']);
if (stackScriptID) {
// If we have a stackScriptID we're in the edit flow and
@@ -284,7 +284,7 @@ export class StackScriptCreate extends React.Component {
},
mode,
} = this.props;
- const account = queryClient.getQueryData('account');
+ const account = queryClient.getQueryData(['account']);
if (account) {
// Use the euuid if we're creating to avoid loading another user's data
diff --git a/packages/manager/src/features/Users/UserDetail.tsx b/packages/manager/src/features/Users/UserDetail.tsx
index 8e09a60acea..c12422b3e0a 100644
--- a/packages/manager/src/features/Users/UserDetail.tsx
+++ b/packages/manager/src/features/Users/UserDetail.tsx
@@ -3,7 +3,7 @@ import { updateProfile } from '@linode/api-v4/lib/profile';
import { APIError } from '@linode/api-v4/lib/types';
import { clone } from 'ramda';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import {
matchPath,
useHistory,
diff --git a/packages/manager/src/features/Users/UserPermissions.tsx b/packages/manager/src/features/Users/UserPermissions.tsx
index 70b815f7084..f217a186abe 100644
--- a/packages/manager/src/features/Users/UserPermissions.tsx
+++ b/packages/manager/src/features/Users/UserPermissions.tsx
@@ -14,7 +14,7 @@ import Grid from '@mui/material/Unstable_Grid2';
import { WithSnackbarProps, withSnackbar } from 'notistack';
import { compose, flatten, lensPath, omit, set } from 'ramda';
import * as React from 'react';
-import { QueryClient } from 'react-query';
+import { QueryClient } from '@tanstack/react-query';
import { compose as recompose } from 'recompose';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
@@ -301,7 +301,7 @@ class UserPermissions extends React.Component {
// unconditionally sets this.state.loadingGrants to false
this.getUserGrants();
// refresh the data on /account/users so it is accurate
- this.props.queryClient.invalidateQueries('account-users');
+ this.props.queryClient.invalidateQueries(['account', 'users']);
this.props.enqueueSnackbar('User permissions successfully saved.', {
variant: 'success',
});
diff --git a/packages/manager/src/features/VPCs/VPCDetail/SubnetAssignLinodesDrawer.tsx b/packages/manager/src/features/VPCs/VPCDetail/SubnetAssignLinodesDrawer.tsx
index 16a2eacc7b9..08e97281a50 100644
--- a/packages/manager/src/features/VPCs/VPCDetail/SubnetAssignLinodesDrawer.tsx
+++ b/packages/manager/src/features/VPCs/VPCDetail/SubnetAssignLinodesDrawer.tsx
@@ -143,9 +143,10 @@ export const SubnetAssignLinodesDrawer = (
// Determine the configId based on the number of configurations
function getConfigId(linodeConfigs: Config[], selectedConfig: Config | null) {
return (
- (linodeConfigs.length > 1
- ? selectedConfig?.id // Use selected configuration's id if available
- : linodeConfigs[0]?.id) ?? -1 // Use the first configuration's id or -1 if no configurations
+ // Use the first configuration's id or -1 if no configurations
+ (linodeConfigs.length > 1 // Use selected configuration's id if available
+ ? selectedConfig?.id
+ : linodeConfigs[0]?.id) ?? -1
);
}
diff --git a/packages/manager/src/features/VPCs/VPCDetail/SubnetLinodeRow.tsx b/packages/manager/src/features/VPCs/VPCDetail/SubnetLinodeRow.tsx
index be9474d2da9..0df5ff9bd16 100644
--- a/packages/manager/src/features/VPCs/VPCDetail/SubnetLinodeRow.tsx
+++ b/packages/manager/src/features/VPCs/VPCDetail/SubnetLinodeRow.tsx
@@ -2,7 +2,7 @@ import { APIError, Firewall, Linode } from '@linode/api-v4';
import { Config, Interface } from '@linode/api-v4/lib/linodes/types';
import ErrorOutline from '@mui/icons-material/ErrorOutline';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { Box } from 'src/components/Box';
import { CircleProgress } from 'src/components/CircleProgress';
diff --git a/packages/manager/src/features/VPCs/VPCDetail/SubnetUnassignLinodesDrawer.tsx b/packages/manager/src/features/VPCs/VPCDetail/SubnetUnassignLinodesDrawer.tsx
index 952ad1efdf0..bee06841f95 100644
--- a/packages/manager/src/features/VPCs/VPCDetail/SubnetUnassignLinodesDrawer.tsx
+++ b/packages/manager/src/features/VPCs/VPCDetail/SubnetUnassignLinodesDrawer.tsx
@@ -2,7 +2,7 @@ import { Subnet } from '@linode/api-v4/lib/vpcs/types';
import { Stack, Typography } from '@mui/material';
import { useFormik } from 'formik';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
diff --git a/packages/manager/src/hooks/useEventHandlers.ts b/packages/manager/src/hooks/useEventHandlers.ts
index 73693eceed1..2bd7c2543bd 100644
--- a/packages/manager/src/hooks/useEventHandlers.ts
+++ b/packages/manager/src/hooks/useEventHandlers.ts
@@ -1,4 +1,4 @@
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { oauthClientsEventHandler } from 'src/queries/accountOAuth';
import { databaseEventsHandler } from 'src/queries/databases';
@@ -14,7 +14,7 @@ import { tokenEventHandler } from 'src/queries/tokens';
import { volumeEventsHandler } from 'src/queries/volumes';
import type { Event } from '@linode/api-v4';
-import type { QueryClient } from 'react-query';
+import type { QueryClient } from '@tanstack/react-query';
export interface EventHandlerData {
event: Event;
diff --git a/packages/manager/src/hooks/useInitialRequests.ts b/packages/manager/src/hooks/useInitialRequests.ts
index 804cf1ef7de..c9dfc9d702e 100644
--- a/packages/manager/src/hooks/useInitialRequests.ts
+++ b/packages/manager/src/hooks/useInitialRequests.ts
@@ -1,7 +1,7 @@
import { getAccountInfo, getAccountSettings } from '@linode/api-v4/lib/account';
import { getProfile, getUserPreferences } from '@linode/api-v4/lib/profile';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { useAuthentication } from 'src/hooks/useAuthentication';
import { usePendingUpload } from 'src/hooks/usePendingUpload';
@@ -62,25 +62,25 @@ export const useInitialRequests = () => {
// Fetch user's account information
queryClient.prefetchQuery({
queryFn: getAccountInfo,
- queryKey: accountQueryKey,
+ queryKey: [accountQueryKey],
}),
// Username and whether a user is restricted
queryClient.prefetchQuery({
queryFn: () => getProfile(),
- queryKey: 'profile',
+ queryKey: ['profile'],
}),
// Is a user managed
queryClient.prefetchQuery({
queryFn: getAccountSettings,
- queryKey: 'account-settings',
+ queryKey: ['account', 'settings'],
}),
// preferences
queryClient.prefetchQuery({
queryFn: getUserPreferences,
- queryKey: 'preferences',
+ queryKey: ['preferences'],
}),
];
diff --git a/packages/manager/src/hooks/useOrder.test.tsx b/packages/manager/src/hooks/useOrder.test.tsx
index 94838acd73f..1f6b4e0a559 100644
--- a/packages/manager/src/hooks/useOrder.test.tsx
+++ b/packages/manager/src/hooks/useOrder.test.tsx
@@ -1,5 +1,5 @@
import { act, renderHook, waitFor } from '@testing-library/react';
-import { QueryClient } from 'react-query';
+import { QueryClient } from '@tanstack/react-query';
import { rest, server } from 'src/mocks/testServer';
import { queryClientFactory } from 'src/queries/base';
diff --git a/packages/manager/src/hooks/useUnassignLinode.ts b/packages/manager/src/hooks/useUnassignLinode.ts
index 98b1c18a8e5..197b7b15323 100644
--- a/packages/manager/src/hooks/useUnassignLinode.ts
+++ b/packages/manager/src/hooks/useUnassignLinode.ts
@@ -1,6 +1,6 @@
import { deleteLinodeConfigInterface } from '@linode/api-v4';
import * as React from 'react';
-import { useQueryClient } from 'react-query';
+import { useQueryClient } from '@tanstack/react-query';
import { configQueryKey, interfaceQueryKey } from 'src/queries/linodes/configs';
import { queryKey } from 'src/queries/linodes/linodes';
diff --git a/packages/manager/src/index.tsx b/packages/manager/src/index.tsx
index 34b40de4edc..2486f6a902b 100644
--- a/packages/manager/src/index.tsx
+++ b/packages/manager/src/index.tsx
@@ -2,8 +2,8 @@ import CssBaseline from '@mui/material/CssBaseline';
import 'font-logos/assets/font-logos.css';
import * as React from 'react';
import { createRoot } from 'react-dom/client';
-import { QueryClientProvider } from 'react-query';
-import { ReactQueryDevtools } from 'react-query/devtools';
+import { QueryClientProvider } from '@tanstack/react-query';
+import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
import { Provider as ReduxStoreProvider } from 'react-redux';
import { Route, BrowserRouter as Router, Switch } from 'react-router-dom';
diff --git a/packages/manager/src/queries/account.ts b/packages/manager/src/queries/account.ts
index e18ff88aff4..2706f154ab7 100644
--- a/packages/manager/src/queries/account.ts
+++ b/packages/manager/src/queries/account.ts
@@ -10,7 +10,7 @@ import {
useMutation,
useQuery,
useQueryClient,
-} from 'react-query';
+} from '@tanstack/react-query';
import { useGrants, useProfile } from 'src/queries/profile';
@@ -30,7 +30,7 @@ export const queryKey = 'account';
export const useAccount = () => {
const { data: profile } = useProfile();
- return useQuery(queryKey, getAccountInfo, {
+ return useQuery([queryKey], getAccountInfo, {
...queryPresets.oneTimeFetch,
...queryPresets.noRetry,
enabled: !profile?.restricted,
@@ -42,7 +42,7 @@ export const useMutateAccount = () => {
return useMutation>(updateAccountInfo, {
onSuccess(account) {
- queryClient.setQueryData(queryKey, account);
+ queryClient.setQueryData([queryKey], account);
},
});
};
diff --git a/packages/manager/src/queries/accountAgreements.ts b/packages/manager/src/queries/accountAgreements.ts
index f631f21dc56..af37ec18a11 100644
--- a/packages/manager/src/queries/accountAgreements.ts
+++ b/packages/manager/src/queries/accountAgreements.ts
@@ -4,20 +4,18 @@ import {
signAgreement,
} from '@linode/api-v4/lib/account';
import { APIError } from '@linode/api-v4/lib/types';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { reportException } from 'src/exceptionReporting';
import { useProfile } from 'src/queries/profile';
import { queryPresets, simpleMutationHandlers } from './base';
-export const accountAgreementsQueryKey = 'account-agreements';
-
export const useAccountAgreements = (enabled?: boolean) => {
const { data: profile } = useProfile();
return useQuery(
- accountAgreementsQueryKey,
+ ['account', 'agreements'],
getAccountAgreements,
{
...queryPresets.oneTimeFetch,
@@ -35,7 +33,7 @@ export const useMutateAccountAgreements = () => {
return useMutation<{}, APIError[], Partial>(
(data) => signAgreement(data),
simpleMutationHandlers>(
- accountAgreementsQueryKey,
+ ['account', 'agreements'],
queryClient
)
);
diff --git a/packages/manager/src/queries/accountAvailability.ts b/packages/manager/src/queries/accountAvailability.ts
index fd7318fab16..fbd3923fc5e 100644
--- a/packages/manager/src/queries/accountAvailability.ts
+++ b/packages/manager/src/queries/accountAvailability.ts
@@ -9,7 +9,7 @@ import {
Params,
ResourcePage,
} from '@linode/api-v4/lib/types';
-import { useQuery } from 'react-query';
+import { useQuery } from '@tanstack/react-query';
import { getAll } from 'src/utilities/getAll';
diff --git a/packages/manager/src/queries/accountBetas.ts b/packages/manager/src/queries/accountBetas.ts
index 733e49e6b4d..70545c1412e 100644
--- a/packages/manager/src/queries/accountBetas.ts
+++ b/packages/manager/src/queries/accountBetas.ts
@@ -11,7 +11,7 @@ import {
Params,
ResourcePage,
} from '@linode/api-v4/lib/types';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
export const queryKey = 'account-betas';
diff --git a/packages/manager/src/queries/accountBilling.ts b/packages/manager/src/queries/accountBilling.ts
index 3258bcd064f..c0fdf606401 100644
--- a/packages/manager/src/queries/accountBilling.ts
+++ b/packages/manager/src/queries/accountBilling.ts
@@ -5,7 +5,7 @@ import {
getPayments,
} from '@linode/api-v4/lib/account';
import { APIError, Filter, Params } from '@linode/api-v4/lib/types';
-import { useQuery } from 'react-query';
+import { useQuery } from '@tanstack/react-query';
import { getAll } from 'src/utilities/getAll';
diff --git a/packages/manager/src/queries/accountLogins.ts b/packages/manager/src/queries/accountLogins.ts
index f1021e6dbec..6de9ebb3db3 100644
--- a/packages/manager/src/queries/accountLogins.ts
+++ b/packages/manager/src/queries/accountLogins.ts
@@ -5,7 +5,7 @@ import {
Params,
ResourcePage,
} from '@linode/api-v4/lib/types';
-import { useQuery } from 'react-query';
+import { useQuery } from '@tanstack/react-query';
export const queryKey = 'account-login';
diff --git a/packages/manager/src/queries/accountMaintenance.ts b/packages/manager/src/queries/accountMaintenance.ts
index 4111d89981e..4838b5cbca7 100644
--- a/packages/manager/src/queries/accountMaintenance.ts
+++ b/packages/manager/src/queries/accountMaintenance.ts
@@ -6,7 +6,7 @@ import {
Params,
ResourcePage,
} from '@linode/api-v4/lib/types';
-import { useQuery } from 'react-query';
+import { useQuery } from '@tanstack/react-query';
import { getAll } from 'src/utilities/getAll';
diff --git a/packages/manager/src/queries/accountNotifications.ts b/packages/manager/src/queries/accountNotifications.ts
index c53eb9dfffb..cf1fecd896c 100644
--- a/packages/manager/src/queries/accountNotifications.ts
+++ b/packages/manager/src/queries/accountNotifications.ts
@@ -1,5 +1,5 @@
import { APIError, Notification, getNotifications } from '@linode/api-v4';
-import { useQuery } from 'react-query';
+import { useQuery } from '@tanstack/react-query';
import { getAll } from 'src/utilities/getAll';
diff --git a/packages/manager/src/queries/accountOAuth.ts b/packages/manager/src/queries/accountOAuth.ts
index 23277144230..3a8d610809e 100644
--- a/packages/manager/src/queries/accountOAuth.ts
+++ b/packages/manager/src/queries/accountOAuth.ts
@@ -10,7 +10,7 @@ import {
resetOAuthClientSecret,
updateOAuthClient,
} from '@linode/api-v4';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { EventHandlerData } from 'src/hooks/useEventHandlers';
diff --git a/packages/manager/src/queries/accountPayment.ts b/packages/manager/src/queries/accountPayment.ts
index b17c5922ee7..caeb188bc42 100644
--- a/packages/manager/src/queries/accountPayment.ts
+++ b/packages/manager/src/queries/accountPayment.ts
@@ -10,7 +10,7 @@ import {
Params,
ResourcePage,
} from '@linode/api-v4/lib/types';
-import { useQuery } from 'react-query';
+import { useQuery } from '@tanstack/react-query';
import { useGrants } from 'src/queries/profile';
import { getAll } from 'src/utilities/getAll';
@@ -36,7 +36,7 @@ export const useAllPaymentMethodsQuery = () => {
const { data: grants } = useGrants();
return useQuery(
- queryKey + '-all',
+ [queryKey + '-all'],
getAllPaymentMethodsRequest,
{
...queryPresets.oneTimeFetch,
@@ -56,7 +56,7 @@ export const getAllPaymentMethodsRequest = () =>
export const useClientToken = () =>
useQuery(
- queryKey + '-client-token',
+ [queryKey + '-client-token'],
getClientToken,
queryPresets.longLived
);
diff --git a/packages/manager/src/queries/accountSettings.ts b/packages/manager/src/queries/accountSettings.ts
index c49c42143c0..5bfbfa35a0a 100644
--- a/packages/manager/src/queries/accountSettings.ts
+++ b/packages/manager/src/queries/accountSettings.ts
@@ -9,22 +9,24 @@ import {
useMutation,
useQuery,
useQueryClient,
-} from 'react-query';
+} from '@tanstack/react-query';
import { useProfile } from 'src/queries/profile';
import { queryPresets } from './base';
-export const queryKey = 'account-settings';
-
export const useAccountSettings = () => {
const { data: profile } = useProfile();
- return useQuery(queryKey, getAccountSettings, {
- ...queryPresets.oneTimeFetch,
- ...queryPresets.noRetry,
- enabled: !profile?.restricted,
- });
+ return useQuery(
+ ['account', 'settings'],
+ getAccountSettings,
+ {
+ ...queryPresets.oneTimeFetch,
+ ...queryPresets.noRetry,
+ enabled: !profile?.restricted,
+ }
+ );
};
export const useMutateAccountSettings = () => {
@@ -48,8 +50,11 @@ export const updateAccountSettingsData = (
newData: Partial,
queryClient: QueryClient
): void => {
- queryClient.setQueryData(queryKey, (oldData: AccountSettings) => ({
- ...oldData,
- ...newData,
- }));
+ queryClient.setQueryData(
+ ['account', 'settings'],
+ (oldData: AccountSettings) => ({
+ ...oldData,
+ ...newData,
+ })
+ );
};
diff --git a/packages/manager/src/queries/accountTransfer.ts b/packages/manager/src/queries/accountTransfer.ts
index 63688e7cbe8..83f371bcbe0 100644
--- a/packages/manager/src/queries/accountTransfer.ts
+++ b/packages/manager/src/queries/accountTransfer.ts
@@ -3,13 +3,13 @@ import {
getNetworkUtilization,
} from '@linode/api-v4/lib/account';
import { APIError } from '@linode/api-v4/lib/types';
-import { useQuery } from 'react-query';
+import { useQuery } from '@tanstack/react-query';
import { queryPresets } from './base';
export const useAccountTransfer = () =>
useQuery(
- 'network-utilization',
+ ['network-utilization'],
getNetworkUtilization,
queryPresets.oneTimeFetch
);
diff --git a/packages/manager/src/queries/accountUsers.ts b/packages/manager/src/queries/accountUsers.ts
index c22de8fcc84..7aa005f3ab9 100644
--- a/packages/manager/src/queries/accountUsers.ts
+++ b/packages/manager/src/queries/accountUsers.ts
@@ -4,7 +4,7 @@ import {
getUser,
getUsers,
} from '@linode/api-v4/lib/account';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { useProfile } from 'src/queries/profile';
diff --git a/packages/manager/src/queries/aclb/certificates.ts b/packages/manager/src/queries/aclb/certificates.ts
index d3fc0db024c..840dc4537ea 100644
--- a/packages/manager/src/queries/aclb/certificates.ts
+++ b/packages/manager/src/queries/aclb/certificates.ts
@@ -10,7 +10,7 @@ import {
useMutation,
useQuery,
useQueryClient,
-} from 'react-query';
+} from '@tanstack/react-query';
import { QUERY_KEY } from './loadbalancers';
diff --git a/packages/manager/src/queries/aclb/configurations.ts b/packages/manager/src/queries/aclb/configurations.ts
index 3e27c543c7d..8c7dfe347ce 100644
--- a/packages/manager/src/queries/aclb/configurations.ts
+++ b/packages/manager/src/queries/aclb/configurations.ts
@@ -10,7 +10,7 @@ import {
useMutation,
useQuery,
useQueryClient,
-} from 'react-query';
+} from '@tanstack/react-query';
import { QUERY_KEY } from './loadbalancers';
diff --git a/packages/manager/src/queries/aclb/loadbalancers.ts b/packages/manager/src/queries/aclb/loadbalancers.ts
index 69d065c2c54..b46215e267f 100644
--- a/packages/manager/src/queries/aclb/loadbalancers.ts
+++ b/packages/manager/src/queries/aclb/loadbalancers.ts
@@ -7,7 +7,7 @@ import {
getLoadbalancers,
updateLoadbalancer,
} from '@linode/api-v4';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import type {
APIError,
diff --git a/packages/manager/src/queries/aclb/routes.ts b/packages/manager/src/queries/aclb/routes.ts
index a91cd3bebf7..2769d9846d3 100644
--- a/packages/manager/src/queries/aclb/routes.ts
+++ b/packages/manager/src/queries/aclb/routes.ts
@@ -10,7 +10,7 @@ import {
useMutation,
useQuery,
useQueryClient,
-} from 'react-query';
+} from '@tanstack/react-query';
import { updateInPaginatedStore } from '../base';
import { QUERY_KEY } from './loadbalancers';
diff --git a/packages/manager/src/queries/aclb/serviceTargets.ts b/packages/manager/src/queries/aclb/serviceTargets.ts
index 4e5b0ad3ad3..535c89e5a06 100644
--- a/packages/manager/src/queries/aclb/serviceTargets.ts
+++ b/packages/manager/src/queries/aclb/serviceTargets.ts
@@ -10,7 +10,7 @@ import {
useMutation,
useQuery,
useQueryClient,
-} from 'react-query';
+} from '@tanstack/react-query';
import { QUERY_KEY } from './loadbalancers';
diff --git a/packages/manager/src/queries/base.ts b/packages/manager/src/queries/base.ts
index 2855299eb4d..69cb1a482a0 100644
--- a/packages/manager/src/queries/base.ts
+++ b/packages/manager/src/queries/base.ts
@@ -5,7 +5,7 @@ import {
QueryKey,
UseMutationOptions,
UseQueryOptions,
-} from 'react-query';
+} from '@tanstack/react-query';
// =============================================================================
// Config
@@ -70,7 +70,7 @@ export const listToItemsByID = (
};
export const mutationHandlers = (
- queryKey: string,
+ queryKey: QueryKey,
indexer: string = 'id',
queryClient: QueryClient
): UseMutationOptions void> => {
@@ -86,7 +86,7 @@ export const mutationHandlers = (
};
export const simpleMutationHandlers = (
- queryKey: string,
+ queryKey: QueryKey,
queryClient: QueryClient
): UseMutationOptions void> => {
return {
@@ -100,7 +100,7 @@ export const simpleMutationHandlers = (
};
export const creationHandlers = (
- queryKey: string,
+ queryKey: QueryKey,
indexer: string = 'id',
queryClient: QueryClient
): UseMutationOptions void> => {
@@ -116,7 +116,7 @@ export const creationHandlers = (
};
export const deletionHandlers = (
- queryKey: string,
+ queryKey: QueryKey,
indexer: string = 'id',
queryClient: QueryClient
): UseMutationOptions void> => {
diff --git a/packages/manager/src/queries/betas.ts b/packages/manager/src/queries/betas.ts
index 4d199c808e2..19cf23a7a5f 100644
--- a/packages/manager/src/queries/betas.ts
+++ b/packages/manager/src/queries/betas.ts
@@ -1,5 +1,5 @@
import { Beta, getBetas, getBeta } from '@linode/api-v4/lib/betas';
-import { useQuery } from 'react-query';
+import { useQuery } from '@tanstack/react-query';
import {
APIError,
Filter,
diff --git a/packages/manager/src/queries/databases.ts b/packages/manager/src/queries/databases.ts
index a17e46f3daf..57133d704ab 100644
--- a/packages/manager/src/queries/databases.ts
+++ b/packages/manager/src/queries/databases.ts
@@ -35,7 +35,7 @@ import {
useMutation,
useQuery,
useQueryClient,
-} from 'react-query';
+} from '@tanstack/react-query';
import { EventHandlerData } from 'src/hooks/useEventHandlers';
import { getAll } from 'src/utilities/getAll';
@@ -66,7 +66,7 @@ export const useDatabasesQuery = (params: Params, filter: Filter) =>
export const useAllDatabasesQuery = (enabled: boolean = true) =>
useQuery(
- `${queryKey}-all-list`,
+ [`${queryKey}-all-list`],
getAllDatabases,
{ enabled }
);
@@ -86,7 +86,7 @@ export const useDatabaseMutation = (engine: Engine, id: number) => {
if (oldEntity.label !== data.label) {
updateInPaginatedStore(
- `${queryKey}-list`,
+ [`${queryKey}-list`],
id,
{
label: data.label,
@@ -112,7 +112,7 @@ export const useCreateDatabaseMutation = () => {
// Invalidate useDatabasesQuery to show include the new database.
// We choose to refetch insted of manually mutate the cache because it
// is API paginated.
- queryClient.invalidateQueries(`${queryKey}-list`);
+ queryClient.invalidateQueries([`${queryKey}-list`]);
// Add database to the cache
queryClient.setQueryData([queryKey, data.id], data);
// If a restricted user creates an entity, we must make sure grants are up to date.
@@ -129,7 +129,7 @@ export const useDeleteDatabaseMutation = (engine: Engine, id: number) => {
// Invalidate useDatabasesQuery to remove the deleted database.
// We choose to refetch insted of manually mutate the cache because it
// is API paginated.
- queryClient.invalidateQueries(`${queryKey}-list`);
+ queryClient.invalidateQueries([`${queryKey}-list`]);
},
});
};
@@ -152,7 +152,7 @@ export const getAllDatabaseEngines = () =>
export const useDatabaseEnginesQuery = (enabled: boolean = false) =>
useQuery(
- `${queryKey}-versions`,
+ [`${queryKey}-versions`],
getAllDatabaseEngines,
{ enabled }
);
@@ -164,7 +164,7 @@ export const getAllDatabaseTypes = () =>
export const useDatabaseTypesQuery = () =>
useQuery(
- `${queryKey}-types`,
+ [`${queryKey}-types`],
getAllDatabaseTypes
);
@@ -174,7 +174,7 @@ export const useDatabaseCredentialsQuery = (
enabled: boolean = false
) =>
useQuery(
- [`${queryKey}-credentials`, id],
+ [queryKey, 'credentials', id],
() => getDatabaseCredentials(engine, id),
{ ...queryPresets.oneTimeFetch, enabled }
);
@@ -185,8 +185,8 @@ export const useDatabaseCredentialsMutation = (engine: Engine, id: number) => {
() => resetDatabaseCredentials(engine, id),
{
onSuccess: () => {
- queryClient.invalidateQueries([`${queryKey}-credentials`, id]);
- queryClient.removeQueries([`${queryKey}-credentials`, id]);
+ queryClient.invalidateQueries([queryKey, 'credentials', id]);
+ queryClient.removeQueries([queryKey, 'credentials', id]);
},
}
);
@@ -225,7 +225,7 @@ export const databaseEventsHandler = (event: EventHandlerData) => {
// Database status will change from `provisioning` to `active` (or `failed`) and
// the host fields will populate. We need to refetch to get the hostnames.
queryClient.invalidateQueries([queryKey, entity!.id]);
- queryClient.invalidateQueries(`${queryKey}-list`);
+ queryClient.invalidateQueries([`${queryKey}-list`]);
case 'notification':
// In this case, the API let us know the user initialized a Database create event.
// We use this logic for the case a user created a Database from outside Cloud Manager,
@@ -235,7 +235,7 @@ export const databaseEventsHandler = (event: EventHandlerData) => {
entity!.id,
]);
if (!storedDatabase) {
- queryClient.invalidateQueries(`${queryKey}-list`);
+ queryClient.invalidateQueries([`${queryKey}-list`]);
}
case 'scheduled':
case 'started':
@@ -250,7 +250,7 @@ const updateStoreForDatabase = (
queryClient: QueryClient
) => {
updateDatabaseStore(id, data, queryClient);
- updateInPaginatedStore(`${queryKey}-list`, id, data, queryClient);
+ updateInPaginatedStore([`${queryKey}-list`], id, data, queryClient);
};
const updateDatabaseStore = (
diff --git a/packages/manager/src/queries/domains.ts b/packages/manager/src/queries/domains.ts
index fe57b612bfc..66644bc4e4c 100644
--- a/packages/manager/src/queries/domains.ts
+++ b/packages/manager/src/queries/domains.ts
@@ -20,7 +20,7 @@ import {
Params,
ResourcePage,
} from '@linode/api-v4/lib/types';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { getAll } from 'src/utilities/getAll';
diff --git a/packages/manager/src/queries/entityTransfers.ts b/packages/manager/src/queries/entityTransfers.ts
index 18b5eb2017e..a0dfee17111 100644
--- a/packages/manager/src/queries/entityTransfers.ts
+++ b/packages/manager/src/queries/entityTransfers.ts
@@ -6,7 +6,7 @@ import {
getEntityTransfers,
} from '@linode/api-v4/lib/entity-transfers';
import { APIError, Filter, Params } from '@linode/api-v4/lib/types';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { useProfile } from 'src/queries/profile';
@@ -75,6 +75,6 @@ export const useCreateTransfer = () => {
(createData) => {
return createEntityTransfer(createData);
},
- creationHandlers(queryKey, 'token', queryClient)
+ creationHandlers([queryKey], 'token', queryClient)
);
};
diff --git a/packages/manager/src/queries/events/events.ts b/packages/manager/src/queries/events/events.ts
index 2ef13ec33fe..5e8554cd756 100644
--- a/packages/manager/src/queries/events/events.ts
+++ b/packages/manager/src/queries/events/events.ts
@@ -9,7 +9,7 @@ import {
useMutation,
useQuery,
useQueryClient,
-} from 'react-query';
+} from '@tanstack/react-query';
import { ISO_DATETIME_NO_TZ_FORMAT, POLLING_INTERVALS } from 'src/constants';
import { useEventHandlers } from 'src/hooks/useEventHandlers';
diff --git a/packages/manager/src/queries/firewalls.ts b/packages/manager/src/queries/firewalls.ts
index 2cb17838ee0..f38d81cb532 100644
--- a/packages/manager/src/queries/firewalls.ts
+++ b/packages/manager/src/queries/firewalls.ts
@@ -20,7 +20,7 @@ import {
Params,
ResourcePage,
} from '@linode/api-v4/lib/types';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { EventHandlerData } from 'src/hooks/useEventHandlers';
import { queryKey as linodesQueryKey } from 'src/queries/linodes/linodes';
diff --git a/packages/manager/src/queries/images.ts b/packages/manager/src/queries/images.ts
index 4da791e952e..f81ad4c3524 100644
--- a/packages/manager/src/queries/images.ts
+++ b/packages/manager/src/queries/images.ts
@@ -21,7 +21,7 @@ import {
useMutation,
useQuery,
useQueryClient,
-} from 'react-query';
+} from '@tanstack/react-query';
import { getAll } from 'src/utilities/getAll';
@@ -53,7 +53,7 @@ export const useCreateImageMutation = () => {
},
{
onSuccess() {
- queryClient.invalidateQueries(`${queryKey}-list`);
+ queryClient.invalidateQueries([`${queryKey}-list`]);
// If a restricted user creates an entity, we must make sure grants are up to date.
queryClient.invalidateQueries([PROFILE_QUERY_KEY, 'grants']);
},
@@ -74,7 +74,7 @@ export const useUpdateImageMutation = () => {
{
onSuccess(image) {
updateInPaginatedStore(
- `${queryKey}-list`,
+ [`${queryKey}-list`],
image.id,
image,
queryClient
@@ -91,7 +91,7 @@ export const useDeleteImageMutation = () => {
({ imageId }) => deleteImage(imageId),
{
onSuccess() {
- queryClient.invalidateQueries(`${queryKey}-list`);
+ queryClient.invalidateQueries([`${queryKey}-list`]);
},
}
);
@@ -99,7 +99,7 @@ export const useDeleteImageMutation = () => {
// Remove Image from cache
export const removeImageFromCache = (queryClient: QueryClient) =>
- queryClient.invalidateQueries(`${queryKey}-list`);
+ queryClient.invalidateQueries([`${queryKey}-list`]);
// Get all Images
export const getAllImages = (
@@ -133,18 +133,18 @@ export const imageEventsHandler = ({
const { action, entity, status } = event;
// Keep the getAll query up to date so that when we have to use it, it contains accurate data
- queryClient.invalidateQueries(`${queryKey}-all`);
+ queryClient.invalidateQueries([`${queryKey}-all`]);
switch (action) {
case 'image_delete':
if (
doesItemExistInPaginatedStore(
- `${queryKey}-list`,
+ [`${queryKey}-list`],
entity!.id,
queryClient
)
) {
- queryClient.invalidateQueries(`${queryKey}-list`);
+ queryClient.invalidateQueries([`${queryKey}-list`]);
}
return;
@@ -155,7 +155,7 @@ export const imageEventsHandler = ({
case 'disk_imagize':
if (status === 'failed' && event.secondary_entity) {
updateInPaginatedStore(
- `${queryKey}-list`,
+ [`${queryKey}-list`],
event.secondary_entity.id,
{},
queryClient
@@ -168,7 +168,7 @@ export const imageEventsHandler = ({
event.secondary_entity
) {
updateInPaginatedStore(
- `${queryKey}-list`,
+ [`${queryKey}-list`],
`private/${event.secondary_entity.id}`,
{
status: 'available',
@@ -184,7 +184,7 @@ export const imageEventsHandler = ({
(async () =>
await getImage(`private/${event.entity?.id}`).then(() => {
updateInPaginatedStore(
- `${queryKey}-list`,
+ [`${queryKey}-list`],
`private/${event.entity?.id}`,
{
status: 'available',
diff --git a/packages/manager/src/queries/kubernetes.ts b/packages/manager/src/queries/kubernetes.ts
index 6e942e6dbbb..2c2e23b5a9a 100644
--- a/packages/manager/src/queries/kubernetes.ts
+++ b/packages/manager/src/queries/kubernetes.ts
@@ -31,7 +31,7 @@ import {
Params,
ResourcePage,
} from '@linode/api-v4/lib/types';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { getAll } from 'src/utilities/getAll';
@@ -62,7 +62,7 @@ export const useKubernetesClusterMutation = (id: number) => {
{
onSuccess(data) {
updateInPaginatedStore(
- `${queryKey}-list`,
+ [`${queryKey}-list`],
id,
data,
queryClient
diff --git a/packages/manager/src/queries/linodes/actions.ts b/packages/manager/src/queries/linodes/actions.ts
index 4d3982c0678..8d3156f8741 100644
--- a/packages/manager/src/queries/linodes/actions.ts
+++ b/packages/manager/src/queries/linodes/actions.ts
@@ -1,5 +1,5 @@
import { APIError, startMutation } from '@linode/api-v4';
-import { useMutation, useQueryClient } from 'react-query';
+import { useMutation, useQueryClient } from '@tanstack/react-query';
import { queryKey } from './linodes';
diff --git a/packages/manager/src/queries/linodes/backups.ts b/packages/manager/src/queries/linodes/backups.ts
index d0f9a0edc40..8885c3c0131 100644
--- a/packages/manager/src/queries/linodes/backups.ts
+++ b/packages/manager/src/queries/linodes/backups.ts
@@ -7,7 +7,7 @@ import {
restoreBackup,
takeSnapshot,
} from '@linode/api-v4';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { queryKey } from './linodes';
diff --git a/packages/manager/src/queries/linodes/configs.ts b/packages/manager/src/queries/linodes/configs.ts
index 4c09ccc06be..12e5b05357e 100644
--- a/packages/manager/src/queries/linodes/configs.ts
+++ b/packages/manager/src/queries/linodes/configs.ts
@@ -16,7 +16,7 @@ import {
updateLinodeConfig,
updateLinodeConfigOrder,
} from '@linode/api-v4';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { queryKey } from './linodes';
import { getAllLinodeConfigs } from './requests';
diff --git a/packages/manager/src/queries/linodes/disks.ts b/packages/manager/src/queries/linodes/disks.ts
index b9357d5df47..09a5e1bd20a 100644
--- a/packages/manager/src/queries/linodes/disks.ts
+++ b/packages/manager/src/queries/linodes/disks.ts
@@ -9,7 +9,7 @@ import {
resizeLinodeDisk,
updateLinodeDisk,
} from '@linode/api-v4';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { getAll } from 'src/utilities/getAll';
diff --git a/packages/manager/src/queries/linodes/firewalls.ts b/packages/manager/src/queries/linodes/firewalls.ts
index c9b9293add3..47e16d087a4 100644
--- a/packages/manager/src/queries/linodes/firewalls.ts
+++ b/packages/manager/src/queries/linodes/firewalls.ts
@@ -4,7 +4,7 @@ import {
ResourcePage,
getLinodeFirewalls,
} from '@linode/api-v4';
-import { useQuery } from 'react-query';
+import { useQuery } from '@tanstack/react-query';
import { queryPresets } from '../base';
import { queryKey } from './linodes';
diff --git a/packages/manager/src/queries/linodes/linodes.ts b/packages/manager/src/queries/linodes/linodes.ts
index aed5a974fcd..de623245f43 100644
--- a/packages/manager/src/queries/linodes/linodes.ts
+++ b/packages/manager/src/queries/linodes/linodes.ts
@@ -34,7 +34,7 @@ import {
useMutation,
useQuery,
useQueryClient,
-} from 'react-query';
+} from '@tanstack/react-query';
import { manuallySetVPCConfigInterfacesToActive } from 'src/utilities/configs';
diff --git a/packages/manager/src/queries/linodes/networking.ts b/packages/manager/src/queries/linodes/networking.ts
index f78b100f3db..0205ad3ad7f 100644
--- a/packages/manager/src/queries/linodes/networking.ts
+++ b/packages/manager/src/queries/linodes/networking.ts
@@ -26,7 +26,7 @@ import {
useMutation,
useQuery,
useQueryClient,
-} from 'react-query';
+} from '@tanstack/react-query';
import { queryKey } from './linodes';
import { getAllIPv6Ranges, getAllIps } from './requests';
diff --git a/packages/manager/src/queries/linodes/stats.ts b/packages/manager/src/queries/linodes/stats.ts
index 8679e3fb0e3..0884d635ece 100644
--- a/packages/manager/src/queries/linodes/stats.ts
+++ b/packages/manager/src/queries/linodes/stats.ts
@@ -7,7 +7,7 @@ import {
getLinodeTransferByDate,
} from '@linode/api-v4';
import { DateTime } from 'luxon';
-import { useQuery } from 'react-query';
+import { useQuery } from '@tanstack/react-query';
import { parseAPIDate } from 'src/utilities/date';
diff --git a/packages/manager/src/queries/managed/managed.ts b/packages/manager/src/queries/managed/managed.ts
index 71662f3e051..166c868e75b 100644
--- a/packages/manager/src/queries/managed/managed.ts
+++ b/packages/manager/src/queries/managed/managed.ts
@@ -34,7 +34,7 @@ import {
updateServiceMonitor,
} from '@linode/api-v4/lib/managed';
import { APIError } from '@linode/api-v4/lib/types';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { getAll } from 'src/utilities/getAll';
@@ -51,14 +51,14 @@ export const queryKey = 'managed';
export const useManagedSSHKey = () =>
useQuery(
- `${queryKey}-ssh-key`,
+ [queryKey, 'public-ssh-key'],
getSSHPubKey,
queryPresets.oneTimeFetch
);
export const useAllLinodeSettingsQuery = () =>
useQuery(
- `${queryKey}-linode-settings`,
+ [queryKey, 'linode-settings'],
getAllLinodeSettings,
{
// A Linode may have been created or deleted since the last visit.
@@ -68,26 +68,26 @@ export const useAllLinodeSettingsQuery = () =>
export const useAllManagedCredentialsQuery = () =>
useQuery(
- `${queryKey}-credentials`,
+ [queryKey, 'credentials'],
getAllCredentials,
queryPresets.oneTimeFetch
);
export const useAllManagedContactsQuery = () =>
useQuery(
- `${queryKey}-contacts`,
+ [queryKey, 'contacts'],
getAllContacts,
queryPresets.oneTimeFetch
);
export const useAllManagedIssuesQuery = () =>
- useQuery(`${queryKey}-issues`, getAllIssues, {
+ useQuery([queryKey, 'issues'], getAllIssues, {
refetchInterval: 20000,
});
export const useAllManagedMonitorsQuery = () =>
useQuery(
- `${queryKey}-monitors`,
+ [queryKey, 'monitors'],
getAllMonitors,
{
refetchInterval: 20000,
@@ -95,7 +95,7 @@ export const useAllManagedMonitorsQuery = () =>
);
export const useManagedStatsQuery = () =>
- useQuery(`${queryKey}-stats`, getManagedStats, {
+ useQuery([queryKey, 'stats'], getManagedStats, {
...queryPresets.shortLived,
retry: false,
});
@@ -104,7 +104,7 @@ export const useDeleteMonitorMutation = () => {
const queryClient = useQueryClient();
return useMutation<{}, APIError[], { id: number }>(
({ id }) => deleteServiceMonitor(id),
- itemInListDeletionHandler(`${queryKey}-monitors`, queryClient)
+ itemInListDeletionHandler([queryKey, 'monitors'], queryClient)
);
};
@@ -112,7 +112,7 @@ export const useCreateMonitorMutation = () => {
const queryClient = useQueryClient();
return useMutation(
createServiceMonitor,
- itemInListCreationHandler(`${queryKey}-monitors`, queryClient)
+ itemInListCreationHandler([queryKey, 'monitors'], queryClient)
);
};
@@ -124,7 +124,7 @@ export const useUpdateMonitorMutation = (id: number) => {
Partial
>(
(data) => updateServiceMonitor(id, data),
- itemInListMutationHandler(`${queryKey}-monitors`, queryClient)
+ itemInListMutationHandler([queryKey, 'monitors'], queryClient)
);
};
@@ -132,7 +132,7 @@ export const useCreateCredentialMutation = () => {
const queryClient = useQueryClient();
return useMutation(
createCredential,
- itemInListCreationHandler(`${queryKey}-credentials`, queryClient)
+ itemInListCreationHandler([queryKey, 'credentials'], queryClient)
);
};
@@ -145,7 +145,7 @@ export const useUpdateCredentialMutation = (id: number) => {
const queryClient = useQueryClient();
return useMutation(
(data) => updateCredential(id, data),
- itemInListMutationHandler(`${queryKey}-credentials`, queryClient)
+ itemInListMutationHandler([queryKey, 'credentials'], queryClient)
);
};
@@ -153,7 +153,7 @@ export const useDeleteCredentialMutation = () => {
const queryClient = useQueryClient();
return useMutation<{}, APIError[], { id: number }>(
({ id }) => deleteCredential(id),
- itemInListDeletionHandler(`${queryKey}-credentials`, queryClient)
+ itemInListDeletionHandler([queryKey, 'credentials'], queryClient)
);
};
@@ -161,7 +161,7 @@ export const useCreateContactMutation = () => {
const queryClient = useQueryClient();
return useMutation(
createContact,
- itemInListCreationHandler(`${queryKey}-contacts`, queryClient)
+ itemInListCreationHandler([queryKey, 'contacts'], queryClient)
);
};
@@ -169,7 +169,7 @@ export const useDeleteContactMutation = () => {
const queryClient = useQueryClient();
return useMutation<{}, APIError[], { id: number }>(
({ id }) => deleteContact(id),
- itemInListDeletionHandler(`${queryKey}-contacts`, queryClient)
+ itemInListDeletionHandler([queryKey, 'contacts'], queryClient)
);
};
@@ -177,7 +177,7 @@ export const useUpdateContactMutation = (id: number) => {
const queryClient = useQueryClient();
return useMutation>(
(data) => updateContact(id, data),
- itemInListMutationHandler(`${queryKey}-contacts`, queryClient)
+ itemInListMutationHandler([queryKey, 'contacts'], queryClient)
);
};
@@ -189,7 +189,7 @@ export const useUpdateLinodeSettingsMutation = (id: number) => {
{ ssh: Partial }
>(
(data) => updateLinodeSettings(id, data),
- itemInListMutationHandler(`${queryKey}-linode-settings`, queryClient)
+ itemInListMutationHandler([queryKey, 'linode-settings'], queryClient)
);
};
@@ -197,7 +197,7 @@ export const useEnableMonitorMutation = (id: number) => {
const queryClient = useQueryClient();
return useMutation(
() => enableServiceMonitor(id),
- itemInListMutationHandler(`${queryKey}-monitors`, queryClient)
+ itemInListMutationHandler([queryKey, 'monitors'], queryClient)
);
};
@@ -205,7 +205,7 @@ export const useDisableMonitorMutation = (id: number) => {
const queryClient = useQueryClient();
return useMutation(
() => disableServiceMonitor(id),
- itemInListMutationHandler(`${queryKey}-monitors`, queryClient)
+ itemInListMutationHandler([queryKey, 'monitors'], queryClient)
);
};
diff --git a/packages/manager/src/queries/nodebalancers.ts b/packages/manager/src/queries/nodebalancers.ts
index dc11cf2a47d..6acb041d798 100644
--- a/packages/manager/src/queries/nodebalancers.ts
+++ b/packages/manager/src/queries/nodebalancers.ts
@@ -29,7 +29,7 @@ import {
useMutation,
useQuery,
useQueryClient,
-} from 'react-query';
+} from '@tanstack/react-query';
import { EventHandlerData } from 'src/hooks/useEventHandlers';
import { queryKey as firewallsQueryKey } from 'src/queries/firewalls';
diff --git a/packages/manager/src/queries/objectStorage.ts b/packages/manager/src/queries/objectStorage.ts
index b5fe4bc750a..88ab970d800 100644
--- a/packages/manager/src/queries/objectStorage.ts
+++ b/packages/manager/src/queries/objectStorage.ts
@@ -30,12 +30,11 @@ import {
useMutation,
useQuery,
useQueryClient,
-} from 'react-query';
+} from '@tanstack/react-query';
import { OBJECT_STORAGE_DELIMITER as delimiter } from 'src/constants';
import { getAll } from 'src/utilities/getAll';
-import { queryKey as accountSettingsQueryKey } from './accountSettings';
import { queryPresets } from './base';
export interface BucketError {
@@ -69,7 +68,7 @@ export const getAllObjectStorageBuckets = () =>
export const useObjectStorageClusters = (enabled: boolean = true) =>
useQuery(
- `${queryKey}-clusters`,
+ [`${queryKey}-clusters`],
getAllObjectStorageClusters,
{ ...queryPresets.oneTimeFetch, enabled }
);
@@ -79,7 +78,7 @@ export const useObjectStorageBuckets = (
enabled: boolean = true
) =>
useQuery(
- `${queryKey}-buckets`,
+ [`${queryKey}-buckets`],
// Ideally we would use the line below, but if a cluster is down, the buckets on that
// cluster don't show up in the responce. We choose to fetch buckets per-cluster so
// we can tell the user which clusters are having issues.
@@ -97,7 +96,7 @@ export const useObjectStorageBucketsFromRegions = (
enabled: boolean = true
) =>
useQuery(
- `${queryKey}-buckets-from-regions`,
+ [`${queryKey}-buckets-from-regions`],
() => getAllBucketsFromRegions(regions),
{
...queryPresets.longLived,
@@ -122,9 +121,9 @@ export const useCreateBucketMutation = () => {
>(createBucket, {
onSuccess: (newEntity) => {
// Invalidate account settings because it contains obj information
- queryClient.invalidateQueries(accountSettingsQueryKey);
+ queryClient.invalidateQueries(['account', 'settings']);
queryClient.setQueryData(
- `${queryKey}-buckets`,
+ [`${queryKey}-buckets`],
(oldData) => ({
buckets: [...(oldData?.buckets || []), newEntity],
errors: oldData?.errors || [],
@@ -141,7 +140,7 @@ export const useDeleteBucketMutation = () => {
{
onSuccess: (_, variables) => {
queryClient.setQueryData(
- `${queryKey}-buckets`,
+ [`${queryKey}-buckets`],
(oldData) => {
return {
buckets:
@@ -271,7 +270,7 @@ export const updateBucket = async (
) => {
const bucket = await getBucket(cluster, bucketName);
queryClient.setQueryData(
- `${queryKey}-buckets`,
+ [`${queryKey}-buckets`],
(oldData) => {
if (oldData === undefined) {
return undefined;
diff --git a/packages/manager/src/queries/placementGroups.ts b/packages/manager/src/queries/placementGroups.ts
index 79e7dd39e2d..8d9f8b8c2bf 100644
--- a/packages/manager/src/queries/placementGroups.ts
+++ b/packages/manager/src/queries/placementGroups.ts
@@ -13,7 +13,7 @@ import {
Params,
ResourcePage,
} from '@linode/api-v4/lib/types';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { getAll } from 'src/utilities/getAll';
diff --git a/packages/manager/src/queries/preferences.ts b/packages/manager/src/queries/preferences.ts
index c2e71812b91..f99f578931b 100644
--- a/packages/manager/src/queries/preferences.ts
+++ b/packages/manager/src/queries/preferences.ts
@@ -8,7 +8,7 @@ import {
useMutation,
useQuery,
useQueryClient,
-} from 'react-query';
+} from '@tanstack/react-query';
import { ManagerPreferences } from 'src/types/ManagerPreferences';
@@ -17,7 +17,7 @@ import { queryPresets } from './base';
export const queryKey = 'preferences';
export const usePreferences = (enabled = true) =>
- useQuery(queryKey, getUserPreferences, {
+ useQuery([queryKey], getUserPreferences, {
...queryPresets.oneTimeFetch,
enabled,
});
@@ -47,7 +47,7 @@ export const updatePreferenceData = (
queryClient: QueryClient
): void => {
queryClient.setQueryData(
- queryKey,
+ [queryKey],
(oldData: ManagerPreferences) => ({
...(!replace ? oldData : {}),
...newData,
diff --git a/packages/manager/src/queries/profile.ts b/packages/manager/src/queries/profile.ts
index a95c92040a4..00e37373147 100644
--- a/packages/manager/src/queries/profile.ts
+++ b/packages/manager/src/queries/profile.ts
@@ -29,7 +29,7 @@ import {
useMutation,
useQuery,
useQueryClient,
-} from 'react-query';
+} from '@tanstack/react-query';
import { Grants } from '../../../api-v4/lib';
import { queryKey as accountQueryKey } from './account';
diff --git a/packages/manager/src/queries/regions.ts b/packages/manager/src/queries/regions.ts
index 74e729b4860..431ee8808f4 100644
--- a/packages/manager/src/queries/regions.ts
+++ b/packages/manager/src/queries/regions.ts
@@ -6,7 +6,7 @@ import {
getRegions,
} from '@linode/api-v4/lib/regions';
import { APIError } from '@linode/api-v4/lib/types';
-import { useQuery } from 'react-query';
+import { useQuery } from '@tanstack/react-query';
import { getAll } from 'src/utilities/getAll';
@@ -15,7 +15,7 @@ import { queryPresets } from './base';
const queryKey = 'region-availability';
export const useRegionsQuery = () =>
- useQuery('regions', getAllRegionsRequest, {
+ useQuery(['regions'], getAllRegionsRequest, {
...queryPresets.longLived,
});
@@ -26,7 +26,7 @@ const getAllRegionsRequest = () =>
export const useRegionsAvailabilitiesQuery = (enabled: boolean = true) =>
useQuery(
- queryKey,
+ [queryKey],
getAllRegionAvailabilitiesRequest,
{
enabled,
diff --git a/packages/manager/src/queries/securityQuestions.ts b/packages/manager/src/queries/securityQuestions.ts
index 779d20c93c4..7af77613dcc 100644
--- a/packages/manager/src/queries/securityQuestions.ts
+++ b/packages/manager/src/queries/securityQuestions.ts
@@ -5,7 +5,7 @@ import {
updateSecurityQuestions,
} from '@linode/api-v4/lib/profile';
import { APIError } from '@linode/api-v4/lib/types';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { queryPresets } from './base';
@@ -17,7 +17,7 @@ export const useSecurityQuestions = ({
enabled?: boolean;
} = {}) => {
return useQuery(
- queryKey,
+ [queryKey],
getSecurityQuestions,
{
...queryPresets.oneTimeFetch,
@@ -39,7 +39,7 @@ export const useMutateSecurityQuestions = () => {
{
onSuccess: (response) => {
queryClient.setQueryData(
- queryKey,
+ [queryKey],
(oldData) => {
if (oldData === undefined) {
return undefined;
diff --git a/packages/manager/src/queries/stackscripts.ts b/packages/manager/src/queries/stackscripts.ts
index d719e80e645..607edb6c24a 100644
--- a/packages/manager/src/queries/stackscripts.ts
+++ b/packages/manager/src/queries/stackscripts.ts
@@ -1,6 +1,6 @@
import { StackScript } from '@linode/api-v4/lib/stackscripts';
import { APIError, Params } from '@linode/api-v4/lib/types';
-import { useQuery } from 'react-query';
+import { useQuery } from '@tanstack/react-query';
import { getOneClickApps } from 'src/features/StackScripts/stackScriptUtils';
import { getAll } from 'src/utilities/getAll';
diff --git a/packages/manager/src/queries/statusPage/statusPage.ts b/packages/manager/src/queries/statusPage/statusPage.ts
index a91e530de29..9b71a75fa37 100644
--- a/packages/manager/src/queries/statusPage/statusPage.ts
+++ b/packages/manager/src/queries/statusPage/statusPage.ts
@@ -1,6 +1,6 @@
import { APIError } from '@linode/api-v4/lib/types';
import Axios from 'axios';
-import { UseQueryOptions, useQuery } from 'react-query';
+import { UseQueryOptions, useQuery } from '@tanstack/react-query';
import { LINODE_STATUS_PAGE_URL } from 'src/constants';
import { reportException } from 'src/exceptionReporting';
@@ -51,7 +51,7 @@ const maintenanceKey = 'status-page-maintenance';
export const useIncidentQuery = () => {
return useQuery(
- incidentKey,
+ [incidentKey],
getIncidents,
queryPresets.shortLived
);
@@ -59,7 +59,7 @@ export const useIncidentQuery = () => {
export const useMaintenanceQuery = (options?: UseQueryOptions) => {
return useQuery(
- maintenanceKey,
+ [maintenanceKey],
getAllMaintenance,
{ ...queryPresets.shortLived, ...(options ?? {}) }
);
diff --git a/packages/manager/src/queries/support.ts b/packages/manager/src/queries/support.ts
index 60aac525eef..40bd2cf3961 100644
--- a/packages/manager/src/queries/support.ts
+++ b/packages/manager/src/queries/support.ts
@@ -13,7 +13,7 @@ import {
useMutation,
useQuery,
useQueryClient,
-} from 'react-query';
+} from '@tanstack/react-query';
import { EventHandlerData } from 'src/hooks/useEventHandlers';
diff --git a/packages/manager/src/queries/tags.ts b/packages/manager/src/queries/tags.ts
index ee69450fdff..5bbf110fce8 100644
--- a/packages/manager/src/queries/tags.ts
+++ b/packages/manager/src/queries/tags.ts
@@ -1,6 +1,6 @@
import { Tag, getTags } from '@linode/api-v4';
import { APIError, Filter, Params } from '@linode/api-v4/lib/types';
-import { QueryClient, useQuery } from 'react-query';
+import { QueryClient, useQuery } from '@tanstack/react-query';
import { getAll } from 'src/utilities/getAll';
@@ -9,7 +9,7 @@ import { queryPresets } from './base';
export const queryKey = 'tags';
export const useTagSuggestions = (enabled = true) =>
- useQuery(queryKey, () => getAllTagSuggestions(), {
+ useQuery([queryKey], () => getAllTagSuggestions(), {
...queryPresets.longLived,
enabled,
});
@@ -29,5 +29,5 @@ export const updateTagsSuggestionsData = (
const uniqueTags = Array.from(new Set(newData.map((tag) => tag.label)))
.sort()
.map((label) => ({ label }));
- queryClient.setQueryData(queryKey, uniqueTags);
+ queryClient.setQueryData([queryKey], uniqueTags);
};
diff --git a/packages/manager/src/queries/tokens.ts b/packages/manager/src/queries/tokens.ts
index 598204c72c7..7d87614cc2e 100644
--- a/packages/manager/src/queries/tokens.ts
+++ b/packages/manager/src/queries/tokens.ts
@@ -13,7 +13,7 @@ import {
Params,
ResourcePage,
} from '@linode/api-v4/lib/types';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { updateInPaginatedStore } from './base';
import { queryKey } from './profile';
diff --git a/packages/manager/src/queries/types.ts b/packages/manager/src/queries/types.ts
index d659396747e..eeef894db05 100644
--- a/packages/manager/src/queries/types.ts
+++ b/packages/manager/src/queries/types.ts
@@ -6,7 +6,7 @@ import {
useQueries,
useQuery,
useQueryClient,
-} from 'react-query';
+} from '@tanstack/react-query';
import { getAll } from 'src/utilities/getAll';
@@ -43,14 +43,14 @@ const specificTypesQueryKey = (type: string) => [queryKey, 'detail', type];
*/
export const useSpecificTypes = (types: string[], enabled = true) => {
const queryClient = useQueryClient();
- return useQueries(
- types.map>((type) => ({
+ return useQueries({
+ queries: types.map>((type) => ({
enabled: Boolean(type) && enabled,
queryFn: () => getSingleType(type, queryClient),
queryKey: specificTypesQueryKey(type),
...queryPresets.oneTimeFetch,
- }))
- );
+ })),
+ });
};
export const useTypeQuery = (type: string, enabled = true) => {
diff --git a/packages/manager/src/queries/vlans.ts b/packages/manager/src/queries/vlans.ts
index f510d634518..6976134a7de 100644
--- a/packages/manager/src/queries/vlans.ts
+++ b/packages/manager/src/queries/vlans.ts
@@ -1,6 +1,6 @@
import { APIError } from '@linode/api-v4/lib/types';
import { VLAN, getVlans } from '@linode/api-v4/lib/vlans';
-import { useQuery } from 'react-query';
+import { useQuery } from '@tanstack/react-query';
import { getAll } from 'src/utilities/getAll';
@@ -12,7 +12,7 @@ const _getVlans = (): Promise =>
getAll((params) => getVlans(params))().then(({ data }) => data);
export const useVlansQuery = () => {
- return useQuery(queryKey, _getVlans, {
+ return useQuery([queryKey], _getVlans, {
...queryPresets.longLived,
});
};
diff --git a/packages/manager/src/queries/volumes.ts b/packages/manager/src/queries/volumes.ts
index 5b4098d1534..0a36f854eb6 100644
--- a/packages/manager/src/queries/volumes.ts
+++ b/packages/manager/src/queries/volumes.ts
@@ -22,7 +22,7 @@ import {
useMutation,
useQuery,
useQueryClient,
-} from 'react-query';
+} from '@tanstack/react-query';
import { EventHandlerData } from 'src/hooks/useEventHandlers';
import { getAll } from 'src/utilities/getAll';
diff --git a/packages/manager/src/queries/volumesMigrations.ts b/packages/manager/src/queries/volumesMigrations.ts
index 604fd05ddd6..7ce3c9f0f96 100644
--- a/packages/manager/src/queries/volumesMigrations.ts
+++ b/packages/manager/src/queries/volumesMigrations.ts
@@ -4,7 +4,7 @@ import {
migrateVolumes,
} from '@linode/api-v4/lib/volumes/migrations';
import { VolumesMigrationQueue } from '@linode/api-v4/lib/volumes/types';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { queryKey as notificationsQueryKey } from './accountNotifications';
import { queryPresets } from './base';
diff --git a/packages/manager/src/queries/vpcs.ts b/packages/manager/src/queries/vpcs.ts
index 10175e32a41..a6051a8964e 100644
--- a/packages/manager/src/queries/vpcs.ts
+++ b/packages/manager/src/queries/vpcs.ts
@@ -22,7 +22,7 @@ import {
Params,
ResourcePage,
} from '@linode/api-v4/lib/types';
-import { useMutation, useQuery, useQueryClient } from 'react-query';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
export const vpcQueryKey = 'vpcs';
export const subnetQueryKey = 'subnets';
diff --git a/packages/manager/src/store/types.ts b/packages/manager/src/store/types.ts
index 1c4afd0701d..43e680b2565 100644
--- a/packages/manager/src/store/types.ts
+++ b/packages/manager/src/store/types.ts
@@ -1,6 +1,6 @@
import { Event, Entity as EventEntity } from '@linode/api-v4/lib/account';
import { APIError } from '@linode/api-v4/lib/types';
-import { QueryClient } from 'react-query';
+import { QueryClient } from '@tanstack/react-query';
import { MapStateToProps as _MapStateToProps } from 'react-redux';
import { Action, Dispatch } from 'redux';
import { ThunkDispatch as _ThunkDispatch, ThunkAction } from 'redux-thunk';
diff --git a/packages/manager/src/utilities/extendType.ts b/packages/manager/src/utilities/extendType.ts
index d6501c85369..bcf646463f4 100644
--- a/packages/manager/src/utilities/extendType.ts
+++ b/packages/manager/src/utilities/extendType.ts
@@ -1,5 +1,5 @@
import { APIError, LinodeType } from '@linode/api-v4';
-import { UseQueryResult } from 'react-query';
+import { UseQueryResult } from '@tanstack/react-query';
import { LINODE_NETWORK_IN } from 'src/constants';
import { typeLabelDetails } from 'src/features/Linodes/presentation';
diff --git a/packages/manager/src/utilities/subnets.ts b/packages/manager/src/utilities/subnets.ts
index cc14a84eb0c..9f65527a397 100644
--- a/packages/manager/src/utilities/subnets.ts
+++ b/packages/manager/src/utilities/subnets.ts
@@ -90,13 +90,13 @@ const isValidRFC1918IPv4 = (address: string) => {
// 192.168.x.x (192.168/16 prefix)
return (
// check for valid 10.x IPs
+ // check for valid 192.x IPs
(firstOctet === '10' && parsedMask >= 8) ||
// check for valid 172.x IPs
(firstOctet === '172' &&
parsedSecondOctet >= 16 &&
parsedSecondOctet <= 31 &&
parsedMask >= 12) ||
- // check for valid 192.x IPs
(firstOctet === '192' && secondOctet === '168' && parsedMask >= 16)
);
};
diff --git a/packages/manager/src/utilities/testHelpers.tsx b/packages/manager/src/utilities/testHelpers.tsx
index 541a0191633..67509fb8c39 100644
--- a/packages/manager/src/utilities/testHelpers.tsx
+++ b/packages/manager/src/utilities/testHelpers.tsx
@@ -5,7 +5,7 @@ import { LDProvider } from 'launchdarkly-react-client-sdk';
import { SnackbarProvider } from 'notistack';
import { mergeDeepRight } from 'ramda';
import * as React from 'react';
-import { QueryClient, QueryClientProvider } from 'react-query';
+import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { Provider } from 'react-redux';
import { MemoryRouterProps } from 'react-router';
import { MemoryRouter } from 'react-router-dom';
diff --git a/yarn.lock b/yarn.lock
index 26ae94aacef..fa2ab05d4d7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -378,6 +378,11 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b"
integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==
+"@babel/parser@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac"
+ integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==
+
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3":
version "7.23.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a"
@@ -1106,7 +1111,7 @@
resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
-"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.0", "@babel/runtime@^7.14.6", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.8", "@babel/runtime@^7.23.9", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.0", "@babel/runtime@^7.14.6", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.9", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
version "7.23.9"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7"
integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==
@@ -1123,9 +1128,9 @@
"@babel/types" "^7.23.9"
"@babel/traverse@^7.18.9", "@babel/traverse@^7.23.2", "@babel/traverse@^7.23.3", "@babel/traverse@^7.23.9", "@babel/traverse@^7.7.0":
- version "7.23.9"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950"
- integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e"
+ integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==
dependencies:
"@babel/code-frame" "^7.23.5"
"@babel/generator" "^7.23.6"
@@ -1133,8 +1138,8 @@
"@babel/helper-function-name" "^7.23.0"
"@babel/helper-hoist-variables" "^7.22.5"
"@babel/helper-split-export-declaration" "^7.22.6"
- "@babel/parser" "^7.23.9"
- "@babel/types" "^7.23.9"
+ "@babel/parser" "^7.24.0"
+ "@babel/types" "^7.24.0"
debug "^4.3.1"
globals "^11.1.0"
@@ -1147,6 +1152,15 @@
"@babel/helper-validator-identifier" "^7.22.20"
to-fast-properties "^2.0.0"
+"@babel/types@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf"
+ integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==
+ dependencies:
+ "@babel/helper-string-parser" "^7.23.4"
+ "@babel/helper-validator-identifier" "^7.22.20"
+ to-fast-properties "^2.0.0"
+
"@base2/pretty-print-object@1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz#371ba8be66d556812dc7fb169ebc3c08378f69d4"
@@ -3420,6 +3434,35 @@
resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.5.tgz#043b731d4f56a79b4897a3de1af35e75d56bc63a"
integrity sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==
+"@tanstack/match-sorter-utils@^8.7.0":
+ version "8.11.8"
+ resolved "https://registry.yarnpkg.com/@tanstack/match-sorter-utils/-/match-sorter-utils-8.11.8.tgz#9132c2a21cf18ca2f0071b604ddadb7a66e73367"
+ integrity sha512-3VPh0SYMGCa5dWQEqNab87UpCMk+ANWHDP4ALs5PeEW9EpfTAbrezzaOk/OiM52IESViefkoAOYuxdoa04p6aA==
+ dependencies:
+ remove-accents "0.4.2"
+
+"@tanstack/query-core@4.36.1":
+ version "4.36.1"
+ resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.36.1.tgz#79f8c1a539d47c83104210be2388813a7af2e524"
+ integrity sha512-DJSilV5+ytBP1FbFcEJovv4rnnm/CokuVvrBEtW/Va9DvuJ3HksbXUJEpI0aV1KtuL4ZoO9AVE6PyNLzF7tLeA==
+
+"@tanstack/react-query-devtools@4.36.1":
+ version "4.36.1"
+ resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-4.36.1.tgz#7e63601135902a993ca9af73507b125233b1554e"
+ integrity sha512-WYku83CKP3OevnYSG8Y/QO9g0rT75v1om5IvcWUwiUZJ4LanYGLVCZ8TdFG5jfsq4Ej/lu2wwDAULEUnRIMBSw==
+ dependencies:
+ "@tanstack/match-sorter-utils" "^8.7.0"
+ superjson "^1.10.0"
+ use-sync-external-store "^1.2.0"
+
+"@tanstack/react-query@4.36.1":
+ version "4.36.1"
+ resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.36.1.tgz#acb589fab4085060e2e78013164868c9c785e5d2"
+ integrity sha512-y7ySVHFyyQblPl3J3eQBWpXZkliroki3ARnBKsdJchlgt7yJLRDUcf4B8soufgiYt3pEQIkBWBx1N9/ZPIeUWw==
+ dependencies:
+ "@tanstack/query-core" "4.36.1"
+ use-sync-external-store "^1.2.0"
+
"@testing-library/cypress@^10.0.0":
version "10.0.1"
resolved "https://registry.yarnpkg.com/@testing-library/cypress/-/cypress-10.0.1.tgz#15abae0edb83237316ec6d07e152b71a50b38387"
@@ -5062,7 +5105,7 @@ better-opn@^3.0.2:
dependencies:
open "^8.0.4"
-big-integer@^1.6.16, big-integer@^1.6.44:
+big-integer@^1.6.44:
version "1.6.52"
resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85"
integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==
@@ -5172,20 +5215,6 @@ braintree-web@^3.92.2:
promise-polyfill "8.2.3"
restricted-input "3.0.5"
-broadcast-channel@^3.4.1:
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/broadcast-channel/-/broadcast-channel-3.7.0.tgz#2dfa5c7b4289547ac3f6705f9c00af8723889937"
- integrity sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==
- dependencies:
- "@babel/runtime" "^7.7.2"
- detect-node "^2.1.0"
- js-sha3 "0.8.0"
- microseconds "0.2.0"
- nano-time "1.0.0"
- oblivious-set "1.0.0"
- rimraf "3.0.2"
- unload "2.2.0"
-
browser-assert@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/browser-assert/-/browser-assert-1.2.1.tgz#9aaa5a2a8c74685c2ae05bfe46efd606f068c200"
@@ -5785,6 +5814,13 @@ cookie@^0.4.2:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
+copy-anything@^3.0.2:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-3.0.5.tgz#2d92dce8c498f790fa7ad16b01a1ae5a45b020a0"
+ integrity sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==
+ dependencies:
+ is-what "^4.1.8"
+
copy-to-clipboard@^3.0.8:
version "3.3.3"
resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0"
@@ -6310,11 +6346,6 @@ detect-node-es@^1.1.0:
resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493"
integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==
-detect-node@^2.0.4, detect-node@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
- integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
-
detect-package-manager@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/detect-package-manager/-/detect-package-manager-2.0.1.tgz#6b182e3ae5e1826752bfef1de9a7b828cffa50d8"
@@ -8693,6 +8724,11 @@ is-weakset@^2.0.1:
call-bind "^1.0.2"
get-intrinsic "^1.1.1"
+is-what@^4.1.8:
+ version "4.1.16"
+ resolved "https://registry.yarnpkg.com/is-what/-/is-what-4.1.16.tgz#1ad860a19da8b4895ad5495da3182ce2acdd7a6f"
+ integrity sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==
+
is-wsl@^2.1.1, is-wsl@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
@@ -8866,11 +8902,6 @@ js-levenshtein@^1.1.6:
resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d"
integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==
-js-sha3@0.8.0:
- version "0.8.0"
- resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"
- integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==
-
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -9521,14 +9552,6 @@ markdown-to-jsx@^7.1.8:
resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.4.1.tgz#1ed6a60f8f9cd944bec39d9923fbbc8d3d60dcb9"
integrity sha512-GbrbkTnHp9u6+HqbPRFJbObi369AgJNXi/sGqq5HRsoZW063xR1XDCaConqq+whfEIAlzB1YPnOgsPc7B7bc/A==
-match-sorter@^6.0.2:
- version "6.3.4"
- resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.4.tgz#afa779d8e922c81971fbcb4781c7003ace781be7"
- integrity sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg==
- dependencies:
- "@babel/runtime" "^7.23.8"
- remove-accents "0.5.0"
-
md5@^2.2.1, md5@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f"
@@ -10002,11 +10025,6 @@ micromatch@4.0.5, micromatch@^4.0.2, micromatch@^4.0.4:
braces "^3.0.2"
picomatch "^2.3.1"
-microseconds@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/microseconds/-/microseconds-0.2.0.tgz#233b25f50c62a65d861f978a4a4f8ec18797dc39"
- integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==
-
mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
version "1.52.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
@@ -10219,13 +10237,6 @@ mz@^2.7.0:
object-assign "^4.0.1"
thenify-all "^1.0.0"
-nano-time@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/nano-time/-/nano-time-1.0.0.tgz#b0554f69ad89e22d0907f7a12b0993a5d96137ef"
- integrity sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==
- dependencies:
- big-integer "^1.6.16"
-
nanoclone@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/nanoclone/-/nanoclone-0.2.1.tgz#dd4090f8f1a110d26bb32c49ed2f5b9235209ed4"
@@ -10445,11 +10456,6 @@ object.values@^1.1.6:
define-properties "^1.2.0"
es-abstract "^1.22.1"
-oblivious-set@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/oblivious-set/-/oblivious-set-1.0.0.tgz#c8316f2c2fb6ff7b11b6158db3234c49f733c566"
- integrity sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==
-
ohash@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/ohash/-/ohash-1.1.3.tgz#f12c3c50bfe7271ce3fd1097d42568122ccdcf07"
@@ -11325,15 +11331,6 @@ react-number-format@^3.5.0:
dependencies:
prop-types "^15.6.0"
-react-query@^3.3.2:
- version "3.39.3"
- resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.39.3.tgz#4cea7127c6c26bdea2de5fb63e51044330b03f35"
- integrity sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g==
- dependencies:
- "@babel/runtime" "^7.5.5"
- broadcast-channel "^3.4.1"
- match-sorter "^6.0.2"
-
react-redux@^7.2.0:
version "7.2.9"
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.9.tgz#09488fbb9416a4efe3735b7235055442b042481d"
@@ -11753,10 +11750,10 @@ remark-slug@^6.0.0:
mdast-util-to-string "^1.0.0"
unist-util-visit "^2.0.0"
-remove-accents@0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.5.0.tgz#77991f37ba212afba162e375b627631315bed687"
- integrity sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==
+remove-accents@0.4.2:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5"
+ integrity sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==
req-all@^1.0.0:
version "1.0.0"
@@ -11907,13 +11904,6 @@ rimraf@2.6.3, rimraf@~2.6.2:
dependencies:
glob "^7.1.3"
-rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
- integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
- dependencies:
- glob "^7.1.3"
-
rimraf@^2.6.1, rimraf@^2.6.3:
version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
@@ -11921,6 +11911,13 @@ rimraf@^2.6.1, rimraf@^2.6.3:
dependencies:
glob "^7.1.3"
+rimraf@^3.0.0, rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
"rollup@^2.25.0 || ^3.3.0":
version "3.29.4"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981"
@@ -12703,6 +12700,13 @@ sucrase@^3.20.3:
pirates "^4.0.1"
ts-interface-checker "^0.1.9"
+superjson@^1.10.0:
+ version "1.13.3"
+ resolved "https://registry.yarnpkg.com/superjson/-/superjson-1.13.3.tgz#3bd64046f6c0a47062850bb3180ef352a471f930"
+ integrity sha512-mJiVjfd2vokfDxsQPOwJ/PtanO87LhpYY88ubI5dUB1Ab58Txbyje3+jpm+/83R/fevaq/107NNhtYBLuoTrFg==
+ dependencies:
+ copy-anything "^3.0.2"
+
supports-color@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
@@ -13361,14 +13365,6 @@ universalify@^2.0.0:
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
-unload@2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/unload/-/unload-2.2.0.tgz#ccc88fdcad345faa06a92039ec0f80b488880ef7"
- integrity sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==
- dependencies:
- "@babel/runtime" "^7.6.2"
- detect-node "^2.0.4"
-
unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
@@ -13447,6 +13443,11 @@ use-sidecar@^1.1.2:
detect-node-es "^1.1.0"
tslib "^2.0.0"
+use-sync-external-store@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a"
+ integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==
+
util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@@ -13978,9 +13979,9 @@ yallist@^4.0.0:
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
yaml@2.3.1, yaml@^1.10.0, yaml@^1.7.2, yaml@^2.2.2, yaml@^2.3.0, yaml@^2.3.4:
- version "2.3.4"
- resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2"
- integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.0.tgz#2376db1083d157f4b3a452995803dbcf43b08140"
+ integrity sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ==
yargs-parser@^11.1.1, yargs-parser@^18.1.3, yargs-parser@^21.1.1:
version "18.1.3"