diff --git a/package.json b/package.json index b02c163d..5069098e 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "semantic-release": "25.0.3" }, "dependencies": { - "@apollo/client": "3.10.8", + "@apollo/client": "3.14.1", "@emotion/react": "11.14.0", "@emotion/styled": "11.14.1", "@zextras/carbonio-design-system": "12.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1896bbab..aa3142fb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@apollo/client': - specifier: 3.10.8 - version: 3.10.8(@types/react@18.3.30)(graphql@16.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 3.14.1 + version: 3.14.1(@types/react@18.3.30)(graphql-ws@6.0.8(graphql@16.14.1)(ws@8.21.0))(graphql@16.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@emotion/react': specifier: 11.14.0 version: 11.14.0(@types/react@18.3.30)(react@18.3.1) @@ -226,13 +226,13 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@apollo/client@3.10.8': - resolution: {integrity: sha512-UaaFEitRrPRWV836wY2L7bd3HRCfbMie1jlYMcmazFAK23MVhz/Uq7VG1nwbotPb5xzFsw5RF4Wnp2G3dWPM3g==} + '@apollo/client@3.14.1': + resolution: {integrity: sha512-SgGX6E23JsZhUdG2anxiyHvEvvN6CUaI4ZfMsndZFeuHPXL3H0IsaiNAhLITSISbeyeYd+CBd9oERXQDdjXWZw==} peerDependencies: graphql: ^15.0.0 || ^16.0.0 - graphql-ws: ^5.5.5 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + graphql-ws: ^5.5.5 || ^6.0.3 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc subscriptions-transport-ws: ^0.9.0 || ^0.11.0 peerDependenciesMeta: graphql-ws: @@ -6521,10 +6521,6 @@ packages: engines: {node: '>= 0.4'} hasBin: true - response-iterator@0.2.25: - resolution: {integrity: sha512-15K4tT8X35W0zJ5bv3fAf4eEKqOwS7yzd+Bg6YEE9NLltVbPbuTcYo3J2AP6AMQGMJmJkFCG421+kP2/iCBfDA==} - engines: {node: '>=0.8'} - restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} @@ -7788,7 +7784,7 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@apollo/client@3.10.8(@types/react@18.3.30)(graphql@16.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@apollo/client@3.14.1(@types/react@18.3.30)(graphql-ws@6.0.8(graphql@16.14.1)(ws@8.21.0))(graphql@16.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.1) '@wry/caches': 1.0.1 @@ -7800,12 +7796,12 @@ snapshots: optimism: 0.18.1 prop-types: 15.8.1 rehackt: 0.1.0(@types/react@18.3.30)(react@18.3.1) - response-iterator: 0.2.25 symbol-observable: 4.0.0 ts-invariant: 0.10.3 tslib: 2.8.1 zen-observable-ts: 1.2.5 optionalDependencies: + graphql-ws: 6.0.8(graphql@16.14.1)(ws@8.21.0) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -14836,8 +14832,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - response-iterator@0.2.25: {} - restore-cursor@5.1.0: dependencies: onetime: 7.0.0 diff --git a/src/apollo/cacheUtils.ts b/src/apollo/cacheUtils.ts index 3c30abd9..426fc5b3 100644 --- a/src/apollo/cacheUtils.ts +++ b/src/apollo/cacheUtils.ts @@ -12,7 +12,7 @@ import { type Task } from '../gql/types'; export const removeTaskFromList: ( ...tasks: Pick[] -) => Modifier = +) => Modifier = (...tasks) => (existing, { toReference }) => { if (existing && Array.isArray(existing)) { @@ -24,7 +24,7 @@ export const removeTaskFromList: ( export const addTaskToList: ( task: Pick -) => Modifier = +) => Modifier = (task) => (existing, { toReference, readField }) => { const newTaskRef = toReference(task); diff --git a/src/apollo/index.ts b/src/apollo/index.ts index 359a5a6c..c70d5010 100644 --- a/src/apollo/index.ts +++ b/src/apollo/index.ts @@ -27,7 +27,7 @@ const buildClient: () => ApolloClient = () => { apolloClient = new ApolloClient({ cache, - connectToDevTools: process.env.NODE_ENV !== 'production', + devtools: { enabled: process.env.NODE_ENV !== 'production' }, link: httpLink }); } diff --git a/src/components/RemindersManager.test.tsx b/src/components/RemindersManager.test.tsx index c1b2f886..694ec639 100644 --- a/src/components/RemindersManager.test.tsx +++ b/src/components/RemindersManager.test.tsx @@ -6,6 +6,7 @@ import React from 'react'; +import { type Reference } from '@apollo/client'; import { faker } from '@faker-js/faker'; import { act, screen, waitFor } from '@testing-library/react'; import * as carbonioShellUi from '@zextras/carbonio-shell-ui'; @@ -61,7 +62,7 @@ describe('Reminders manager', () => { data: updateTask }); if (updateTask.status === Status.Complete) { - global.apolloClient.cache.modify({ + global.apolloClient.cache.modify<{ findTasks: Reference[] }>({ fields: { findTasks: removeTaskFromList(updateTask) } diff --git a/src/components/RemindersManager.tsx b/src/components/RemindersManager.tsx index 93f40fdc..6958df08 100644 --- a/src/components/RemindersManager.tsx +++ b/src/components/RemindersManager.tsx @@ -129,9 +129,7 @@ export const RemindersManager = (): React.JSX.Element => { errorPolicy: 'all' }); // lazy query used to load data at first load - const [findRemindersLazyQuery] = useLazyQuery(FindTasksDocument, { - variables: { status: Status.Open } - }); + const [findRemindersLazyQuery] = useLazyQuery(FindTasksDocument); const [updateTaskStatus] = useMutation(UpdateTaskStatusDocument); const [isModalOpen, setIsModalOpen] = useState(false); // Array of group of reminders. @@ -394,7 +392,7 @@ export const RemindersManager = (): React.JSX.Element => { useEffect(() => { // init reminders manager by requesting all tasks with the lazy query remindersByDateRef.current = {}; - findRemindersLazyQuery() + findRemindersLazyQuery({ variables: { status: Status.Open } }) .then((result) => { if (result?.data?.findTasks) { registerRemindersFromTasks(result.data.findTasks); diff --git a/src/hooks/useTrashAction.ts b/src/hooks/useTrashAction.ts index eea1840e..3cae363b 100644 --- a/src/hooks/useTrashAction.ts +++ b/src/hooks/useTrashAction.ts @@ -6,7 +6,7 @@ import { useCallback } from 'react'; -import { type FetchResult, useMutation } from '@apollo/client'; +import { type FetchResult, type Reference, useMutation } from '@apollo/client'; import { useActiveItem } from './useActiveItem'; import { removeTaskFromList } from '../apollo/cacheUtils'; @@ -27,7 +27,7 @@ export const useTrashAction = (taskId: string): TrashActionFn => { trashTask({ update: (cache, { data }) => { if (data?.trashTask) { - cache.modify({ + cache.modify<{ findTasks: Reference[] }>({ fields: { findTasks: removeTaskFromList({ id: data.trashTask, __typename: 'Task' }) } diff --git a/src/utils/testUtils.tsx b/src/utils/testUtils.tsx index c39658f7..551041e6 100644 --- a/src/utils/testUtils.tsx +++ b/src/utils/testUtils.tsx @@ -7,7 +7,7 @@ import React, { type ReactElement, useMemo } from 'react'; import { ApolloProvider } from '@apollo/client'; -import { MockedProvider } from '@apollo/client/testing'; +import { MockedProvider, type MockedResponse } from '@apollo/client/testing'; import { act, type ByRoleMatcher, @@ -30,7 +30,6 @@ import { I18nextProvider } from 'react-i18next'; import { MemoryRouter } from 'react-router-dom'; import { type Mock as ViMock } from 'vitest'; -import { type Mock } from '../mocks/utils'; import { StyledWrapper } from '../providers/StyledWrapper'; export type UserEvent = ReturnType<(typeof userEvent)['setup']> & { @@ -105,7 +104,7 @@ export const getAppI18n = (): i18n => { interface WrapperProps { children?: React.ReactNode | undefined; initialRouterEntries?: string[]; - mocks?: Mock[]; + mocks?: MockedResponse[]; } const ApolloProviderWrapper = ({ @@ -113,7 +112,7 @@ const ApolloProviderWrapper = ({ mocks }: { children: React.ReactNode; - mocks: Mock[] | undefined; + mocks: MockedResponse[] | undefined; }): React.JSX.Element => mocks ? ( diff --git a/src/views/board/NewTaskBoard.tsx b/src/views/board/NewTaskBoard.tsx index 3dce5030..3ce4ce22 100644 --- a/src/views/board/NewTaskBoard.tsx +++ b/src/views/board/NewTaskBoard.tsx @@ -5,7 +5,7 @@ */ import React, { useCallback, useMemo } from 'react'; -import { useMutation, useQuery } from '@apollo/client'; +import { type Reference, useMutation, useQuery } from '@apollo/client'; import { Banner, useSnackbar } from '@zextras/carbonio-design-system'; import { t, useBoardHooks } from '@zextras/carbonio-shell-ui'; import { filter, trim } from 'lodash'; @@ -68,7 +68,7 @@ const NewTaskBoard = (): React.JSX.Element => { }, update(cache, { data }) { if (data?.createTask) { - cache.modify({ + cache.modify<{ findTasks: Reference[] }>({ fields: { findTasks: addTaskToList(data.createTask) }