diff --git a/.cursor/rules/README.mdc b/.cursor/rules/README.mdc index 414de2a286..560651d701 100644 --- a/.cursor/rules/README.mdc +++ b/.cursor/rules/README.mdc @@ -22,7 +22,7 @@ This directory contains Twenty's development guidelines and best practices in th ### React Development - **react-general-guidelines.mdc** - Core React development principles (Auto-attached to React files) -- **react-state-management.mdc** - State management approaches with Recoil (Auto-attached to state files) +- **react-state-management.mdc** - State management approaches with Jotai (Auto-attached to state files) ### Testing & Quality - **testing-guidelines.mdc** - Testing strategies and best practices (Auto-attached to test files) diff --git a/.cursor/rules/architecture.mdc b/.cursor/rules/architecture.mdc index 5bdf09e62c..8b060badc0 100644 --- a/.cursor/rules/architecture.mdc +++ b/.cursor/rules/architecture.mdc @@ -7,7 +7,7 @@ alwaysApply: true # Twenty Architecture ## Tech Stack -- **Frontend**: React 18, TypeScript, Recoil, Styled Components, Vite +- **Frontend**: React 18, TypeScript, Jotai, Styled Components, Vite - **Backend**: NestJS, TypeORM, PostgreSQL, Redis, GraphQL - **Monorepo**: Nx workspace with yarn diff --git a/.cursor/rules/react-state-management.mdc b/.cursor/rules/react-state-management.mdc index 0f5328771f..93fcf7d3c8 100644 --- a/.cursor/rules/react-state-management.mdc +++ b/.cursor/rules/react-state-management.mdc @@ -4,16 +4,20 @@ alwaysApply: false --- # React State Management -## Recoil Patterns +## Jotai Patterns ```typescript -// ✅ Atoms for primitive state -export const currentUserState = atom({ +// ✅ Atoms for primitive state (use createAtomState for keyed state with optional persistence) +import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; + +export const currentUserState = createAtomState({ key: 'currentUserState', - default: null, + defaultValue: null, }); -// ✅ Selectors for derived state -export const userDisplayNameSelector = selector({ +// ✅ Derived atoms for computed state (use createAtomSelector) +import { createAtomSelector } from '@/ui/utilities/state/jotai/utils/createAtomSelector'; + +export const userDisplayNameSelector = createAtomSelector({ key: 'userDisplayNameSelector', get: ({ get }) => { const user = get(currentUserState); @@ -21,13 +25,30 @@ export const userDisplayNameSelector = selector({ }, }); -// ✅ Atom families for dynamic atoms -export const userByIdState = atomFamily({ +// ✅ Atom factory pattern for dynamic atoms (use createAtomFamilyState) +import { createAtomFamilyState } from '@/ui/utilities/state/jotai/utils/createAtomFamilyState'; + +export const userByIdState = createAtomFamilyState({ key: 'userByIdState', - default: null, + defaultValue: null, }); ``` +## Jotai Hooks +```typescript +// useAtomState - read and write (like useRecoilState) +import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; + +// useAtomStateValue - read only (like useRecoilValue) +import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; + +// useSetAtomState - write only (like useSetRecoilState) +import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; +``` + +## Provider +Jotai works without a Provider by default (unlike Recoil's RecoilRoot). For scoped stores or testing, use `Provider` from `jotai`. + ## Local State Guidelines ```typescript // ✅ Multiple useState for unrelated state @@ -74,7 +95,7 @@ const increment = useCallback(() => { ``` ## Performance Tips -- Use atom families for dynamic data collections -- Implement proper selector caching -- Avoid heavy computations in selectors +- Use atom factory pattern (createAtomFamilyState) for dynamic data collections +- Derived atoms (createAtomSelector) are automatically memoized by Jotai +- Avoid heavy computations in derived atoms - Batch state updates when possible diff --git a/CLAUDE.md b/CLAUDE.md index 97047e7b7c..55b0f18119 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -90,7 +90,7 @@ npx nx run twenty-front:graphql:generate --configuration=metadata ## Architecture Overview ### Tech Stack -- **Frontend**: React 18, TypeScript, Recoil (state management), Emotion (styling), Vite +- **Frontend**: React 18, TypeScript, Jotai (state management), Emotion (styling), Vite - **Backend**: NestJS, TypeORM, PostgreSQL, Redis, GraphQL (with GraphQL Yoga) - **Monorepo**: Nx workspace managed with Yarn 4 @@ -138,7 +138,7 @@ packages/ - Multi-line comments use multiple `//` lines, not `/** */` ### State Management -- **Recoil** for global state: atoms for primitive state, selectors for derived state, atom families for dynamic collections +- **Jotai** for global state: atoms for primitive state, selectors for derived state, atom families for dynamic collections - Component-specific state with React hooks (`useState`, `useReducer` for complex logic) - GraphQL cache managed by Apollo Client - Use functional state updates: `setState(prev => prev + 1)` diff --git a/package.json b/package.json index 4979d5c0d2..c11bc94c91 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,6 @@ "react-responsive": "^9.0.2", "react-router-dom": "^6.4.4", "react-tooltip": "^5.13.1", - "recoil": "^0.7.7", "remark-gfm": "^3.0.1", "rxjs": "^7.2.0", "semver": "^7.5.4", diff --git a/packages/twenty-eslint-rules/eslint.config.react.mjs b/packages/twenty-eslint-rules/eslint.config.react.mjs index 3969559dd8..b960d1e966 100644 --- a/packages/twenty-eslint-rules/eslint.config.react.mjs +++ b/packages/twenty-eslint-rules/eslint.config.react.mjs @@ -125,12 +125,7 @@ export default [ // React hooks rules 'react-hooks/rules-of-hooks': 'error', - 'react-hooks/exhaustive-deps': [ - 'warn', - { - additionalHooks: 'useRecoilCallback', - }, - ], + 'react-hooks/exhaustive-deps': 'warn', // Lingui - detect untranslated strings 'lingui/no-unlocalized-strings': [ 'error', @@ -246,7 +241,7 @@ export default [ 'componentInstanceId', 'hotkeyScope', 'dropdownId', - 'recoilScopeId', + 'modalId', 'dialogId', 'itemId', @@ -411,15 +406,6 @@ export default [ // Navigation 'useNavigationSection', - // Recoil - 'atom', - 'atomFamily', - 'selector', - 'selectorFamily', - 'useSetRecoilState', - 'useRecoilState', - 'useRecoilValue', - // GraphQL operations 'gql', 'useQuery', @@ -578,8 +564,7 @@ export default [ 'twenty/no-state-useref': 'error', 'twenty/component-props-naming': 'error', 'twenty/explicit-boolean-predicates-in-if': 'error', - 'twenty/use-getLoadable-and-getValue-to-get-atoms': 'error', - 'twenty/useRecoilCallback-has-dependency-array': 'error', + 'twenty/no-navigate-prefer-link': 'error', }, }, diff --git a/packages/twenty-eslint-rules/index.ts b/packages/twenty-eslint-rules/index.ts index e95e43de18..d899090979 100644 --- a/packages/twenty-eslint-rules/index.ts +++ b/packages/twenty-eslint-rules/index.ts @@ -58,14 +58,8 @@ import { rule as styledComponentsPrefixedWithStyled, RULE_NAME as styledComponentsPrefixedWithStyledName, } from './rules/styled-components-prefixed-with-styled'; -import { - rule as useGetLoadableAndGetValueToGetAtoms, - RULE_NAME as useGetLoadableAndGetValueToGetAtomsName, -} from './rules/use-getLoadable-and-getValue-to-get-atoms'; -import { - rule as useRecoilCallbackHasDependencyArray, - RULE_NAME as useRecoilCallbackHasDependencyArrayName, -} from './rules/useRecoilCallback-has-dependency-array'; + + /** * Import your custom workspace rules at the top of this file. @@ -102,11 +96,7 @@ module.exports = { [styledComponentsPrefixedWithStyledName]: styledComponentsPrefixedWithStyled, [explicitBooleanPredicatesInIfName]: explicitBooleanPredicatesInIf, - [useGetLoadableAndGetValueToGetAtomsName]: - useGetLoadableAndGetValueToGetAtoms, [maxConstsPerFileName]: maxConstsPerFile, - [useRecoilCallbackHasDependencyArrayName]: - useRecoilCallbackHasDependencyArray, [noNavigatePreferLinkName]: noNavigatePreferLink, [injectWorkspaceRepositoryName]: injectWorkspaceRepository, [restApiMethodsShouldBeGuardedName]: restApiMethodsShouldBeGuarded, diff --git a/packages/twenty-eslint-rules/rules/matching-state-variable.spec.ts b/packages/twenty-eslint-rules/rules/matching-state-variable.spec.ts index cd52769263..de1c55b0a7 100644 --- a/packages/twenty-eslint-rules/rules/matching-state-variable.spec.ts +++ b/packages/twenty-eslint-rules/rules/matching-state-variable.spec.ts @@ -1,54 +1,38 @@ import { TSESLint } from '@typescript-eslint/utils'; - import { rule, RULE_NAME } from './matching-state-variable'; -const ruleTester = new TSESLint.RuleTester({ - parser: require.resolve('@typescript-eslint/parser'), -}); +const ruleTester = new TSESLint.RuleTester(); ruleTester.run(RULE_NAME, rule, { valid: [ { - code: 'const variable = useRecoilValue(variableState);', + code: 'const variable = useAtomStateValue(variableState);', }, { - code: 'const variable = useRecoilScopedValue(variableScopedState);', + code: 'const [variable, setVariable] = useAtomState(variableState);', + }, + // Component/Family hooks are not checked by this rule + { + code: 'const anything = useAtomComponentStateValue(variableComponentState);', }, { - code: 'const [variable, setVariable] = useRecoilState(variableScopedState);', + code: 'const anything = useAtomFamilyStateValue(variableFamilyState);', }, { - code: 'const [variable, setVariable] = useRecoilScopedState(variableScopedState);', - }, - { - code: 'const [variable, setVariable] = useRecoilFamilyState(variableScopedState);', - }, - { - code: 'const [variable, setVariable] = useRecoilScopedFamilyState(variableScopedState);', + code: 'const [anything, setAnything] = useAtomComponentFamilyState(variableComponentFamilyState);', }, ], invalid: [ { - code: 'const myValue = useRecoilValue(variableState);', + code: 'const myValue = useAtomStateValue(variableState);', errors: [ { messageId: 'invalidVariableName', }, ], - output: 'const variable = useRecoilValue(variableState);', }, { - code: 'const myValue = useRecoilScopedValue(variableState);', - errors: [ - { - messageId: 'invalidVariableName', - }, - ], - output: 'const variable = useRecoilScopedValue(variableState);', - }, - - { - code: 'const [myValue, setMyValue] = useRecoilState(variableState);', + code: 'const [myValue, setMyValue] = useAtomState(variableState);', errors: [ { messageId: 'invalidVariableName', @@ -57,122 +41,22 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'invalidSetterName', }, ], - output: 'const [variable, setVariable] = useRecoilState(variableState);', }, { - code: 'const [myValue] = useRecoilState(variableState);', + code: 'const [myValue] = useAtomState(variableState);', errors: [ { messageId: 'invalidVariableName', }, ], - output: 'const [variable] = useRecoilState(variableState);', }, { - code: 'const [, setMyValue] = useRecoilState(variableState);', + code: 'const [, setMyValue] = useAtomState(variableState);', errors: [ { messageId: 'invalidSetterName', }, ], - output: 'const [, setVariable] = useRecoilState(variableState);', - }, - - { - code: 'const [myValue, setMyValue] = useRecoilScopedState(variableState);', - errors: [ - { - messageId: 'invalidVariableName', - }, - { - messageId: 'invalidSetterName', - }, - ], - output: - 'const [variable, setVariable] = useRecoilScopedState(variableState);', - }, - { - code: 'const [myValue] = useRecoilScopedState(variableState);', - errors: [ - { - messageId: 'invalidVariableName', - }, - ], - output: 'const [variable] = useRecoilScopedState(variableState);', - }, - { - code: 'const [, setMyValue] = useRecoilScopedState(variableState);', - errors: [ - { - messageId: 'invalidSetterName', - }, - ], - output: 'const [, setVariable] = useRecoilScopedState(variableState);', - }, - - { - code: 'const [myValue, setMyValue] = useRecoilFamilyState(variableState);', - errors: [ - { - messageId: 'invalidVariableName', - }, - { - messageId: 'invalidSetterName', - }, - ], - output: - 'const [variable, setVariable] = useRecoilFamilyState(variableState);', - }, - { - code: 'const [myValue] = useRecoilFamilyState(variableState);', - errors: [ - { - messageId: 'invalidVariableName', - }, - ], - output: 'const [variable] = useRecoilFamilyState(variableState);', - }, - { - code: 'const [, setMyValue] = useRecoilFamilyState(variableState);', - errors: [ - { - messageId: 'invalidSetterName', - }, - ], - output: 'const [, setVariable] = useRecoilFamilyState(variableState);', - }, - - { - code: 'const [myValue, setMyValue] = useRecoilScopedFamilyState(variableState);', - errors: [ - { - messageId: 'invalidVariableName', - }, - { - messageId: 'invalidSetterName', - }, - ], - output: - 'const [variable, setVariable] = useRecoilScopedFamilyState(variableState);', - }, - { - code: 'const [myValue] = useRecoilScopedFamilyState(variableState);', - errors: [ - { - messageId: 'invalidVariableName', - }, - ], - output: 'const [variable] = useRecoilScopedFamilyState(variableState);', - }, - { - code: 'const [, setMyValue] = useRecoilScopedFamilyState(variableState);', - errors: [ - { - messageId: 'invalidSetterName', - }, - ], - output: - 'const [, setVariable] = useRecoilScopedFamilyState(variableState);', }, ], }); diff --git a/packages/twenty-eslint-rules/rules/matching-state-variable.ts b/packages/twenty-eslint-rules/rules/matching-state-variable.ts index 34d3cf19c2..ce9bf18483 100644 --- a/packages/twenty-eslint-rules/rules/matching-state-variable.ts +++ b/packages/twenty-eslint-rules/rules/matching-state-variable.ts @@ -14,8 +14,7 @@ export const rule = ESLintUtils.RuleCreator(() => __filename)({ type: 'problem', docs: { description: - 'Ensure recoil value and setter are named after their atom name', - recommended: 'recommended', + 'Ensure state value and setter are named after their atom name', }, fixable: 'code', schema: [], @@ -33,14 +32,9 @@ export const rule = ESLintUtils.RuleCreator(() => __filename)({ if ( node?.init?.type === AST_NODE_TYPES.CallExpression && isIdentifier(node.init.callee) && - [ - 'useRecoilState', - 'useRecoilScopedState', - 'useRecoilFamilyState', - 'useRecoilScopedFamilyState', - 'useRecoilValue', - 'useRecoilScopedValue', - ].includes(node.init.callee.name) + ['useAtomState', 'useAtomStateValue'].includes( + node.init.callee.name, + ) ) { const stateNameBase = isIdentifier(node.init.arguments[0]) ? node.init.arguments[0].name @@ -51,7 +45,7 @@ export const rule = ESLintUtils.RuleCreator(() => __filename)({ } const expectedVariableNameBase = stateNameBase.replace( - /(State|FamilyState|Selector|ScopedState|ScopedFamilyState|ScopedSelector)$/, + /(State|Selector|ScopedState|ScopedFamilyState|ScopedSelector)$/, '', ); diff --git a/packages/twenty-eslint-rules/rules/no-angle-bracket-placeholders.ts b/packages/twenty-eslint-rules/rules/no-angle-bracket-placeholders.ts index 5331ae0a03..a529618d3e 100644 --- a/packages/twenty-eslint-rules/rules/no-angle-bracket-placeholders.ts +++ b/packages/twenty-eslint-rules/rules/no-angle-bracket-placeholders.ts @@ -45,7 +45,6 @@ const ALLOWED_TAGS = [ 'AccordionGroup', 'Router', 'BrowserRouter', - 'RecoilRoot', ]; export const rule: Rule.RuleModule = { diff --git a/packages/twenty-eslint-rules/rules/use-getLoadable-and-getValue-to-get-atoms.spec.ts b/packages/twenty-eslint-rules/rules/use-getLoadable-and-getValue-to-get-atoms.spec.ts deleted file mode 100644 index 40772c3813..0000000000 --- a/packages/twenty-eslint-rules/rules/use-getLoadable-and-getValue-to-get-atoms.spec.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { TSESLint } from '@typescript-eslint/utils'; - -import { rule, RULE_NAME } from './use-getLoadable-and-getValue-to-get-atoms'; - -const ruleTester = new TSESLint.RuleTester({ - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { - ecmaFeatures: { - jsx: true, - }, - }, -}); - -ruleTester.run(RULE_NAME, rule, { - valid: [ - { - code: 'const atoms = snapshot.getLoadable(someState).getValue();', - }, - { - code: 'const atoms = snapshot.getLoadable(someState(viewId)).getValue();', - }, - ], - invalid: [ - { - code: 'const atoms = await snapshot.getPromise(someState);', - errors: [ - { - messageId: 'invalidAccessorOnSnapshot', - }, - ], - output: 'const atoms = await snapshot.getLoadable(someState);', - }, - { - code: 'const atoms = await snapshot.getPromise(someState(viewId));', - errors: [ - { - messageId: 'invalidAccessorOnSnapshot', - }, - ], - output: 'const atoms = await snapshot.getLoadable(someState(viewId));', - }, - { - code: 'const atoms = snapshot.getLoadable(someState).anotherMethod();', - errors: [ - { - messageId: 'invalidWayToGetAtoms', - }, - ], - output: 'const atoms = snapshot.getLoadable(someState).getValue();', - }, - ], -}); diff --git a/packages/twenty-eslint-rules/rules/use-getLoadable-and-getValue-to-get-atoms.ts b/packages/twenty-eslint-rules/rules/use-getLoadable-and-getValue-to-get-atoms.ts deleted file mode 100644 index c5dbc20f37..0000000000 --- a/packages/twenty-eslint-rules/rules/use-getLoadable-and-getValue-to-get-atoms.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { ESLintUtils } from '@typescript-eslint/utils'; - -// NOTE: The rule will be available in ESLint configs as "@nx/workspace-usage-getLoadable-and-getValue-to-get-atoms" -export const RULE_NAME = 'use-getLoadable-and-getValue-to-get-atoms'; - -export const rule = ESLintUtils.RuleCreator(() => __filename)({ - name: RULE_NAME, - meta: { - type: 'problem', - docs: { - description: 'Ensure you are using getLoadable and getValue', - recommended: 'recommended', - }, - fixable: 'code', - schema: [], - messages: { - redundantAwait: 'Redundant await on non-promise', - invalidAccessorOnSnapshot: - "Expected to use method 'getLoadable()' on 'snapshot' but instead found '{{ propertyName }}'", - invalidWayToGetAtoms: - "Expected to use method 'getValue()' with 'getLoadable()' but instead found '{{ propertyName }}'", - }, - }, - defaultOptions: [], - create: (context) => ({ - AwaitExpression: (node) => { - const { argument, range }: any = node; - if ( - (argument.callee?.object?.callee?.object?.name === 'snapshot' && - argument?.callee?.object?.callee?.property?.name === 'getLoadable') || - (argument.callee?.object?.name === 'snapshot' && - argument?.callee?.property?.name === 'getLoadable') - ) { - // remove await - context.report({ - node, - messageId: 'redundantAwait', - data: { - propertyName: argument.callee.property.name, - }, - fix: (fixer) => fixer.removeRange([range[0], range[0] + 5]), - }); - } - }, - MemberExpression: (node) => { - const { object, property }: any = node; - - if ( - object.callee?.type === 'MemberExpression' && - object.callee.object?.name === 'snapshot' && - object.callee.property?.name === 'getLoadable' - ) { - const propertyName = property.name; - - if (propertyName !== 'getValue') { - context.report({ - node: property, - messageId: 'invalidWayToGetAtoms', - data: { - propertyName, - }, - // replace the property with `getValue` - fix: (fixer) => fixer.replaceText(property, 'getValue'), - }); - } - } - }, - CallExpression: (node) => { - const { callee }: any = node; - - if ( - callee.type === 'MemberExpression' && - callee.object?.name === 'snapshot' && - callee.property?.name === 'getPromise' - ) { - context.report({ - node: callee.property, - messageId: 'invalidAccessorOnSnapshot', - data: { - propertyName: callee.property.name, - }, - // Replace `getPromise` with `getLoadable` - fix: (fixer) => fixer.replaceText(callee.property, 'getLoadable'), - }); - } - }, - }), -}); diff --git a/packages/twenty-eslint-rules/rules/useRecoilCallback-has-dependency-array.spec.ts b/packages/twenty-eslint-rules/rules/useRecoilCallback-has-dependency-array.spec.ts deleted file mode 100644 index a671cfc69c..0000000000 --- a/packages/twenty-eslint-rules/rules/useRecoilCallback-has-dependency-array.spec.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { TSESLint } from '@typescript-eslint/utils'; - -import { rule, RULE_NAME } from './useRecoilCallback-has-dependency-array'; - -const ruleTester = new TSESLint.RuleTester({ - parser: require.resolve('@typescript-eslint/parser'), -}); - -ruleTester.run(RULE_NAME, rule, { - valid: [ - { - code: 'const someValue = useRecoilCallback(() => () => {}, []);', - }, - { - code: 'const someValue = useRecoilCallback(() => () => {}, [dependency]);', - }, - ], - invalid: [ - { - code: 'const someValue = useRecoilCallback(({}) => () => {});', - errors: [ - { - messageId: 'isNecessaryDependencyArray', - }, - ], - output: 'const someValue = useRecoilCallback(({}) => () => {}, []);', - }, - ], -}); diff --git a/packages/twenty-eslint-rules/rules/useRecoilCallback-has-dependency-array.ts b/packages/twenty-eslint-rules/rules/useRecoilCallback-has-dependency-array.ts deleted file mode 100644 index 6585d130d4..0000000000 --- a/packages/twenty-eslint-rules/rules/useRecoilCallback-has-dependency-array.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { ESLintUtils } from '@typescript-eslint/utils'; - -// NOTE: The rule will be available in ESLint configs as "@nx/workspace-useRecoilCallback-has-dependency-array" -export const RULE_NAME = 'useRecoilCallback-has-dependency-array'; - -export const rule = ESLintUtils.RuleCreator(() => __filename)({ - name: RULE_NAME, - meta: { - type: 'problem', - docs: { - description: 'Ensure `useRecoilCallback` is used with a dependency array', - recommended: 'recommended', - }, - schema: [], - messages: { - isNecessaryDependencyArray: - 'Is necessary dependency array with useRecoilCallback', - }, - fixable: 'code', - }, - defaultOptions: [], - create: (context) => { - return { - CallExpression: (node) => { - const { callee } = node; - if ( - callee.type === 'Identifier' && - callee.name === 'useRecoilCallback' - ) { - const depsArg = node.arguments; - if (depsArg.length === 1) { - context.report({ - node: callee, - messageId: 'isNecessaryDependencyArray', - data: { - callee, - deps: depsArg[0], - }, - fix: (fixer) => fixer.insertTextAfter(depsArg[0], ', []'), - }); - } - } - }, - }; - }, -}); diff --git a/packages/twenty-front/package.json b/packages/twenty-front/package.json index ca3dcbf684..fa8e425380 100644 --- a/packages/twenty-front/package.json +++ b/packages/twenty-front/package.json @@ -110,7 +110,6 @@ "react-responsive": "^9.0.2", "react-router-dom": "^6.4.4", "react-textarea-autosize": "^8.4.1", - "recoil": "^0.7.7", "remark-gfm": "^4.0.1", "transliteration": "^2.3.5", "twenty-sdk": "workspace:*", diff --git a/packages/twenty-front/src/hooks/__tests__/usePageChangeEffectNavigateLocation.test.ts b/packages/twenty-front/src/hooks/__tests__/usePageChangeEffectNavigateLocation.test.ts index 27fabff12e..a404aebe33 100644 --- a/packages/twenty-front/src/hooks/__tests__/usePageChangeEffectNavigateLocation.test.ts +++ b/packages/twenty-front/src/hooks/__tests__/usePageChangeEffectNavigateLocation.test.ts @@ -64,7 +64,7 @@ const setupMockUseParams = (objectNamePlural?: string) => { }; jest.mock('@/ui/utilities/state/jotai/hooks/useAtomStateValue'); -const setupMockRecoil = ( +const setupMockState = ( objectNamePlural?: string, verifyEmailRedirectPath?: string, calendarBookingPageId?: string | null, @@ -340,7 +340,7 @@ describe('usePageChangeEffectNavigateLocation', () => { setupMockIsWorkspaceActivationStatusEqualsTo(isWorkspaceSuspended); setupMockIsLogged(isLoggedIn); setupMockUseParams(objectNamePluralFromParams); - setupMockRecoil(objectNamePluralFromMetadata, verifyEmailRedirectPath); + setupMockState(objectNamePluralFromMetadata, verifyEmailRedirectPath); expect(usePageChangeEffectNavigateLocation()).toEqual(res); }, diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/run-workflow-actions/hooks/useRunWorkflowRecordActions.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/run-workflow-actions/hooks/useRunWorkflowRecordActions.tsx index 1a60eba4ea..097ddb8e02 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/run-workflow-actions/hooks/useRunWorkflowRecordActions.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/run-workflow-actions/hooks/useRunWorkflowRecordActions.tsx @@ -7,7 +7,6 @@ import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/s import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; -import { useRecordIndexIdFromCurrentContextStore } from '@/object-record/record-index/hooks/useRecordIndexIdFromCurrentContextStore'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; import { useActiveWorkflowVersionsWithManualTrigger } from '@/workflow/hooks/useActiveWorkflowVersionsWithManualTrigger'; import { useRunWorkflowVersion } from '@/workflow/hooks/useRunWorkflowVersion'; @@ -31,16 +30,13 @@ export const useRunWorkflowRecordActions = ({ const store = useStore(); const { getIcon } = useIcons(); const { enqueueWarningSnackBar } = useSnackBar(); - const { recordIndexId } = useRecordIndexIdFromCurrentContextStore(); const contextStoreTargetedRecordsRule = useAtomComponentStateValue( contextStoreTargetedRecordsRuleComponentState, - recordIndexId, ); const isPageInEditMode = useAtomComponentStateValue( contextStoreIsPageInEditModeComponentState, - recordIndexId, ); const selectedRecordIds = diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/__tests__/useRelatedRecordActions.test.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/__tests__/useRelatedRecordActions.test.tsx index ca6a277fd7..5427427b12 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/__tests__/useRelatedRecordActions.test.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/hooks/__tests__/useRelatedRecordActions.test.tsx @@ -1,8 +1,6 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { renderHook } from '@testing-library/react'; -import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; import { useRelatedRecordActions } from '@/action-menu/actions/record-agnostic-actions/hooks/useRelatedRecordActions'; jest.mock('@/object-metadata/hooks/useObjectMetadataItems', () => ({ @@ -24,10 +22,6 @@ jest.mock('@/object-metadata/hooks/useObjectMetadataItems', () => ({ }), })); -const Wrapper = ({ children }: { children: ReactNode }) => ( - {children} -); - describe('useRelatedRecordActions', () => { const mockGetIcon = jest.fn(); @@ -42,14 +36,12 @@ describe('useRelatedRecordActions', () => { updatableFields: [], } as unknown as ObjectMetadataItem; - const { result } = renderHook( - () => - useRelatedRecordActions({ - sourceObjectMetadataItem: objectMetadataItem, - getIcon: mockGetIcon, - startPosition: 18, - }), - { wrapper: Wrapper }, + const { result } = renderHook(() => + useRelatedRecordActions({ + sourceObjectMetadataItem: objectMetadataItem, + getIcon: mockGetIcon, + startPosition: 18, + }), ); expect(result.current).toEqual({}); @@ -58,14 +50,12 @@ describe('useRelatedRecordActions', () => { it('should return empty object when objectMetadataItem is undefined', () => { const objectMetadataItem = undefined as unknown as ObjectMetadataItem; - const { result } = renderHook( - () => - useRelatedRecordActions({ - sourceObjectMetadataItem: objectMetadataItem, - getIcon: mockGetIcon, - startPosition: 18, - }), - { wrapper: Wrapper }, + const { result } = renderHook(() => + useRelatedRecordActions({ + sourceObjectMetadataItem: objectMetadataItem, + getIcon: mockGetIcon, + startPosition: 18, + }), ); expect(result.current).toEqual({}); @@ -104,14 +94,12 @@ describe('useRelatedRecordActions', () => { updatableFields: fields, } as unknown as ObjectMetadataItem; - const { result } = renderHook( - () => - useRelatedRecordActions({ - sourceObjectMetadataItem: objectMetadataItem, - getIcon: mockGetIcon, - startPosition: 18, - }), - { wrapper: Wrapper }, + const { result } = renderHook(() => + useRelatedRecordActions({ + sourceObjectMetadataItem: objectMetadataItem, + getIcon: mockGetIcon, + startPosition: 18, + }), ); expect(Object.keys(result.current)).toHaveLength(2); @@ -156,14 +144,12 @@ describe('useRelatedRecordActions', () => { updatableFields: fields, } as unknown as ObjectMetadataItem; - const { result } = renderHook( - () => - useRelatedRecordActions({ - sourceObjectMetadataItem: objectMetadataItem, - getIcon: mockGetIcon, - startPosition: 18, - }), - { wrapper: Wrapper }, + const { result } = renderHook(() => + useRelatedRecordActions({ + sourceObjectMetadataItem: objectMetadataItem, + getIcon: mockGetIcon, + startPosition: 18, + }), ); expect(Object.keys(result.current)).toHaveLength(1); @@ -204,14 +190,12 @@ describe('useRelatedRecordActions', () => { updatableFields: fields, } as unknown as ObjectMetadataItem; - const { result } = renderHook( - () => - useRelatedRecordActions({ - sourceObjectMetadataItem: objectMetadataItem, - getIcon: mockGetIcon, - startPosition: 18, - }), - { wrapper: Wrapper }, + const { result } = renderHook(() => + useRelatedRecordActions({ + sourceObjectMetadataItem: objectMetadataItem, + getIcon: mockGetIcon, + startPosition: 18, + }), ); expect(result.current['create-related-person'].position).toBe(18); @@ -252,14 +236,12 @@ describe('useRelatedRecordActions', () => { updatableFields: fields, } as unknown as ObjectMetadataItem; - const { result } = renderHook( - () => - useRelatedRecordActions({ - sourceObjectMetadataItem: objectMetadataItem, - getIcon: mockGetIcon, - startPosition: 18, - }), - { wrapper: Wrapper }, + const { result } = renderHook(() => + useRelatedRecordActions({ + sourceObjectMetadataItem: objectMetadataItem, + getIcon: mockGetIcon, + startPosition: 18, + }), ); expect(Object.keys(result.current)).toHaveLength(1); diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/run-workflow-actions/hooks/useRunWorkflowRecordAgnosticActions.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/run-workflow-actions/hooks/useRunWorkflowRecordAgnosticActions.tsx index fb01ceac65..5c305c9673 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/run-workflow-actions/hooks/useRunWorkflowRecordAgnosticActions.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/run-workflow-actions/hooks/useRunWorkflowRecordAgnosticActions.tsx @@ -2,7 +2,6 @@ import { Action } from '@/action-menu/actions/components/Action'; import { ActionScope } from '@/action-menu/actions/types/ActionScope'; import { ActionType } from '@/action-menu/actions/types/ActionType'; import { ActionMenuContext } from '@/action-menu/contexts/ActionMenuContext'; -import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { contextStoreIsPageInEditModeComponentState } from '@/context-store/states/contextStoreIsPageInEditModeComponentState'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; import { useActiveWorkflowVersionsWithManualTrigger } from '@/workflow/hooks/useActiveWorkflowVersionsWithManualTrigger'; @@ -17,7 +16,6 @@ export const useRunWorkflowRecordAgnosticActions = () => { const isPageInEditMode = useAtomComponentStateValue( contextStoreIsPageInEditModeComponentState, - MAIN_CONTEXT_STORE_INSTANCE_ID, ); const { actionMenuType } = useContext(ActionMenuContext); diff --git a/packages/twenty-front/src/modules/action-menu/components/RecordShowRightDrawerActionMenu.tsx b/packages/twenty-front/src/modules/action-menu/components/RecordShowRightDrawerActionMenu.tsx index 5567b54d6e..5da8207a9a 100644 --- a/packages/twenty-front/src/modules/action-menu/components/RecordShowRightDrawerActionMenu.tsx +++ b/packages/twenty-front/src/modules/action-menu/components/RecordShowRightDrawerActionMenu.tsx @@ -1,13 +1,11 @@ import { CommandMenuActionMenuDropdown } from '@/action-menu/components/CommandMenuActionMenuDropdown'; import { ActionMenuContextProvider } from '@/action-menu/contexts/ActionMenuContextProvider'; -import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; export const RecordShowRightDrawerActionMenu = () => { const contextStoreCurrentObjectMetadataItemId = useAtomComponentStateValue( contextStoreCurrentObjectMetadataItemIdComponentState, - MAIN_CONTEXT_STORE_INSTANCE_ID, ); return ( diff --git a/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProvider.tsx b/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProvider.tsx index 01cf7e0d47..ceea09643e 100644 --- a/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProvider.tsx +++ b/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProvider.tsx @@ -1,7 +1,6 @@ import { type ActionMenuContextType } from '@/action-menu/contexts/ActionMenuContext'; import { ActionMenuContextProviderDefault } from '@/action-menu/contexts/ActionMenuContextProviderDefault'; import { ActionMenuContextProviderWorkflowObjects } from '@/action-menu/contexts/ActionMenuContextProviderWorkflowObjects'; -import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; @@ -22,7 +21,6 @@ export const ActionMenuContextProvider = ({ }) => { const contextStoreCurrentObjectMetadataItemId = useAtomComponentStateValue( contextStoreCurrentObjectMetadataItemIdComponentState, - MAIN_CONTEXT_STORE_INSTANCE_ID, ); const objectMetadataItems = useAtomStateValue(objectMetadataItemsState); diff --git a/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProviderDefault.tsx b/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProviderDefault.tsx index 7c6d4adcaf..831e9a39c0 100644 --- a/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProviderDefault.tsx +++ b/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProviderDefault.tsx @@ -7,7 +7,6 @@ import { import { useRegisteredActions } from '@/action-menu/hooks/useRegisteredActions'; import { useShouldActionBeRegisteredParams } from '@/action-menu/hooks/useShouldActionBeRegisteredParams'; import { useCommandMenuItemFrontComponentActions } from '@/command-menu-item/hooks/useCommandMenuItemFrontComponentActions'; -import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; @@ -37,7 +36,6 @@ export const ActionMenuContextProviderDefault = ({ const contextStoreTargetedRecordsRule = useAtomComponentStateValue( contextStoreTargetedRecordsRuleComponentState, - MAIN_CONTEXT_STORE_INSTANCE_ID, ); const isRecordSelection = diff --git a/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProviderWorkflowObjects.tsx b/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProviderWorkflowObjects.tsx index 50e6b4e9dd..ade33116d7 100644 --- a/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProviderWorkflowObjects.tsx +++ b/packages/twenty-front/src/modules/action-menu/contexts/ActionMenuContextProviderWorkflowObjects.tsx @@ -6,7 +6,6 @@ import { import { useRegisteredActions } from '@/action-menu/hooks/useRegisteredActions'; import { useShouldActionBeRegisteredParams } from '@/action-menu/hooks/useShouldActionBeRegisteredParams'; import { useCommandMenuItemFrontComponentActions } from '@/command-menu-item/hooks/useCommandMenuItemFrontComponentActions'; -import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; @@ -125,7 +124,6 @@ export const ActionMenuContextProviderWorkflowObjects = ({ }: ActionMenuContextProviderWorkflowObjectsProps) => { const contextStoreTargetedRecordsRule = useAtomComponentStateValue( contextStoreTargetedRecordsRuleComponentState, - MAIN_CONTEXT_STORE_INSTANCE_ID, ); const recordId = diff --git a/packages/twenty-front/src/modules/action-menu/hooks/useRegisteredActions.ts b/packages/twenty-front/src/modules/action-menu/hooks/useRegisteredActions.ts index 04349dbb90..9dfada0045 100644 --- a/packages/twenty-front/src/modules/action-menu/hooks/useRegisteredActions.ts +++ b/packages/twenty-front/src/modules/action-menu/hooks/useRegisteredActions.ts @@ -4,11 +4,9 @@ import { ActionViewType } from '@/action-menu/actions/types/ActionViewType'; import { type ShouldBeRegisteredFunctionParams } from '@/action-menu/actions/types/ShouldBeRegisteredFunctionParams'; import { getActionConfig } from '@/action-menu/actions/utils/getActionConfig'; import { getActionViewType } from '@/action-menu/actions/utils/getActionViewType'; -import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState'; import { contextStoreIsPageInEditModeComponentState } from '@/context-store/states/contextStoreIsPageInEditModeComponentState'; import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; -import { useRecordIndexIdFromCurrentContextStore } from '@/object-record/record-index/hooks/useRecordIndexIdFromCurrentContextStore'; import { usePermissionFlagMap } from '@/settings/roles/hooks/usePermissionFlagMap'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; import { isDefined } from 'twenty-shared/utils'; @@ -24,19 +22,14 @@ export const useRegisteredActions = ( const contextStoreTargetedRecordsRule = useAtomComponentStateValue( contextStoreTargetedRecordsRuleComponentState, - MAIN_CONTEXT_STORE_INSTANCE_ID, ); const contextStoreCurrentViewType = useAtomComponentStateValue( contextStoreCurrentViewTypeComponentState, - MAIN_CONTEXT_STORE_INSTANCE_ID, ); - const { recordIndexId } = useRecordIndexIdFromCurrentContextStore(); - const isFullTabWidgetInEditMode = useAtomComponentStateValue( contextStoreIsPageInEditModeComponentState, - recordIndexId, ); const viewType = getActionViewType( diff --git a/packages/twenty-front/src/modules/action-menu/hooks/useShouldActionBeRegisteredParams.ts b/packages/twenty-front/src/modules/action-menu/hooks/useShouldActionBeRegisteredParams.ts index 563c14535b..b8496723d4 100644 --- a/packages/twenty-front/src/modules/action-menu/hooks/useShouldActionBeRegisteredParams.ts +++ b/packages/twenty-front/src/modules/action-menu/hooks/useShouldActionBeRegisteredParams.ts @@ -4,7 +4,6 @@ import { getActionViewType } from '@/action-menu/actions/utils/getActionViewType import { ActionMenuContext } from '@/action-menu/contexts/ActionMenuContext'; import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { objectPermissionsFamilySelector } from '@/auth/states/objectPermissionsFamilySelector'; -import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState'; import { contextStoreNumberOfSelectedRecordsComponentState } from '@/context-store/states/contextStoreNumberOfSelectedRecordsComponentState'; import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; @@ -41,7 +40,6 @@ export const useShouldActionBeRegisteredParams = ({ const contextStoreTargetedRecordsRule = useAtomComponentStateValue( contextStoreTargetedRecordsRuleComponentState, - MAIN_CONTEXT_STORE_INSTANCE_ID, ); const recordId = @@ -97,19 +95,15 @@ export const useShouldActionBeRegisteredParams = ({ ); const isShowPage = - useAtomComponentStateValue( - contextStoreCurrentViewTypeComponentState, - MAIN_CONTEXT_STORE_INSTANCE_ID, - ) === ContextStoreViewType.ShowPage; + useAtomComponentStateValue(contextStoreCurrentViewTypeComponentState) === + ContextStoreViewType.ShowPage; const numberOfSelectedRecords = useAtomComponentStateValue( contextStoreNumberOfSelectedRecordsComponentState, - MAIN_CONTEXT_STORE_INSTANCE_ID, ); const contextStoreCurrentViewType = useAtomComponentStateValue( contextStoreCurrentViewTypeComponentState, - MAIN_CONTEXT_STORE_INSTANCE_ID, ); const viewType = getActionViewType( diff --git a/packages/twenty-front/src/modules/activities/hooks/__tests__/useActivities.test.tsx b/packages/twenty-front/src/modules/activities/hooks/__tests__/useActivities.test.tsx index a71455bb9a..67df24f1c4 100644 --- a/packages/twenty-front/src/modules/activities/hooks/__tests__/useActivities.test.tsx +++ b/packages/twenty-front/src/modules/activities/hooks/__tests__/useActivities.test.tsx @@ -1,7 +1,4 @@ import { renderHook } from '@testing-library/react'; -import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; - import { useActivities } from '@/activities/hooks/useActivities'; import { type Task } from '@/activities/types/Task'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; @@ -40,10 +37,6 @@ const mockActivity = { taskTargets: [], } satisfies Task; -const Wrapper = ({ children }: { children: ReactNode }) => ( - {children} -); - describe('useActivities', () => { afterEach(() => { jest.clearAllMocks(); @@ -60,21 +53,16 @@ describe('useActivities', () => { }, ); - const { result } = renderHook( - () => { - const activities = useActivities({ - objectNameSingular: CoreObjectNameSingular.Task, - targetableObjects: [ - { targetObjectNameSingular: 'company', id: '123' }, - ], - skip: false, - limit: 10, - activityTargetsOrderByVariables: [{}], - }); - return activities; - }, - { wrapper: Wrapper }, - ); + const { result } = renderHook(() => { + const activities = useActivities({ + objectNameSingular: CoreObjectNameSingular.Task, + targetableObjects: [{ targetObjectNameSingular: 'company', id: '123' }], + skip: false, + limit: 10, + activityTargetsOrderByVariables: [{}], + }); + return activities; + }); expect(result.current.activities).toEqual([mockActivity]); }); diff --git a/packages/twenty-front/src/modules/activities/hooks/__tests__/useActivityTargetObjectRecords.test.tsx b/packages/twenty-front/src/modules/activities/hooks/__tests__/useActivityTargetObjectRecords.test.tsx index a027b2c759..5eca208130 100644 --- a/packages/twenty-front/src/modules/activities/hooks/__tests__/useActivityTargetObjectRecords.test.tsx +++ b/packages/twenty-front/src/modules/activities/hooks/__tests__/useActivityTargetObjectRecords.test.tsx @@ -3,7 +3,6 @@ import { MockedProvider } from '@apollo/client/testing'; import { act, renderHook } from '@testing-library/react'; import { type ReactNode } from 'react'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; import { useActivityTargetObjectRecords } from '@/activities/hooks/useActivityTargetObjectRecords'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; @@ -115,17 +114,15 @@ const task = { const Wrapper = ({ children }: { children: ReactNode }) => ( - - - - - {children} - - - - + + + + {children} + + + ); diff --git a/packages/twenty-front/src/modules/activities/hooks/useRefreshShowPageFindManyActivitiesQueries.ts b/packages/twenty-front/src/modules/activities/hooks/useRefreshShowPageFindManyActivitiesQueries.ts index f80fffb1eb..e9cb297e4b 100644 --- a/packages/twenty-front/src/modules/activities/hooks/useRefreshShowPageFindManyActivitiesQueries.ts +++ b/packages/twenty-front/src/modules/activities/hooks/useRefreshShowPageFindManyActivitiesQueries.ts @@ -1,5 +1,5 @@ import { usePrepareFindManyActivitiesQuery } from '@/activities/hooks/usePrepareFindManyActivitiesQuery'; -import { objectShowPageTargetableObjectStateV2 } from '@/activities/timeline-activities/states/objectShowPageTargetableObjectStateV2'; +import { objectShowPageTargetableObjectState } from '@/activities/timeline-activities/states/objectShowPageTargetableObjectState'; import { type CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { isDefined } from 'twenty-shared/utils'; @@ -13,7 +13,7 @@ export const useRefreshShowPageFindManyActivitiesQueries = ({ activityObjectNameSingular: CoreObjectNameSingular; }) => { const objectShowPageTargetableObject = useAtomStateValue( - objectShowPageTargetableObjectStateV2, + objectShowPageTargetableObjectState, ); const { prepareFindManyActivitiesQuery } = usePrepareFindManyActivitiesQuery({ diff --git a/packages/twenty-front/src/modules/activities/hooks/useUpsertActivity.ts b/packages/twenty-front/src/modules/activities/hooks/useUpsertActivity.ts index b3e62042d2..d879a6e5b8 100644 --- a/packages/twenty-front/src/modules/activities/hooks/useUpsertActivity.ts +++ b/packages/twenty-front/src/modules/activities/hooks/useUpsertActivity.ts @@ -2,7 +2,7 @@ import { useCreateActivityInDB } from '@/activities/hooks/useCreateActivityInDB' import { useRefreshShowPageFindManyActivitiesQueries } from '@/activities/hooks/useRefreshShowPageFindManyActivitiesQueries'; import { isActivityInCreateModeState } from '@/activities/states/isActivityInCreateModeState'; import { isUpsertingActivityInDBState } from '@/activities/states/isCreatingActivityInDBState'; -import { objectShowPageTargetableObjectStateV2 } from '@/activities/timeline-activities/states/objectShowPageTargetableObjectStateV2'; +import { objectShowPageTargetableObjectState } from '@/activities/timeline-activities/states/objectShowPageTargetableObjectState'; import { type Note } from '@/activities/types/Note'; import { type Task } from '@/activities/types/Task'; import { type CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; @@ -31,7 +31,7 @@ export const useUpsertActivity = ({ ); const objectShowPageTargetableObject = useAtomStateValue( - objectShowPageTargetableObjectStateV2, + objectShowPageTargetableObjectState, ); const { refreshShowPageFindManyActivitiesQueries } = diff --git a/packages/twenty-front/src/modules/activities/notes/hooks/__tests__/useNotes.test.ts b/packages/twenty-front/src/modules/activities/notes/hooks/__tests__/useNotes.test.ts index 548fc0d8f8..3975a519be 100644 --- a/packages/twenty-front/src/modules/activities/notes/hooks/__tests__/useNotes.test.ts +++ b/packages/twenty-front/src/modules/activities/notes/hooks/__tests__/useNotes.test.ts @@ -10,20 +10,15 @@ jest.mock('@/activities/hooks/useActivities', () => ({ })), })); -jest.mock('recoil', () => { - const actualRecoil = jest.requireActual('recoil'); - return { - ...actualRecoil, - useRecoilState: jest.fn(() => { - const mockCurrentNotesQueryVariables = { - filter: {}, - orderBy: 'mockOrderBy', - }; - return [mockCurrentNotesQueryVariables, jest.fn()]; - }), - atom: jest.fn(), - }; -}); +jest.mock('@/ui/utilities/state/jotai/hooks/useAtomState', () => ({ + useAtomState: jest.fn(() => { + const mockCurrentNotesQueryVariables = { + filter: {}, + orderBy: 'mockOrderBy', + }; + return [mockCurrentNotesQueryVariables, jest.fn()]; + }), +})); describe('useNotes', () => { it('should return notes, and loading as expected', () => { diff --git a/packages/twenty-front/src/modules/activities/notes/hooks/useNotes.ts b/packages/twenty-front/src/modules/activities/notes/hooks/useNotes.ts index fff3a27276..9b2d791fa3 100644 --- a/packages/twenty-front/src/modules/activities/notes/hooks/useNotes.ts +++ b/packages/twenty-front/src/modules/activities/notes/hooks/useNotes.ts @@ -1,7 +1,7 @@ import { useEffect, useMemo } from 'react'; import { useActivities } from '@/activities/hooks/useActivities'; -import { currentNotesQueryVariablesStateV2 } from '@/activities/notes/states/currentNotesQueryVariablesStateV2'; +import { currentNotesQueryVariablesState } from '@/activities/notes/states/currentNotesQueryVariablesState'; import { FIND_MANY_TIMELINE_ACTIVITIES_ORDER_BY } from '@/activities/timeline-activities/constants/FindManyTimelineActivitiesOrderBy'; import { type Note } from '@/activities/types/Note'; import { type RecordGqlOperationVariables } from 'twenty-shared/types'; @@ -34,7 +34,7 @@ export const useNotes = (targetableObject: ActivityTargetableObject) => { }); const [currentNotesQueryVariables, setCurrentNotesQueryVariables] = - useAtomState(currentNotesQueryVariablesStateV2); + useAtomState(currentNotesQueryVariablesState); // TODO: fix useEffect, remove with better pattern useEffect(() => { diff --git a/packages/twenty-front/src/modules/activities/notes/states/currentNotesQueryVariablesStateV2.ts b/packages/twenty-front/src/modules/activities/notes/states/currentNotesQueryVariablesState.ts similarity index 71% rename from packages/twenty-front/src/modules/activities/notes/states/currentNotesQueryVariablesStateV2.ts rename to packages/twenty-front/src/modules/activities/notes/states/currentNotesQueryVariablesState.ts index fb4896be36..55f9c431e4 100644 --- a/packages/twenty-front/src/modules/activities/notes/states/currentNotesQueryVariablesStateV2.ts +++ b/packages/twenty-front/src/modules/activities/notes/states/currentNotesQueryVariablesState.ts @@ -2,8 +2,8 @@ import { type RecordGqlOperationVariables } from 'twenty-shared/types'; import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const currentNotesQueryVariablesStateV2 = +export const currentNotesQueryVariablesState = createAtomState({ - key: 'currentNotesQueryVariablesStateV2', + key: 'currentNotesQueryVariablesState', defaultValue: null, }); diff --git a/packages/twenty-front/src/modules/activities/tasks/hooks/__tests__/useTasks.test.tsx b/packages/twenty-front/src/modules/activities/tasks/hooks/__tests__/useTasks.test.tsx index baed8c5d62..3dc65f94f5 100644 --- a/packages/twenty-front/src/modules/activities/tasks/hooks/__tests__/useTasks.test.tsx +++ b/packages/twenty-front/src/modules/activities/tasks/hooks/__tests__/useTasks.test.tsx @@ -1,6 +1,5 @@ import { renderHook } from '@testing-library/react'; import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; import { useActivities } from '@/activities/hooks/useActivities'; import { useTasks } from '@/activities/tasks/hooks/useTasks'; @@ -45,13 +44,11 @@ jest.mock('@/activities/hooks/useActivities', () => ({ (useActivities as jest.Mock).mockImplementation(useActivitiesMock); const Wrapper = ({ children }: { children: ReactNode }) => ( - - - {children} - - + + {children} + ); describe('useTasks', () => { diff --git a/packages/twenty-front/src/modules/activities/timeline-activities/states/objectShowPageTargetableObjectStateV2.ts b/packages/twenty-front/src/modules/activities/timeline-activities/states/objectShowPageTargetableObjectState.ts similarity index 71% rename from packages/twenty-front/src/modules/activities/timeline-activities/states/objectShowPageTargetableObjectStateV2.ts rename to packages/twenty-front/src/modules/activities/timeline-activities/states/objectShowPageTargetableObjectState.ts index fdf61999fb..f26c744384 100644 --- a/packages/twenty-front/src/modules/activities/timeline-activities/states/objectShowPageTargetableObjectStateV2.ts +++ b/packages/twenty-front/src/modules/activities/timeline-activities/states/objectShowPageTargetableObjectState.ts @@ -2,8 +2,8 @@ import { type ActivityTargetableObject } from '@/activities/types/ActivityTarget import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const objectShowPageTargetableObjectStateV2 = +export const objectShowPageTargetableObjectState = createAtomState({ - key: 'objectShowPageTargetableObjectStateV2', + key: 'objectShowPageTargetableObjectState', defaultValue: null, }); diff --git a/packages/twenty-front/src/modules/ai/components/AIChatThreadGroup.tsx b/packages/twenty-front/src/modules/ai/components/AIChatThreadGroup.tsx index 84a05b4766..5854aa5494 100644 --- a/packages/twenty-front/src/modules/ai/components/AIChatThreadGroup.tsx +++ b/packages/twenty-front/src/modules/ai/components/AIChatThreadGroup.tsx @@ -1,5 +1,5 @@ -import { agentChatUsageStateV2 } from '@/ai/states/agentChatUsageStateV2'; -import { currentAIChatThreadStateV2 } from '@/ai/states/currentAIChatThreadStateV2'; +import { agentChatUsageState } from '@/ai/states/agentChatUsageState'; +import { currentAIChatThreadState } from '@/ai/states/currentAIChatThreadState'; import { currentAIChatThreadTitleState } from '@/ai/states/currentAIChatThreadTitleState'; import { useOpenAskAIPageInCommandMenu } from '@/command-menu/hooks/useOpenAskAIPageInCommandMenu'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; @@ -79,11 +79,11 @@ export const AIChatThreadGroup = ({ }) => { const { t } = useLingui(); const theme = useTheme(); - const [, setCurrentAIChatThread] = useAtomState(currentAIChatThreadStateV2); + const [, setCurrentAIChatThread] = useAtomState(currentAIChatThreadState); const setCurrentAIChatThreadTitle = useSetAtomState( currentAIChatThreadTitleState, ); - const setAgentChatUsage = useSetAtomState(agentChatUsageStateV2); + const setAgentChatUsage = useSetAtomState(agentChatUsageState); const { openAskAIPage } = useOpenAskAIPageInCommandMenu(); const handleThreadClick = (thread: AgentChatThread) => { diff --git a/packages/twenty-front/src/modules/ai/components/__tests__/ThinkingStepsDisplay.test.tsx b/packages/twenty-front/src/modules/ai/components/__tests__/ThinkingStepsDisplay.test.tsx index 794d668468..49e4740cb8 100644 --- a/packages/twenty-front/src/modules/ai/components/__tests__/ThinkingStepsDisplay.test.tsx +++ b/packages/twenty-front/src/modules/ai/components/__tests__/ThinkingStepsDisplay.test.tsx @@ -16,9 +16,9 @@ jest.mock('~/hooks/useCopyToClipboard', () => ({ })); jest.mock( - '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue', + '@/ui/utilities/state/jotai/hooks/useAtomComponentSelectorValue', () => ({ - useRecoilComponentValue: () => 'output', + useAtomComponentSelectorValue: () => 'output', }), ); diff --git a/packages/twenty-front/src/modules/ai/components/internal/AIChatContextUsageButton.tsx b/packages/twenty-front/src/modules/ai/components/internal/AIChatContextUsageButton.tsx index ff742f7da1..a17916f214 100644 --- a/packages/twenty-front/src/modules/ai/components/internal/AIChatContextUsageButton.tsx +++ b/packages/twenty-front/src/modules/ai/components/internal/AIChatContextUsageButton.tsx @@ -10,9 +10,9 @@ import { ProgressBar } from 'twenty-ui/feedback'; import { ContextUsageProgressRing } from '@/ai/components/internal/ContextUsageProgressRing'; import { SettingsBillingLabelValueItem } from '@/billing/components/internal/SettingsBillingLabelValueItem'; import { - agentChatUsageStateV2, + agentChatUsageState, type AgentChatLastMessageUsage, -} from '@/ai/states/agentChatUsageStateV2'; +} from '@/ai/states/agentChatUsageState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; const StyledContainer = styled.div` @@ -114,7 +114,7 @@ export const AIChatContextUsageButton = () => { const { t } = useLingui(); const theme = useTheme(); const [isHovered, setIsHovered] = useState(false); - const agentChatUsage = useAtomStateValue(agentChatUsageStateV2); + const agentChatUsage = useAtomStateValue(agentChatUsageState); if (!agentChatUsage) { return ( diff --git a/packages/twenty-front/src/modules/ai/components/internal/AgentChatContextPreview.tsx b/packages/twenty-front/src/modules/ai/components/internal/AgentChatContextPreview.tsx index b4dfb43059..400f240d75 100644 --- a/packages/twenty-front/src/modules/ai/components/internal/AgentChatContextPreview.tsx +++ b/packages/twenty-front/src/modules/ai/components/internal/AgentChatContextPreview.tsx @@ -1,5 +1,5 @@ -import { agentChatSelectedFilesStateV2 } from '@/ai/states/agentChatSelectedFilesStateV2'; -import { agentChatUploadedFilesStateV2 } from '@/ai/states/agentChatUploadedFilesStateV2'; +import { agentChatSelectedFilesState } from '@/ai/states/agentChatSelectedFilesState'; +import { agentChatUploadedFilesState } from '@/ai/states/agentChatUploadedFilesState'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import styled from '@emotion/styled'; import { AgentChatFilePreview } from './AgentChatFilePreview'; @@ -20,10 +20,10 @@ const StyledPreviewsContainer = styled.div` export const AgentChatContextPreview = () => { const [agentChatSelectedFiles, setAgentChatSelectedFiles] = useAtomState( - agentChatSelectedFilesStateV2, + agentChatSelectedFilesState, ); const [agentChatUploadedFiles, setAgentChatUploadedFiles] = useAtomState( - agentChatUploadedFilesStateV2, + agentChatUploadedFilesState, ); const handleRemoveUploadedFile = (fileIndex: number) => { diff --git a/packages/twenty-front/src/modules/ai/components/internal/AgentChatFileUploadButton.tsx b/packages/twenty-front/src/modules/ai/components/internal/AgentChatFileUploadButton.tsx index 7bcc9caa26..d6b48125bd 100644 --- a/packages/twenty-front/src/modules/ai/components/internal/AgentChatFileUploadButton.tsx +++ b/packages/twenty-front/src/modules/ai/components/internal/AgentChatFileUploadButton.tsx @@ -1,5 +1,5 @@ import { useAIChatFileUpload } from '@/ai/hooks/useAIChatFileUpload'; -import { agentChatSelectedFilesStateV2 } from '@/ai/states/agentChatSelectedFilesStateV2'; +import { agentChatSelectedFilesState } from '@/ai/states/agentChatSelectedFilesState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import styled from '@emotion/styled'; import { t } from '@lingui/core/macro'; @@ -19,7 +19,7 @@ const StyledFileInput = styled.input` export const AgentChatFileUploadButton = () => { const setAgentChatSelectedFiles = useSetAtomState( - agentChatSelectedFilesStateV2, + agentChatSelectedFilesState, ); const fileInputRef = useRef(null); const { uploadFiles } = useAIChatFileUpload(); diff --git a/packages/twenty-front/src/modules/ai/components/internal/SendMessageButton.tsx b/packages/twenty-front/src/modules/ai/components/internal/SendMessageButton.tsx index df6b3c166b..592fe0822c 100644 --- a/packages/twenty-front/src/modules/ai/components/internal/SendMessageButton.tsx +++ b/packages/twenty-front/src/modules/ai/components/internal/SendMessageButton.tsx @@ -1,5 +1,5 @@ import { useAgentChatContextOrThrow } from '@/ai/hooks/useAgentChatContextOrThrow'; -import { agentChatInputStateV2 } from '@/ai/states/agentChatInputStateV2'; +import { agentChatInputState } from '@/ai/states/agentChatInputState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { IconArrowUp, IconPlayerStop } from 'twenty-ui/display'; import { RoundedIconButton } from 'twenty-ui/input'; @@ -9,7 +9,7 @@ type SendMessageButtonProps = { }; export const SendMessageButton = ({ onSend }: SendMessageButtonProps) => { - const agentChatInput = useAtomStateValue(agentChatInputStateV2); + const agentChatInput = useAtomStateValue(agentChatInputState); const { handleStop, isLoading, isStreaming } = useAgentChatContextOrThrow(); if (isStreaming) { diff --git a/packages/twenty-front/src/modules/ai/components/suggested-prompts/AIChatSuggestedPrompts.tsx b/packages/twenty-front/src/modules/ai/components/suggested-prompts/AIChatSuggestedPrompts.tsx index 114f2dc9f3..f40951ade5 100644 --- a/packages/twenty-front/src/modules/ai/components/suggested-prompts/AIChatSuggestedPrompts.tsx +++ b/packages/twenty-front/src/modules/ai/components/suggested-prompts/AIChatSuggestedPrompts.tsx @@ -8,7 +8,7 @@ import { DEFAULT_SUGGESTED_PROMPTS, type SuggestedPrompt, } from '@/ai/components/suggested-prompts/default-suggested-prompts'; -import { agentChatInputStateV2 } from '@/ai/states/agentChatInputStateV2'; +import { agentChatInputState } from '@/ai/states/agentChatInputState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; const StyledContainer = styled.div` @@ -43,7 +43,7 @@ export const AIChatSuggestedPrompts = ({ editor, }: AIChatSuggestedPromptsProps) => { const { t: resolveMessage } = useLingui(); - const setAgentChatInput = useSetAtomState(agentChatInputStateV2); + const setAgentChatInput = useSetAtomState(agentChatInputState); const handleClick = (prompt: SuggestedPrompt) => { const picked = pickRandom(prompt.prefillPrompts); diff --git a/packages/twenty-front/src/modules/ai/hooks/useAIChatEditor.ts b/packages/twenty-front/src/modules/ai/hooks/useAIChatEditor.ts index 19eb2c358d..1946aac2bf 100644 --- a/packages/twenty-front/src/modules/ai/hooks/useAIChatEditor.ts +++ b/packages/twenty-front/src/modules/ai/hooks/useAIChatEditor.ts @@ -9,7 +9,7 @@ import { useCallback, useMemo } from 'react'; import { isDefined } from 'twenty-shared/utils'; import { AI_CHAT_INPUT_ID } from '@/ai/constants/AiChatInputId'; -import { agentChatInputStateV2 } from '@/ai/states/agentChatInputStateV2'; +import { agentChatInputState } from '@/ai/states/agentChatInputState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { MENTION_SUGGESTION_PLUGIN_KEY } from '@/mention/constants/MentionSuggestionPluginKey'; import { MentionSuggestion } from '@/mention/extensions/MentionSuggestion'; @@ -25,7 +25,7 @@ type UseAIChatEditorProps = { }; export const useAIChatEditor = ({ onSendMessage }: UseAIChatEditorProps) => { - const setAgentChatInput = useSetAtomState(agentChatInputStateV2); + const setAgentChatInput = useSetAtomState(agentChatInputState); const { searchMentionRecords } = useMentionSearch(); const { pushFocusItemToFocusStack } = usePushFocusItemToFocusStack(); const { removeFocusItemFromFocusStackById } = diff --git a/packages/twenty-front/src/modules/ai/hooks/useAIChatFileUpload.ts b/packages/twenty-front/src/modules/ai/hooks/useAIChatFileUpload.ts index d95e8ee24d..192e02cf7e 100644 --- a/packages/twenty-front/src/modules/ai/hooks/useAIChatFileUpload.ts +++ b/packages/twenty-front/src/modules/ai/hooks/useAIChatFileUpload.ts @@ -1,5 +1,5 @@ -import { agentChatSelectedFilesStateV2 } from '@/ai/states/agentChatSelectedFilesStateV2'; -import { agentChatUploadedFilesStateV2 } from '@/ai/states/agentChatUploadedFilesStateV2'; +import { agentChatSelectedFilesState } from '@/ai/states/agentChatSelectedFilesState'; +import { agentChatUploadedFilesState } from '@/ai/states/agentChatUploadedFilesState'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { useApolloClient } from '@apollo/client'; @@ -18,10 +18,10 @@ export const useAIChatFileUpload = () => { const { t } = useLingui(); const { enqueueErrorSnackBar } = useSnackBar(); const [agentChatSelectedFiles, setAgentChatSelectedFiles] = useAtomState( - agentChatSelectedFilesStateV2, + agentChatSelectedFilesState, ); const [agentChatUploadedFiles, setAgentChatUploadedFiles] = useAtomState( - agentChatUploadedFilesStateV2, + agentChatUploadedFilesState, ); const sendFile = async (file: File): Promise => { diff --git a/packages/twenty-front/src/modules/ai/hooks/useAgentChat.ts b/packages/twenty-front/src/modules/ai/hooks/useAgentChat.ts index ed1b326525..82c90f07d8 100644 --- a/packages/twenty-front/src/modules/ai/hooks/useAgentChat.ts +++ b/packages/twenty-front/src/modules/ai/hooks/useAgentChat.ts @@ -1,11 +1,11 @@ import { useGetBrowsingContext } from '@/ai/hooks/useBrowsingContext'; -import { agentChatSelectedFilesStateV2 } from '@/ai/states/agentChatSelectedFilesStateV2'; -import { agentChatUploadedFilesStateV2 } from '@/ai/states/agentChatUploadedFilesStateV2'; -import { agentChatUsageStateV2 } from '@/ai/states/agentChatUsageStateV2'; -import { currentAIChatThreadStateV2 } from '@/ai/states/currentAIChatThreadStateV2'; +import { agentChatSelectedFilesState } from '@/ai/states/agentChatSelectedFilesState'; +import { agentChatUploadedFilesState } from '@/ai/states/agentChatUploadedFilesState'; +import { agentChatUsageState } from '@/ai/states/agentChatUsageState'; +import { currentAIChatThreadState } from '@/ai/states/currentAIChatThreadState'; import { currentAIChatThreadTitleState } from '@/ai/states/currentAIChatThreadTitleState'; -import { agentChatInputStateV2 } from '@/ai/states/agentChatInputStateV2'; +import { agentChatInputState } from '@/ai/states/agentChatInputState'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; @@ -22,26 +22,22 @@ import { cookieStorage } from '~/utils/cookie-storage'; export const useAgentChat = (uiMessages: ExtendedUIMessage[]) => { const setTokenPair = useSetAtomState(tokenPairState); - const setAgentChatUsage = useSetAtomState(agentChatUsageStateV2); + const setAgentChatUsage = useSetAtomState(agentChatUsageState); const { getBrowsingContext } = useGetBrowsingContext(); const setCurrentAIChatThreadTitle = useSetAtomState( currentAIChatThreadTitleState, ); - const agentChatSelectedFiles = useAtomStateValue( - agentChatSelectedFilesStateV2, - ); + const agentChatSelectedFiles = useAtomStateValue(agentChatSelectedFilesState); - const currentAIChatThread = useAtomStateValue(currentAIChatThreadStateV2); + const currentAIChatThread = useAtomStateValue(currentAIChatThreadState); const [agentChatUploadedFiles, setAgentChatUploadedFiles] = useAtomState( - agentChatUploadedFilesStateV2, + agentChatUploadedFilesState, ); - const [agentChatInput, setAgentChatInput] = useAtomState( - agentChatInputStateV2, - ); + const [agentChatInput, setAgentChatInput] = useAtomState(agentChatInputState); const retryFetchWithRenewedToken = async ( input: RequestInfo | URL, diff --git a/packages/twenty-front/src/modules/ai/hooks/useAgentChatData.ts b/packages/twenty-front/src/modules/ai/hooks/useAgentChatData.ts index 0845b5839d..932ae37327 100644 --- a/packages/twenty-front/src/modules/ai/hooks/useAgentChatData.ts +++ b/packages/twenty-front/src/modules/ai/hooks/useAgentChatData.ts @@ -1,15 +1,15 @@ import { useAgentChatScrollToBottom } from '@/ai/hooks/useAgentChatScrollToBottom'; import { - agentChatUsageStateV2, + agentChatUsageState, type AgentChatUsageState, -} from '@/ai/states/agentChatUsageStateV2'; -import { currentAIChatThreadStateV2 } from '@/ai/states/currentAIChatThreadStateV2'; +} from '@/ai/states/agentChatUsageState'; +import { currentAIChatThreadState } from '@/ai/states/currentAIChatThreadState'; import { currentAIChatThreadTitleState } from '@/ai/states/currentAIChatThreadTitleState'; -import { isCreatingChatThreadStateV2 } from '@/ai/states/isCreatingChatThreadStateV2'; +import { isCreatingChatThreadState } from '@/ai/states/isCreatingChatThreadState'; import { mapDBMessagesToUIMessages } from '@/ai/utils/mapDBMessagesToUIMessages'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; -import { type SetterOrUpdater } from 'recoil'; +import { type SetStateAction } from 'jotai'; import { isDefined } from 'twenty-shared/utils'; import { type AgentChatThread, @@ -20,7 +20,9 @@ import { const setUsageFromThread = ( thread: AgentChatThread, - setAgentChatUsage: SetterOrUpdater, + setAgentChatUsage: ( + update: SetStateAction, + ) => void, ) => { const hasUsageData = (thread.conversationSize ?? 0) > 0 && isDefined(thread.contextWindowTokens); @@ -42,14 +44,14 @@ const setUsageFromThread = ( export const useAgentChatData = () => { const [currentAIChatThread, setCurrentAIChatThread] = useAtomState( - currentAIChatThreadStateV2, + currentAIChatThreadState, ); - const setAgentChatUsage = useSetAtomState(agentChatUsageStateV2); + const setAgentChatUsage = useSetAtomState(agentChatUsageState); const setCurrentAIChatThreadTitle = useSetAtomState( currentAIChatThreadTitleState, ); const [isCreatingChatThread, setIsCreatingChatThread] = useAtomState( - isCreatingChatThreadStateV2, + isCreatingChatThreadState, ); const { scrollToBottom } = useAgentChatScrollToBottom(); diff --git a/packages/twenty-front/src/modules/ai/hooks/useBrowsingContext.ts b/packages/twenty-front/src/modules/ai/hooks/useBrowsingContext.ts index bf6d08a6c7..9affd3a4a1 100644 --- a/packages/twenty-front/src/modules/ai/hooks/useBrowsingContext.ts +++ b/packages/twenty-front/src/modules/ai/hooks/useBrowsingContext.ts @@ -11,7 +11,7 @@ import { contextStoreFiltersComponentState } from '@/context-store/states/contex import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; import { ContextStoreViewType } from '@/context-store/types/ContextStoreViewType'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { getTabListInstanceIdFromPageLayoutId } from '@/page-layout/utils/getTabListInstanceIdFromPageLayoutId'; import { activeTabIdComponentState } from '@/ui/layout/tab-list/states/activeTabIdComponentState'; import { useStore } from 'jotai'; @@ -66,7 +66,7 @@ export const useGetBrowsingContext = () => { }; const pageLayoutId = store.get( - recordStoreFamilySelectorV2.selectorFamily({ + recordStoreFamilySelector.selectorFamily({ recordId: targetedRecordsRule.selectedRecordIds[0], fieldName: 'pageLayoutId', }), diff --git a/packages/twenty-front/src/modules/ai/hooks/useCreateNewAIChatThread.ts b/packages/twenty-front/src/modules/ai/hooks/useCreateNewAIChatThread.ts index 2d680dea5f..cfb8678f1f 100644 --- a/packages/twenty-front/src/modules/ai/hooks/useCreateNewAIChatThread.ts +++ b/packages/twenty-front/src/modules/ai/hooks/useCreateNewAIChatThread.ts @@ -1,5 +1,5 @@ -import { agentChatUsageStateV2 } from '@/ai/states/agentChatUsageStateV2'; -import { currentAIChatThreadStateV2 } from '@/ai/states/currentAIChatThreadStateV2'; +import { agentChatUsageState } from '@/ai/states/agentChatUsageState'; +import { currentAIChatThreadState } from '@/ai/states/currentAIChatThreadState'; import { currentAIChatThreadTitleState } from '@/ai/states/currentAIChatThreadTitleState'; import { useOpenAskAIPageInCommandMenu } from '@/command-menu/hooks/useOpenAskAIPageInCommandMenu'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; @@ -7,8 +7,8 @@ import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomStat import { useCreateChatThreadMutation } from '~/generated-metadata/graphql'; export const useCreateNewAIChatThread = () => { - const [, setCurrentAIChatThread] = useAtomState(currentAIChatThreadStateV2); - const setAgentChatUsage = useSetAtomState(agentChatUsageStateV2); + const [, setCurrentAIChatThread] = useAtomState(currentAIChatThreadState); + const setAgentChatUsage = useSetAtomState(agentChatUsageState); const setCurrentAIChatThreadTitle = useSetAtomState( currentAIChatThreadTitleState, ); diff --git a/packages/twenty-front/src/modules/ai/states/agentChatInputStateV2.ts b/packages/twenty-front/src/modules/ai/states/agentChatInputState.ts similarity index 53% rename from packages/twenty-front/src/modules/ai/states/agentChatInputStateV2.ts rename to packages/twenty-front/src/modules/ai/states/agentChatInputState.ts index b9a7fc1415..05030401ad 100644 --- a/packages/twenty-front/src/modules/ai/states/agentChatInputStateV2.ts +++ b/packages/twenty-front/src/modules/ai/states/agentChatInputState.ts @@ -1,6 +1,6 @@ import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const agentChatInputStateV2 = createAtomState({ - key: 'agentChatInputStateV2', +export const agentChatInputState = createAtomState({ + key: 'agentChatInputState', defaultValue: '', }); diff --git a/packages/twenty-front/src/modules/ai/states/agentChatSelectedFilesState.ts b/packages/twenty-front/src/modules/ai/states/agentChatSelectedFilesState.ts new file mode 100644 index 0000000000..5557c43887 --- /dev/null +++ b/packages/twenty-front/src/modules/ai/states/agentChatSelectedFilesState.ts @@ -0,0 +1,6 @@ +import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; + +export const agentChatSelectedFilesState = createAtomState({ + key: 'ai/agentChatSelectedFilesState', + defaultValue: [], +}); diff --git a/packages/twenty-front/src/modules/ai/states/agentChatSelectedFilesStateV2.ts b/packages/twenty-front/src/modules/ai/states/agentChatSelectedFilesStateV2.ts deleted file mode 100644 index 94451c30b1..0000000000 --- a/packages/twenty-front/src/modules/ai/states/agentChatSelectedFilesStateV2.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; - -export const agentChatSelectedFilesStateV2 = createAtomState({ - key: 'ai/agentChatSelectedFilesStateV2', - defaultValue: [], -}); diff --git a/packages/twenty-front/src/modules/ai/states/agentChatUploadedFilesStateV2.ts b/packages/twenty-front/src/modules/ai/states/agentChatUploadedFilesState.ts similarity index 55% rename from packages/twenty-front/src/modules/ai/states/agentChatUploadedFilesStateV2.ts rename to packages/twenty-front/src/modules/ai/states/agentChatUploadedFilesState.ts index 7c2fa3ad22..33cf1ad5af 100644 --- a/packages/twenty-front/src/modules/ai/states/agentChatUploadedFilesStateV2.ts +++ b/packages/twenty-front/src/modules/ai/states/agentChatUploadedFilesState.ts @@ -2,7 +2,7 @@ import { type FileUIPart } from 'ai'; import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const agentChatUploadedFilesStateV2 = createAtomState({ - key: 'ai/agentChatUploadedFilesStateV2', +export const agentChatUploadedFilesState = createAtomState({ + key: 'ai/agentChatUploadedFilesState', defaultValue: [], }); diff --git a/packages/twenty-front/src/modules/ai/states/agentChatUsageStateV2.ts b/packages/twenty-front/src/modules/ai/states/agentChatUsageState.ts similarity index 77% rename from packages/twenty-front/src/modules/ai/states/agentChatUsageStateV2.ts rename to packages/twenty-front/src/modules/ai/states/agentChatUsageState.ts index c635c6f375..5c892c863f 100644 --- a/packages/twenty-front/src/modules/ai/states/agentChatUsageStateV2.ts +++ b/packages/twenty-front/src/modules/ai/states/agentChatUsageState.ts @@ -18,8 +18,7 @@ export type AgentChatUsageState = { outputCredits: number; }; -export const agentChatUsageStateV2 = - createAtomState({ - key: 'agentChatUsageStateV2', - defaultValue: null, - }); +export const agentChatUsageState = createAtomState({ + key: 'agentChatUsageState', + defaultValue: null, +}); diff --git a/packages/twenty-front/src/modules/ai/states/currentAIChatThreadState.ts b/packages/twenty-front/src/modules/ai/states/currentAIChatThreadState.ts new file mode 100644 index 0000000000..20b27940c7 --- /dev/null +++ b/packages/twenty-front/src/modules/ai/states/currentAIChatThreadState.ts @@ -0,0 +1,6 @@ +import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; + +export const currentAIChatThreadState = createAtomState({ + key: 'ai/currentAIChatThreadState', + defaultValue: null, +}); diff --git a/packages/twenty-front/src/modules/ai/states/currentAIChatThreadStateV2.ts b/packages/twenty-front/src/modules/ai/states/currentAIChatThreadStateV2.ts deleted file mode 100644 index b7827e7e8b..0000000000 --- a/packages/twenty-front/src/modules/ai/states/currentAIChatThreadStateV2.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; - -export const currentAIChatThreadStateV2 = createAtomState({ - key: 'ai/currentAIChatThreadStateV2', - defaultValue: null, -}); diff --git a/packages/twenty-front/src/modules/ai/states/isCreatingChatThreadStateV2.ts b/packages/twenty-front/src/modules/ai/states/isCreatingChatThreadState.ts similarity index 50% rename from packages/twenty-front/src/modules/ai/states/isCreatingChatThreadStateV2.ts rename to packages/twenty-front/src/modules/ai/states/isCreatingChatThreadState.ts index b6c5eb54ab..922455b419 100644 --- a/packages/twenty-front/src/modules/ai/states/isCreatingChatThreadStateV2.ts +++ b/packages/twenty-front/src/modules/ai/states/isCreatingChatThreadState.ts @@ -1,6 +1,6 @@ import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const isCreatingChatThreadStateV2 = createAtomState({ - key: 'ai/isCreatingChatThreadStateV2', +export const isCreatingChatThreadState = createAtomState({ + key: 'ai/isCreatingChatThreadState', defaultValue: false, }); diff --git a/packages/twenty-front/src/modules/analytics/hooks/__tests__/useEventTracker.test.tsx b/packages/twenty-front/src/modules/analytics/hooks/__tests__/useEventTracker.test.tsx index 3746596474..96848b6cc2 100644 --- a/packages/twenty-front/src/modules/analytics/hooks/__tests__/useEventTracker.test.tsx +++ b/packages/twenty-front/src/modules/analytics/hooks/__tests__/useEventTracker.test.tsx @@ -2,8 +2,6 @@ import { gql } from '@apollo/client'; import { MockedProvider, type MockedResponse } from '@apollo/client/testing'; import { act, renderHook, waitFor } from '@testing-library/react'; import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; - import { ANALYTICS_COOKIE_NAME, useEventTracker, @@ -96,11 +94,9 @@ const mocks: MockedResponse[] = [ ]; const Wrapper = ({ children }: { children: ReactNode }) => ( - - - {children} - - + + {children} + ); describe('useEventTracker', () => { diff --git a/packages/twenty-front/src/modules/apollo/hooks/__tests__/useApolloFactory.test.tsx b/packages/twenty-front/src/modules/apollo/hooks/__tests__/useApolloFactory.test.tsx index 1b377dda26..bc964a3f22 100644 --- a/packages/twenty-front/src/modules/apollo/hooks/__tests__/useApolloFactory.test.tsx +++ b/packages/twenty-front/src/modules/apollo/hooks/__tests__/useApolloFactory.test.tsx @@ -2,8 +2,6 @@ import { ApolloError, gql } from '@apollo/client'; import { act, renderHook } from '@testing-library/react'; import fetchMock, { enableFetchMocks } from 'jest-fetch-mock'; import { MemoryRouter, useLocation } from 'react-router-dom'; -import { RecoilRoot } from 'recoil'; - import { SnackBarComponentInstanceContext } from '@/ui/feedback/snack-bar-manager/contexts/SnackBarComponentInstanceContext'; import { useApolloFactory } from '@/apollo/hooks/useApolloFactory'; @@ -21,18 +19,16 @@ jest.mock('react-router-dom', () => { }); const Wrapper = ({ children }: { children: React.ReactNode }) => ( - - + - - {children} - - - + {children} + + ); describe('useApolloFactory', () => { diff --git a/packages/twenty-front/src/modules/app/components/App.tsx b/packages/twenty-front/src/modules/app/components/App.tsx index 1a138d54a8..e892c009ac 100644 --- a/packages/twenty-front/src/modules/app/components/App.tsx +++ b/packages/twenty-front/src/modules/app/components/App.tsx @@ -1,6 +1,5 @@ import { AppRouter } from '@/app/components/AppRouter'; import { ApolloDevLogEffect } from '@/debug/components/ApolloDevLogEffect'; -import { RecoilDebugObserverEffect } from '@/debug/components/RecoilDebugObserver'; import { AppErrorBoundary } from '@/error-handler/components/AppErrorBoundary'; import { AppRootErrorFallback } from '@/error-handler/components/AppRootErrorFallback'; import { ExceptionHandlerProvider } from '@/error-handler/components/ExceptionHandlerProvider'; @@ -11,7 +10,6 @@ import { I18nProvider } from '@lingui/react'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; import { Provider as JotaiProvider } from 'jotai'; import { HelmetProvider } from 'react-helmet-async'; -import { RecoilRoot } from 'recoil'; import { IconsProvider } from 'twenty-ui/display'; import { initialI18nActivate } from '~/utils/i18n/initialI18nActivate'; @@ -20,32 +18,29 @@ initialI18nActivate(); export const App = () => { return ( - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + ); }; diff --git a/packages/twenty-front/src/modules/app/effect-components/GotoHotkeysEffectsProvider.tsx b/packages/twenty-front/src/modules/app/effect-components/GotoHotkeysEffectsProvider.tsx index afbf47a829..3e4b68c1d1 100644 --- a/packages/twenty-front/src/modules/app/effect-components/GotoHotkeysEffectsProvider.tsx +++ b/packages/twenty-front/src/modules/app/effect-components/GotoHotkeysEffectsProvider.tsx @@ -1,7 +1,7 @@ import { GoToHotkeyItemEffect } from '@/app/effect-components/GoToHotkeyItemEffect'; import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems'; import { isNavigationDrawerExpandedState } from '@/ui/navigation/states/isNavigationDrawerExpanded'; -import { navigationDrawerExpandedMemorizedStateV2 } from '@/ui/navigation/states/navigationDrawerExpandedMemorizedStateV2'; +import { navigationDrawerExpandedMemorizedState } from '@/ui/navigation/states/navigationDrawerExpandedMemorizedState'; import { useGoToHotkeys } from '@/ui/utilities/hotkey/hooks/useGoToHotkeys'; import { useStore } from 'jotai'; import { useCallback } from 'react'; @@ -19,7 +19,7 @@ export const GotoHotkeysEffectsProvider = () => { location: getSettingsPath(SettingsPath.ProfilePage), preNavigateFunction: useCallback(() => { store.set(isNavigationDrawerExpandedState.atom, true); - store.set(navigationDrawerExpandedMemorizedStateV2.atom, true); + store.set(navigationDrawerExpandedMemorizedState.atom, true); }, [store]), }); diff --git a/packages/twenty-front/src/modules/app/hooks/useInitializeQueryParamState.ts b/packages/twenty-front/src/modules/app/hooks/useInitializeQueryParamState.ts index afba3cfc92..100919e615 100644 --- a/packages/twenty-front/src/modules/app/hooks/useInitializeQueryParamState.ts +++ b/packages/twenty-front/src/modules/app/hooks/useInitializeQueryParamState.ts @@ -6,8 +6,6 @@ import { BILLING_CHECKOUT_SESSION_DEFAULT_VALUE } from '@/billing/constants/Bill import deepEqual from 'deep-equal'; import { useStore } from 'jotai'; -// Initialize state that are hydrated from query parameters -// We used to use recoil-sync to do this, but it was causing issues with Firefox export const useInitializeQueryParamState = () => { const store = useStore(); const initializeQueryParamState = useCallback(() => { diff --git a/packages/twenty-front/src/modules/auth/components/__stories__/Logo.stories.tsx b/packages/twenty-front/src/modules/auth/components/__stories__/Logo.stories.tsx index 1c84d6b49a..098af115a0 100644 --- a/packages/twenty-front/src/modules/auth/components/__stories__/Logo.stories.tsx +++ b/packages/twenty-front/src/modules/auth/components/__stories__/Logo.stories.tsx @@ -1,18 +1,14 @@ import { type Meta, type StoryObj } from '@storybook/react-vite'; import { Logo } from '@/auth/components/Logo'; -import { - ComponentDecorator, - RecoilRootDecorator, - RouterDecorator, -} from 'twenty-ui/testing'; +import { ComponentDecorator, RouterDecorator } from 'twenty-ui/testing'; const logoUrl = 'https://picsum.photos/192/192'; const meta: Meta = { title: 'Modules/Auth/Logo', component: Logo, - decorators: [ComponentDecorator, RecoilRootDecorator, RouterDecorator], + decorators: [ComponentDecorator, RouterDecorator], }; export default meta; diff --git a/packages/twenty-front/src/modules/auth/components/__stories__/VerifyEmailEffect.stories.tsx b/packages/twenty-front/src/modules/auth/components/__stories__/VerifyEmailEffect.stories.tsx index 714aeb92dd..60edafa73d 100644 --- a/packages/twenty-front/src/modules/auth/components/__stories__/VerifyEmailEffect.stories.tsx +++ b/packages/twenty-front/src/modules/auth/components/__stories__/VerifyEmailEffect.stories.tsx @@ -1,7 +1,6 @@ import { type VerifyEmailEffect } from '@/auth/components/VerifyEmailEffect'; import { type Meta, type StoryObj } from '@storybook/react-vite'; import { MemoryRouter, Route, Routes } from 'react-router-dom'; -import { RecoilRoot } from 'recoil'; // Mock component that just renders the error state of VerifyEmailEffect directly // (since normal VerifyEmailEffect has async logic that's hard to test in Storybook) @@ -23,9 +22,7 @@ const meta: Meta = { decorators: [ (Story) => (
- - - +
), SnackBarDecorator, @@ -48,20 +45,18 @@ export const ErrorState: Story = { export const IntegratedExample: StoryObj = { render: () => ( - - - - } - /> - - - + + + } + /> + + ), parameters: { docs: { diff --git a/packages/twenty-front/src/modules/auth/hooks/__tests__/useAuth.test.tsx b/packages/twenty-front/src/modules/auth/hooks/__tests__/useAuth.test.tsx index 6e4d46b7ee..d277bf9b8d 100644 --- a/packages/twenty-front/src/modules/auth/hooks/__tests__/useAuth.test.tsx +++ b/packages/twenty-front/src/modules/auth/hooks/__tests__/useAuth.test.tsx @@ -9,7 +9,6 @@ import { useApolloClient } from '@apollo/client'; import { MockedProvider } from '@apollo/client/testing'; import { type ReactNode, act } from 'react'; import { MemoryRouter } from 'react-router-dom'; -import { RecoilRoot } from 'recoil'; import { email, @@ -75,15 +74,13 @@ jest.mock('@/domain-manager/hooks/useLastAuthenticatedWorkspaceDomain', () => ({ const Wrapper = ({ children }: { children: ReactNode }) => ( - - - - {children} - - - + + + {children} + + ); diff --git a/packages/twenty-front/src/modules/auth/hooks/__tests__/useIsLogged.test.ts b/packages/twenty-front/src/modules/auth/hooks/__tests__/useIsLogged.test.ts index 6bc434ba95..e72b149dc0 100644 --- a/packages/twenty-front/src/modules/auth/hooks/__tests__/useIsLogged.test.ts +++ b/packages/twenty-front/src/modules/auth/hooks/__tests__/useIsLogged.test.ts @@ -1,25 +1,19 @@ import { act, renderHook } from '@testing-library/react'; -import { RecoilRoot } from 'recoil'; import { useIsLogged } from '@/auth/hooks/useIsLogged'; import { tokenPairState } from '@/auth/states/tokenPairState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; const renderHooks = () => { - const { result } = renderHook( - () => { - const isLogged = useIsLogged(); - const setTokenPair = useSetAtomState(tokenPairState); + const { result } = renderHook(() => { + const isLogged = useIsLogged(); + const setTokenPair = useSetAtomState(tokenPairState); - return { - isLogged, - setTokenPair, - }; - }, - { - wrapper: RecoilRoot, - }, - ); + return { + isLogged, + setTokenPair, + }; + }); return { result }; }; diff --git a/packages/twenty-front/src/modules/auth/hooks/__tests__/useVerifyLogin.test.ts b/packages/twenty-front/src/modules/auth/hooks/__tests__/useVerifyLogin.test.ts index a496ba6e54..396179fef6 100644 --- a/packages/twenty-front/src/modules/auth/hooks/__tests__/useVerifyLogin.test.ts +++ b/packages/twenty-front/src/modules/auth/hooks/__tests__/useVerifyLogin.test.ts @@ -1,7 +1,6 @@ import { i18n } from '@lingui/core'; import { I18nProvider } from '@lingui/react'; import { renderHook } from '@testing-library/react'; -import { RecoilRoot } from 'recoil'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { AppPath } from 'twenty-shared/types'; @@ -28,8 +27,7 @@ dynamicActivate(SOURCE_LOCALE); const renderHooks = () => { const { result } = renderHook(() => useVerifyLogin(), { - wrapper: ({ children }) => - RecoilRoot({ children: I18nProvider({ i18n, children }) }), + wrapper: ({ children }) => I18nProvider({ i18n, children }), }); return { result }; }; diff --git a/packages/twenty-front/src/modules/auth/hooks/useAuth.ts b/packages/twenty-front/src/modules/auth/hooks/useAuth.ts index 401b968daf..ffb63a2760 100644 --- a/packages/twenty-front/src/modules/auth/hooks/useAuth.ts +++ b/packages/twenty-front/src/modules/auth/hooks/useAuth.ts @@ -1,6 +1,5 @@ import { ApolloError, useApolloClient } from '@apollo/client'; import { useCallback } from 'react'; -import { snapshot_UNSTABLE, useGotoRecoilSnapshot } from 'recoil'; import { AppPath } from 'twenty-shared/types'; import { REACT_APP_SERVER_BASE_URL } from '~/config'; @@ -113,8 +112,6 @@ export const useAuth = () => { const client = useApolloClient(); - const goToRecoilSnapshot = useGotoRecoilSnapshot(); - const [, setSearchParams] = useSearchParams(); const navigate = useNavigate(); @@ -124,8 +121,6 @@ export const useAuth = () => { sseClient?.dispose(); - const emptySnapshot = snapshot_UNSTABLE(); - const authProvidersValue = store.get(workspaceAuthProvidersState.atom); const domainConfigurationValue = store.get(domainConfigurationState.atom); const workspacePublicDataValue = store.get(workspacePublicDataState.atom); @@ -136,23 +131,15 @@ export const useAuth = () => { isCaptchaScriptLoadedState.atom, ); - const initialSnapshot = emptySnapshot.map(() => { - return undefined; - }); - sessionStorage.clear(); localStorage.clear(); - goToRecoilSnapshot(initialSnapshot); - store.set(workspaceAuthProvidersState.atom, authProvidersValue); store.set(workspacePublicDataState.atom, workspacePublicDataValue); store.set(domainConfigurationState.atom, domainConfigurationValue); store.set(isCaptchaScriptLoadedState.atom, isCaptchaScriptLoadedValue); store.set(lastAuthenticatedMethodState.atom, lastAuthenticatedMethod); - // Reset user-data Jotai states that were migrated from Recoil - // (Recoil snapshot reset no longer handles these since they are Jotai V2) store.set(tokenPairState.atom, null); store.set(currentUserState.atom, null); store.set(currentWorkspaceState.atom, null); @@ -172,7 +159,6 @@ export const useAuth = () => { await resetToMockedMetadata(); navigate(AppPath.SignInUp); }, [ - goToRecoilSnapshot, client, setLastAuthenticateWorkspaceDomain, resetToMockedMetadata, diff --git a/packages/twenty-front/src/modules/auth/sign-in-up/hooks/__tests__/useHandleResetPassword.test.ts b/packages/twenty-front/src/modules/auth/sign-in-up/hooks/__tests__/useHandleResetPassword.test.ts index 5fb59de33d..3eaccd5950 100644 --- a/packages/twenty-front/src/modules/auth/sign-in-up/hooks/__tests__/useHandleResetPassword.test.ts +++ b/packages/twenty-front/src/modules/auth/sign-in-up/hooks/__tests__/useHandleResetPassword.test.ts @@ -3,7 +3,6 @@ import { I18nProvider } from '@lingui/react'; import { act, renderHook } from '@testing-library/react'; import { type ReactNode, createElement } from 'react'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; import { useHandleResetPassword } from '@/auth/sign-in-up/hooks/useHandleResetPassword'; import { workspacePublicDataState } from '@/auth/states/workspacePublicDataState'; @@ -32,11 +31,7 @@ const renderHooks = () => { createElement( JotaiProvider, { store: jotaiStore }, - createElement( - RecoilRoot, - null as any, - createElement(I18nProvider, { i18n }, children), - ), + createElement(I18nProvider, { i18n }, children), ), }); return { result }; diff --git a/packages/twenty-front/src/modules/auth/sign-in-up/hooks/__tests__/useSignInUpForm.test.tsx b/packages/twenty-front/src/modules/auth/sign-in-up/hooks/__tests__/useSignInUpForm.test.tsx index 34fad475ec..17409b14b5 100644 --- a/packages/twenty-front/src/modules/auth/sign-in-up/hooks/__tests__/useSignInUpForm.test.tsx +++ b/packages/twenty-front/src/modules/auth/sign-in-up/hooks/__tests__/useSignInUpForm.test.tsx @@ -8,7 +8,6 @@ import { renderHook } from '@testing-library/react'; import { type ReactNode } from 'react'; import { MemoryRouter } from 'react-router-dom'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; const TestWrapper = ({ children, @@ -25,9 +24,7 @@ const TestWrapper = ({ ); return ( - - {children} - + {children} ); }; diff --git a/packages/twenty-front/src/modules/captcha/hooks/__tests__/useReadCaptchaToken.test.tsx b/packages/twenty-front/src/modules/captcha/hooks/__tests__/useReadCaptchaToken.test.tsx index f486904aa2..1f9ac6e326 100644 --- a/packages/twenty-front/src/modules/captcha/hooks/__tests__/useReadCaptchaToken.test.tsx +++ b/packages/twenty-front/src/modules/captcha/hooks/__tests__/useReadCaptchaToken.test.tsx @@ -1,16 +1,12 @@ import { act, renderHook } from '@testing-library/react'; import { type ReactNode } from 'react'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; - import { captchaTokenState } from '@/captcha/states/captchaTokenState'; import { useReadCaptchaToken } from '@/captcha/hooks/useReadCaptchaToken'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; const Wrapper = ({ children }: { children: ReactNode }) => ( - - {children} - + {children} ); describe('useReadCaptchaToken', () => { diff --git a/packages/twenty-front/src/modules/captcha/hooks/__tests__/useRequestFreshCaptchaToken.test.tsx b/packages/twenty-front/src/modules/captcha/hooks/__tests__/useRequestFreshCaptchaToken.test.tsx index b3c07ecb9d..a6baf5042e 100644 --- a/packages/twenty-front/src/modules/captcha/hooks/__tests__/useRequestFreshCaptchaToken.test.tsx +++ b/packages/twenty-front/src/modules/captcha/hooks/__tests__/useRequestFreshCaptchaToken.test.tsx @@ -1,6 +1,5 @@ import { act, renderHook, waitFor } from '@testing-library/react'; import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; import { Provider as JotaiProvider } from 'jotai'; import { useRequestFreshCaptchaToken } from '@/captcha/hooks/useRequestFreshCaptchaToken'; @@ -13,9 +12,7 @@ import { type Captcha, CaptchaDriverType } from '~/generated-metadata/graphql'; jest.mock('@/captcha/utils/isCaptchaRequiredForPath'); const createWrapper = ({ children }: { children: ReactNode }) => ( - - {children} - + {children} ); describe('useRequestFreshCaptchaToken', () => { diff --git a/packages/twenty-front/src/modules/client-config/hooks/useClientConfig.ts b/packages/twenty-front/src/modules/client-config/hooks/useClientConfig.ts index bb4fe41ee6..d26eb2868a 100644 --- a/packages/twenty-front/src/modules/client-config/hooks/useClientConfig.ts +++ b/packages/twenty-front/src/modules/client-config/hooks/useClientConfig.ts @@ -21,19 +21,17 @@ import { isImapSmtpCaldavEnabledState } from '@/client-config/states/isImapSmtpC import { isMicrosoftCalendarEnabledState } from '@/client-config/states/isMicrosoftCalendarEnabledState'; import { isMicrosoftMessagingEnabledState } from '@/client-config/states/isMicrosoftMessagingEnabledState'; import { isMultiWorkspaceEnabledState } from '@/client-config/states/isMultiWorkspaceEnabledState'; -import { labPublicFeatureFlagsStateV2 } from '@/client-config/states/labPublicFeatureFlagsStateV2'; +import { labPublicFeatureFlagsState } from '@/client-config/states/labPublicFeatureFlagsState'; import { sentryConfigState } from '@/client-config/states/sentryConfigState'; import { supportChatState } from '@/client-config/states/supportChatState'; import { type ClientConfig } from '@/client-config/types/ClientConfig'; import { domainConfigurationState } from '@/domain-manager/states/domainConfigurationState'; import { useCallback } from 'react'; -import { isAttachmentPreviewEnabledStateV2 } from '@/client-config/states/isAttachmentPreviewEnabledStateV2'; import { clientConfigApiStatusState } from '@/client-config/states/clientConfigApiStatusState'; import { getClientConfig } from '@/client-config/utils/getClientConfig'; import { allowRequestsToTwentyIconsState } from '@/client-config/states/allowRequestsToTwentyIcons'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; -import { useStore } from 'jotai'; type UseClientConfigResult = { data: { clientConfig: ClientConfig } | undefined; @@ -44,7 +42,6 @@ type UseClientConfigResult = { }; export const useClientConfig = (): UseClientConfigResult => { - const store = useStore(); const setIsAnalyticsEnabled = useSetAtomState(isAnalyticsEnabledState); const setDomainConfiguration = useSetAtomState(domainConfigurationState); const setAuthProviders = useSetAtomState(authProvidersState); @@ -76,9 +73,7 @@ export const useClientConfig = (): UseClientConfigResult => { const setCanManageFeatureFlags = useSetAtomState(canManageFeatureFlagsState); - const setLabPublicFeatureFlags = useSetAtomState( - labPublicFeatureFlagsStateV2, - ); + const setLabPublicFeatureFlags = useSetAtomState(labPublicFeatureFlagsState); const setMicrosoftMessagingEnabled = useSetAtomState( isMicrosoftMessagingEnabledState, @@ -188,10 +183,6 @@ export const useClientConfig = (): UseClientConfigResult => { setGoogleMessagingEnabled(clientConfig?.isGoogleMessagingEnabled); setGoogleCalendarEnabled(clientConfig?.isGoogleCalendarEnabled); setIsAttachmentPreviewEnabled(clientConfig?.isAttachmentPreviewEnabled); - store.set( - isAttachmentPreviewEnabledStateV2.atom, - clientConfig?.isAttachmentPreviewEnabled, - ); setIsConfigVariablesInDbEnabled( clientConfig?.isConfigVariablesInDbEnabled, ); @@ -249,7 +240,6 @@ export const useClientConfig = (): UseClientConfigResult => { setSentryConfig, setSupportChat, setAllowRequestsToTwentyIcons, - store, ]); return { diff --git a/packages/twenty-front/src/modules/client-config/states/isAttachmentPreviewEnabledState.ts b/packages/twenty-front/src/modules/client-config/states/isAttachmentPreviewEnabledState.ts index cf3950e5e3..072864fddd 100644 --- a/packages/twenty-front/src/modules/client-config/states/isAttachmentPreviewEnabledState.ts +++ b/packages/twenty-front/src/modules/client-config/states/isAttachmentPreviewEnabledState.ts @@ -1,5 +1,6 @@ import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; + export const isAttachmentPreviewEnabledState = createAtomState({ - key: 'isAttachmentPreviewEnabled', + key: 'isAttachmentPreviewEnabledState', defaultValue: false, }); diff --git a/packages/twenty-front/src/modules/client-config/states/isAttachmentPreviewEnabledStateV2.ts b/packages/twenty-front/src/modules/client-config/states/isAttachmentPreviewEnabledStateV2.ts deleted file mode 100644 index 9d8af27499..0000000000 --- a/packages/twenty-front/src/modules/client-config/states/isAttachmentPreviewEnabledStateV2.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; - -export const isAttachmentPreviewEnabledStateV2 = createAtomState({ - key: 'isAttachmentPreviewEnabledStateV2', - defaultValue: false, -}); diff --git a/packages/twenty-front/src/modules/client-config/states/labPublicFeatureFlagsStateV2.ts b/packages/twenty-front/src/modules/client-config/states/labPublicFeatureFlagsState.ts similarity index 58% rename from packages/twenty-front/src/modules/client-config/states/labPublicFeatureFlagsStateV2.ts rename to packages/twenty-front/src/modules/client-config/states/labPublicFeatureFlagsState.ts index d68ad025b6..5bfd9721d5 100644 --- a/packages/twenty-front/src/modules/client-config/states/labPublicFeatureFlagsStateV2.ts +++ b/packages/twenty-front/src/modules/client-config/states/labPublicFeatureFlagsState.ts @@ -2,9 +2,7 @@ import { type PublicFeatureFlag } from '~/generated-metadata/graphql'; import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const labPublicFeatureFlagsStateV2 = createAtomState< - PublicFeatureFlag[] ->({ - key: 'labPublicFeatureFlagsStateV2', +export const labPublicFeatureFlagsState = createAtomState({ + key: 'labPublicFeatureFlagsState', defaultValue: [], }); diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuFolderInfo.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuFolderInfo.tsx index 6f82adeaa6..8ff2a81309 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuFolderInfo.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuFolderInfo.tsx @@ -11,7 +11,7 @@ import { FOLDER_ICON_DEFAULT } from '@/navigation-menu-item/constants/FolderIcon import { NavigationMenuItemType } from '@/navigation-menu-item/constants/NavigationMenuItemType'; import { useUpdateFolderInDraft } from '@/navigation-menu-item/hooks/useUpdateFolderInDraft'; import { useWorkspaceSectionItems } from '@/navigation-menu-item/hooks/useWorkspaceSectionItems'; -import { selectedNavigationMenuItemInEditModeStateV2 } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeStateV2'; +import { selectedNavigationMenuItemInEditModeState } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { getNavigationMenuItemIconColors } from '@/navigation-menu-item/utils/getNavigationMenuItemIconColors'; import { IconPicker } from '@/ui/input/components/IconPicker'; @@ -33,7 +33,7 @@ export const CommandMenuFolderInfo = () => { commandMenuPageInfo.instanceId, ); const selectedNavigationMenuItemInEditMode = useAtomStateValue( - selectedNavigationMenuItemInEditModeStateV2, + selectedNavigationMenuItemInEditModeState, ); const items = useWorkspaceSectionItems(); const { updateFolderInDraft } = useUpdateFolderInDraft(); diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuForMobile.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuForMobile.tsx index fba4eaaac5..7a2e13b7a8 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuForMobile.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuForMobile.tsx @@ -1,6 +1,6 @@ import { CommandMenuOpenContainer } from '@/command-menu/components/CommandMenuOpenContainer'; import { CommandMenuRouter } from '@/command-menu/components/CommandMenuRouter'; -import { isCommandMenuOpenedStateV2 } from '@/command-menu/states/isCommandMenuOpenedStateV2'; +import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import styled from '@emotion/styled'; @@ -13,7 +13,7 @@ const StyledCommandMenuMobileFullScreenContainer = styled.div` `; export const CommandMenuForMobile = () => { - const isCommandMenuOpened = useAtomStateValue(isCommandMenuOpenedStateV2); + const isCommandMenuOpened = useAtomStateValue(isCommandMenuOpenedState); return ( diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuItemWithAddToNavigationDrag.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuItemWithAddToNavigationDrag.tsx index 4948f3e2d2..aa0061cd4f 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuItemWithAddToNavigationDrag.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuItemWithAddToNavigationDrag.tsx @@ -6,7 +6,7 @@ import { type IconComponent } from 'twenty-ui/display'; import { CommandMenuItem } from '@/command-menu/components/CommandMenuItem'; import { AddToNavigationDragHandle } from '@/navigation-menu-item/components/AddToNavigationDragHandle'; -import { addToNavPayloadRegistryStateV2 } from '@/navigation-menu-item/states/addToNavPayloadRegistryStateV2'; +import { addToNavPayloadRegistryState } from '@/navigation-menu-item/states/addToNavPayloadRegistryState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import type { AddToNavigationDragPayload } from '@/navigation-menu-item/types/add-to-navigation-drag-payload'; @@ -41,7 +41,7 @@ export const CommandMenuItemWithAddToNavigationDrag = ({ dragIndex, }: CommandMenuItemWithAddToNavigationDragProps) => { const { t } = useLingui(); - const setRegistry = useSetAtomState(addToNavPayloadRegistryStateV2); + const setRegistry = useSetAtomState(addToNavPayloadRegistryState); const [isHovered, setIsHovered] = useState(false); const contextualDescription = isHovered diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuLinkInfo.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuLinkInfo.tsx index e9a419e312..edd72a6387 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuLinkInfo.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuLinkInfo.tsx @@ -9,7 +9,7 @@ import { NavigationMenuItemType } from '@/navigation-menu-item/constants/Navigat import { StyledNavigationMenuItemIconContainer } from '@/navigation-menu-item/components/NavigationMenuItemIconContainer'; import { useUpdateLinkInDraft } from '@/navigation-menu-item/hooks/useUpdateLinkInDraft'; import { useWorkspaceSectionItems } from '@/navigation-menu-item/hooks/useWorkspaceSectionItems'; -import { selectedNavigationMenuItemInEditModeStateV2 } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeStateV2'; +import { selectedNavigationMenuItemInEditModeState } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { getNavigationMenuItemIconColors } from '@/navigation-menu-item/utils/getNavigationMenuItemIconColors'; import { TitleInput } from '@/ui/input/components/TitleInput'; @@ -25,7 +25,7 @@ export const CommandMenuLinkInfo = () => { commandMenuPageInfo.instanceId, ); const selectedNavigationMenuItemInEditMode = useAtomStateValue( - selectedNavigationMenuItemInEditModeStateV2, + selectedNavigationMenuItemInEditModeState, ); const items = useWorkspaceSectionItems(); const { updateLinkInDraft } = useUpdateLinkInDraft(); diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuOpenContainer.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuOpenContainer.tsx index 19373062f7..94400b5ece 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuOpenContainer.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuOpenContainer.tsx @@ -2,7 +2,7 @@ import { COMMAND_MENU_ANIMATION_VARIANTS } from '@/command-menu/constants/Comman import { COMMAND_MENU_CLICK_OUTSIDE_ID } from '@/command-menu/constants/CommandMenuClickOutsideId'; import { SIDE_PANEL_FOCUS_ID } from '@/command-menu/constants/SidePanelFocusId'; import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; -import { isSidePanelAnimatingStateV2 } from '@/command-menu/states/isSidePanelAnimatingStateV2'; +import { isSidePanelAnimatingState } from '@/command-menu/states/isSidePanelAnimatingState'; import { type CommandMenuAnimationVariant } from '@/command-menu/types/CommandMenuAnimationVariant'; import { RECORD_CHIP_CLICK_OUTSIDE_ID } from '@/object-record/record-table/constants/RecordChipClickOutsideId'; import { MENTION_MENU_DROPDOWN_CLICK_OUTSIDE_ID } from '@/ui/input/constants/MentionMenuDropdownClickOutsideId'; @@ -54,7 +54,7 @@ export const CommandMenuOpenContainer = ({ const { closeCommandMenu } = useCommandMenu(); const commandMenuRef = useRef(null); - const setIsSidePanelAnimating = useSetAtomState(isSidePanelAnimatingStateV2); + const setIsSidePanelAnimating = useSetAtomState(isSidePanelAnimatingState); const store = useStore(); diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuPageInfo.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuPageInfo.tsx index 3a08a0b076..21e5a9eb74 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuPageInfo.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuPageInfo.tsx @@ -12,7 +12,7 @@ import { CommandMenuRecordInfo } from '@/command-menu/components/CommandMenuReco import { CommandMenuWorkflowStepInfo } from '@/command-menu/components/CommandMenuWorkflowStepInfo'; import { NavigationMenuItemType } from '@/navigation-menu-item/constants/NavigationMenuItemType'; import { useWorkspaceSectionItems } from '@/navigation-menu-item/hooks/useWorkspaceSectionItems'; -import { selectedNavigationMenuItemInEditModeStateV2 } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeStateV2'; +import { selectedNavigationMenuItemInEditModeState } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { CommandMenuPages } from 'twenty-shared/types'; @@ -30,7 +30,7 @@ type CommandMenuPageInfoProps = { export const CommandMenuPageInfo = ({ pageChip }: CommandMenuPageInfoProps) => { const selectedNavigationMenuItemInEditMode = useAtomStateValue( - selectedNavigationMenuItemInEditModeStateV2, + selectedNavigationMenuItemInEditModeState, ); const items = useWorkspaceSectionItems(); diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuRecordInfo.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuRecordInfo.tsx index 79f40098f2..2b0c929e3b 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuRecordInfo.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuRecordInfo.tsx @@ -7,8 +7,8 @@ import { useIsRecordFieldReadOnly } from '@/object-record/read-only/hooks/useIsR import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; import { useRecordShowContainerActions } from '@/object-record/record-show/hooks/useRecordShowContainerActions'; import { useRecordShowPage } from '@/object-record/record-show/hooks/useRecordShowPage'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; -import { recordStoreIdentifierFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreIdentifierFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; +import { recordStoreIdentifierFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreIdentifierFamilySelector'; import { RecordTitleCell } from '@/object-record/record-title-cell/components/RecordTitleCell'; import { RecordTitleCellContainerType } from '@/object-record/record-title-cell/types/RecordTitleCellContainerType'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; @@ -50,7 +50,7 @@ export const CommandMenuRecordInfo = ({ ); const recordCreatedAt = useAtomFamilySelectorValue( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId: objectRecordId, fieldName: 'createdAt', @@ -62,7 +62,7 @@ export const CommandMenuRecordInfo = ({ ); const recordIdentifier = useAtomFamilySelectorValue( - recordStoreIdentifierFamilySelectorV2, + recordStoreIdentifierFamilySelector, { recordId: objectRecordId, allowRequestsToTwentyIcons, diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuSidePanelForDesktop.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuSidePanelForDesktop.tsx index 2416f15c28..405f93a59b 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuSidePanelForDesktop.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuSidePanelForDesktop.tsx @@ -7,7 +7,7 @@ import { commandMenuWidthState, } from '@/command-menu/states/commandMenuWidthState'; import { isCommandMenuClosingState } from '@/command-menu/states/isCommandMenuClosingState'; -import { isCommandMenuOpenedStateV2 } from '@/command-menu/states/isCommandMenuOpenedStateV2'; +import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; import { tableWidthResizeIsActiveState } from '@/object-record/record-table/states/tableWidthResizeIsActivedState'; import { ModalContainerContext } from '@/ui/layout/modal/contexts/ModalContainerContext'; import { ResizablePanelGap } from '@/ui/layout/resizable-panel/components/ResizablePanelGap'; @@ -56,7 +56,7 @@ const StyledModalContainer = styled.div` const GAP_WIDTH = 8; export const CommandMenuSidePanelForDesktop = () => { - const isCommandMenuOpened = useAtomStateValue(isCommandMenuOpenedStateV2); + const isCommandMenuOpened = useAtomStateValue(isCommandMenuOpenedState); const isCommandMenuClosing = useAtomStateValue(isCommandMenuClosingState); const [commandMenuWidth, setCommandMenuWidth] = useAtomState( commandMenuWidthState, diff --git a/packages/twenty-front/src/modules/command-menu/components/__stories__/CommandMenu.stories.tsx b/packages/twenty-front/src/modules/command-menu/components/__stories__/CommandMenu.stories.tsx index 8956c75eae..14dda7a5b2 100644 --- a/packages/twenty-front/src/modules/command-menu/components/__stories__/CommandMenu.stories.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/__stories__/CommandMenu.stories.tsx @@ -27,7 +27,7 @@ import { CommandMenuRouter } from '@/command-menu/components/CommandMenuRouter'; import { COMMAND_MENU_COMPONENT_INSTANCE_ID } from '@/command-menu/constants/CommandMenuComponentInstanceId'; import { SIDE_PANEL_FOCUS_ID } from '@/command-menu/constants/SidePanelFocusId'; import { commandMenuNavigationStackState } from '@/command-menu/states/commandMenuNavigationStackState'; -import { isCommandMenuOpenedStateV2 } from '@/command-menu/states/isCommandMenuOpenedStateV2'; +import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState'; import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState'; @@ -86,7 +86,7 @@ const meta: Meta = { currentUserWorkspaceState.atom, mockedUserData.currentUserWorkspace, ); - jotaiStore.set(isCommandMenuOpenedStateV2.atom, true); + jotaiStore.set(isCommandMenuOpenedState.atom, true); jotaiStore.set(commandMenuNavigationStackState.atom, [ { page: CommandMenuPages.Root, diff --git a/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenu.test.tsx b/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenu.test.tsx index 4deb3a4ce6..3a2b326027 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenu.test.tsx +++ b/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenu.test.tsx @@ -2,27 +2,24 @@ import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { act } from 'react'; import { MemoryRouter } from 'react-router-dom'; -import { RecoilRoot } from 'recoil'; import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; import { commandMenuNavigationStackState } from '@/command-menu/states/commandMenuNavigationStackState'; import { commandMenuPageInfoState } from '@/command-menu/states/commandMenuPageInfoState'; import { commandMenuPageState } from '@/command-menu/states/commandMenuPageState'; -import { isCommandMenuOpenedStateV2 } from '@/command-menu/states/isCommandMenuOpenedStateV2'; +import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; import { CommandMenuPages } from 'twenty-shared/types'; import { IconDotsVertical } from 'twenty-ui/display'; const Wrapper = ({ children }: { children: React.ReactNode }) => ( - - - {children} - - + + {children} + ); @@ -54,31 +51,31 @@ describe('useCommandMenu', () => { result.current.commandMenu.openCommandMenu(); }); - expect(jotaiStore.get(isCommandMenuOpenedStateV2.atom)).toBe(true); + expect(jotaiStore.get(isCommandMenuOpenedState.atom)).toBe(true); act(() => { result.current.commandMenu.closeCommandMenu(); }); - expect(jotaiStore.get(isCommandMenuOpenedStateV2.atom)).toBe(false); + expect(jotaiStore.get(isCommandMenuOpenedState.atom)).toBe(false); }); it('should toggle the command menu', () => { const { result } = renderHooks(); - expect(jotaiStore.get(isCommandMenuOpenedStateV2.atom)).toBe(false); + expect(jotaiStore.get(isCommandMenuOpenedState.atom)).toBe(false); act(() => { result.current.commandMenu.toggleCommandMenu(); }); - expect(jotaiStore.get(isCommandMenuOpenedStateV2.atom)).toBe(true); + expect(jotaiStore.get(isCommandMenuOpenedState.atom)).toBe(true); act(() => { result.current.commandMenu.toggleCommandMenu(); }); - expect(jotaiStore.get(isCommandMenuOpenedStateV2.atom)).toBe(false); + expect(jotaiStore.get(isCommandMenuOpenedState.atom)).toBe(false); }); it('should navigate command menu and reset navigation stack when resetNavigationStack is true', () => { diff --git a/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenuCloseAnimationCompleteCleanup.test.tsx b/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenuCloseAnimationCompleteCleanup.test.tsx index eca2c41d8e..6cd0ccf9f8 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenuCloseAnimationCompleteCleanup.test.tsx +++ b/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenuCloseAnimationCompleteCleanup.test.tsx @@ -2,8 +2,6 @@ import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { act } from 'react'; import { MemoryRouter } from 'react-router-dom'; -import { RecoilRoot } from 'recoil'; - import { COMMAND_MENU_COMPONENT_INSTANCE_ID } from '@/command-menu/constants/CommandMenuComponentInstanceId'; import { COMMAND_MENU_CONTEXT_CHIP_GROUPS_DROPDOWN_ID } from '@/command-menu/constants/CommandMenuContextChipGroupsDropdownId'; import { COMMAND_MENU_PREVIOUS_COMPONENT_INSTANCE_ID } from '@/command-menu/constants/CommandMenuPreviousComponentInstanceId'; @@ -14,7 +12,7 @@ import { commandMenuPageState } from '@/command-menu/states/commandMenuPageState import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchState'; import { hasUserSelectedCommandState } from '@/command-menu/states/hasUserSelectedCommandState'; import { isCommandMenuClosingState } from '@/command-menu/states/isCommandMenuClosingState'; -import { isCommandMenuOpenedStateV2 } from '@/command-menu/states/isCommandMenuOpenedStateV2'; +import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; import { viewableRecordIdState } from '@/object-record/record-right-drawer/states/viewableRecordIdState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; @@ -53,9 +51,7 @@ jest.mock('@/ui/layout/right-drawer/utils/emitSidePanelCloseEvent', () => ({ const Wrapper = ({ children }: { children: React.ReactNode }) => ( - - {children} - + {children} ); @@ -97,7 +93,7 @@ describe('useCommandMenuCloseAnimationCompleteCleanup', () => { Icon: IconList, instanceId: 'test-id', }); - jotaiStore.set(isCommandMenuOpenedStateV2.atom, true); + jotaiStore.set(isCommandMenuOpenedState.atom, true); jotaiStore.set(commandMenuSearchState.atom, 'test search'); jotaiStore.set(commandMenuNavigationStackState.atom, [ { @@ -120,7 +116,7 @@ describe('useCommandMenuCloseAnimationCompleteCleanup', () => { Icon: IconList, instanceId: 'test-id', }); - expect(jotaiStore.get(isCommandMenuOpenedStateV2.atom)).toBe(true); + expect(jotaiStore.get(isCommandMenuOpenedState.atom)).toBe(true); expect(jotaiStore.get(commandMenuSearchState.atom)).toBe('test search'); expect(jotaiStore.get(commandMenuNavigationStackState.atom)).toEqual([ { @@ -146,7 +142,7 @@ describe('useCommandMenuCloseAnimationCompleteCleanup', () => { Icon: undefined, instanceId: '', }); - expect(jotaiStore.get(isCommandMenuOpenedStateV2.atom)).toBe(false); + expect(jotaiStore.get(isCommandMenuOpenedState.atom)).toBe(false); expect(jotaiStore.get(commandMenuSearchState.atom)).toBe(''); expect(jotaiStore.get(commandMenuNavigationStackState.atom)).toEqual([]); expect(jotaiStore.get(hasUserSelectedCommandState.atom)).toBe(false); diff --git a/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenuHistory.test.tsx b/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenuHistory.test.tsx index 36fe500dad..f13a261434 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenuHistory.test.tsx +++ b/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenuHistory.test.tsx @@ -2,24 +2,20 @@ import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { act } from 'react'; import { MemoryRouter } from 'react-router-dom'; -import { RecoilRoot } from 'recoil'; - import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; import { useCommandMenuCloseAnimationCompleteCleanup } from '@/command-menu/hooks/useCommandMenuCloseAnimationCompleteCleanup'; import { useCommandMenuHistory } from '@/command-menu/hooks/useCommandMenuHistory'; import { commandMenuNavigationStackState } from '@/command-menu/states/commandMenuNavigationStackState'; import { commandMenuPageInfoState } from '@/command-menu/states/commandMenuPageInfoState'; import { commandMenuPageState } from '@/command-menu/states/commandMenuPageState'; -import { isCommandMenuOpenedStateV2 } from '@/command-menu/states/isCommandMenuOpenedStateV2'; +import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; import { CommandMenuPages } from 'twenty-shared/types'; import { IconList, IconSearch } from 'twenty-ui/display'; const Wrapper = ({ children }: { children: React.ReactNode }) => ( - - {children} - + {children} ); @@ -116,7 +112,7 @@ describe('useCommandMenuHistory', () => { instanceId: '', Icon: undefined, }); - expect(jotaiStore.get(isCommandMenuOpenedStateV2.atom)).toBe(false); + expect(jotaiStore.get(isCommandMenuOpenedState.atom)).toBe(false); }); it('should navigate to a page in history', () => { diff --git a/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenuOnItemClick.test.tsx b/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenuOnItemClick.test.tsx index 801e2f1c43..d2a2d3fc53 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenuOnItemClick.test.tsx +++ b/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenuOnItemClick.test.tsx @@ -1,18 +1,15 @@ import { renderHook } from '@testing-library/react'; import { act } from 'react'; import { MemoryRouter } from 'react-router-dom'; -import { RecoilRoot } from 'recoil'; import { useCommandMenuOnItemClick } from '@/command-menu/hooks/useCommandMenuOnItemClick'; const Wrapper = ({ children }: { children: React.ReactNode }) => ( - - - {children} - - + + {children} + ); const renderHooks = () => { diff --git a/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenuUpdateNavigationMorphItemsByPage.test.tsx b/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenuUpdateNavigationMorphItemsByPage.test.tsx index 65693b943f..de04cb90a5 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenuUpdateNavigationMorphItemsByPage.test.tsx +++ b/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useCommandMenuUpdateNavigationMorphItemsByPage.test.tsx @@ -4,15 +4,11 @@ import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { act } from 'react'; -import { RecoilRoot } from 'recoil'; - const pageId = 'merge-page-id'; const objectMetadataId = 'company-metadata-id'; const Wrapper = ({ children }: { children: React.ReactNode }) => ( - - {children} - + {children} ); const renderHooks = (initialRecordIds: string[]) => { diff --git a/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useOpenAskAIPageInCommandMenu.test.tsx b/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useOpenAskAIPageInCommandMenu.test.tsx index 41223c0f64..0c590a61b2 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useOpenAskAIPageInCommandMenu.test.tsx +++ b/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useOpenAskAIPageInCommandMenu.test.tsx @@ -1,10 +1,9 @@ import { act, renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; import { useOpenAskAIPageInCommandMenu } from '@/command-menu/hooks/useOpenAskAIPageInCommandMenu'; -import { isCommandMenuOpenedStateV2 } from '@/command-menu/states/isCommandMenuOpenedStateV2'; +import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; import { CommandMenuPages } from 'twenty-shared/types'; import { IconSparkles } from 'twenty-ui/display'; @@ -21,15 +20,13 @@ jest.mock('@/command-menu/hooks/useCommandMenu', () => ({ })); const Wrapper = ({ children }: { children: ReactNode }) => ( - - {children} - + {children} ); describe('useOpenAskAIPageInCommandMenu', () => { beforeEach(() => { jest.clearAllMocks(); - jotaiStore.set(isCommandMenuOpenedStateV2.atom, false); + jotaiStore.set(isCommandMenuOpenedState.atom, false); }); it('should navigate to AskAI page with correct defaults', () => { @@ -51,7 +48,7 @@ describe('useOpenAskAIPageInCommandMenu', () => { }); it('should use resetNavigationStack from argument when provided', () => { - jotaiStore.set(isCommandMenuOpenedStateV2.atom, true); + jotaiStore.set(isCommandMenuOpenedState.atom, true); const { result } = renderHook(() => useOpenAskAIPageInCommandMenu(), { wrapper: Wrapper, @@ -69,7 +66,7 @@ describe('useOpenAskAIPageInCommandMenu', () => { }); it('should default resetNavigationStack to isCommandMenuOpened', () => { - jotaiStore.set(isCommandMenuOpenedStateV2.atom, true); + jotaiStore.set(isCommandMenuOpenedState.atom, true); const { result } = renderHook(() => useOpenAskAIPageInCommandMenu(), { wrapper: Wrapper, diff --git a/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useSetGlobalCommandMenuContext.test.tsx b/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useSetGlobalCommandMenuContext.test.tsx index 2710f5750b..b2b0125bce 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useSetGlobalCommandMenuContext.test.tsx +++ b/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useSetGlobalCommandMenuContext.test.tsx @@ -20,22 +20,21 @@ import { getPeopleRecordConnectionMock } from '~/testing/mock-data/people'; import { generatedMockObjectMetadataItems } from '~/testing/utils/generatedMockObjectMetadataItems'; import { contextStoreFilterGroupsComponentState } from '@/context-store/states/contextStoreFilterGroupsComponentState'; -const mockCopyContextStoreStates = jest.fn(); -jest.mock( - '@/command-menu/hooks/useCopyContextStoreAndActionMenuStates', - () => ({ - useCopyContextStoreStates: () => ({ - copyContextStoreStates: mockCopyContextStoreStates, - }), - }), -); - const personMockObjectMetadataItem = generatedMockObjectMetadataItems.find( (item) => item.nameSingular === 'person', )!; const peopleMock = getPeopleRecordConnectionMock(); +jotaiStore.set( + recordStoreFamilyState.atomFamily(peopleMock[0].id), + peopleMock[0], +); +jotaiStore.set( + recordStoreFamilyState.atomFamily(peopleMock[1].id), + peopleMock[1], +); + const wrapper = getJestMetadataAndApolloMocksAndActionMenuWrapper({ apolloMocks: [], componentInstanceId: COMMAND_MENU_COMPONENT_INSTANCE_ID, @@ -48,16 +47,6 @@ const wrapper = getJestMetadataAndApolloMocksAndActionMenuWrapper({ }, contextStoreNumberOfSelectedRecords: 2, contextStoreCurrentViewType: ContextStoreViewType.Table, - onInitializeRecoilSnapshot: (_snapshot) => { - jotaiStore.set( - recordStoreFamilyState.atomFamily(peopleMock[0].id), - peopleMock[0], - ); - jotaiStore.set( - recordStoreFamilyState.atomFamily(peopleMock[1].id), - peopleMock[1], - ); - }, }); describe('useSetGlobalCommandMenuContext', () => { @@ -161,18 +150,41 @@ describe('useSetGlobalCommandMenuContext', () => { expect(hasUserSelectedCommandAfter).toBe(false); }); - it('should call copyContextStoreStates with correct parameters', () => { - const { result } = renderHook(() => useSetGlobalCommandMenuContext(), { - wrapper, - }); + it('should copy context store states to previous instance before resetting', () => { + const { result } = renderHook( + () => { + const { setGlobalCommandMenuContext } = + useSetGlobalCommandMenuContext(); + + const previousTargetedRecordsRule = useAtomComponentStateValue( + contextStoreTargetedRecordsRuleComponentState, + COMMAND_MENU_PREVIOUS_COMPONENT_INSTANCE_ID, + ); + + const previousNumberOfSelectedRecords = useAtomComponentStateValue( + contextStoreNumberOfSelectedRecordsComponentState, + COMMAND_MENU_PREVIOUS_COMPONENT_INSTANCE_ID, + ); + + return { + setGlobalCommandMenuContext, + previousTargetedRecordsRule, + previousNumberOfSelectedRecords, + }; + }, + { + wrapper, + }, + ); act(() => { result.current.setGlobalCommandMenuContext(); }); - expect(mockCopyContextStoreStates).toHaveBeenCalledWith({ - instanceIdToCopyFrom: COMMAND_MENU_COMPONENT_INSTANCE_ID, - instanceIdToCopyTo: COMMAND_MENU_PREVIOUS_COMPONENT_INSTANCE_ID, + expect(result.current.previousTargetedRecordsRule).toEqual({ + mode: 'selection', + selectedRecordIds: [peopleMock[0].id, peopleMock[1].id], }); + expect(result.current.previousNumberOfSelectedRecords).toBe(2); }); }); diff --git a/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useUpdateCommandMenuPageInfo.test.tsx b/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useUpdateCommandMenuPageInfo.test.tsx index 8fd3653bf4..01d1427959 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useUpdateCommandMenuPageInfo.test.tsx +++ b/packages/twenty-front/src/modules/command-menu/hooks/__tests__/useUpdateCommandMenuPageInfo.test.tsx @@ -5,7 +5,6 @@ import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { act } from 'react'; -import { RecoilRoot } from 'recoil'; import { CommandMenuPages } from 'twenty-shared/types'; import { IconArrowDown, IconDotsVertical } from 'twenty-ui/display'; @@ -25,9 +24,7 @@ const mockedNavigationStack = [ ]; const Wrapper = ({ children }: { children: React.ReactNode }) => ( - - {children} - + {children} ); describe('useUpdateCommandMenuPageInfo', () => { diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenu.ts b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenu.ts index d7b7314f62..ddcbfdfee1 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenu.ts +++ b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenu.ts @@ -2,8 +2,8 @@ import { SIDE_PANEL_FOCUS_ID } from '@/command-menu/constants/SidePanelFocusId'; import { useNavigateCommandMenu } from '@/command-menu/hooks/useNavigateCommandMenu'; import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchState'; import { isCommandMenuClosingState } from '@/command-menu/states/isCommandMenuClosingState'; -import { isCommandMenuOpenedStateV2 } from '@/command-menu/states/isCommandMenuOpenedStateV2'; -import { addToNavPayloadRegistryStateV2 } from '@/navigation-menu-item/states/addToNavPayloadRegistryStateV2'; +import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; +import { addToNavPayloadRegistryState } from '@/navigation-menu-item/states/addToNavPayloadRegistryState'; import { useCloseAnyOpenDropdown } from '@/ui/layout/dropdown/hooks/useCloseAnyOpenDropdown'; import { emitSidePanelOpenEvent } from '@/ui/layout/right-drawer/utils/emitSidePanelOpenEvent'; import { useRemoveFocusItemFromFocusStackById } from '@/ui/utilities/focus/hooks/useRemoveFocusItemFromFocusStackById'; @@ -22,11 +22,11 @@ export const useCommandMenu = () => { useRemoveFocusItemFromFocusStackById(); const closeCommandMenu = useCallback(() => { - const isCommandMenuOpened = store.get(isCommandMenuOpenedStateV2.atom); + const isCommandMenuOpened = store.get(isCommandMenuOpenedState.atom); if (isCommandMenuOpened) { - store.set(addToNavPayloadRegistryStateV2.atom, new Map()); - store.set(isCommandMenuOpenedStateV2.atom, false); + store.set(addToNavPayloadRegistryState.atom, new Map()); + store.set(isCommandMenuOpenedState.atom, false); store.set(isCommandMenuClosingState.atom, true); closeAnyOpenDropdown(); removeFocusItemFromFocusStackById({ @@ -47,7 +47,7 @@ export const useCommandMenu = () => { }, [closeAnyOpenDropdown, navigateCommandMenu]); const toggleCommandMenu = useCallback(() => { - const isCommandMenuOpened = store.get(isCommandMenuOpenedStateV2.atom); + const isCommandMenuOpened = store.get(isCommandMenuOpenedState.atom); store.set(commandMenuSearchState.atom, ''); diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuCloseAnimationCompleteCleanup.ts b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuCloseAnimationCompleteCleanup.ts index 3a8921a70d..11a45bc0fb 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuCloseAnimationCompleteCleanup.ts +++ b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuCloseAnimationCompleteCleanup.ts @@ -10,7 +10,7 @@ import { commandMenuPageState } from '@/command-menu/states/commandMenuPageState import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchState'; import { hasUserSelectedCommandState } from '@/command-menu/states/hasUserSelectedCommandState'; import { isCommandMenuClosingState } from '@/command-menu/states/isCommandMenuClosingState'; -import { isCommandMenuOpenedStateV2 } from '@/command-menu/states/isCommandMenuOpenedStateV2'; +import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; import { viewableRecordIdState } from '@/object-record/record-right-drawer/states/viewableRecordIdState'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; @@ -97,7 +97,7 @@ export const useCommandMenuCloseAnimationCompleteCleanup = () => { Icon: undefined, instanceId: '', }); - store.set(isCommandMenuOpenedStateV2.atom, false); + store.set(isCommandMenuOpenedState.atom, false); store.set(commandMenuSearchState.atom, ''); store.set(commandMenuNavigationMorphItemsByPageState.atom, new Map()); store.set(commandMenuNavigationStackState.atom, []); diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuContextChips.tsx b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuContextChips.tsx index 464e244a84..e3efb396d9 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuContextChips.tsx +++ b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuContextChips.tsx @@ -5,7 +5,7 @@ import { commandMenuNavigationStackState } from '@/command-menu/states/commandMe import { CommandMenuPages } from 'twenty-shared/types'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; import { recordStoreIdentifiersFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreIdentifiersSelector'; -import { recordStoreRecordsSelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreRecordsSelectorV2'; +import { recordStoreRecordsSelector } from '@/object-record/record-store/states/selectors/recordStoreRecordsSelector'; import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { useMemo } from 'react'; @@ -54,7 +54,7 @@ export const useCommandMenuContextChips = () => { allowRequestsToTwentyIcons, }, ); - const records = useAtomFamilySelectorValue(recordStoreRecordsSelectorV2, { + const records = useAtomFamilySelectorValue(recordStoreRecordsSelector, { recordIds: allRecordIds, }); diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useNavigateCommandMenu.ts b/packages/twenty-front/src/modules/command-menu/hooks/useNavigateCommandMenu.ts index 06470b5ff7..4e9fde0988 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/useNavigateCommandMenu.ts +++ b/packages/twenty-front/src/modules/command-menu/hooks/useNavigateCommandMenu.ts @@ -9,7 +9,7 @@ import { commandMenuPageState } from '@/command-menu/states/commandMenuPageState import { commandMenuShouldFocusTitleInputComponentState } from '@/command-menu/states/commandMenuShouldFocusTitleInputComponentState'; import { hasUserSelectedCommandState } from '@/command-menu/states/hasUserSelectedCommandState'; import { isCommandMenuClosingState } from '@/command-menu/states/isCommandMenuClosingState'; -import { isCommandMenuOpenedStateV2 } from '@/command-menu/states/isCommandMenuOpenedStateV2'; +import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { usePushFocusItemToFocusStack } from '@/ui/utilities/focus/hooks/usePushFocusItemToFocusStack'; import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType'; @@ -37,7 +37,7 @@ export const useNavigateCommandMenu = () => { const { pushFocusItemToFocusStack } = usePushFocusItemToFocusStack(); const openCommandMenu = useCallback(() => { - const isCommandMenuOpened = store.get(isCommandMenuOpenedStateV2.atom); + const isCommandMenuOpened = store.get(isCommandMenuOpenedState.atom); const isCommandMenuClosing = store.get(isCommandMenuClosingState.atom); @@ -65,7 +65,7 @@ export const useNavigateCommandMenu = () => { instanceIdToCopyTo: COMMAND_MENU_COMPONENT_INSTANCE_ID, }); - store.set(isCommandMenuOpenedStateV2.atom, true); + store.set(isCommandMenuOpenedState.atom, true); store.set(hasUserSelectedCommandState.atom, false); }, [ copyContextStoreStates, diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useOpenAskAIPageInCommandMenu.ts b/packages/twenty-front/src/modules/command-menu/hooks/useOpenAskAIPageInCommandMenu.ts index 85b88675fa..2256b62b14 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/useOpenAskAIPageInCommandMenu.ts +++ b/packages/twenty-front/src/modules/command-menu/hooks/useOpenAskAIPageInCommandMenu.ts @@ -1,5 +1,5 @@ import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; -import { isCommandMenuOpenedStateV2 } from '@/command-menu/states/isCommandMenuOpenedStateV2'; +import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { t } from '@lingui/core/macro'; import { useCallback } from 'react'; @@ -9,7 +9,7 @@ import { v4 } from 'uuid'; export const useOpenAskAIPageInCommandMenu = () => { const { navigateCommandMenu } = useCommandMenu(); - const isCommandMenuOpened = useAtomStateValue(isCommandMenuOpenedStateV2); + const isCommandMenuOpened = useAtomStateValue(isCommandMenuOpenedState); const openAskAIPage = useCallback( ({ diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useOpenRecordsSearchPageInCommandMenu.ts b/packages/twenty-front/src/modules/command-menu/hooks/useOpenRecordsSearchPageInCommandMenu.ts index 8b52404b46..5c8a2f61ab 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/useOpenRecordsSearchPageInCommandMenu.ts +++ b/packages/twenty-front/src/modules/command-menu/hooks/useOpenRecordsSearchPageInCommandMenu.ts @@ -1,5 +1,5 @@ import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; -import { isCommandMenuOpenedStateV2 } from '@/command-menu/states/isCommandMenuOpenedStateV2'; +import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { t } from '@lingui/core/macro'; import { CommandMenuPages } from 'twenty-shared/types'; @@ -8,7 +8,7 @@ import { v4 } from 'uuid'; export const useOpenRecordsSearchPageInCommandMenu = () => { const { navigateCommandMenu } = useCommandMenu(); - const isCommandMenuOpened = useAtomStateValue(isCommandMenuOpenedStateV2); + const isCommandMenuOpened = useAtomStateValue(isCommandMenuOpenedState); const openRecordsSearchPage = () => { navigateCommandMenu({ diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useRichTextCommandMenu.ts b/packages/twenty-front/src/modules/command-menu/hooks/useRichTextCommandMenu.ts index 87b0629d8e..fcc41f6aac 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/useRichTextCommandMenu.ts +++ b/packages/twenty-front/src/modules/command-menu/hooks/useRichTextCommandMenu.ts @@ -1,5 +1,5 @@ import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; -import { viewableRichTextComponentStateV2 } from '@/command-menu/pages/rich-text-page/states/viewableRichTextComponentStateV2'; +import { viewableRichTextComponentState } from '@/command-menu/pages/rich-text-page/states/viewableRichTextComponentState'; import { t } from '@lingui/core/macro'; import { useStore } from 'jotai'; import { useCallback } from 'react'; @@ -19,7 +19,7 @@ export const useRichTextCommandMenu = () => { activityId: string; activityObjectNameSingular: string; }) => { - store.set(viewableRichTextComponentStateV2.atom, { + store.set(viewableRichTextComponentState.atom, { activityId, activityObjectNameSingular, }); diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useSetGlobalCommandMenuContext.ts b/packages/twenty-front/src/modules/command-menu/hooks/useSetGlobalCommandMenuContext.ts index f643228831..dc4cad7380 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/useSetGlobalCommandMenuContext.ts +++ b/packages/twenty-front/src/modules/command-menu/hooks/useSetGlobalCommandMenuContext.ts @@ -1,81 +1,180 @@ import { COMMAND_MENU_COMPONENT_INSTANCE_ID } from '@/command-menu/constants/CommandMenuComponentInstanceId'; import { COMMAND_MENU_PREVIOUS_COMPONENT_INSTANCE_ID } from '@/command-menu/constants/CommandMenuPreviousComponentInstanceId'; -import { useCopyContextStoreStates } from '@/command-menu/hooks/useCopyContextStoreAndActionMenuStates'; import { commandMenuPageInfoState } from '@/command-menu/states/commandMenuPageInfoState'; import { hasUserSelectedCommandState } from '@/command-menu/states/hasUserSelectedCommandState'; import { contextStoreAnyFieldFilterValueComponentState } from '@/context-store/states/contextStoreAnyFieldFilterValueComponentState'; +import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState'; +import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState'; import { contextStoreFilterGroupsComponentState } from '@/context-store/states/contextStoreFilterGroupsComponentState'; import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState'; +import { contextStoreIsPageInEditModeComponentState } from '@/context-store/states/contextStoreIsPageInEditModeComponentState'; import { contextStoreNumberOfSelectedRecordsComponentState } from '@/context-store/states/contextStoreNumberOfSelectedRecordsComponentState'; import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; import { ContextStoreViewType } from '@/context-store/types/ContextStoreViewType'; +import { atom, useStore } from 'jotai'; import { useCallback } from 'react'; -import { useStore } from 'jotai'; export const useSetGlobalCommandMenuContext = () => { const store = useStore(); - const { copyContextStoreStates } = useCopyContextStoreStates(); const setGlobalCommandMenuContext = useCallback(() => { - copyContextStoreStates({ - instanceIdToCopyFrom: COMMAND_MENU_COMPONENT_INSTANCE_ID, - instanceIdToCopyTo: COMMAND_MENU_PREVIOUS_COMPONENT_INSTANCE_ID, - }); - store.set( - contextStoreTargetedRecordsRuleComponentState.atomFamily({ - instanceId: COMMAND_MENU_COMPONENT_INSTANCE_ID, + atom(null, (get, batchSet) => { + const fromId = COMMAND_MENU_COMPONENT_INSTANCE_ID; + const toId = COMMAND_MENU_PREVIOUS_COMPONENT_INSTANCE_ID; + + batchSet( + contextStoreCurrentObjectMetadataItemIdComponentState.atomFamily({ + instanceId: toId, + }), + get( + contextStoreCurrentObjectMetadataItemIdComponentState.atomFamily({ + instanceId: fromId, + }), + ), + ); + + batchSet( + contextStoreTargetedRecordsRuleComponentState.atomFamily({ + instanceId: toId, + }), + get( + contextStoreTargetedRecordsRuleComponentState.atomFamily({ + instanceId: fromId, + }), + ), + ); + + batchSet( + contextStoreNumberOfSelectedRecordsComponentState.atomFamily({ + instanceId: toId, + }), + get( + contextStoreNumberOfSelectedRecordsComponentState.atomFamily({ + instanceId: fromId, + }), + ), + ); + + batchSet( + contextStoreFiltersComponentState.atomFamily({ + instanceId: toId, + }), + get( + contextStoreFiltersComponentState.atomFamily({ + instanceId: fromId, + }), + ), + ); + + batchSet( + contextStoreFilterGroupsComponentState.atomFamily({ + instanceId: toId, + }), + get( + contextStoreFilterGroupsComponentState.atomFamily({ + instanceId: fromId, + }), + ), + ); + + batchSet( + contextStoreAnyFieldFilterValueComponentState.atomFamily({ + instanceId: toId, + }), + get( + contextStoreAnyFieldFilterValueComponentState.atomFamily({ + instanceId: fromId, + }), + ), + ); + + batchSet( + contextStoreCurrentViewIdComponentState.atomFamily({ + instanceId: toId, + }), + get( + contextStoreCurrentViewIdComponentState.atomFamily({ + instanceId: fromId, + }), + ), + ); + + batchSet( + contextStoreCurrentViewTypeComponentState.atomFamily({ + instanceId: toId, + }), + get( + contextStoreCurrentViewTypeComponentState.atomFamily({ + instanceId: fromId, + }), + ), + ); + + batchSet( + contextStoreIsPageInEditModeComponentState.atomFamily({ + instanceId: toId, + }), + get( + contextStoreIsPageInEditModeComponentState.atomFamily({ + instanceId: fromId, + }), + ), + ); + + batchSet( + contextStoreTargetedRecordsRuleComponentState.atomFamily({ + instanceId: fromId, + }), + { mode: 'selection', selectedRecordIds: [] }, + ); + + batchSet( + contextStoreNumberOfSelectedRecordsComponentState.atomFamily({ + instanceId: fromId, + }), + 0, + ); + + batchSet( + contextStoreFiltersComponentState.atomFamily({ + instanceId: fromId, + }), + [], + ); + + batchSet( + contextStoreFilterGroupsComponentState.atomFamily({ + instanceId: fromId, + }), + [], + ); + + batchSet( + contextStoreAnyFieldFilterValueComponentState.atomFamily({ + instanceId: fromId, + }), + '', + ); + + batchSet( + contextStoreCurrentViewTypeComponentState.atomFamily({ + instanceId: fromId, + }), + ContextStoreViewType.Table, + ); + + batchSet(commandMenuPageInfoState.atom, { + title: undefined, + Icon: undefined, + instanceId: '', + }); + + batchSet(hasUserSelectedCommandState.atom, false); }), - { - mode: 'selection', - selectedRecordIds: [], - }, ); - - store.set( - contextStoreNumberOfSelectedRecordsComponentState.atomFamily({ - instanceId: COMMAND_MENU_COMPONENT_INSTANCE_ID, - }), - 0, - ); - - store.set( - contextStoreFiltersComponentState.atomFamily({ - instanceId: COMMAND_MENU_COMPONENT_INSTANCE_ID, - }), - [], - ); - - store.set( - contextStoreFilterGroupsComponentState.atomFamily({ - instanceId: COMMAND_MENU_COMPONENT_INSTANCE_ID, - }), - [], - ); - - store.set( - contextStoreAnyFieldFilterValueComponentState.atomFamily({ - instanceId: COMMAND_MENU_COMPONENT_INSTANCE_ID, - }), - '', - ); - - store.set( - contextStoreCurrentViewTypeComponentState.atomFamily({ - instanceId: COMMAND_MENU_COMPONENT_INSTANCE_ID, - }), - ContextStoreViewType.Table, - ); - - store.set(commandMenuPageInfoState.atom, { - title: undefined, - Icon: undefined, - instanceId: '', - }); - - store.set(hasUserSelectedCommandState.atom, false); - }, [copyContextStoreStates, store]); + }, [store]); return { setGlobalCommandMenuContext, diff --git a/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNavigationMenuItemEditPage.tsx b/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNavigationMenuItemEditPage.tsx index b892825655..41bd5c59e6 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNavigationMenuItemEditPage.tsx +++ b/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNavigationMenuItemEditPage.tsx @@ -11,7 +11,7 @@ import { useSelectedNavigationMenuItemEditItem } from '@/navigation-menu-item/ho import { useSelectedNavigationMenuItemEditItemLabel } from '@/navigation-menu-item/hooks/useSelectedNavigationMenuItemEditItemLabel'; import { useSelectedNavigationMenuItemEditItemObjectMetadata } from '@/navigation-menu-item/hooks/useSelectedNavigationMenuItemEditItemObjectMetadata'; import { useUpdateLinkInDraft } from '@/navigation-menu-item/hooks/useUpdateLinkInDraft'; -import { selectedNavigationMenuItemInEditModeStateV2 } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeStateV2'; +import { selectedNavigationMenuItemInEditModeState } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeState'; import styled from '@emotion/styled'; import { useLingui } from '@lingui/react/macro'; import { useState } from 'react'; @@ -31,7 +31,7 @@ export const CommandMenuNavigationMenuItemEditPage = () => { const { t } = useLingui(); const selectedNavigationMenuItemInEditMode = useAtomStateValue( - selectedNavigationMenuItemInEditModeStateV2, + selectedNavigationMenuItemInEditModeState, ); const { selectedItemLabel } = useSelectedNavigationMenuItemEditItemLabel(); const { selectedItem } = useSelectedNavigationMenuItemEditItem(); diff --git a/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNewSidebarItemObjectFlow.tsx b/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNewSidebarItemObjectFlow.tsx index d84178a450..7d02f51510 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNewSidebarItemObjectFlow.tsx +++ b/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNewSidebarItemObjectFlow.tsx @@ -8,7 +8,7 @@ import { getAvailableObjectMetadataForNewSidebarItem } from '@/command-menu/page import { useAddObjectToNavigationMenuDraft } from '@/navigation-menu-item/hooks/useAddObjectToNavigationMenuDraft'; import { useDraftNavigationMenuItems } from '@/navigation-menu-item/hooks/useDraftNavigationMenuItems'; import { useNavigationMenuObjectMetadataFromDraft } from '@/navigation-menu-item/hooks/useNavigationMenuObjectMetadataFromDraft'; -import { addMenuItemInsertionContextStateV2 } from '@/navigation-menu-item/states/addMenuItemInsertionContextStateV2'; +import { addMenuItemInsertionContextState } from '@/navigation-menu-item/states/addMenuItemInsertionContextState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems'; @@ -35,10 +35,10 @@ export const CommandMenuNewSidebarItemObjectFlow = ({ const { activeNonSystemObjectMetadataItems } = useFilteredObjectMetadataItems(); const addMenuItemInsertionContext = useAtomStateValue( - addMenuItemInsertionContextStateV2, + addMenuItemInsertionContextState, ); const setAddMenuItemInsertionContext = useSetAtomState( - addMenuItemInsertionContextStateV2, + addMenuItemInsertionContextState, ); const { views, objectMetadataIdsWithIndexView } = useNavigationMenuObjectMetadataFromDraft(currentDraft); diff --git a/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNewSidebarItemRecordItem.tsx b/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNewSidebarItemRecordItem.tsx index fa9d802967..bdc6aac4ea 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNewSidebarItemRecordItem.tsx +++ b/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNewSidebarItemRecordItem.tsx @@ -5,7 +5,7 @@ import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; import { NavigationMenuItemType } from '@/navigation-menu-item/constants/NavigationMenuItemType'; import { useDraftNavigationMenuItems } from '@/navigation-menu-item/hooks/useDraftNavigationMenuItems'; import { useAddRecordToNavigationMenuDraft } from '@/navigation-menu-item/hooks/useAddRecordToNavigationMenuDraft'; -import { addMenuItemInsertionContextStateV2 } from '@/navigation-menu-item/states/addMenuItemInsertionContextStateV2'; +import { addMenuItemInsertionContextState } from '@/navigation-menu-item/states/addMenuItemInsertionContextState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import type { AddToNavigationDragPayload } from '@/navigation-menu-item/types/add-to-navigation-drag-payload'; @@ -33,10 +33,10 @@ export const CommandMenuNewSidebarItemRecordItem = ({ const { addRecordToDraft } = useAddRecordToNavigationMenuDraft(); const { currentDraft } = useDraftNavigationMenuItems(); const addMenuItemInsertionContext = useAtomStateValue( - addMenuItemInsertionContextStateV2, + addMenuItemInsertionContextState, ); const setAddMenuItemInsertionContext = useSetAtomState( - addMenuItemInsertionContextStateV2, + addMenuItemInsertionContextState, ); const { objectMetadataItems } = useObjectMetadataItems(); const objectMetadataItem = objectMetadataItems.find( diff --git a/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNewSidebarItemViewPickerSubView.tsx b/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNewSidebarItemViewPickerSubView.tsx index f5bb8ffab4..7848a6e196 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNewSidebarItemViewPickerSubView.tsx +++ b/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/components/CommandMenuNewSidebarItemViewPickerSubView.tsx @@ -14,7 +14,7 @@ import { ObjectIconWithViewOverlay } from '@/navigation-menu-item/components/Obj import { NavigationMenuItemType } from '@/navigation-menu-item/constants/NavigationMenuItemType'; import { useAddViewToNavigationMenuDraft } from '@/navigation-menu-item/hooks/useAddViewToNavigationMenuDraft'; import { useNavigationMenuObjectMetadataFromDraft } from '@/navigation-menu-item/hooks/useNavigationMenuObjectMetadataFromDraft'; -import { addMenuItemInsertionContextStateV2 } from '@/navigation-menu-item/states/addMenuItemInsertionContextStateV2'; +import { addMenuItemInsertionContextState } from '@/navigation-menu-item/states/addMenuItemInsertionContextState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; @@ -38,10 +38,10 @@ export const CommandMenuNewSidebarItemViewPickerSubView = ({ const { addViewToDraft } = useAddViewToNavigationMenuDraft(); const { currentDraft } = useDraftNavigationMenuItems(); const addMenuItemInsertionContext = useAtomStateValue( - addMenuItemInsertionContextStateV2, + addMenuItemInsertionContextState, ); const setAddMenuItemInsertionContext = useSetAtomState( - addMenuItemInsertionContextStateV2, + addMenuItemInsertionContextState, ); const { objectMetadataItems } = useObjectMetadataItems(); const { views } = useNavigationMenuObjectMetadataFromDraft(currentDraft); diff --git a/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/hooks/useAddFolderToNavigationMenu.ts b/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/hooks/useAddFolderToNavigationMenu.ts index 340aef993c..a3a6dcee99 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/hooks/useAddFolderToNavigationMenu.ts +++ b/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/hooks/useAddFolderToNavigationMenu.ts @@ -5,9 +5,9 @@ import { IconFolder } from 'twenty-ui/display'; import { useAddFolderToNavigationMenuDraft } from '@/navigation-menu-item/hooks/useAddFolderToNavigationMenuDraft'; import { useNavigationMenuItemsDraftState } from '@/navigation-menu-item/hooks/useNavigationMenuItemsDraftState'; import { useOpenNavigationMenuItemInCommandMenu } from '@/navigation-menu-item/hooks/useOpenNavigationMenuItemInCommandMenu'; -import { addMenuItemInsertionContextStateV2 } from '@/navigation-menu-item/states/addMenuItemInsertionContextStateV2'; -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; -import { selectedNavigationMenuItemInEditModeStateV2 } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeStateV2'; +import { addMenuItemInsertionContextState } from '@/navigation-menu-item/states/addMenuItemInsertionContextState'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; +import { selectedNavigationMenuItemInEditModeState } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; @@ -16,18 +16,18 @@ export const useAddFolderToNavigationMenu = () => { const { addFolderToDraft } = useAddFolderToNavigationMenuDraft(); const { workspaceNavigationMenuItems } = useNavigationMenuItemsDraftState(); const navigationMenuItemsDraft = useAtomStateValue( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const setSelectedNavigationMenuItemInEditMode = useSetAtomState( - selectedNavigationMenuItemInEditModeStateV2, + selectedNavigationMenuItemInEditModeState, ); const { openNavigationMenuItemInCommandMenu } = useOpenNavigationMenuItemInCommandMenu(); const addMenuItemInsertionContext = useAtomStateValue( - addMenuItemInsertionContextStateV2, + addMenuItemInsertionContextState, ); const setAddMenuItemInsertionContext = useSetAtomState( - addMenuItemInsertionContextStateV2, + addMenuItemInsertionContextState, ); const currentDraft = isDefined(navigationMenuItemsDraft) diff --git a/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/hooks/useAddLinkToNavigationMenu.ts b/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/hooks/useAddLinkToNavigationMenu.ts index c4678e49a3..d3339a86ce 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/hooks/useAddLinkToNavigationMenu.ts +++ b/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/hooks/useAddLinkToNavigationMenu.ts @@ -5,9 +5,9 @@ import { IconLink } from 'twenty-ui/display'; import { useAddLinkToNavigationMenuDraft } from '@/navigation-menu-item/hooks/useAddLinkToNavigationMenuDraft'; import { useNavigationMenuItemsDraftState } from '@/navigation-menu-item/hooks/useNavigationMenuItemsDraftState'; import { useOpenNavigationMenuItemInCommandMenu } from '@/navigation-menu-item/hooks/useOpenNavigationMenuItemInCommandMenu'; -import { addMenuItemInsertionContextStateV2 } from '@/navigation-menu-item/states/addMenuItemInsertionContextStateV2'; -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; -import { selectedNavigationMenuItemInEditModeStateV2 } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeStateV2'; +import { addMenuItemInsertionContextState } from '@/navigation-menu-item/states/addMenuItemInsertionContextState'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; +import { selectedNavigationMenuItemInEditModeState } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; @@ -16,18 +16,18 @@ export const useAddLinkToNavigationMenu = () => { const { addLinkToDraft } = useAddLinkToNavigationMenuDraft(); const { workspaceNavigationMenuItems } = useNavigationMenuItemsDraftState(); const navigationMenuItemsDraft = useAtomStateValue( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const setSelectedNavigationMenuItemInEditMode = useSetAtomState( - selectedNavigationMenuItemInEditModeStateV2, + selectedNavigationMenuItemInEditModeState, ); const { openNavigationMenuItemInCommandMenu } = useOpenNavigationMenuItemInCommandMenu(); const addMenuItemInsertionContext = useAtomStateValue( - addMenuItemInsertionContextStateV2, + addMenuItemInsertionContextState, ); const setAddMenuItemInsertionContext = useSetAtomState( - addMenuItemInsertionContextStateV2, + addMenuItemInsertionContextState, ); const currentDraft = isDefined(navigationMenuItemsDraft) diff --git a/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/hooks/useFolderPickerSelectionData.ts b/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/hooks/useFolderPickerSelectionData.ts index 6a4578f4f4..2f4cdb0c91 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/hooks/useFolderPickerSelectionData.ts +++ b/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/hooks/useFolderPickerSelectionData.ts @@ -5,7 +5,7 @@ import { useDraftNavigationMenuItemsAllFolders } from '@/navigation-menu-item/ho import { useDraftNavigationMenuItemsWorkspaceFolders } from '@/navigation-menu-item/hooks/useDraftNavigationMenuItemsWorkspaceFolders'; import { useSelectedNavigationMenuItemEditItem } from '@/navigation-menu-item/hooks/useSelectedNavigationMenuItemEditItem'; import { useNavigationMenuItemMoveRemove } from '@/navigation-menu-item/hooks/useNavigationMenuItemMoveRemove'; -import { selectedNavigationMenuItemInEditModeStateV2 } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeStateV2'; +import { selectedNavigationMenuItemInEditModeState } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { NavigationMenuItemType } from '@/navigation-menu-item/constants/NavigationMenuItemType'; @@ -48,7 +48,7 @@ export const useFolderPickerSelectionData = ({ const { closeCommandMenu } = useCommandMenu(); const { moveToFolder } = useNavigationMenuItemMoveRemove(); const selectedNavigationMenuItemInEditMode = useAtomStateValue( - selectedNavigationMenuItemInEditModeStateV2, + selectedNavigationMenuItemInEditModeState, ); const { selectedItem } = useSelectedNavigationMenuItemEditItem(); const selectedItemType = selectedItem?.itemType ?? null; diff --git a/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/hooks/useNavigationMenuItemEditOrganizeActions.ts b/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/hooks/useNavigationMenuItemEditOrganizeActions.ts index d05aecde11..9f7ff88868 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/hooks/useNavigationMenuItemEditOrganizeActions.ts +++ b/packages/twenty-front/src/modules/command-menu/pages/navigation-menu-item/hooks/useNavigationMenuItemEditOrganizeActions.ts @@ -8,8 +8,8 @@ import { type OrganizeActionsProps } from '@/command-menu/pages/navigation-menu- import { useNavigationMenuItemMoveRemove } from '@/navigation-menu-item/hooks/useNavigationMenuItemMoveRemove'; import { useNavigationMenuItemsDraftState } from '@/navigation-menu-item/hooks/useNavigationMenuItemsDraftState'; import { useWorkspaceSectionItems } from '@/navigation-menu-item/hooks/useWorkspaceSectionItems'; -import { addMenuItemInsertionContextStateV2 } from '@/navigation-menu-item/states/addMenuItemInsertionContextStateV2'; -import { selectedNavigationMenuItemInEditModeStateV2 } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeStateV2'; +import { addMenuItemInsertionContextState } from '@/navigation-menu-item/states/addMenuItemInsertionContextState'; +import { selectedNavigationMenuItemInEditModeState } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeState'; import { type AddMenuItemInsertionContext } from '@/navigation-menu-item/types/AddMenuItemInsertionContext'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; @@ -50,13 +50,13 @@ export const useNavigationMenuItemEditOrganizeActions = const { closeCommandMenu } = useCommandMenu(); const { navigateCommandMenu } = useNavigateCommandMenu(); const selectedNavigationMenuItemInEditMode = useAtomStateValue( - selectedNavigationMenuItemInEditModeStateV2, + selectedNavigationMenuItemInEditModeState, ); const setSelectedNavigationMenuItemInEditMode = useSetAtomState( - selectedNavigationMenuItemInEditModeStateV2, + selectedNavigationMenuItemInEditModeState, ); const setAddMenuItemInsertionContext = useSetAtomState( - addMenuItemInsertionContextStateV2, + addMenuItemInsertionContextState, ); const { workspaceNavigationMenuItems } = useNavigationMenuItemsDraftState(); const items = useWorkspaceSectionItems(); diff --git a/packages/twenty-front/src/modules/command-menu/pages/page-layout/hooks/__tests__/useChartSettingsValues.test.tsx b/packages/twenty-front/src/modules/command-menu/pages/page-layout/hooks/__tests__/useChartSettingsValues.test.tsx index 4afd2f53a1..61b572fc70 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/page-layout/hooks/__tests__/useChartSettingsValues.test.tsx +++ b/packages/twenty-front/src/modules/command-menu/pages/page-layout/hooks/__tests__/useChartSettingsValues.test.tsx @@ -1,6 +1,5 @@ import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; import { type ChartConfiguration } from '@/command-menu/pages/page-layout/types/ChartConfiguration'; import { CHART_CONFIGURATION_SETTING_IDS } from '@/command-menu/pages/page-layout/types/ChartConfigurationSettingIds'; @@ -91,9 +90,7 @@ const renderUseChartSettingsValues = (configuration: ChartConfiguration) => { }), { wrapper: ({ children }) => ( - - {children} - + {children} ), }, ); @@ -424,9 +421,7 @@ describe('useChartSettingsValues', () => { }), { wrapper: ({ children }) => ( - - {children} - + {children} ), }, ); diff --git a/packages/twenty-front/src/modules/command-menu/pages/record-page/components/CommandMenuRecordPage.tsx b/packages/twenty-front/src/modules/command-menu/pages/record-page/components/CommandMenuRecordPage.tsx index 4bf584b24e..8bf907ed58 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/record-page/components/CommandMenuRecordPage.tsx +++ b/packages/twenty-front/src/modules/command-menu/pages/record-page/components/CommandMenuRecordPage.tsx @@ -8,7 +8,7 @@ import { INFORMATION_BANNER_HEIGHT } from '@/information-banner/constants/Inform import { RecordComponentInstanceContextsWrapper } from '@/object-record/components/RecordComponentInstanceContextsWrapper'; import { PageLayoutRecordPageRenderer } from '@/object-record/record-show/components/PageLayoutRecordPageRenderer'; import { useRecordShowPage } from '@/object-record/record-show/hooks/useRecordShowPage'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { useComponentInstanceStateContext } from '@/ui/utilities/state/component-state/hooks/useComponentInstanceStateContext'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; import styled from '@emotion/styled'; @@ -48,7 +48,7 @@ export const CommandMenuRecordPage = () => { ); const recordDeletedAt = useAtomFamilySelectorValue( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId: objectRecordId, fieldName: 'deletedAt', diff --git a/packages/twenty-front/src/modules/command-menu/pages/rich-text-page/components/CommandMenuEditRichTextPage.tsx b/packages/twenty-front/src/modules/command-menu/pages/rich-text-page/components/CommandMenuEditRichTextPage.tsx index 94bf17db51..73e58b3232 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/rich-text-page/components/CommandMenuEditRichTextPage.tsx +++ b/packages/twenty-front/src/modules/command-menu/pages/rich-text-page/components/CommandMenuEditRichTextPage.tsx @@ -4,7 +4,7 @@ import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { lazy, Suspense } from 'react'; import Skeleton, { SkeletonTheme } from 'react-loading-skeleton'; -import { viewableRichTextComponentStateV2 } from '@/command-menu/pages/rich-text-page/states/viewableRichTextComponentStateV2'; +import { viewableRichTextComponentState } from '@/command-menu/pages/rich-text-page/states/viewableRichTextComponentState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; const ActivityRichTextEditor = lazy(() => @@ -36,7 +36,7 @@ const LoadingSkeleton = () => { export const CommandMenuEditRichTextPage = () => { const { activityId, activityObjectNameSingular } = useAtomStateValue( - viewableRichTextComponentStateV2, + viewableRichTextComponentState, ); if ( diff --git a/packages/twenty-front/src/modules/command-menu/pages/rich-text-page/states/viewableRichTextComponentStateV2.ts b/packages/twenty-front/src/modules/command-menu/pages/rich-text-page/states/viewableRichTextComponentState.ts similarity index 68% rename from packages/twenty-front/src/modules/command-menu/pages/rich-text-page/states/viewableRichTextComponentStateV2.ts rename to packages/twenty-front/src/modules/command-menu/pages/rich-text-page/states/viewableRichTextComponentState.ts index 366461c2ad..9b48ecccfc 100644 --- a/packages/twenty-front/src/modules/command-menu/pages/rich-text-page/states/viewableRichTextComponentStateV2.ts +++ b/packages/twenty-front/src/modules/command-menu/pages/rich-text-page/states/viewableRichTextComponentState.ts @@ -1,10 +1,10 @@ import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const viewableRichTextComponentStateV2 = createAtomState<{ +export const viewableRichTextComponentState = createAtomState<{ activityId: string; activityObjectNameSingular: string; }>({ - key: 'viewableRichTextComponentStateV2', + key: 'viewableRichTextComponentState', defaultValue: { activityId: '', activityObjectNameSingular: '', diff --git a/packages/twenty-front/src/modules/command-menu/states/isCommandMenuOpenedState.ts b/packages/twenty-front/src/modules/command-menu/states/isCommandMenuOpenedState.ts new file mode 100644 index 0000000000..eeb1ced2f6 --- /dev/null +++ b/packages/twenty-front/src/modules/command-menu/states/isCommandMenuOpenedState.ts @@ -0,0 +1,6 @@ +import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; + +export const isCommandMenuOpenedState = createAtomState({ + key: 'command-menu/isCommandMenuOpenedState', + defaultValue: false, +}); diff --git a/packages/twenty-front/src/modules/command-menu/states/isCommandMenuOpenedStateV2.ts b/packages/twenty-front/src/modules/command-menu/states/isCommandMenuOpenedStateV2.ts deleted file mode 100644 index f57fdf9567..0000000000 --- a/packages/twenty-front/src/modules/command-menu/states/isCommandMenuOpenedStateV2.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; - -export const isCommandMenuOpenedStateV2 = createAtomState({ - key: 'command-menu/isCommandMenuOpenedStateV2', - defaultValue: false, -}); diff --git a/packages/twenty-front/src/modules/command-menu/states/isSidePanelAnimatingState.ts b/packages/twenty-front/src/modules/command-menu/states/isSidePanelAnimatingState.ts new file mode 100644 index 0000000000..f06d437daa --- /dev/null +++ b/packages/twenty-front/src/modules/command-menu/states/isSidePanelAnimatingState.ts @@ -0,0 +1,6 @@ +import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; + +export const isSidePanelAnimatingState = createAtomState({ + key: 'command-menu/isSidePanelAnimatingState', + defaultValue: false, +}); diff --git a/packages/twenty-front/src/modules/command-menu/states/isSidePanelAnimatingStateV2.ts b/packages/twenty-front/src/modules/command-menu/states/isSidePanelAnimatingStateV2.ts deleted file mode 100644 index 95c0d1a626..0000000000 --- a/packages/twenty-front/src/modules/command-menu/states/isSidePanelAnimatingStateV2.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; - -export const isSidePanelAnimatingStateV2 = createAtomState({ - key: 'command-menu/isSidePanelAnimatingStateV2', - defaultValue: false, -}); diff --git a/packages/twenty-front/src/modules/debug/components/RecoilDebugObserver.tsx b/packages/twenty-front/src/modules/debug/components/RecoilDebugObserver.tsx deleted file mode 100644 index 5586cad1b4..0000000000 --- a/packages/twenty-front/src/modules/debug/components/RecoilDebugObserver.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { useRecoilTransactionObserver_UNSTABLE } from 'recoil'; - -import { logDebug } from '~/utils/logDebug'; - -const formatTitle = (stateName: string) => { - const headerCss = [ - 'color: gray; font-weight: lighter', - 'color: black; font-weight: bold;', - ]; - - const parts = ['%c recoil', `%c${stateName}`]; - - return [parts.join(' '), ...headerCss]; -}; - -export const RecoilDebugObserverEffect = () => { - const isDebugMode = process.env.IS_DEBUG_MODE === 'true'; - - useRecoilTransactionObserver_UNSTABLE(({ snapshot }) => { - if (!isDebugMode) { - return; - } - for (const node of Array.from( - snapshot.getNodes_UNSTABLE({ isModified: true }), - )) { - const loadable = snapshot.getLoadable(node); - - const titleArgs = formatTitle(node.key); - - console.groupCollapsed(...titleArgs); - - logDebug('STATE', loadable.state); - - logDebug('CONTENTS', loadable.contents); - - console.groupEnd(); - } - }); - return null; -}; diff --git a/packages/twenty-front/src/modules/dropdown-context-state-management/hooks/useDropdownContextStateManagement.ts b/packages/twenty-front/src/modules/dropdown-context-state-management/hooks/useDropdownContextStateManagement.ts index c457f79797..41fa0f16ca 100644 --- a/packages/twenty-front/src/modules/dropdown-context-state-management/hooks/useDropdownContextStateManagement.ts +++ b/packages/twenty-front/src/modules/dropdown-context-state-management/hooks/useDropdownContextStateManagement.ts @@ -6,7 +6,7 @@ import { type Context, useCallback, useContext } from 'react'; /** * - * @deprecated This hook is deprecated because it uses context instead of recoil and synchronous hooks like we do in the application + * @deprecated This hook is deprecated because it uses context instead of jotai and synchronous hooks like we do in the application * * TODO: refactor this generic way to handle multiple pages in a dropdown with state management and specific code paths in a dedicated module, instead of using context with generic union types. */ diff --git a/packages/twenty-front/src/modules/favorites/components/CurrentWorkspaceMemberFavorites.tsx b/packages/twenty-front/src/modules/favorites/components/CurrentWorkspaceMemberFavorites.tsx index d32af42fde..2d09d5d1f4 100644 --- a/packages/twenty-front/src/modules/favorites/components/CurrentWorkspaceMemberFavorites.tsx +++ b/packages/twenty-front/src/modules/favorites/components/CurrentWorkspaceMemberFavorites.tsx @@ -6,7 +6,7 @@ import { FavoritesDragContext } from '@/favorites/contexts/FavoritesDragContext' import { useDeleteFavorite } from '@/favorites/hooks/useDeleteFavorite'; import { useDeleteFavoriteFolder } from '@/favorites/hooks/useDeleteFavoriteFolder'; import { useRenameFavoriteFolder } from '@/favorites/hooks/useRenameFavoriteFolder'; -import { openFavoriteFolderIdsStateV2 } from '@/favorites/states/openFavoriteFolderIdsStateV2'; +import { openFavoriteFolderIdsState } from '@/favorites/states/openFavoriteFolderIdsState'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { getFavoriteSecondaryLabel } from '@/favorites/utils/getFavoriteSecondaryLabel'; import { isLocationMatchingFavorite } from '@/favorites/utils/isLocationMatchingFavorite'; @@ -23,7 +23,7 @@ import { NavigationDrawerInput } from '@/ui/navigation/navigation-drawer/compone import { NavigationDrawerItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItem'; import { NavigationDrawerItemsCollapsableContainer } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItemsCollapsableContainer'; import { NavigationDrawerSubItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerSubItem'; -import { currentFavoriteFolderIdStateV2 } from '@/ui/navigation/navigation-drawer/states/currentFavoriteFolderIdStateV2'; +import { currentFavoriteFolderIdState } from '@/ui/navigation/navigation-drawer/states/currentFavoriteFolderIdState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { getNavigationSubItemLeftAdornment } from '@/ui/navigation/navigation-drawer/utils/getNavigationSubItemLeftAdornment'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; @@ -65,10 +65,10 @@ export const CurrentWorkspaceMemberFavorites = ({ const isMobile = useIsMobile(); const [openFavoriteFolderIds, setOpenFavoriteFolderIds] = useAtomState( - openFavoriteFolderIdsStateV2, + openFavoriteFolderIdsState, ); - const setCurrentFolderId = useSetAtomState(currentFavoriteFolderIdStateV2); + const setCurrentFolderId = useSetAtomState(currentFavoriteFolderIdState); const isOpen = openFavoriteFolderIds.includes(folder.folderId); diff --git a/packages/twenty-front/src/modules/favorites/components/CurrentWorkspaceMemberFavoritesFolders.tsx b/packages/twenty-front/src/modules/favorites/components/CurrentWorkspaceMemberFavoritesFolders.tsx index 021d926fe6..d44789fbc5 100644 --- a/packages/twenty-front/src/modules/favorites/components/CurrentWorkspaceMemberFavoritesFolders.tsx +++ b/packages/twenty-front/src/modules/favorites/components/CurrentWorkspaceMemberFavoritesFolders.tsx @@ -4,7 +4,7 @@ import { FavoriteFolders } from '@/favorites/components/FavoritesFolders'; import { FavoritesSkeletonLoader } from '@/favorites/components/FavoritesSkeletonLoader'; import { useFavorites } from '@/favorites/hooks/useFavorites'; import { useFavoritesByFolder } from '@/favorites/hooks/useFavoritesByFolder'; -import { isFavoriteFolderCreatingStateV2 } from '@/favorites/states/isFavoriteFolderCreatingStateV2'; +import { isFavoriteFolderCreatingState } from '@/favorites/states/isFavoriteFolderCreatingState'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { useIsPrefetchLoading } from '@/prefetch/hooks/useIsPrefetchLoading'; import { NavigationDrawerAnimatedCollapseWrapper } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerAnimatedCollapseWrapper'; @@ -25,7 +25,7 @@ export const CurrentWorkspaceMemberFavoritesFolders = () => { const { favoritesByFolder } = useFavoritesByFolder(); const [isFavoriteFolderCreating, setIsFavoriteFolderCreating] = useAtomState( - isFavoriteFolderCreatingStateV2, + isFavoriteFolderCreatingState, ); const loading = useIsPrefetchLoading(); diff --git a/packages/twenty-front/src/modules/favorites/components/FavoritesBackButton.tsx b/packages/twenty-front/src/modules/favorites/components/FavoritesBackButton.tsx index 1ed723eded..6bb25d235c 100644 --- a/packages/twenty-front/src/modules/favorites/components/FavoritesBackButton.tsx +++ b/packages/twenty-front/src/modules/favorites/components/FavoritesBackButton.tsx @@ -1,4 +1,4 @@ -import { currentFavoriteFolderIdStateV2 } from '@/ui/navigation/navigation-drawer/states/currentFavoriteFolderIdStateV2'; +import { currentFavoriteFolderIdState } from '@/ui/navigation/navigation-drawer/states/currentFavoriteFolderIdState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; @@ -35,7 +35,7 @@ export const FavoritesBackButton = ({ folderName, }: FavoritesBackButtonProps) => { const theme = useTheme(); - const setCurrentFolderId = useSetAtomState(currentFavoriteFolderIdStateV2); + const setCurrentFolderId = useSetAtomState(currentFavoriteFolderIdState); const handleClick = (e: React.MouseEvent) => { e.preventDefault(); diff --git a/packages/twenty-front/src/modules/favorites/components/FavoritesFolders.tsx b/packages/twenty-front/src/modules/favorites/components/FavoritesFolders.tsx index ee666b33b2..e2538ad3a0 100644 --- a/packages/twenty-front/src/modules/favorites/components/FavoritesFolders.tsx +++ b/packages/twenty-front/src/modules/favorites/components/FavoritesFolders.tsx @@ -1,7 +1,7 @@ import { CurrentWorkspaceMemberFavorites } from '@/favorites/components/CurrentWorkspaceMemberFavorites'; import { useCreateFavoriteFolder } from '@/favorites/hooks/useCreateFavoriteFolder'; import { useFavoritesByFolder } from '@/favorites/hooks/useFavoritesByFolder'; -import { isFavoriteFolderCreatingStateV2 } from '@/favorites/states/isFavoriteFolderCreatingStateV2'; +import { isFavoriteFolderCreatingState } from '@/favorites/states/isFavoriteFolderCreatingState'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { NavigationDrawerAnimatedCollapseWrapper } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerAnimatedCollapseWrapper'; import { NavigationDrawerInput } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerInput'; @@ -21,7 +21,7 @@ export const FavoriteFolders = ({ const { createNewFavoriteFolder } = useCreateFavoriteFolder(); const [isFavoriteFolderCreating, setIsFavoriteFolderCreating] = useAtomState( - isFavoriteFolderCreatingStateV2, + isFavoriteFolderCreatingState, ); const handleFavoriteFolderNameChange = (value: string) => { diff --git a/packages/twenty-front/src/modules/favorites/favorite-folder-picker/components/FavoriteFolderPicker.tsx b/packages/twenty-front/src/modules/favorites/favorite-folder-picker/components/FavoriteFolderPicker.tsx index 864abdb504..903cd0c38b 100644 --- a/packages/twenty-front/src/modules/favorites/favorite-folder-picker/components/FavoriteFolderPicker.tsx +++ b/packages/twenty-front/src/modules/favorites/favorite-folder-picker/components/FavoriteFolderPicker.tsx @@ -4,7 +4,7 @@ import { FavoriteFolderPickerSearchInput } from '@/favorites/favorite-folder-pic import { useFavoriteFolderPicker } from '@/favorites/favorite-folder-picker/hooks/useFavoriteFolderPicker'; import { FavoriteFolderPickerInstanceContext } from '@/favorites/favorite-folder-picker/states/context/FavoriteFolderPickerInstanceContext'; import { favoriteFolderSearchFilterComponentState } from '@/favorites/favorite-folder-picker/states/favoriteFoldersSearchFilterComponentState'; -import { isFavoriteFolderCreatingStateV2 } from '@/favorites/states/isFavoriteFolderCreatingStateV2'; +import { isFavoriteFolderCreatingState } from '@/favorites/states/isFavoriteFolderCreatingState'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { DropdownContent } from '@/ui/layout/dropdown/components/DropdownContent'; @@ -31,7 +31,7 @@ export const FavoriteFolderPicker = ({ dropdownId, }: FavoriteFolderPickerProps) => { const [isFavoriteFolderCreating, setIsFavoriteFolderCreating] = useAtomState( - isFavoriteFolderCreatingStateV2, + isFavoriteFolderCreatingState, ); const instanceId = useAvailableComponentInstanceIdOrThrow( diff --git a/packages/twenty-front/src/modules/favorites/favorite-folder-picker/components/FavoriteFolderPickerFooter.tsx b/packages/twenty-front/src/modules/favorites/favorite-folder-picker/components/FavoriteFolderPickerFooter.tsx index d39d23c2b4..1848ae4731 100644 --- a/packages/twenty-front/src/modules/favorites/favorite-folder-picker/components/FavoriteFolderPickerFooter.tsx +++ b/packages/twenty-front/src/modules/favorites/favorite-folder-picker/components/FavoriteFolderPickerFooter.tsx @@ -1,4 +1,4 @@ -import { isFavoriteFolderCreatingStateV2 } from '@/favorites/states/isFavoriteFolderCreatingStateV2'; +import { isFavoriteFolderCreatingState } from '@/favorites/states/isFavoriteFolderCreatingState'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown'; @@ -17,7 +17,7 @@ export const FavoriteFolderPickerFooter = ({ }) => { const { t } = useLingui(); const [, setIsFavoriteFolderCreating] = useAtomState( - isFavoriteFolderCreatingStateV2, + isFavoriteFolderCreatingState, ); const setIsNavigationDrawerExpanded = useSetAtomState( isNavigationDrawerExpandedState, diff --git a/packages/twenty-front/src/modules/favorites/hooks/useHandleFavoriteDragAndDrop.ts b/packages/twenty-front/src/modules/favorites/hooks/useHandleFavoriteDragAndDrop.ts index 81854216e6..d620484661 100644 --- a/packages/twenty-front/src/modules/favorites/hooks/useHandleFavoriteDragAndDrop.ts +++ b/packages/twenty-front/src/modules/favorites/hooks/useHandleFavoriteDragAndDrop.ts @@ -1,6 +1,6 @@ import { FAVORITE_DROPPABLE_IDS } from '@/favorites/constants/FavoriteDroppableIds'; import { useSortedFavorites } from '@/favorites/hooks/useSortedFavorites'; -import { openFavoriteFolderIdsStateV2 } from '@/favorites/states/openFavoriteFolderIdsStateV2'; +import { openFavoriteFolderIdsState } from '@/favorites/states/openFavoriteFolderIdsState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; @@ -13,9 +13,7 @@ export const useHandleFavoriteDragAndDrop = () => { const { favorites } = usePrefetchedFavoritesData(); const { favoritesSorted } = useSortedFavorites(); const { updateOneRecord } = useUpdateOneRecord(); - const setOpenFavoriteFolderIds = useSetAtomState( - openFavoriteFolderIdsStateV2, - ); + const setOpenFavoriteFolderIds = useSetAtomState(openFavoriteFolderIdsState); const openDestinationFolder = (folderId: string | null) => { if (!folderId) return; diff --git a/packages/twenty-front/src/modules/favorites/states/isFavoriteFolderCreatingState.ts b/packages/twenty-front/src/modules/favorites/states/isFavoriteFolderCreatingState.ts new file mode 100644 index 0000000000..f6e261e881 --- /dev/null +++ b/packages/twenty-front/src/modules/favorites/states/isFavoriteFolderCreatingState.ts @@ -0,0 +1,6 @@ +import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; + +export const isFavoriteFolderCreatingState = createAtomState({ + key: 'isFavoriteFolderCreatingState', + defaultValue: false, +}); diff --git a/packages/twenty-front/src/modules/favorites/states/openFavoriteFolderIdsState.ts b/packages/twenty-front/src/modules/favorites/states/openFavoriteFolderIdsState.ts new file mode 100644 index 0000000000..c8ceffc681 --- /dev/null +++ b/packages/twenty-front/src/modules/favorites/states/openFavoriteFolderIdsState.ts @@ -0,0 +1,6 @@ +import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; + +export const openFavoriteFolderIdsState = createAtomState({ + key: 'openFavoriteFolderIdsState', + defaultValue: [], +}); diff --git a/packages/twenty-front/src/modules/favorites/states/openFavoriteFolderIdsStateV2.ts b/packages/twenty-front/src/modules/favorites/states/openFavoriteFolderIdsStateV2.ts deleted file mode 100644 index 282aeeaf78..0000000000 --- a/packages/twenty-front/src/modules/favorites/states/openFavoriteFolderIdsStateV2.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; - -export const openFavoriteFolderIdsStateV2 = createAtomState({ - key: 'openFavoriteFolderIdsStateV2', - defaultValue: [], -}); diff --git a/packages/twenty-front/src/modules/front-components/components/FrontComponentRenderer.tsx b/packages/twenty-front/src/modules/front-components/components/FrontComponentRenderer.tsx index 1d0ea7c004..a320001d0e 100644 --- a/packages/twenty-front/src/modules/front-components/components/FrontComponentRenderer.tsx +++ b/packages/twenty-front/src/modules/front-components/components/FrontComponentRenderer.tsx @@ -4,7 +4,7 @@ import { useOnFrontComponentUpdated } from '@/front-components/hooks/useOnFrontC import { frontComponentApplicationTokenPairComponentState } from '@/front-components/states/frontComponentApplicationTokenPairComponentState'; import { getFrontComponentUrl } from '@/front-components/utils/getFrontComponentUrl'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; -import { useSetRecoilComponentState } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentState'; +import { useSetAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useSetAtomComponentState'; import { useTheme } from '@emotion/react'; import { t } from '@lingui/core/macro'; import { useCallback } from 'react'; @@ -23,7 +23,7 @@ export const FrontComponentRenderer = ({ const theme = useTheme(); const { enqueueErrorSnackBar } = useSnackBar(); - const setApplicationTokenPair = useSetRecoilComponentState( + const setApplicationTokenPair = useSetAtomComponentState( frontComponentApplicationTokenPairComponentState, frontComponentId, ); diff --git a/packages/twenty-front/src/modules/front-components/hooks/useRequestApplicationTokenRefresh.ts b/packages/twenty-front/src/modules/front-components/hooks/useRequestApplicationTokenRefresh.ts index 0811b5891d..59764c77ef 100644 --- a/packages/twenty-front/src/modules/front-components/hooks/useRequestApplicationTokenRefresh.ts +++ b/packages/twenty-front/src/modules/front-components/hooks/useRequestApplicationTokenRefresh.ts @@ -1,11 +1,11 @@ import { ApolloError, useApolloClient } from '@apollo/client'; import { type GraphQLFormattedError } from 'graphql'; -import { useRecoilCallback } from 'recoil'; +import { useCallback } from 'react'; +import { useStore } from 'jotai'; import { isDefined, isNonEmptyArray } from 'twenty-shared/utils'; import { frontComponentApplicationTokenPairComponentState } from '@/front-components/states/frontComponentApplicationTokenPairComponentState'; -import { useRecoilComponentCallbackState } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackState'; -import { getSnapshotValue } from '@/ui/utilities/state/utils/getSnapshotValue'; +import { useAtomComponentStateCallbackState } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateCallbackState'; import { FindOneFrontComponentDocument, type FindOneFrontComponentQuery, @@ -35,104 +35,92 @@ export const useRequestApplicationTokenRefresh = ({ frontComponentId, }: UseRequestApplicationTokenRefreshArgs) => { const apolloClient = useApolloClient(); + const store = useStore(); - const applicationTokenPairCallbackState = useRecoilComponentCallbackState( + const applicationTokenPairAtom = useAtomComponentStateCallbackState( frontComponentApplicationTokenPairComponentState, frontComponentId, ); - const requestAccessTokenRefresh = useRecoilCallback( - ({ set, snapshot }) => - async (): Promise => { - const refetchFrontComponentForNewTokenPair = - async (): Promise => { - const result = await apolloClient.query< - FindOneFrontComponentQuery, - FindOneFrontComponentQueryVariables - >({ - query: FindOneFrontComponentDocument, - variables: { id: frontComponentId }, - fetchPolicy: 'network-only', - }); + const requestAccessTokenRefresh = useCallback(async (): Promise => { + const refetchFrontComponentForNewTokenPair = async (): Promise => { + const result = await apolloClient.query< + FindOneFrontComponentQuery, + FindOneFrontComponentQueryVariables + >({ + query: FindOneFrontComponentDocument, + variables: { id: frontComponentId }, + fetchPolicy: 'network-only', + }); - const newTokenPair = - result.data?.frontComponent?.applicationTokenPair; + const newTokenPair = result.data?.frontComponent?.applicationTokenPair; - if (!isDefined(newTokenPair)) { - throw new Error('Failed to refetch application token pair'); - } + if (!isDefined(newTokenPair)) { + throw new Error('Failed to refetch application token pair'); + } - set(applicationTokenPairCallbackState, newTokenPair); + store.set(applicationTokenPairAtom, newTokenPair); - return newTokenPair.applicationAccessToken.token; - }; + return newTokenPair.applicationAccessToken.token; + }; - const applicationTokenPair = getSnapshotValue( - snapshot, - applicationTokenPairCallbackState, - ); + const applicationTokenPair = store.get(applicationTokenPairAtom); - if (!isDefined(applicationTokenPair)) { - throw new Error( - 'Application token pair must be initialized before requesting a refresh. Ensure the front component has loaded its token pair before invoking refresh.', - ); + if (!isDefined(applicationTokenPair)) { + throw new Error( + 'Application token pair must be initialized before requesting a refresh. Ensure the front component has loaded its token pair before invoking refresh.', + ); + } + + // First try renewing via the refresh token (fast path). + // If the refresh token itself is expired, fall back to refetching + // the front component which issues a fresh token pair server-side. + try { + const renewResult = await apolloClient.mutate< + RenewApplicationTokenMutation, + RenewApplicationTokenMutationVariables + >({ + mutation: RenewApplicationTokenDocument, + variables: { + applicationRefreshToken: + applicationTokenPair.applicationRefreshToken.token, + }, + }); + + if (isNonEmptyArray(renewResult.errors)) { + if ( + hasApplicationRefreshTokenInvalidOrExpiredSubCode(renewResult.errors) + ) { + return await refetchFrontComponentForNewTokenPair(); } - // First try renewing via the refresh token (fast path). - // If the refresh token itself is expired, fall back to refetching - // the front component which issues a fresh token pair server-side. - try { - const renewResult = await apolloClient.mutate< - RenewApplicationTokenMutation, - RenewApplicationTokenMutationVariables - >({ - mutation: RenewApplicationTokenDocument, - variables: { - applicationRefreshToken: - applicationTokenPair.applicationRefreshToken.token, - }, - }); + const errorMessage = renewResult.errors + .map((error) => error.message) + .join(', '); - if (isNonEmptyArray(renewResult.errors)) { - if ( - hasApplicationRefreshTokenInvalidOrExpiredSubCode( - renewResult.errors, - ) - ) { - return await refetchFrontComponentForNewTokenPair(); - } + throw new Error(`Token renewal failed: ${errorMessage}`); + } - const errorMessage = renewResult.errors - .map((error) => error.message) - .join(', '); + const renewedTokenPair = renewResult.data?.renewApplicationToken; - throw new Error(`Token renewal failed: ${errorMessage}`); - } + if (!isDefined(renewedTokenPair)) { + throw new Error('Failed to renew application token'); + } - const renewedTokenPair = renewResult.data?.renewApplicationToken; + store.set(applicationTokenPairAtom, renewedTokenPair); - if (!isDefined(renewedTokenPair)) { - throw new Error('Failed to renew application token'); - } + return renewedTokenPair.applicationAccessToken.token; + } catch (error) { + if ( + error instanceof ApolloError && + hasApplicationRefreshTokenInvalidOrExpiredSubCode(error.graphQLErrors) + ) { + return await refetchFrontComponentForNewTokenPair(); + } - set(applicationTokenPairCallbackState, renewedTokenPair); - - return renewedTokenPair.applicationAccessToken.token; - } catch (error) { - if ( - error instanceof ApolloError && - hasApplicationRefreshTokenInvalidOrExpiredSubCode( - error.graphQLErrors, - ) - ) { - return await refetchFrontComponentForNewTokenPair(); - } - - throw error; - } - }, - [apolloClient, applicationTokenPairCallbackState, frontComponentId], - ); + throw error; + } + }, [apolloClient, applicationTokenPairAtom, frontComponentId, store]); return { requestAccessTokenRefresh }; }; diff --git a/packages/twenty-front/src/modules/front-components/states/frontComponentApplicationTokenPairComponentState.ts b/packages/twenty-front/src/modules/front-components/states/frontComponentApplicationTokenPairComponentState.ts index 4ffb3c7231..4e2b828886 100644 --- a/packages/twenty-front/src/modules/front-components/states/frontComponentApplicationTokenPairComponentState.ts +++ b/packages/twenty-front/src/modules/front-components/states/frontComponentApplicationTokenPairComponentState.ts @@ -1,9 +1,9 @@ import { FrontComponentInstanceContext } from '@/front-components/states/contexts/FrontComponentInstanceContext'; -import { createComponentState } from '@/ui/utilities/state/component-state/utils/createComponentState'; +import { createAtomComponentState } from '@/ui/utilities/state/jotai/utils/createAtomComponentState'; import { type ApplicationTokenPair } from '~/generated-metadata/graphql'; export const frontComponentApplicationTokenPairComponentState = - createComponentState({ + createAtomComponentState({ key: 'frontComponentApplicationTokenPairComponentState', defaultValue: null, componentInstanceContext: FrontComponentInstanceContext, diff --git a/packages/twenty-front/src/modules/keyboard-shortcut-menu/components/KeyboardShortcutMenu.tsx b/packages/twenty-front/src/modules/keyboard-shortcut-menu/components/KeyboardShortcutMenu.tsx index 181f7286c0..4bbb0c7b4d 100644 --- a/packages/twenty-front/src/modules/keyboard-shortcut-menu/components/KeyboardShortcutMenu.tsx +++ b/packages/twenty-front/src/modules/keyboard-shortcut-menu/components/KeyboardShortcutMenu.tsx @@ -1,7 +1,7 @@ import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; import { useKeyboardShortcutMenu } from '@/keyboard-shortcut-menu/hooks/useKeyboardShortcutMenu'; -import { isKeyboardShortcutMenuOpenedStateV2 } from '@/keyboard-shortcut-menu/states/isKeyboardShortcutMenuOpenedStateV2'; +import { isKeyboardShortcutMenuOpenedState } from '@/keyboard-shortcut-menu/states/isKeyboardShortcutMenuOpenedState'; import { KeyboardShortcutMenuOpenContent } from '@/keyboard-shortcut-menu/components/KeyboardShortcutMenuOpenContent'; import { useGlobalHotkeys } from '@/ui/utilities/hotkey/hooks/useGlobalHotkeys'; @@ -10,7 +10,7 @@ import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomState export const KeyboardShortcutMenu = () => { const { toggleKeyboardShortcutMenu } = useKeyboardShortcutMenu(); const isKeyboardShortcutMenuOpened = useAtomStateValue( - isKeyboardShortcutMenuOpenedStateV2, + isKeyboardShortcutMenuOpenedState, ); const { closeCommandMenu } = useCommandMenu(); diff --git a/packages/twenty-front/src/modules/keyboard-shortcut-menu/hooks/__tests__/useKeyboardShortcutMenu.test.tsx b/packages/twenty-front/src/modules/keyboard-shortcut-menu/hooks/__tests__/useKeyboardShortcutMenu.test.tsx index 8cd80f65d8..cc46119c2b 100644 --- a/packages/twenty-front/src/modules/keyboard-shortcut-menu/hooks/__tests__/useKeyboardShortcutMenu.test.tsx +++ b/packages/twenty-front/src/modules/keyboard-shortcut-menu/hooks/__tests__/useKeyboardShortcutMenu.test.tsx @@ -1,9 +1,8 @@ import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { type ReactNode, act } from 'react'; -import { RecoilRoot } from 'recoil'; -import { isKeyboardShortcutMenuOpenedStateV2 } from '@/keyboard-shortcut-menu/states/isKeyboardShortcutMenuOpenedStateV2'; +import { isKeyboardShortcutMenuOpenedState } from '@/keyboard-shortcut-menu/states/isKeyboardShortcutMenuOpenedState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; @@ -28,16 +27,14 @@ jest.mock( ); const Wrapper = ({ children }: { children: ReactNode }) => ( - - {children} - + {children} ); const renderHookConfig = () => { const { result } = renderHook( () => { const isKeyboardShortcutMenuOpened = useAtomStateValue( - isKeyboardShortcutMenuOpenedStateV2, + isKeyboardShortcutMenuOpenedState, ); return { ...useKeyboardShortcutMenu(), diff --git a/packages/twenty-front/src/modules/keyboard-shortcut-menu/hooks/useKeyboardShortcutMenu.ts b/packages/twenty-front/src/modules/keyboard-shortcut-menu/hooks/useKeyboardShortcutMenu.ts index 8be94deb7b..1710a2dd37 100644 --- a/packages/twenty-front/src/modules/keyboard-shortcut-menu/hooks/useKeyboardShortcutMenu.ts +++ b/packages/twenty-front/src/modules/keyboard-shortcut-menu/hooks/useKeyboardShortcutMenu.ts @@ -1,6 +1,6 @@ import { useCallback } from 'react'; -import { isKeyboardShortcutMenuOpenedStateV2 } from '@/keyboard-shortcut-menu/states/isKeyboardShortcutMenuOpenedStateV2'; +import { isKeyboardShortcutMenuOpenedState } from '@/keyboard-shortcut-menu/states/isKeyboardShortcutMenuOpenedState'; import { usePushFocusItemToFocusStack } from '@/ui/utilities/focus/hooks/usePushFocusItemToFocusStack'; import { useRemoveFocusItemFromFocusStackById } from '@/ui/utilities/focus/hooks/useRemoveFocusItemFromFocusStackById'; import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType'; @@ -16,7 +16,7 @@ export const useKeyboardShortcutMenu = () => { const store = useStore(); const openKeyboardShortcutMenu = useCallback(() => { - store.set(isKeyboardShortcutMenuOpenedStateV2.atom, true); + store.set(isKeyboardShortcutMenuOpenedState.atom, true); pushFocusItemToFocusStack({ focusId: KEYBOARD_SHORTCUT_MENU_INSTANCE_ID, component: { @@ -32,11 +32,11 @@ export const useKeyboardShortcutMenu = () => { const closeKeyboardShortcutMenu = useCallback(() => { const isKeyboardShortcutMenuOpened = store.get( - isKeyboardShortcutMenuOpenedStateV2.atom, + isKeyboardShortcutMenuOpenedState.atom, ); if (isKeyboardShortcutMenuOpened) { - store.set(isKeyboardShortcutMenuOpenedStateV2.atom, false); + store.set(isKeyboardShortcutMenuOpenedState.atom, false); removeFocusItemFromFocusStackById({ focusId: KEYBOARD_SHORTCUT_MENU_INSTANCE_ID, }); @@ -45,7 +45,7 @@ export const useKeyboardShortcutMenu = () => { const toggleKeyboardShortcutMenu = useCallback(() => { const isKeyboardShortcutMenuOpened = store.get( - isKeyboardShortcutMenuOpenedStateV2.atom, + isKeyboardShortcutMenuOpenedState.atom, ); if (isKeyboardShortcutMenuOpened === false) { diff --git a/packages/twenty-front/src/modules/keyboard-shortcut-menu/states/isKeyboardShortcutMenuOpenedStateV2.ts b/packages/twenty-front/src/modules/keyboard-shortcut-menu/states/isKeyboardShortcutMenuOpenedState.ts similarity index 67% rename from packages/twenty-front/src/modules/keyboard-shortcut-menu/states/isKeyboardShortcutMenuOpenedStateV2.ts rename to packages/twenty-front/src/modules/keyboard-shortcut-menu/states/isKeyboardShortcutMenuOpenedState.ts index 6f30c2ccfc..5675d4457a 100644 --- a/packages/twenty-front/src/modules/keyboard-shortcut-menu/states/isKeyboardShortcutMenuOpenedStateV2.ts +++ b/packages/twenty-front/src/modules/keyboard-shortcut-menu/states/isKeyboardShortcutMenuOpenedState.ts @@ -1,6 +1,6 @@ import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const isKeyboardShortcutMenuOpenedStateV2 = createAtomState({ - key: 'keyboard-shortcut-menu/isKeyboardShortcutMenuOpenedStateV2', +export const isKeyboardShortcutMenuOpenedState = createAtomState({ + key: 'keyboard-shortcut-menu/isKeyboardShortcutMenuOpenedState', defaultValue: false, }); diff --git a/packages/twenty-front/src/modules/localization/hooks/__tests__/useDateTimeFormat.test.tsx b/packages/twenty-front/src/modules/localization/hooks/__tests__/useDateTimeFormat.test.tsx index 3469852d94..bd328f994e 100644 --- a/packages/twenty-front/src/modules/localization/hooks/__tests__/useDateTimeFormat.test.tsx +++ b/packages/twenty-front/src/modules/localization/hooks/__tests__/useDateTimeFormat.test.tsx @@ -1,7 +1,6 @@ import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; import { DateFormat } from '@/localization/constants/DateFormat'; import { TimeFormat } from '@/localization/constants/TimeFormat'; @@ -19,9 +18,7 @@ const mockPreferences = { }; const Wrapper = ({ children }: { children: ReactNode }) => ( - - {children} - + {children} ); describe('useDateTimeFormat', () => { diff --git a/packages/twenty-front/src/modules/localization/hooks/__tests__/useFormatPreferences.test.tsx b/packages/twenty-front/src/modules/localization/hooks/__tests__/useFormatPreferences.test.tsx index 0ee592c5b0..16b70692e0 100644 --- a/packages/twenty-front/src/modules/localization/hooks/__tests__/useFormatPreferences.test.tsx +++ b/packages/twenty-front/src/modules/localization/hooks/__tests__/useFormatPreferences.test.tsx @@ -1,6 +1,5 @@ import { act, renderHook } from '@testing-library/react'; import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; import { Provider as JotaiProvider } from 'jotai'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; @@ -78,11 +77,7 @@ const mockInitialPreferences = { const createWrapper = () => ({ children }: { children: ReactNode }) => { - return ( - - {children} - - ); + return {children}; }; describe('useFormatPreferences', () => { diff --git a/packages/twenty-front/src/modules/localization/hooks/__tests__/useInitializeFormatPreferences.test.tsx b/packages/twenty-front/src/modules/localization/hooks/__tests__/useInitializeFormatPreferences.test.tsx index acc20d09d5..2e8309ddb9 100644 --- a/packages/twenty-front/src/modules/localization/hooks/__tests__/useInitializeFormatPreferences.test.tsx +++ b/packages/twenty-front/src/modules/localization/hooks/__tests__/useInitializeFormatPreferences.test.tsx @@ -1,6 +1,4 @@ import { act, renderHook } from '@testing-library/react'; -import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; import { type CurrentWorkspaceMember } from '@/auth/states/currentWorkspaceMemberState'; import { useInitializeFormatPreferences } from '@/localization/hooks/useInitializeFormatPreferences'; @@ -15,10 +13,6 @@ const mockGetFormatPreferencesFromWorkspaceMember = typeof getFormatPreferencesFromWorkspaceMember >; -const Wrapper = ({ children }: { children: ReactNode }) => ( - {children} -); - describe('useInitializeFormatPreferences', () => { beforeEach(() => { jest.clearAllMocks(); @@ -29,9 +23,7 @@ describe('useInitializeFormatPreferences', () => { }); it('should return initializeFormatPreferences function', () => { - const { result } = renderHook(() => useInitializeFormatPreferences(), { - wrapper: Wrapper, - }); + const { result } = renderHook(() => useInitializeFormatPreferences()); expect(result.current).toHaveProperty('initializeFormatPreferences'); expect(typeof result.current.initializeFormatPreferences).toBe('function'); @@ -59,9 +51,7 @@ describe('useInitializeFormatPreferences', () => { mockPreferences, ); - const { result } = renderHook(() => useInitializeFormatPreferences(), { - wrapper: Wrapper, - }); + const { result } = renderHook(() => useInitializeFormatPreferences()); act(() => { result.current.initializeFormatPreferences(mockWorkspaceMember); @@ -73,9 +63,7 @@ describe('useInitializeFormatPreferences', () => { }); it('should not initialize format preferences when workspace member is null', () => { - const { result } = renderHook(() => useInitializeFormatPreferences(), { - wrapper: Wrapper, - }); + const { result } = renderHook(() => useInitializeFormatPreferences()); act(() => { result.current.initializeFormatPreferences(null); @@ -85,9 +73,7 @@ describe('useInitializeFormatPreferences', () => { }); it('should not initialize format preferences when workspace member is undefined', () => { - const { result } = renderHook(() => useInitializeFormatPreferences(), { - wrapper: Wrapper, - }); + const { result } = renderHook(() => useInitializeFormatPreferences()); act(() => { result.current.initializeFormatPreferences(undefined as any); diff --git a/packages/twenty-front/src/modules/localization/hooks/__tests__/useNumberFormat.test.tsx b/packages/twenty-front/src/modules/localization/hooks/__tests__/useNumberFormat.test.tsx index 032bfc5874..c433aa5ebf 100644 --- a/packages/twenty-front/src/modules/localization/hooks/__tests__/useNumberFormat.test.tsx +++ b/packages/twenty-front/src/modules/localization/hooks/__tests__/useNumberFormat.test.tsx @@ -1,8 +1,6 @@ import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; - import { useNumberFormat } from '@/localization/hooks/useNumberFormat'; import { workspaceMemberFormatPreferencesState } from '@/localization/states/workspaceMemberFormatPreferencesState'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; @@ -15,9 +13,7 @@ const mockUtilFormatNumber = utilFormatNumber as jest.MockedFunction< >; const Wrapper = ({ children }: { children: ReactNode }) => ( - - {children} - + {children} ); describe('useNumberFormat', () => { diff --git a/packages/twenty-front/src/modules/logic-functions/hooks/__tests__/useLogicFunctionUpdateFormState.test.ts b/packages/twenty-front/src/modules/logic-functions/hooks/__tests__/useLogicFunctionUpdateFormState.test.ts index b6e7944b31..e816b57353 100644 --- a/packages/twenty-front/src/modules/logic-functions/hooks/__tests__/useLogicFunctionUpdateFormState.test.ts +++ b/packages/twenty-front/src/modules/logic-functions/hooks/__tests__/useLogicFunctionUpdateFormState.test.ts @@ -1,6 +1,5 @@ import { useLogicFunctionUpdateFormState } from '@/logic-functions/hooks/useLogicFunctionUpdateFormState'; import { renderHook } from '@testing-library/react'; -import { RecoilRoot } from 'recoil'; jest.mock('@/logic-functions/hooks/useGetOneLogicFunction', () => ({ useGetOneLogicFunction: jest.fn(), @@ -31,11 +30,8 @@ describe('useLogicFunctionUpdateFormState', () => { loading: false, }, ); - const { result } = renderHook( - () => useLogicFunctionUpdateFormState({ logicFunctionId }), - { - wrapper: RecoilRoot, - }, + const { result } = renderHook(() => + useLogicFunctionUpdateFormState({ logicFunctionId }), ); const { formValues } = result.current; diff --git a/packages/twenty-front/src/modules/navigation-menu-item/components/CurrentWorkspaceMemberNavigationMenuItemFolders.tsx b/packages/twenty-front/src/modules/navigation-menu-item/components/CurrentWorkspaceMemberNavigationMenuItemFolders.tsx index f71b0d5ca4..e8cc504586 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/components/CurrentWorkspaceMemberNavigationMenuItemFolders.tsx +++ b/packages/twenty-front/src/modules/navigation-menu-item/components/CurrentWorkspaceMemberNavigationMenuItemFolders.tsx @@ -8,7 +8,7 @@ import { NavigationMenuItemFolders } from '@/navigation-menu-item/components/Nav import { NavigationMenuItemSkeletonLoader } from '@/navigation-menu-item/components/NavigationMenuItemSkeletonLoader'; import { useNavigationMenuItemsByFolder } from '@/navigation-menu-item/hooks/useNavigationMenuItemsByFolder'; import { useSortedNavigationMenuItems } from '@/navigation-menu-item/hooks/useSortedNavigationMenuItems'; -import { isNavigationMenuItemFolderCreatingStateV2 } from '@/navigation-menu-item/states/isNavigationMenuItemFolderCreatingStateV2'; +import { isNavigationMenuItemFolderCreatingState } from '@/navigation-menu-item/states/isNavigationMenuItemFolderCreatingState'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { useIsPrefetchLoading } from '@/prefetch/hooks/useIsPrefetchLoading'; import { NavigationDrawerAnimatedCollapseWrapper } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerAnimatedCollapseWrapper'; @@ -27,7 +27,7 @@ export const CurrentWorkspaceMemberNavigationMenuItemFolders = () => { const [ isNavigationMenuItemFolderCreating, setIsNavigationMenuItemFolderCreating, - ] = useAtomState(isNavigationMenuItemFolderCreatingStateV2); + ] = useAtomState(isNavigationMenuItemFolderCreatingState); const loading = useIsPrefetchLoading(); diff --git a/packages/twenty-front/src/modules/navigation-menu-item/components/CurrentWorkspaceMemberNavigationMenuItems.tsx b/packages/twenty-front/src/modules/navigation-menu-item/components/CurrentWorkspaceMemberNavigationMenuItems.tsx index 30e4da46f0..b039d837e7 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/components/CurrentWorkspaceMemberNavigationMenuItems.tsx +++ b/packages/twenty-front/src/modules/navigation-menu-item/components/CurrentWorkspaceMemberNavigationMenuItems.tsx @@ -24,7 +24,7 @@ import { NavigationMenuItemDragContext } from '@/navigation-menu-item/contexts/N import { useDeleteNavigationMenuItem } from '@/navigation-menu-item/hooks/useDeleteNavigationMenuItem'; import { useDeleteNavigationMenuItemFolder } from '@/navigation-menu-item/hooks/useDeleteNavigationMenuItemFolder'; import { useRenameNavigationMenuItemFolder } from '@/navigation-menu-item/hooks/useRenameNavigationMenuItemFolder'; -import { openNavigationMenuItemFolderIdsStateV2 } from '@/navigation-menu-item/states/openNavigationMenuItemFolderIdsStateV2'; +import { openNavigationMenuItemFolderIdsState } from '@/navigation-menu-item/states/openNavigationMenuItemFolderIdsState'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { getNavigationMenuItemSecondaryLabel } from '@/navigation-menu-item/utils/getNavigationMenuItemSecondaryLabel'; import { isLocationMatchingNavigationMenuItem } from '@/navigation-menu-item/utils/isLocationMatchingNavigationMenuItem'; @@ -41,7 +41,7 @@ import { NavigationDrawerInput } from '@/ui/navigation/navigation-drawer/compone import { NavigationDrawerItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItem'; import { NavigationDrawerItemsCollapsableContainer } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItemsCollapsableContainer'; import { NavigationDrawerSubItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerSubItem'; -import { currentNavigationMenuItemFolderIdStateV2 } from '@/ui/navigation/navigation-drawer/states/currentNavigationMenuItemFolderIdStateV2'; +import { currentNavigationMenuItemFolderIdState } from '@/ui/navigation/navigation-drawer/states/currentNavigationMenuItemFolderIdState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { getNavigationSubItemLeftAdornment } from '@/ui/navigation/navigation-drawer/utils/getNavigationSubItemLeftAdornment'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; @@ -83,10 +83,10 @@ export const CurrentWorkspaceMemberNavigationMenuItems = ({ const isMobile = useIsMobile(); const [openNavigationMenuItemFolderIds, setOpenNavigationMenuItemFolderIds] = - useAtomState(openNavigationMenuItemFolderIdsStateV2); + useAtomState(openNavigationMenuItemFolderIdsState); const setCurrentFolderId = useSetAtomState( - currentNavigationMenuItemFolderIdStateV2, + currentNavigationMenuItemFolderIdState, ); const isOpen = openNavigationMenuItemFolderIds.includes(folder.id); diff --git a/packages/twenty-front/src/modules/navigation-menu-item/components/NavigationMenuEditModeBar.tsx b/packages/twenty-front/src/modules/navigation-menu-item/components/NavigationMenuEditModeBar.tsx index acd78a91c9..50a489a8fd 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/components/NavigationMenuEditModeBar.tsx +++ b/packages/twenty-front/src/modules/navigation-menu-item/components/NavigationMenuEditModeBar.tsx @@ -2,9 +2,9 @@ import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; import { commandMenuPageState } from '@/command-menu/states/commandMenuPageState'; import { useNavigationMenuItemsDraftState } from '@/navigation-menu-item/hooks/useNavigationMenuItemsDraftState'; import { useSaveNavigationMenuItemsDraft } from '@/navigation-menu-item/hooks/useSaveNavigationMenuItemsDraft'; -import { isNavigationMenuInEditModeStateV2 } from '@/navigation-menu-item/states/isNavigationMenuInEditModeStateV2'; -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; -import { selectedNavigationMenuItemInEditModeStateV2 } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeStateV2'; +import { isNavigationMenuInEditModeState } from '@/navigation-menu-item/states/isNavigationMenuInEditModeState'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; +import { selectedNavigationMenuItemInEditModeState } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeState'; import { SaveAndCancelButtons } from '@/settings/components/SaveAndCancelButtons/SaveAndCancelButtons'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; @@ -44,13 +44,13 @@ export const NavigationMenuEditModeBar = () => { const commandMenuPage = useAtomStateValue(commandMenuPageState); const { enqueueErrorSnackBar } = useSnackBar(); const setNavigationMenuItemsDraft = useSetAtomState( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const setSelectedNavigationMenuItemInEditMode = useSetAtomState( - selectedNavigationMenuItemInEditModeStateV2, + selectedNavigationMenuItemInEditModeState, ); const setIsNavigationMenuInEditMode = useSetAtomState( - isNavigationMenuInEditModeStateV2, + isNavigationMenuInEditModeState, ); const { saveDraft } = useSaveNavigationMenuItemsDraft(); const { isDirty } = useNavigationMenuItemsDraftState(); @@ -68,7 +68,7 @@ export const NavigationMenuEditModeBar = () => { }; const isNavigationMenuInEditMode = useAtomStateValue( - isNavigationMenuInEditModeStateV2, + isNavigationMenuInEditModeState, ); const isNavigationMenuItemEditingEnabled = useIsFeatureEnabled( FeatureFlagKey.IS_NAVIGATION_MENU_ITEM_EDITING_ENABLED, diff --git a/packages/twenty-front/src/modules/navigation-menu-item/components/NavigationMenuItemBackButton.tsx b/packages/twenty-front/src/modules/navigation-menu-item/components/NavigationMenuItemBackButton.tsx index 942addb396..5245975f45 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/components/NavigationMenuItemBackButton.tsx +++ b/packages/twenty-front/src/modules/navigation-menu-item/components/NavigationMenuItemBackButton.tsx @@ -2,7 +2,7 @@ import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { IconX } from 'twenty-ui/display'; -import { currentNavigationMenuItemFolderIdStateV2 } from '@/ui/navigation/navigation-drawer/states/currentNavigationMenuItemFolderIdStateV2'; +import { currentNavigationMenuItemFolderIdState } from '@/ui/navigation/navigation-drawer/states/currentNavigationMenuItemFolderIdState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; const StyledBackButton = styled.button` @@ -37,7 +37,7 @@ export const NavigationMenuItemBackButton = ({ }: NavigationMenuItemBackButtonProps) => { const theme = useTheme(); const setCurrentFolderId = useSetAtomState( - currentNavigationMenuItemFolderIdStateV2, + currentNavigationMenuItemFolderIdState, ); const handleClick = (e: React.MouseEvent) => { diff --git a/packages/twenty-front/src/modules/navigation-menu-item/components/NavigationMenuItemFolders.tsx b/packages/twenty-front/src/modules/navigation-menu-item/components/NavigationMenuItemFolders.tsx index 08dc97618d..a9df68bc4c 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/components/NavigationMenuItemFolders.tsx +++ b/packages/twenty-front/src/modules/navigation-menu-item/components/NavigationMenuItemFolders.tsx @@ -4,7 +4,7 @@ import { IconFolder } from 'twenty-ui/display'; import { CurrentWorkspaceMemberNavigationMenuItems } from '@/navigation-menu-item/components/CurrentWorkspaceMemberNavigationMenuItems'; import { useCreateNavigationMenuItemFolder } from '@/navigation-menu-item/hooks/useCreateNavigationMenuItemFolder'; import { useNavigationMenuItemsByFolder } from '@/navigation-menu-item/hooks/useNavigationMenuItemsByFolder'; -import { isNavigationMenuItemFolderCreatingStateV2 } from '@/navigation-menu-item/states/isNavigationMenuItemFolderCreatingStateV2'; +import { isNavigationMenuItemFolderCreatingState } from '@/navigation-menu-item/states/isNavigationMenuItemFolderCreatingState'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { NavigationDrawerAnimatedCollapseWrapper } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerAnimatedCollapseWrapper'; import { NavigationDrawerInput } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerInput'; @@ -25,7 +25,7 @@ export const NavigationMenuItemFolders = ({ const [ isNavigationMenuItemFolderCreating, setIsNavigationMenuItemFolderCreating, - ] = useAtomState(isNavigationMenuItemFolderCreatingStateV2); + ] = useAtomState(isNavigationMenuItemFolderCreatingState); const handleNavigationMenuItemFolderNameChange = (value: string) => { setNewFolderName(value); diff --git a/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItems.tsx b/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItems.tsx index 4b5814eb02..acb2a67536 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItems.tsx +++ b/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItems.tsx @@ -13,10 +13,10 @@ import { type NavigationMenuItemClickParams, useWorkspaceSectionItems, } from '@/navigation-menu-item/hooks/useWorkspaceSectionItems'; -import { isNavigationMenuInEditModeStateV2 } from '@/navigation-menu-item/states/isNavigationMenuInEditModeStateV2'; -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; -import { openNavigationMenuItemFolderIdsStateV2 } from '@/navigation-menu-item/states/openNavigationMenuItemFolderIdsStateV2'; -import { selectedNavigationMenuItemInEditModeStateV2 } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeStateV2'; +import { isNavigationMenuInEditModeState } from '@/navigation-menu-item/states/isNavigationMenuInEditModeState'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; +import { openNavigationMenuItemFolderIdsState } from '@/navigation-menu-item/states/openNavigationMenuItemFolderIdsState'; +import { selectedNavigationMenuItemInEditModeState } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeState'; import { filterWorkspaceNavigationMenuItems } from '@/navigation-menu-item/utils/filterWorkspaceNavigationMenuItems'; import { NavigationDrawerSectionForObjectMetadataItemsSkeletonLoader } from '@/object-metadata/components/NavigationDrawerSectionForObjectMetadataItemsSkeletonLoader'; import { NavigationDrawerSectionForWorkspaceItems } from '@/object-metadata/components/NavigationDrawerSectionForWorkspaceItems'; @@ -48,24 +48,21 @@ export const WorkspaceNavigationMenuItems = () => { const workspaceNavigationMenuItems = filterWorkspaceNavigationMenuItems( prefetchNavigationMenuItems, ); - store.set( - navigationMenuItemsDraftStateV2.atom, - workspaceNavigationMenuItems, - ); - store.set(isNavigationMenuInEditModeStateV2.atom, true); + store.set(navigationMenuItemsDraftState.atom, workspaceNavigationMenuItems); + store.set(isNavigationMenuInEditModeState.atom, true); }; const isNavigationMenuItemEditingEnabled = useIsFeatureEnabled( FeatureFlagKey.IS_NAVIGATION_MENU_ITEM_EDITING_ENABLED, ); const isNavigationMenuInEditMode = useAtomStateValue( - isNavigationMenuInEditModeStateV2, + isNavigationMenuInEditModeState, ); const [ selectedNavigationMenuItemInEditMode, setSelectedNavigationMenuItemInEditMode, - ] = useAtomState(selectedNavigationMenuItemInEditModeStateV2); + ] = useAtomState(selectedNavigationMenuItemInEditModeState); const setOpenNavigationMenuItemFolderIds = useSetAtomState( - openNavigationMenuItemFolderIdsStateV2, + openNavigationMenuItemFolderIdsState, ); const navigate = useNavigate(); const { navigateCommandMenu } = useNavigateCommandMenu(); diff --git a/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItemsFolder.tsx b/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItemsFolder.tsx index 8adcd62eae..456b9aaf7e 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItemsFolder.tsx +++ b/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItemsFolder.tsx @@ -19,7 +19,7 @@ import { NavigationMenuItemDroppableIds } from '@/navigation-menu-item/constants import { NavigationMenuItemType } from '@/navigation-menu-item/constants/NavigationMenuItemType'; import { NavigationMenuItemDragContext } from '@/navigation-menu-item/contexts/NavigationMenuItemDragContext'; import { type NavigationMenuItemClickParams } from '@/navigation-menu-item/hooks/useWorkspaceSectionItems'; -import { openNavigationMenuItemFolderIdsStateV2 } from '@/navigation-menu-item/states/openNavigationMenuItemFolderIdsStateV2'; +import { openNavigationMenuItemFolderIdsState } from '@/navigation-menu-item/states/openNavigationMenuItemFolderIdsState'; import { getNavigationMenuItemIconColors } from '@/navigation-menu-item/utils/getNavigationMenuItemIconColors'; import { getNavigationMenuItemSecondaryLabel } from '@/navigation-menu-item/utils/getNavigationMenuItemSecondaryLabel'; import { getObjectMetadataForNavigationMenuItem } from '@/navigation-menu-item/utils/getObjectMetadataForNavigationMenuItem'; @@ -31,7 +31,7 @@ import { DraggableItem } from '@/ui/layout/draggable-list/components/DraggableIt import { NavigationDrawerItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItem'; import { NavigationDrawerItemsCollapsableContainer } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItemsCollapsableContainer'; import { NavigationDrawerSubItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerSubItem'; -import { currentNavigationMenuItemFolderIdStateV2 } from '@/ui/navigation/navigation-drawer/states/currentNavigationMenuItemFolderIdStateV2'; +import { currentNavigationMenuItemFolderIdState } from '@/ui/navigation/navigation-drawer/states/currentNavigationMenuItemFolderIdState'; import { getNavigationSubItemLeftAdornment } from '@/ui/navigation/navigation-drawer/utils/getNavigationSubItemLeftAdornment'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; @@ -108,10 +108,10 @@ export const WorkspaceNavigationMenuItemsFolder = ({ const isMobile = useIsMobile(); const [openNavigationMenuItemFolderIds, setOpenNavigationMenuItemFolderIds] = - useAtomState(openNavigationMenuItemFolderIdsStateV2); + useAtomState(openNavigationMenuItemFolderIdsState); const setCurrentFolderId = useSetAtomState( - currentNavigationMenuItemFolderIdStateV2, + currentNavigationMenuItemFolderIdState, ); const isOpen = openNavigationMenuItemFolderIds.includes(folderId); diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddFolderToNavigationMenuDraft.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddFolderToNavigationMenuDraft.ts index 768c5c07e2..133ec4b9b9 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddFolderToNavigationMenuDraft.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddFolderToNavigationMenuDraft.ts @@ -2,13 +2,13 @@ import { v4 } from 'uuid'; import { isDefined } from 'twenty-shared/utils'; import type { NavigationMenuItem } from '~/generated-metadata/graphql'; -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { computeInsertIndexAndPosition } from '@/navigation-menu-item/utils/computeInsertIndexAndPosition'; export const useAddFolderToNavigationMenuDraft = () => { const setNavigationMenuItemsDraft = useSetAtomState( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const addFolderToDraft = ( diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddLinkToNavigationMenuDraft.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddLinkToNavigationMenuDraft.ts index 5cf2017b2d..bf706098bf 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddLinkToNavigationMenuDraft.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddLinkToNavigationMenuDraft.ts @@ -2,14 +2,14 @@ import { isDefined } from 'twenty-shared/utils'; import { v4 } from 'uuid'; import type { NavigationMenuItem } from '~/generated-metadata/graphql'; -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { computeInsertIndexAndPosition } from '@/navigation-menu-item/utils/computeInsertIndexAndPosition'; import { normalizeUrl } from '@/navigation-menu-item/utils/normalizeUrl'; export const useAddLinkToNavigationMenuDraft = () => { const setNavigationMenuItemsDraft = useSetAtomState( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const addLinkToDraft = ( diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddObjectToNavigationMenuDraft.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddObjectToNavigationMenuDraft.ts index fa2c5de0c7..1454235cbb 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddObjectToNavigationMenuDraft.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddObjectToNavigationMenuDraft.ts @@ -2,13 +2,13 @@ import { v4 } from 'uuid'; import { isDefined } from 'twenty-shared/utils'; import type { NavigationMenuItem } from '~/generated-metadata/graphql'; -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { computeInsertIndexAndPosition } from '@/navigation-menu-item/utils/computeInsertIndexAndPosition'; export const useAddObjectToNavigationMenuDraft = () => { const setNavigationMenuItemsDraft = useSetAtomState( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const addObjectToDraft = ( diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddRecordToNavigationMenuDraft.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddRecordToNavigationMenuDraft.ts index be6e7f73d1..82bafab835 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddRecordToNavigationMenuDraft.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddRecordToNavigationMenuDraft.ts @@ -2,7 +2,7 @@ import { v4 } from 'uuid'; import { isDefined } from 'twenty-shared/utils'; import type { NavigationMenuItem } from '~/generated-metadata/graphql'; -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; @@ -21,7 +21,7 @@ type SearchRecordWithOptionalMetadataId = SearchRecord & { export const useAddRecordToNavigationMenuDraft = () => { const setNavigationMenuItemsDraft = useSetAtomState( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const objectMetadataItems = useAtomStateValue(objectMetadataItemsState); diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddViewToNavigationMenuDraft.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddViewToNavigationMenuDraft.ts index fcd45c5be4..0792f58e66 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddViewToNavigationMenuDraft.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useAddViewToNavigationMenuDraft.ts @@ -2,13 +2,13 @@ import { v4 } from 'uuid'; import { isDefined } from 'twenty-shared/utils'; import type { NavigationMenuItem } from '~/generated-metadata/graphql'; -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { computeInsertIndexAndPosition } from '@/navigation-menu-item/utils/computeInsertIndexAndPosition'; export const useAddViewToNavigationMenuDraft = () => { const setNavigationMenuItemsDraft = useSetAtomState( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const addViewToDraft = ( diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useDraftNavigationMenuItems.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useDraftNavigationMenuItems.ts index 6e3733a4fc..fcfff31d19 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useDraftNavigationMenuItems.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useDraftNavigationMenuItems.ts @@ -1,11 +1,11 @@ import { useNavigationMenuItemsDraftState } from '@/navigation-menu-item/hooks/useNavigationMenuItemsDraftState'; -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; export const useDraftNavigationMenuItems = () => { const { workspaceNavigationMenuItems } = useNavigationMenuItemsDraftState(); const navigationMenuItemsDraft = useAtomStateValue( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const currentDraft = navigationMenuItemsDraft ?? workspaceNavigationMenuItems; diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useHandleAddToNavigationDrop.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useHandleAddToNavigationDrop.ts index 46e30f1177..977923322e 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useHandleAddToNavigationDrop.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useHandleAddToNavigationDrop.ts @@ -13,11 +13,11 @@ import { useAddRecordToNavigationMenuDraft } from '@/navigation-menu-item/hooks/ import { useAddViewToNavigationMenuDraft } from '@/navigation-menu-item/hooks/useAddViewToNavigationMenuDraft'; import { useNavigationMenuItemsDraftState } from '@/navigation-menu-item/hooks/useNavigationMenuItemsDraftState'; import { useOpenNavigationMenuItemInCommandMenu } from '@/navigation-menu-item/hooks/useOpenNavigationMenuItemInCommandMenu'; -import { addToNavPayloadRegistryStateV2 } from '@/navigation-menu-item/states/addToNavPayloadRegistryStateV2'; -import { isNavigationMenuInEditModeStateV2 } from '@/navigation-menu-item/states/isNavigationMenuInEditModeStateV2'; -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; -import { openNavigationMenuItemFolderIdsStateV2 } from '@/navigation-menu-item/states/openNavigationMenuItemFolderIdsStateV2'; -import { selectedNavigationMenuItemInEditModeStateV2 } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeStateV2'; +import { addToNavPayloadRegistryState } from '@/navigation-menu-item/states/addToNavPayloadRegistryState'; +import { isNavigationMenuInEditModeState } from '@/navigation-menu-item/states/isNavigationMenuInEditModeState'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; +import { openNavigationMenuItemFolderIdsState } from '@/navigation-menu-item/states/openNavigationMenuItemFolderIdsState'; +import { selectedNavigationMenuItemInEditModeState } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { isWorkspaceDroppableId } from '@/navigation-menu-item/utils/isWorkspaceDroppableId'; @@ -36,7 +36,7 @@ export const useHandleAddToNavigationDrop = () => { const { addLinkToDraft } = useAddLinkToNavigationMenuDraft(); const { workspaceNavigationMenuItems } = useNavigationMenuItemsDraftState(); const navigationMenuItemsDraft = useAtomStateValue( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const { openNavigationMenuItemInCommandMenu } = useOpenNavigationMenuItemInCommandMenu(); @@ -44,13 +44,13 @@ export const useHandleAddToNavigationDrop = () => { const coreViews = useAtomStateValue(coreViewsState); const { getIcon } = useIcons(); const setSelectedNavigationMenuItemInEditMode = useSetAtomState( - selectedNavigationMenuItemInEditModeStateV2, + selectedNavigationMenuItemInEditModeState, ); const setIsNavigationMenuInEditMode = useSetAtomState( - isNavigationMenuInEditModeStateV2, + isNavigationMenuInEditModeState, ); const setOpenNavigationMenuItemFolderIds = useSetAtomState( - openNavigationMenuItemFolderIdsStateV2, + openNavigationMenuItemFolderIdsState, ); const handleAddToNavigationDrop = useCallback( @@ -65,7 +65,7 @@ export const useHandleAddToNavigationDrop = () => { } const payload = - store.get(addToNavPayloadRegistryStateV2.atom).get(draggableId) ?? null; + store.get(addToNavPayloadRegistryState.atom).get(draggableId) ?? null; if (!payload) { return; } diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useHandleNavigationMenuItemDragAndDrop.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useHandleNavigationMenuItemDragAndDrop.ts index 88c82b95ba..9caf901ba8 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useHandleNavigationMenuItemDragAndDrop.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useHandleNavigationMenuItemDragAndDrop.ts @@ -4,7 +4,7 @@ import { NavigationMenuItemDroppableIds } from '@/navigation-menu-item/constants import { isWorkspaceDroppableId } from '@/navigation-menu-item/utils/isWorkspaceDroppableId'; import { useSortedNavigationMenuItems } from '@/navigation-menu-item/hooks/useSortedNavigationMenuItems'; import { useUpdateNavigationMenuItem } from '@/navigation-menu-item/hooks/useUpdateNavigationMenuItem'; -import { openNavigationMenuItemFolderIdsStateV2 } from '@/navigation-menu-item/states/openNavigationMenuItemFolderIdsStateV2'; +import { openNavigationMenuItemFolderIdsState } from '@/navigation-menu-item/states/openNavigationMenuItemFolderIdsState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { calculateNewPosition } from '@/ui/layout/draggable-list/utils/calculateNewPosition'; import { FOLDER_DROPPABLE_IDS } from '@/ui/layout/draggable-list/utils/folderDroppableIds'; @@ -17,7 +17,7 @@ export const useHandleNavigationMenuItemDragAndDrop = () => { const { navigationMenuItemsSorted } = useSortedNavigationMenuItems(); const { updateNavigationMenuItem } = useUpdateNavigationMenuItem(); const setOpenNavigationMenuItemFolderIds = useSetAtomState( - openNavigationMenuItemFolderIdsStateV2, + openNavigationMenuItemFolderIdsState, ); const openDestinationFolder = (folderId: string | null) => { diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useHandleWorkspaceNavigationMenuItemDragAndDrop.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useHandleWorkspaceNavigationMenuItemDragAndDrop.ts index 984ec1eaaf..e8296ba7dc 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useHandleWorkspaceNavigationMenuItemDragAndDrop.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useHandleWorkspaceNavigationMenuItemDragAndDrop.ts @@ -2,9 +2,9 @@ import { type OnDragEndResponder } from '@hello-pangea/dnd'; import { type NavigationMenuItem } from '~/generated-metadata/graphql'; import { NavigationMenuItemDroppableIds } from '@/navigation-menu-item/constants/NavigationMenuItemDroppableIds'; -import { isNavigationMenuInEditModeStateV2 } from '@/navigation-menu-item/states/isNavigationMenuInEditModeStateV2'; -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; -import { openNavigationMenuItemFolderIdsStateV2 } from '@/navigation-menu-item/states/openNavigationMenuItemFolderIdsStateV2'; +import { isNavigationMenuInEditModeState } from '@/navigation-menu-item/states/isNavigationMenuInEditModeState'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; +import { openNavigationMenuItemFolderIdsState } from '@/navigation-menu-item/states/openNavigationMenuItemFolderIdsState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { @@ -19,16 +19,16 @@ export const useHandleWorkspaceNavigationMenuItemDragAndDrop = () => { const { workspaceNavigationMenuItems } = usePrefetchedNavigationMenuItemsData(); const isNavigationMenuInEditMode = useAtomStateValue( - isNavigationMenuInEditModeStateV2, + isNavigationMenuInEditModeState, ); const navigationMenuItemsDraft = useAtomStateValue( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const setNavigationMenuItemsDraft = useSetAtomState( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const setOpenNavigationMenuItemFolderIds = useSetAtomState( - openNavigationMenuItemFolderIdsStateV2, + openNavigationMenuItemFolderIdsState, ); const openDestinationFolder = (folderId: string | null) => { diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useNavigationMenuItemMoveRemove.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useNavigationMenuItemMoveRemove.ts index ce1d23324a..e07a9e975d 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useNavigationMenuItemMoveRemove.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useNavigationMenuItemMoveRemove.ts @@ -1,7 +1,7 @@ import { isDefined } from 'twenty-shared/utils'; import type { NavigationMenuItem } from '~/generated-metadata/graphql'; -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { isNavigationMenuItemFolder } from '@/navigation-menu-item/utils/isNavigationMenuItemFolder'; @@ -22,7 +22,7 @@ const swapPositionsInDraft = ( export const useNavigationMenuItemMoveRemove = () => { const setNavigationMenuItemsDraft = useSetAtomState( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const moveUp = (navigationMenuItemId: string) => { diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useNavigationMenuItemsDraftState.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useNavigationMenuItemsDraftState.ts index b7a85dc31a..f3da34c6f7 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useNavigationMenuItemsDraftState.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useNavigationMenuItemsDraftState.ts @@ -1,21 +1,21 @@ import { isDefined } from 'twenty-shared/utils'; import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; -import { isNavigationMenuInEditModeStateV2 } from '@/navigation-menu-item/states/isNavigationMenuInEditModeStateV2'; +import { isNavigationMenuInEditModeState } from '@/navigation-menu-item/states/isNavigationMenuInEditModeState'; import { filterWorkspaceNavigationMenuItems } from '@/navigation-menu-item/utils/filterWorkspaceNavigationMenuItems'; -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; import { prefetchNavigationMenuItemsState } from '@/prefetch/states/prefetchNavigationMenuItemsState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; export const useNavigationMenuItemsDraftState = () => { const isNavigationMenuInEditMode = useAtomStateValue( - isNavigationMenuInEditModeStateV2, + isNavigationMenuInEditModeState, ); const prefetchNavigationMenuItems = useAtomStateValue( prefetchNavigationMenuItemsState, ); const navigationMenuItemsDraft = useAtomStateValue( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const workspaceNavigationMenuItemsFromPrefetch = diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/usePrefetchedNavigationMenuItemsData.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/usePrefetchedNavigationMenuItemsData.ts index e5e0d397df..f3a0b4b2a5 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/usePrefetchedNavigationMenuItemsData.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/usePrefetchedNavigationMenuItemsData.ts @@ -1,6 +1,6 @@ import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; -import { isNavigationMenuInEditModeStateV2 } from '@/navigation-menu-item/states/isNavigationMenuInEditModeStateV2'; -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; +import { isNavigationMenuInEditModeState } from '@/navigation-menu-item/states/isNavigationMenuInEditModeState'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; import { filterWorkspaceNavigationMenuItems } from '@/navigation-menu-item/utils/filterWorkspaceNavigationMenuItems'; import { prefetchNavigationMenuItemsState } from '@/prefetch/states/prefetchNavigationMenuItemsState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; @@ -24,10 +24,10 @@ export const usePrefetchedNavigationMenuItemsData = prefetchNavigationMenuItemsState, ); const isNavigationMenuInEditMode = useAtomStateValue( - isNavigationMenuInEditModeStateV2, + isNavigationMenuInEditModeState, ); const navigationMenuItemsDraft = useAtomStateValue( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const navigationMenuItems = prefetchNavigationMenuItems.filter((item) => diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useSaveNavigationMenuItemsDraft.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useSaveNavigationMenuItemsDraft.ts index 2ae1c55e18..a1520a6d4c 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useSaveNavigationMenuItemsDraft.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useSaveNavigationMenuItemsDraft.ts @@ -8,7 +8,7 @@ import { import { useDeleteNavigationMenuItem } from '@/navigation-menu-item/hooks/useDeleteNavigationMenuItem'; import { useUpdateNavigationMenuItem } from '@/navigation-menu-item/hooks/useUpdateNavigationMenuItem'; -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; import { filterWorkspaceNavigationMenuItems } from '@/navigation-menu-item/utils/filterWorkspaceNavigationMenuItems'; import { isNavigationMenuItemFolder } from '@/navigation-menu-item/utils/isNavigationMenuItemFolder'; import { isNavigationMenuItemLink } from '@/navigation-menu-item/utils/isNavigationMenuItemLink'; @@ -26,7 +26,7 @@ export const useSaveNavigationMenuItemsDraft = () => { const store = useStore(); const saveDraft = useCallback(async () => { - const draft = store.get(navigationMenuItemsDraftStateV2.atom); + const draft = store.get(navigationMenuItemsDraftState.atom); const prefetch = store.get(prefetchNavigationMenuItemsState.atom); if (!draft) return; diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useSelectedNavigationMenuItemEditItem.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useSelectedNavigationMenuItemEditItem.ts index 40af3bab1c..ce5ad4a153 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useSelectedNavigationMenuItemEditItem.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useSelectedNavigationMenuItemEditItem.ts @@ -1,10 +1,10 @@ import { useWorkspaceSectionItems } from '@/navigation-menu-item/hooks/useWorkspaceSectionItems'; -import { selectedNavigationMenuItemInEditModeStateV2 } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeStateV2'; +import { selectedNavigationMenuItemInEditModeState } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; export const useSelectedNavigationMenuItemEditItem = () => { const selectedNavigationMenuItemInEditMode = useAtomStateValue( - selectedNavigationMenuItemInEditModeStateV2, + selectedNavigationMenuItemInEditModeState, ); const items = useWorkspaceSectionItems(); diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateFolderInDraft.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateFolderInDraft.ts index 37f5cd1490..3bb5462835 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateFolderInDraft.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateFolderInDraft.ts @@ -1,4 +1,4 @@ -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; import { isNavigationMenuItemFolder } from '@/navigation-menu-item/utils/isNavigationMenuItemFolder'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; @@ -9,7 +9,7 @@ export type UpdateFolderInDraftUpdates = { export const useUpdateFolderInDraft = () => { const setNavigationMenuItemsDraft = useSetAtomState( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const updateFolderInDraft = ( diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateFolderNameInDraft.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateFolderNameInDraft.ts index 3b878a350b..5a7a1b9ffa 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateFolderNameInDraft.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateFolderNameInDraft.ts @@ -1,10 +1,10 @@ -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { isNavigationMenuItemFolder } from '@/navigation-menu-item/utils/isNavigationMenuItemFolder'; export const useUpdateFolderNameInDraft = () => { const setNavigationMenuItemsDraft = useSetAtomState( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const updateFolderNameInDraft = (folderId: string, name: string) => { diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateLinkInDraft.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateLinkInDraft.ts index d8d5ce97a4..fe078780f5 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateLinkInDraft.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateLinkInDraft.ts @@ -1,10 +1,10 @@ -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { isNavigationMenuItemLink } from '@/navigation-menu-item/utils/isNavigationMenuItemLink'; export const useUpdateLinkInDraft = () => { const setNavigationMenuItemsDraft = useSetAtomState( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const updateLinkInDraft = ( diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateNavigationMenuItemInDraft.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateNavigationMenuItemInDraft.ts index 8b31a0fd3d..ac6e746af6 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateNavigationMenuItemInDraft.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateNavigationMenuItemInDraft.ts @@ -1,4 +1,4 @@ -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; export type UpdateNavigationMenuItemInDraftUpdates = { @@ -10,7 +10,7 @@ export type UpdateNavigationMenuItemInDraftUpdates = { export const useUpdateNavigationMenuItemInDraft = () => { const setNavigationMenuItemsDraft = useSetAtomState( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const updateNavigationMenuItemInDraft = ( diff --git a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateViewInDraft.ts b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateViewInDraft.ts index 025fba171d..afd5f67652 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateViewInDraft.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/hooks/useUpdateViewInDraft.ts @@ -1,10 +1,10 @@ -import { navigationMenuItemsDraftStateV2 } from '@/navigation-menu-item/states/navigationMenuItemsDraftStateV2'; +import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { type View } from '@/views/types/View'; export const useUpdateViewInDraft = () => { const setNavigationMenuItemsDraft = useSetAtomState( - navigationMenuItemsDraftStateV2, + navigationMenuItemsDraftState, ); const updateViewInDraft = (navigationMenuItemId: string, view: View) => { diff --git a/packages/twenty-front/src/modules/navigation-menu-item/states/addMenuItemInsertionContextStateV2.ts b/packages/twenty-front/src/modules/navigation-menu-item/states/addMenuItemInsertionContextState.ts similarity index 74% rename from packages/twenty-front/src/modules/navigation-menu-item/states/addMenuItemInsertionContextStateV2.ts rename to packages/twenty-front/src/modules/navigation-menu-item/states/addMenuItemInsertionContextState.ts index a775ae6ce4..435da31462 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/states/addMenuItemInsertionContextStateV2.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/states/addMenuItemInsertionContextState.ts @@ -2,8 +2,8 @@ import type { AddMenuItemInsertionContext } from '@/navigation-menu-item/types/A import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const addMenuItemInsertionContextStateV2 = +export const addMenuItemInsertionContextState = createAtomState({ - key: 'addMenuItemInsertionContextStateV2', + key: 'addMenuItemInsertionContextState', defaultValue: null, }); diff --git a/packages/twenty-front/src/modules/navigation-menu-item/states/addToNavPayloadRegistryStateV2.ts b/packages/twenty-front/src/modules/navigation-menu-item/states/addToNavPayloadRegistryState.ts similarity index 68% rename from packages/twenty-front/src/modules/navigation-menu-item/states/addToNavPayloadRegistryStateV2.ts rename to packages/twenty-front/src/modules/navigation-menu-item/states/addToNavPayloadRegistryState.ts index 8b1d7ad0dd..14c437b2dc 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/states/addToNavPayloadRegistryStateV2.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/states/addToNavPayloadRegistryState.ts @@ -2,9 +2,9 @@ import type { AddToNavigationDragPayload } from '@/navigation-menu-item/types/ad import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const addToNavPayloadRegistryStateV2 = createAtomState< +export const addToNavPayloadRegistryState = createAtomState< Map >({ - key: 'navigation-menu-item/addToNavPayloadRegistryStateV2', + key: 'navigation-menu-item/addToNavPayloadRegistryState', defaultValue: new Map(), }); diff --git a/packages/twenty-front/src/modules/favorites/states/isFavoriteFolderCreatingStateV2.ts b/packages/twenty-front/src/modules/navigation-menu-item/states/isNavigationMenuInEditModeState.ts similarity index 53% rename from packages/twenty-front/src/modules/favorites/states/isFavoriteFolderCreatingStateV2.ts rename to packages/twenty-front/src/modules/navigation-menu-item/states/isNavigationMenuInEditModeState.ts index 87256b4fc9..fb01dff947 100644 --- a/packages/twenty-front/src/modules/favorites/states/isFavoriteFolderCreatingStateV2.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/states/isNavigationMenuInEditModeState.ts @@ -1,6 +1,6 @@ import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const isFavoriteFolderCreatingStateV2 = createAtomState({ - key: 'isFavoriteFolderCreatingStateV2', +export const isNavigationMenuInEditModeState = createAtomState({ + key: 'isNavigationMenuInEditModeState', defaultValue: false, }); diff --git a/packages/twenty-front/src/modules/navigation-menu-item/states/isNavigationMenuInEditModeStateV2.ts b/packages/twenty-front/src/modules/navigation-menu-item/states/isNavigationMenuInEditModeStateV2.ts deleted file mode 100644 index 873197fd05..0000000000 --- a/packages/twenty-front/src/modules/navigation-menu-item/states/isNavigationMenuInEditModeStateV2.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; - -export const isNavigationMenuInEditModeStateV2 = createAtomState({ - key: 'isNavigationMenuInEditModeStateV2', - defaultValue: false, -}); diff --git a/packages/twenty-front/src/modules/navigation-menu-item/states/isNavigationMenuItemFolderCreatingState.ts b/packages/twenty-front/src/modules/navigation-menu-item/states/isNavigationMenuItemFolderCreatingState.ts new file mode 100644 index 0000000000..5255d1fd75 --- /dev/null +++ b/packages/twenty-front/src/modules/navigation-menu-item/states/isNavigationMenuItemFolderCreatingState.ts @@ -0,0 +1,8 @@ +import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; + +export const isNavigationMenuItemFolderCreatingState = createAtomState( + { + key: 'isNavigationMenuItemFolderCreatingState', + defaultValue: false, + }, +); diff --git a/packages/twenty-front/src/modules/navigation-menu-item/states/navigationMenuItemsDraftStateV2.ts b/packages/twenty-front/src/modules/navigation-menu-item/states/navigationMenuItemsDraftState.ts similarity index 67% rename from packages/twenty-front/src/modules/navigation-menu-item/states/navigationMenuItemsDraftStateV2.ts rename to packages/twenty-front/src/modules/navigation-menu-item/states/navigationMenuItemsDraftState.ts index 9af4537660..047217f4ae 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/states/navigationMenuItemsDraftStateV2.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/states/navigationMenuItemsDraftState.ts @@ -2,9 +2,9 @@ import { type NavigationMenuItem } from '~/generated-metadata/graphql'; import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const navigationMenuItemsDraftStateV2 = createAtomState< +export const navigationMenuItemsDraftState = createAtomState< NavigationMenuItem[] | null >({ - key: 'navigationMenuItemsDraftStateV2', + key: 'navigationMenuItemsDraftState', defaultValue: null, }); diff --git a/packages/twenty-front/src/modules/navigation-menu-item/states/openNavigationMenuItemFolderIdsState.ts b/packages/twenty-front/src/modules/navigation-menu-item/states/openNavigationMenuItemFolderIdsState.ts new file mode 100644 index 0000000000..0d290c3783 --- /dev/null +++ b/packages/twenty-front/src/modules/navigation-menu-item/states/openNavigationMenuItemFolderIdsState.ts @@ -0,0 +1,6 @@ +import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; + +export const openNavigationMenuItemFolderIdsState = createAtomState({ + key: 'openNavigationMenuItemFolderIdsState', + defaultValue: [], +}); diff --git a/packages/twenty-front/src/modules/navigation-menu-item/states/openNavigationMenuItemFolderIdsStateV2.ts b/packages/twenty-front/src/modules/navigation-menu-item/states/openNavigationMenuItemFolderIdsStateV2.ts deleted file mode 100644 index b214c937b6..0000000000 --- a/packages/twenty-front/src/modules/navigation-menu-item/states/openNavigationMenuItemFolderIdsStateV2.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; - -export const openNavigationMenuItemFolderIdsStateV2 = createAtomState( - { - key: 'openNavigationMenuItemFolderIdsStateV2', - defaultValue: [], - }, -); diff --git a/packages/twenty-front/src/modules/navigation-menu-item/states/selectedNavigationMenuItemInEditModeStateV2.ts b/packages/twenty-front/src/modules/navigation-menu-item/states/selectedNavigationMenuItemInEditModeState.ts similarity index 50% rename from packages/twenty-front/src/modules/navigation-menu-item/states/selectedNavigationMenuItemInEditModeStateV2.ts rename to packages/twenty-front/src/modules/navigation-menu-item/states/selectedNavigationMenuItemInEditModeState.ts index afef648540..b3d1814ad8 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/states/selectedNavigationMenuItemInEditModeStateV2.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/states/selectedNavigationMenuItemInEditModeState.ts @@ -1,8 +1,8 @@ import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const selectedNavigationMenuItemInEditModeStateV2 = createAtomState< +export const selectedNavigationMenuItemInEditModeState = createAtomState< string | null >({ - key: 'selectedNavigationMenuItemInEditModeStateV2', + key: 'selectedNavigationMenuItemInEditModeState', defaultValue: null, }); diff --git a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawer.tsx b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawer.tsx index d7ad313d83..26e242640a 100644 --- a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawer.tsx +++ b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawer.tsx @@ -8,8 +8,8 @@ import { MainNavigationDrawerScrollableItems } from '@/navigation/components/Mai import { NavigationDrawer } from '@/ui/navigation/navigation-drawer/components/NavigationDrawer'; import { NavigationDrawerFixedContent } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerFixedContent'; import { NavigationDrawerScrollableContent } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerScrollableContent'; -import { currentFavoriteFolderIdStateV2 } from '@/ui/navigation/navigation-drawer/states/currentFavoriteFolderIdStateV2'; -import { currentNavigationMenuItemFolderIdStateV2 } from '@/ui/navigation/navigation-drawer/states/currentNavigationMenuItemFolderIdStateV2'; +import { currentFavoriteFolderIdState } from '@/ui/navigation/navigation-drawer/states/currentFavoriteFolderIdState'; +import { currentNavigationMenuItemFolderIdState } from '@/ui/navigation/navigation-drawer/states/currentNavigationMenuItemFolderIdState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { FeatureFlagKey } from '~/generated-metadata/graphql'; @@ -22,10 +22,10 @@ const StyledScrollableContent = styled.div` export const MainNavigationDrawer = ({ className }: { className?: string }) => { const currentWorkspace = useAtomStateValue(currentWorkspaceState); const currentFavoriteFolderId = useAtomStateValue( - currentFavoriteFolderIdStateV2, + currentFavoriteFolderIdState, ); const currentNavigationMenuItemFolderId = useAtomStateValue( - currentNavigationMenuItemFolderIdStateV2, + currentNavigationMenuItemFolderIdState, ); const { favoritesByFolder } = useFavoritesByFolder(); const { navigationMenuItemsByFolder } = useNavigationMenuItemsByFolder(); diff --git a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerFixedItems.tsx b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerFixedItems.tsx index e2b7625ebc..2502f1d0fb 100644 --- a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerFixedItems.tsx +++ b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerFixedItems.tsx @@ -2,7 +2,7 @@ import { useOpenAskAIPageInCommandMenu } from '@/command-menu/hooks/useOpenAskAI import { useOpenRecordsSearchPageInCommandMenu } from '@/command-menu/hooks/useOpenRecordsSearchPageInCommandMenu'; import { NavigationDrawerItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItem'; import { isNavigationDrawerExpandedState } from '@/ui/navigation/states/isNavigationDrawerExpanded'; -import { navigationDrawerExpandedMemorizedStateV2 } from '@/ui/navigation/states/navigationDrawerExpandedMemorizedStateV2'; +import { navigationDrawerExpandedMemorizedState } from '@/ui/navigation/states/navigationDrawerExpandedMemorizedState'; import { navigationMemorizedUrlState } from '@/ui/navigation/states/navigationMemorizedUrlState'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; @@ -25,7 +25,7 @@ export const MainNavigationDrawerFixedItems = () => { const [isNavigationDrawerExpanded, setIsNavigationDrawerExpanded] = useAtomState(isNavigationDrawerExpandedState); const setNavigationDrawerExpandedMemorized = useSetAtomState( - navigationDrawerExpandedMemorizedStateV2, + navigationDrawerExpandedMemorizedState, ); const navigate = useNavigate(); diff --git a/packages/twenty-front/src/modules/navigation/components/MobileNavigationBar.tsx b/packages/twenty-front/src/modules/navigation/components/MobileNavigationBar.tsx index d03b002ee8..110db7087e 100644 --- a/packages/twenty-front/src/modules/navigation/components/MobileNavigationBar.tsx +++ b/packages/twenty-front/src/modules/navigation/components/MobileNavigationBar.tsx @@ -1,6 +1,6 @@ import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; import { useOpenRecordsSearchPageInCommandMenu } from '@/command-menu/hooks/useOpenRecordsSearchPageInCommandMenu'; -import { isCommandMenuOpenedStateV2 } from '@/command-menu/states/isCommandMenuOpenedStateV2'; +import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState'; import { useDefaultHomePagePath } from '@/navigation/hooks/useDefaultHomePagePath'; @@ -26,7 +26,7 @@ type NavigationBarItemName = 'main' | 'search' | 'tasks' | 'settings'; export const MobileNavigationBar = () => { const navigate = useNavigate(); const { defaultHomePagePath } = useDefaultHomePagePath(); - const isCommandMenuOpened = useAtomStateValue(isCommandMenuOpenedStateV2); + const isCommandMenuOpened = useAtomStateValue(isCommandMenuOpenedState); const { closeCommandMenu } = useCommandMenu(); const { openRecordsSearchPage } = useOpenRecordsSearchPageInCommandMenu(); const isSettingsPage = useIsSettingsPage(); diff --git a/packages/twenty-front/src/modules/navigation/components/PageDragDropProvider.tsx b/packages/twenty-front/src/modules/navigation/components/PageDragDropProvider.tsx index e23d1a610b..081bb7224b 100644 --- a/packages/twenty-front/src/modules/navigation/components/PageDragDropProvider.tsx +++ b/packages/twenty-front/src/modules/navigation/components/PageDragDropProvider.tsx @@ -19,7 +19,7 @@ import { useHandleAddToNavigationDrop } from '@/navigation-menu-item/hooks/useHa import { useHandleNavigationMenuItemDragAndDrop } from '@/navigation-menu-item/hooks/useHandleNavigationMenuItemDragAndDrop'; import { useHandleWorkspaceNavigationMenuItemDragAndDrop } from '@/navigation-menu-item/hooks/useHandleWorkspaceNavigationMenuItemDragAndDrop'; import { useNavigationMenuItemsDraftState } from '@/navigation-menu-item/hooks/useNavigationMenuItemsDraftState'; -import { addToNavPayloadRegistryStateV2 } from '@/navigation-menu-item/states/addToNavPayloadRegistryStateV2'; +import { addToNavPayloadRegistryState } from '@/navigation-menu-item/states/addToNavPayloadRegistryState'; import { getDropTargetIdFromDestination } from '@/navigation-menu-item/utils/getDropTargetIdFromDestination'; import { isWorkspaceDroppableId } from '@/navigation-menu-item/utils/isWorkspaceDroppableId'; import { validateAndExtractWorkspaceFolderId } from '@/navigation-menu-item/utils/validateAndExtractWorkspaceFolderId'; @@ -95,7 +95,7 @@ export const PageDragDropProvider = ({ const payload = store - .get(addToNavPayloadRegistryStateV2.atom) + .get(addToNavPayloadRegistryState.atom) .get(update.draggableId) ?? null; const folderId = validateAndExtractWorkspaceFolderId( destination.droppableId, diff --git a/packages/twenty-front/src/modules/navigation/hooks/__tests__/useDefaultHomePagePath.test.ts b/packages/twenty-front/src/modules/navigation/hooks/__tests__/useDefaultHomePagePath.test.ts index 6426660de3..23aa76d94f 100644 --- a/packages/twenty-front/src/modules/navigation/hooks/__tests__/useDefaultHomePagePath.test.ts +++ b/packages/twenty-front/src/modules/navigation/hooks/__tests__/useDefaultHomePagePath.test.ts @@ -1,8 +1,6 @@ import { renderHook, waitFor } from '@testing-library/react'; import { createElement, useEffect, type ReactNode } from 'react'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; - import { currentUserState } from '@/auth/states/currentUserState'; import { currentUserWorkspaceState } from '@/auth/states/currentUserWorkspaceState'; import { useDefaultHomePagePath } from '@/navigation/hooks/useDefaultHomePagePath'; @@ -22,11 +20,7 @@ import { mockedUserData } from '~/testing/mock-data/users'; import { generatedMockObjectMetadataItems } from '~/testing/utils/generatedMockObjectMetadataItems'; const Wrapper = ({ children }: { children: ReactNode }) => - createElement( - JotaiProvider, - { store: jotaiStore }, - createElement(RecoilRoot, null as any, children), - ); + createElement(JotaiProvider, { store: jotaiStore }, children); const renderHooks = ({ withCurrentUser, diff --git a/packages/twenty-front/src/modules/navigation/utils/indexAppPath.ts b/packages/twenty-front/src/modules/navigation/utils/indexAppPath.ts index 02f039c845..b6a3af05a3 100644 --- a/packages/twenty-front/src/modules/navigation/utils/indexAppPath.ts +++ b/packages/twenty-front/src/modules/navigation/utils/indexAppPath.ts @@ -7,6 +7,6 @@ const getIndexAppPath = () => { // This file is using the default export pattern to be compatible // with the way it is imported in the tests. // Otherwise we cannot mock it: https://github.com/jestjs/jest/issues/12145 as we are using ES native modules -// TBH: I am not a big fan of this pattern, alternatively we could set a global variable or a recoilState +// TBH: I am not a big fan of this pattern, alternatively we could set a global variable or a global state // to store the value export default { getIndexAppPath }; diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useColumnDefinitionsFromObjectMetadata.test.ts b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useColumnDefinitionsFromObjectMetadata.test.ts index 1ddddc63d3..37a6000fca 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useColumnDefinitionsFromObjectMetadata.test.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useColumnDefinitionsFromObjectMetadata.test.ts @@ -19,9 +19,6 @@ const Wrapper = getJestMetadataAndApolloMocksAndActionMenuWrapper({ apolloMocks: [], componentInstanceId: 'instanceId', contextStoreCurrentObjectMetadataNameSingular: 'company', - onInitializeRecoilSnapshot: () => { - // Recoil state initialization removed - using Jotai instead - }, }); describe('useColumnDefinitionsFromObjectMetadata', () => { diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFilteredObjectMetadataItems.test.tsx b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFilteredObjectMetadataItems.test.tsx index e2fdba7889..870e7fe84e 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFilteredObjectMetadataItems.test.tsx +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFilteredObjectMetadataItems.test.tsx @@ -2,8 +2,6 @@ import { MockedProvider } from '@apollo/client/testing'; import { act, renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; - import { query, responseData, @@ -37,11 +35,9 @@ const Wrapper = ({ children }: { children: ReactNode }) => { return ( - - - {children} - - + + {children} + ); }; diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFindManyObjectMetadataItems.test.tsx b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFindManyObjectMetadataItems.test.tsx index 834e0b23b3..577eb86454 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFindManyObjectMetadataItems.test.tsx +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFindManyObjectMetadataItems.test.tsx @@ -1,7 +1,6 @@ import { MockedProvider } from '@apollo/client/testing'; import { renderHook } from '@testing-library/react'; import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; import { useFindManyObjectMetadataItems } from '@/object-metadata/hooks/useFindManyObjectMetadataItems'; @@ -25,15 +24,13 @@ const mocks = [ ]; const Wrapper = ({ children }: { children: ReactNode }) => ( - - - - {children} - - - + + + {children} + + ); describe('useFindManyObjectMetadataItems', () => { diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetObjectRecordIdentifierByNameSingular.test.tsx b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetObjectRecordIdentifierByNameSingular.test.tsx index 7aa392466c..bdf41aa2f6 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetObjectRecordIdentifierByNameSingular.test.tsx +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetObjectRecordIdentifierByNameSingular.test.tsx @@ -1,6 +1,5 @@ import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; import { useGetObjectRecordIdentifierByNameSingular } from '@/object-metadata/hooks/useGetObjectRecordIdentifierByNameSingular'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; @@ -8,9 +7,7 @@ import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; import { generatedMockObjectMetadataItems } from '~/testing/utils/generatedMockObjectMetadataItems'; const Wrapper = ({ children }: { children: React.ReactNode }) => ( - - {children} - + {children} ); describe('useGetObjectRecordIdentifierByNameSingular', () => { diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetRelationMetadata.test.tsx b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetRelationMetadata.test.tsx index 020721dec8..cae4f91175 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetRelationMetadata.test.tsx +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetRelationMetadata.test.tsx @@ -2,7 +2,6 @@ import { MockedProvider } from '@apollo/client/testing'; import { renderHook } from '@testing-library/react'; import { type ReactNode } from 'react'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; import { useGetRelationMetadata } from '@/object-metadata/hooks/useGetRelationMetadata'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; @@ -11,9 +10,7 @@ import { generatedMockObjectMetadataItems } from '~/testing/utils/generatedMockO const Wrapper = ({ children }: { children: ReactNode }) => ( - - {children} - + {children} ); diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useObjectNamePluralFromSingular.test.tsx b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useObjectNamePluralFromSingular.test.tsx index b24ce69a71..7a401685d4 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useObjectNamePluralFromSingular.test.tsx +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useObjectNamePluralFromSingular.test.tsx @@ -1,6 +1,4 @@ import { renderHook } from '@testing-library/react'; -import { RecoilRoot } from 'recoil'; - import { JestObjectMetadataItemSetter } from '~/testing/jest/JestObjectMetadataItemSetter'; import { useObjectNamePluralFromSingular } from '@/object-metadata/hooks/useObjectNamePluralFromSingular'; @@ -10,11 +8,9 @@ describe('useObjectNamePluralFromSingular', () => { () => useObjectNamePluralFromSingular({ objectNameSingular: 'person' }), { wrapper: ({ children }) => ( - - - {children} - - + + {children} + ), }, ); diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useObjectNameSingularFromPlural.test.tsx b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useObjectNameSingularFromPlural.test.tsx index 0185d0454c..f64e622d1e 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useObjectNameSingularFromPlural.test.tsx +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useObjectNameSingularFromPlural.test.tsx @@ -1,5 +1,4 @@ import { renderHook } from '@testing-library/react'; -import { RecoilRoot } from 'recoil'; import { JestObjectMetadataItemSetter } from '~/testing/jest/JestObjectMetadataItemSetter'; import { useObjectNameSingularFromPlural } from '@/object-metadata/hooks/useObjectNameSingularFromPlural'; @@ -10,11 +9,9 @@ describe('useObjectNameSingularFromPlural', () => { () => useObjectNameSingularFromPlural({ objectNamePlural: 'people' }), { wrapper: ({ children }) => ( - - - {children} - - + + {children} + ), }, ); diff --git a/packages/twenty-front/src/modules/object-record/components/RecordChip.tsx b/packages/twenty-front/src/modules/object-record/components/RecordChip.tsx index 98e989796b..c5a343ead0 100644 --- a/packages/twenty-front/src/modules/object-record/components/RecordChip.tsx +++ b/packages/twenty-front/src/modules/object-record/components/RecordChip.tsx @@ -2,7 +2,7 @@ import { useOpenRecordInCommandMenu } from '@/command-menu/hooks/useOpenRecordIn import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { getLinkToShowPage } from '@/object-metadata/utils/getLinkToShowPage'; import { useRecordChipData } from '@/object-record/hooks/useRecordChipData'; -import { recordIndexOpenRecordInStateV2 } from '@/object-record/record-index/states/recordIndexOpenRecordInStateV2'; +import { recordIndexOpenRecordInState } from '@/object-record/record-index/states/recordIndexOpenRecordInState'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { canOpenObjectInSidePanel } from '@/object-record/utils/canOpenObjectInSidePanel'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; @@ -56,7 +56,7 @@ export const RecordChip = ({ const { openRecordInCommandMenu } = useOpenRecordInCommandMenu(); const recordIndexOpenRecordIn = useAtomStateValue( - recordIndexOpenRecordInStateV2, + recordIndexOpenRecordInState, ); const canOpenInSidePanel = canOpenObjectInSidePanel(objectNameSingular); diff --git a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useFindManyRecords.test.tsx b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useFindManyRecords.test.tsx index ab92105488..e1bd33187e 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useFindManyRecords.test.tsx +++ b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useFindManyRecords.test.tsx @@ -7,14 +7,10 @@ import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper'; import { generatedMockObjectMetadataItems } from '~/testing/utils/generatedMockObjectMetadataItems'; +jotaiStore.set(objectMetadataItemsState.atom, generatedMockObjectMetadataItems); + const Wrapper = getJestMetadataAndApolloMocksWrapper({ apolloMocks: [], - onInitializeRecoilSnapshot: () => { - jotaiStore.set( - objectMetadataItemsState.atom, - generatedMockObjectMetadataItems, - ); - }, }); describe('useFindManyRecords', () => { diff --git a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useGenerateFindManyRecordsForMultipleMetadataItemsQuery.test.tsx b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useGenerateFindManyRecordsForMultipleMetadataItemsQuery.test.tsx index 73854c4f47..267eca77cc 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useGenerateFindManyRecordsForMultipleMetadataItemsQuery.test.tsx +++ b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useGenerateFindManyRecordsForMultipleMetadataItemsQuery.test.tsx @@ -1,15 +1,12 @@ import { renderHook } from '@testing-library/react'; import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; import { useGenerateCombinedFindManyRecordsQuery } from '@/object-record/multiple-objects/hooks/useGenerateCombinedFindManyRecordsQuery'; import { JestObjectMetadataItemSetter } from '~/testing/jest/JestObjectMetadataItemSetter'; import { generatedMockObjectMetadataItems } from '~/testing/utils/generatedMockObjectMetadataItems'; const Wrapper = ({ children }: { children: ReactNode }) => ( - - {children} - + {children} ); describe('useGenerateFindManyRecordsForMultipleMetadataItemsQuery', () => { diff --git a/packages/twenty-front/src/modules/object-record/object-options-dropdown/hooks/__tests__/useSearchRecordGroupField.test.tsx b/packages/twenty-front/src/modules/object-record/object-options-dropdown/hooks/__tests__/useSearchRecordGroupField.test.tsx index 22f38d0e19..8bf2358ed7 100644 --- a/packages/twenty-front/src/modules/object-record/object-options-dropdown/hooks/__tests__/useSearchRecordGroupField.test.tsx +++ b/packages/twenty-front/src/modules/object-record/object-options-dropdown/hooks/__tests__/useSearchRecordGroupField.test.tsx @@ -6,7 +6,6 @@ import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { act } from 'react'; -import { RecoilRoot } from 'recoil'; import { FieldMetadataType } from '~/generated-metadata/graphql'; const INSTANCE_ID = 'myViewInstanceId'; @@ -25,15 +24,13 @@ describe('useSearchRecordGroupField', () => { renderHook(() => useSearchRecordGroupField(), { wrapper: ({ children }) => ( - - - - {children} - - - + + + {children} + + ), }); diff --git a/packages/twenty-front/src/modules/object-record/object-options-dropdown/hooks/useUpdateObjectViewOptions.ts b/packages/twenty-front/src/modules/object-record/object-options-dropdown/hooks/useUpdateObjectViewOptions.ts index 4715d384bb..afc4984aaa 100644 --- a/packages/twenty-front/src/modules/object-record/object-options-dropdown/hooks/useUpdateObjectViewOptions.ts +++ b/packages/twenty-front/src/modules/object-record/object-options-dropdown/hooks/useUpdateObjectViewOptions.ts @@ -1,5 +1,4 @@ import { recordIndexOpenRecordInState } from '@/object-record/record-index/states/recordIndexOpenRecordInState'; -import { recordIndexOpenRecordInStateV2 } from '@/object-record/record-index/states/recordIndexOpenRecordInStateV2'; import { useSetAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useSetAtomComponentState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { useStore } from 'jotai'; @@ -31,7 +30,7 @@ export const useUpdateObjectViewOptions = () => { (openRecordIn: ViewOpenRecordInType, view: GraphQLView | undefined) => { if (!view) return; setRecordIndexOpenRecordIn(openRecordIn); - store.set(recordIndexOpenRecordInStateV2.atom, openRecordIn); + store.set(recordIndexOpenRecordInState.atom, openRecordIn); updateCurrentView({ openRecordIn, }); diff --git a/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSection.tsx b/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSection.tsx index ac3bf505bc..4c09d4fba2 100644 --- a/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSection.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSection.tsx @@ -15,7 +15,7 @@ import { import { usePersistField } from '@/object-record/record-field/ui/hooks/usePersistField'; import { type FieldRelationMetadata } from '@/object-record/record-field/ui/types/FieldMetadata'; import { getRecordFieldCardRelationPickerDropdownId } from '@/object-record/record-show/utils/getRecordFieldCardRelationPickerDropdownId'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { AggregateOperations } from '@/object-record/record-table/constants/AggregateOperations'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDropdownOpenComponentState'; @@ -81,7 +81,7 @@ export const RecordDetailRelationSection = ({ ); } - const fieldValue = useAtomFamilySelectorValue(recordStoreFamilySelectorV2, { + const fieldValue = useAtomFamilySelectorValue(recordStoreFamilySelector, { recordId, fieldName, }) as ({ id: string } & Record) | ObjectRecord[] | null; diff --git a/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSectionDropdownToMany.tsx b/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSectionDropdownToMany.tsx index 684a2b0799..5ff26ea966 100644 --- a/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSectionDropdownToMany.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSectionDropdownToMany.tsx @@ -15,7 +15,7 @@ import { multipleRecordPickerPickableMorphItemsComponentState } from '@/object-r import { multipleRecordPickerSearchFilterComponentState } from '@/object-record/record-picker/multiple-record-picker/states/multipleRecordPickerSearchFilterComponentState'; import { multipleRecordPickerSearchableObjectMetadataItemsComponentState } from '@/object-record/record-picker/multiple-record-picker/states/multipleRecordPickerSearchableObjectMetadataItemsComponentState'; import { getRecordFieldCardRelationPickerDropdownId } from '@/object-record/record-show/utils/getRecordFieldCardRelationPickerDropdownId'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown'; @@ -71,7 +71,7 @@ export const RecordDetailRelationSectionDropdownToMany = ({ ); } - const fieldValue = useAtomFamilySelectorValue(recordStoreFamilySelectorV2, { + const fieldValue = useAtomFamilySelectorValue(recordStoreFamilySelector, { recordId, fieldName, }) as ({ id: string } & Record) | ObjectRecord[] | null; diff --git a/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSectionDropdownToOne.tsx b/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSectionDropdownToOne.tsx index d1a466dd89..a6cd668174 100644 --- a/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSectionDropdownToOne.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationSectionDropdownToOne.tsx @@ -12,7 +12,7 @@ import { singleRecordPickerSearchFilterComponentState } from '@/object-record/re import { singleRecordPickerSelectedIdComponentState } from '@/object-record/record-picker/single-record-picker/states/singleRecordPickerSelectedIdComponentState'; import { type RecordPickerPickableMorphItem } from '@/object-record/record-picker/types/RecordPickerPickableMorphItem'; import { getRecordFieldCardRelationPickerDropdownId } from '@/object-record/record-show/utils/getRecordFieldCardRelationPickerDropdownId'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown'; @@ -80,7 +80,7 @@ export const RecordDetailRelationSectionDropdownToOne = ({ ); } - const fieldValue = useAtomFamilySelectorValue(recordStoreFamilySelectorV2, { + const fieldValue = useAtomFamilySelectorValue(recordStoreFamilySelector, { recordId, fieldName, }) as ({ id: string } & Record) | ObjectRecord[] | null; diff --git a/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/hooks/useGetMorphRelationRelatedRecordsWithObjectNameSingular.ts b/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/hooks/useGetMorphRelationRelatedRecordsWithObjectNameSingular.ts index 49554aff1f..a66f2cb1d7 100644 --- a/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/hooks/useGetMorphRelationRelatedRecordsWithObjectNameSingular.ts +++ b/packages/twenty-front/src/modules/object-record/record-field-list/record-detail-section/relation/components/hooks/useGetMorphRelationRelatedRecordsWithObjectNameSingular.ts @@ -1,5 +1,5 @@ import { type FieldMetadataItemRelation } from '@/object-metadata/types/FieldMetadataItemRelation'; -import { recordStoreMorphOneToManyValueWithObjectNameFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreMorphOneToManyValueWithObjectNameFamilySelectorV2'; +import { recordStoreMorphOneToManyValueWithObjectNameFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreMorphOneToManyValueWithObjectNameFamilySelector'; import { useAtomFamilySelectorValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilySelectorValue'; import { CustomError, isNonEmptyArray } from 'twenty-shared/utils'; @@ -11,7 +11,7 @@ export const useGetMorphRelationRelatedRecordsWithObjectNameSingular = ({ morphRelations: FieldMetadataItemRelation[]; }) => { const morphRelationObjectNameSingularWithValues = useAtomFamilySelectorValue( - recordStoreMorphOneToManyValueWithObjectNameFamilySelectorV2, + recordStoreMorphOneToManyValueWithObjectNameFamilySelector, { recordId, morphRelations }, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useGetButtonIcon.test.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useGetButtonIcon.test.tsx index 773778ab1c..bc660aaea5 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useGetButtonIcon.test.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useGetButtonIcon.test.tsx @@ -1,6 +1,5 @@ import { renderHook } from '@testing-library/react'; import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; import { phonesFieldDefinition, @@ -25,7 +24,7 @@ const getWrapper = isRecordFieldReadOnly: false, }} > - {children} + {children} ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useIsFieldEmpty.test.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useIsFieldEmpty.test.tsx index fb899cf0a5..bc09aad656 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useIsFieldEmpty.test.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useIsFieldEmpty.test.tsx @@ -1,7 +1,6 @@ import { act, renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; import { phonesFieldDefinition } from '@/object-record/record-field/ui/__mocks__/fieldDefinitions'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; @@ -22,7 +21,7 @@ const Wrapper = ({ children }: { children: ReactNode }) => ( isRecordFieldReadOnly: false, }} > - {children} + {children} ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useIsFieldInputOnly.test.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useIsFieldInputOnly.test.tsx index 9abebde71b..cf2deef61c 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useIsFieldInputOnly.test.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/__tests__/useIsFieldInputOnly.test.tsx @@ -1,6 +1,5 @@ import { renderHook } from '@testing-library/react'; import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; import { phonesFieldDefinition, @@ -24,7 +23,7 @@ const getWrapper = isRecordFieldReadOnly: false, }} > - {children} + {children} ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useClearField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useClearField.ts index 6ce7f15c18..327acf081f 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useClearField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useClearField.ts @@ -2,7 +2,7 @@ import { useCallback, useContext } from 'react'; import { useStore } from 'jotai'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { generateEmptyFieldValue } from '@/object-record/utils/generateEmptyFieldValue'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; @@ -56,7 +56,7 @@ export const useClearField = () => { }); store.set( - recordStoreFamilySelectorV2.selectorFamily({ recordId, fieldName }), + recordStoreFamilySelector.selectorFamily({ recordId, fieldName }), emptyFieldValue, ); @@ -71,7 +71,7 @@ export const useClearField = () => { if (isManyToOneRelation) { store.set( - recordStoreFamilySelectorV2.selectorFamily({ + recordStoreFamilySelector.selectorFamily({ recordId, fieldName: updateFieldName, }), diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useInitDraftValue.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useInitDraftValue.ts index 5f344e33ca..ec5010e98d 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useInitDraftValue.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useInitDraftValue.ts @@ -8,7 +8,7 @@ import { type FieldDefinition } from '@/object-record/record-field/ui/types/Fiel import { type FieldMetadata } from '@/object-record/record-field/ui/types/FieldMetadata'; import { computeDraftValueFromFieldValue } from '@/object-record/record-field/ui/utils/computeDraftValueFromFieldValue'; import { computeDraftValueFromString } from '@/object-record/record-field/ui/utils/computeDraftValueFromString'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; export const useInitDraftValue = () => { const store = useStore(); @@ -26,7 +26,7 @@ export const useInitDraftValue = () => { fieldComponentInstanceId: string; }) => { const recordFieldValue = store.get( - recordStoreFamilySelectorV2.selectorFamily({ + recordStoreFamilySelector.selectorFamily({ recordId, fieldName: fieldDefinition.metadata.fieldName, }), diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useIsRecordDeleted.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useIsRecordDeleted.ts index 6453bcb69e..02c2e84f28 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useIsRecordDeleted.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useIsRecordDeleted.ts @@ -1,4 +1,4 @@ -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { useAtomFamilySelectorValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilySelectorValue'; import { isDefined } from 'twenty-shared/utils'; @@ -11,7 +11,7 @@ export const useIsRecordDeleted = ({ recordId, }: UseIsRecordReadOnlyParams): boolean => { const recordDeletedAt = useAtomFamilySelectorValue( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName: 'deletedAt', diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useOpenFieldInputEditMode.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useOpenFieldInputEditMode.ts index 35f47758af..e3e06e0cc5 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useOpenFieldInputEditMode.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useOpenFieldInputEditMode.ts @@ -28,7 +28,7 @@ import { isFieldRelationManyToOne } from '@/object-record/record-field/ui/types/ import { isFieldRelationOneToMany } from '@/object-record/record-field/ui/types/guards/isFieldRelationOneToMany'; import { hasJunctionConfig } from '@/object-record/record-field/ui/utils/junction/hasJunctionConfig'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { getRecordFieldInputInstanceId } from '@/object-record/utils/getRecordFieldInputId'; import { usePushFocusItemToFocusStack } from '@/ui/utilities/focus/hooks/usePushFocusItemToFocusStack'; import { useRemoveFocusItemFromFocusStackById } from '@/ui/utilities/focus/hooks/useRemoveFocusItemFromFocusStackById'; @@ -135,7 +135,7 @@ export const useOpenFieldInputEditMode = () => { ) ) { const fieldValue = store.get( - recordStoreFamilySelectorV2.selectorFamily({ + recordStoreFamilySelector.selectorFamily({ recordId, fieldName: fieldDefinition.metadata.fieldName, }), diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useOpenJunctionRelationFieldInput.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useOpenJunctionRelationFieldInput.ts index a3b1bb3f22..1dc875fa23 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useOpenJunctionRelationFieldInput.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useOpenJunctionRelationFieldInput.ts @@ -13,7 +13,7 @@ import { useMultipleRecordPickerPerformSearch } from '@/object-record/record-pic import { multipleRecordPickerPickableMorphItemsComponentState } from '@/object-record/record-picker/multiple-record-picker/states/multipleRecordPickerPickableMorphItemsComponentState'; import { multipleRecordPickerSearchFilterComponentState } from '@/object-record/record-picker/multiple-record-picker/states/multipleRecordPickerSearchFilterComponentState'; import { multipleRecordPickerSearchableObjectMetadataItemsComponentState } from '@/object-record/record-picker/multiple-record-picker/states/multipleRecordPickerSearchableObjectMetadataItemsComponentState'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { getRecordFieldInputInstanceId } from '@/object-record/utils/getRecordFieldInputId'; import { usePushFocusItemToFocusStack } from '@/ui/utilities/focus/hooks/usePushFocusItemToFocusStack'; import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType'; @@ -70,7 +70,7 @@ export const useOpenJunctionRelationFieldInput = () => { }); const junctionRecords = store.get( - recordStoreFamilySelectorV2.selectorFamily({ + recordStoreFamilySelector.selectorFamily({ recordId, fieldName: fieldDefinition.metadata.fieldName, }), diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/usePersistField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/usePersistField.ts index 272dfb2f97..474a2831b0 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/usePersistField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/usePersistField.ts @@ -25,7 +25,7 @@ import { isFieldRawJson } from '@/object-record/record-field/ui/types/guards/isF import { isFieldRawJsonValue } from '@/object-record/record-field/ui/types/guards/isFieldRawJsonValue'; import { isFieldSelect } from '@/object-record/record-field/ui/types/guards/isFieldSelect'; import { isFieldSelectValue } from '@/object-record/record-field/ui/types/guards/isFieldSelectValue'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById'; import { getRecordFromRecordNode } from '@/object-record/cache/utils/getRecordFromRecordNode'; @@ -187,7 +187,7 @@ export const usePersistField = ({ const fieldName = fieldDefinition.metadata.fieldName; const currentValue = store.get( - recordStoreFamilySelectorV2.selectorFamily({ recordId, fieldName }), + recordStoreFamilySelector.selectorFamily({ recordId, fieldName }), ) as { id?: string } | null | undefined; if (fieldIsRelationManyToOne) { @@ -255,7 +255,7 @@ export const usePersistField = ({ }); store.set( - recordStoreFamilySelectorV2.selectorFamily({ recordId, fieldName }), + recordStoreFamilySelector.selectorFamily({ recordId, fieldName }), valueToPersist, ); } else { diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useToggleEditOnlyInput.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useToggleEditOnlyInput.ts index 30191daa60..096d5b340e 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useToggleEditOnlyInput.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/hooks/useToggleEditOnlyInput.ts @@ -1,7 +1,7 @@ import { useCallback, useContext } from 'react'; import { useStore } from 'jotai'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; import { isFieldBoolean } from '@/object-record/record-field/ui/types/guards/isFieldBoolean'; @@ -21,11 +21,11 @@ export const useToggleEditOnlyInput = () => { if (fieldIsBoolean) { const fieldName = fieldDefinition.metadata.fieldName; const oldValue = store.get( - recordStoreFamilySelectorV2.selectorFamily({ recordId, fieldName }), + recordStoreFamilySelector.selectorFamily({ recordId, fieldName }), ) as boolean; const valueToPersist = !oldValue; store.set( - recordStoreFamilySelectorV2.selectorFamily({ recordId, fieldName }), + recordStoreFamilySelector.selectorFamily({ recordId, fieldName }), valueToPersist, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/FilesFieldDisplay.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/FilesFieldDisplay.tsx index 91164d8d67..f07438d670 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/FilesFieldDisplay.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/FilesFieldDisplay.tsx @@ -1,6 +1,6 @@ import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; import { useFilesFieldDisplay } from '@/object-record/record-field/ui/meta-types/hooks/useFilesFieldDisplay'; -import { filesFieldUploadStateV2 } from '@/object-record/record-field/ui/states/filesFieldUploadStateV2'; +import { filesFieldUploadState } from '@/object-record/record-field/ui/states/filesFieldUploadState'; import { useAtomFamilyStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue'; import { FilesDisplay } from '@/ui/field/display/components/FilesDisplay'; import { useContext } from 'react'; @@ -9,7 +9,7 @@ export const FilesFieldDisplay = () => { const { recordId, fieldDefinition } = useContext(FieldContext); const { fieldValue, disableChipClick } = useFilesFieldDisplay(); - const uploadState = useAtomFamilyStateValue(filesFieldUploadStateV2, { + const uploadState = useAtomFamilyStateValue(filesFieldUploadState, { recordId, fieldName: fieldDefinition.metadata.fieldName, }); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useAddressField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useAddressField.ts index 14d0b02cec..b98aa2caa6 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useAddressField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useAddressField.ts @@ -1,7 +1,7 @@ import { useContext } from 'react'; import { useRecordFieldInput } from '@/object-record/record-field/ui/hooks/useRecordFieldInput'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { recordFieldInputDraftValueComponentState } from '@/object-record/record-field/ui/states/recordFieldInputDraftValueComponentState'; @@ -24,7 +24,7 @@ export const useAddressField = () => { const fieldName = fieldDefinition.metadata.fieldName; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useArrayField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useArrayField.ts index 368f833d1a..18438432cb 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useArrayField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useArrayField.ts @@ -4,7 +4,7 @@ import { recordFieldInputDraftValueComponentState } from '@/object-record/record import { type FieldArrayValue } from '@/object-record/record-field/ui/types/FieldMetadata'; import { assertFieldMetadata } from '@/object-record/record-field/ui/types/guards/assertFieldMetadata'; import { isFieldArray } from '@/object-record/record-field/ui/types/guards/isFieldArray'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { useAtomFamilySelectorState } from '@/ui/utilities/state/jotai/hooks/useAtomFamilySelectorState'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; import { useContext } from 'react'; @@ -18,7 +18,7 @@ export const useArrayField = () => { const fieldName = fieldDefinition.metadata.fieldName; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useBooleanField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useBooleanField.ts index eb7d3939bf..107e2e264f 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useBooleanField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useBooleanField.ts @@ -1,6 +1,6 @@ import { useContext } from 'react'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; @@ -20,7 +20,7 @@ export const useBooleanField = () => { const fieldName = fieldDefinition.metadata.fieldName; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useChipFieldDisplay.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useChipFieldDisplay.ts index e161e7315f..ff1ffbaaee 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useChipFieldDisplay.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useChipFieldDisplay.ts @@ -8,7 +8,7 @@ import { useContext } from 'react'; import { isFieldActor } from '@/object-record/record-field/ui/types/guards/isFieldActor'; import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext'; -import { recordStoreFamilyStateV2 } from '@/object-record/record-store/states/recordStoreFamilyStateV2'; +import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { useAtomFamilyStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue'; import { isDefined } from 'twenty-shared/utils'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; @@ -50,10 +50,7 @@ export const useChipFieldDisplay = () => { ? fieldDefinition.metadata.objectMetadataNameSingular : undefined; - const recordValue = useAtomFamilyStateValue( - recordStoreFamilyStateV2, - recordId, - ); + const recordValue = useAtomFamilyStateValue(recordStoreFamilyState, recordId); if (!isNonEmptyString(objectNameSingular)) { throw new Error('Object metadata name singular is not a non-empty string'); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useCurrencyField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useCurrencyField.ts index f4a3c42b43..a7a7e1398c 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useCurrencyField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useCurrencyField.ts @@ -6,7 +6,7 @@ import { recordFieldInputDraftValueComponentState } from '@/object-record/record import { type FieldCurrencyValue } from '@/object-record/record-field/ui/types/FieldMetadata'; import { assertFieldMetadata } from '@/object-record/record-field/ui/types/guards/assertFieldMetadata'; import { isFieldCurrency } from '@/object-record/record-field/ui/types/guards/isFieldCurrency'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { useAtomFamilySelectorState } from '@/ui/utilities/state/jotai/hooks/useAtomFamilySelectorState'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; import { FieldMetadataType } from '~/generated-metadata/graphql'; @@ -24,7 +24,7 @@ export const useCurrencyField = () => { const fieldName = fieldDefinition.metadata.fieldName; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useDateField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useDateField.ts index c98fa09466..719967dc7d 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useDateField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useDateField.ts @@ -3,7 +3,7 @@ import { useContext } from 'react'; import { useRecordFieldInput } from '@/object-record/record-field/ui/hooks/useRecordFieldInput'; import { type FieldDateValue } from '@/object-record/record-field/ui/types/FieldMetadata'; import { isFieldDate } from '@/object-record/record-field/ui/types/guards/isFieldDate'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; @@ -18,7 +18,7 @@ export const useDateField = () => { const fieldName = fieldDefinition.metadata.fieldName; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useDateTimeField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useDateTimeField.ts index f4f8bedfe4..74c32ffa72 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useDateTimeField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useDateTimeField.ts @@ -2,7 +2,7 @@ import { useContext } from 'react'; import { useRecordFieldInput } from '@/object-record/record-field/ui/hooks/useRecordFieldInput'; import { type FieldDateTimeValue } from '@/object-record/record-field/ui/types/FieldMetadata'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; @@ -22,7 +22,7 @@ export const useDateTimeField = () => { const fieldName = fieldDefinition.metadata.fieldName; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useEmailsField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useEmailsField.ts index 095123bbae..86849a7704 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useEmailsField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useEmailsField.ts @@ -3,7 +3,7 @@ import { useContext } from 'react'; import { useRecordFieldInput } from '@/object-record/record-field/ui/hooks/useRecordFieldInput'; import { type FieldEmailsValue } from '@/object-record/record-field/ui/types/FieldMetadata'; import { isFieldEmails } from '@/object-record/record-field/ui/types/guards/isFieldEmails'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { recordFieldInputDraftValueComponentState } from '@/object-record/record-field/ui/states/recordFieldInputDraftValueComponentState'; @@ -20,7 +20,7 @@ export const useEmailsField = () => { const fieldName = fieldDefinition.metadata.fieldName; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useFilesField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useFilesField.ts index 3405b436b8..d6a7d481a5 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useFilesField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useFilesField.ts @@ -3,7 +3,7 @@ import { useContext } from 'react'; import { useRecordFieldInput } from '@/object-record/record-field/ui/hooks/useRecordFieldInput'; import { type FieldFilesValue } from '@/object-record/record-field/ui/types/FieldMetadata'; import { isFieldFiles } from '@/object-record/record-field/ui/types/guards/isFieldFiles'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; @@ -20,7 +20,7 @@ export const useFilesField = () => { const fieldName = fieldDefinition.metadata.fieldName; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useFullNameField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useFullNameField.ts index 226602b5a5..9e7b4c7ff2 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useFullNameField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useFullNameField.ts @@ -6,7 +6,7 @@ import { recordFieldInputDraftValueComponentState } from '@/object-record/record import { type FieldFullNameValue } from '@/object-record/record-field/ui/types/FieldMetadata'; import { assertFieldMetadata } from '@/object-record/record-field/ui/types/guards/assertFieldMetadata'; import { isFieldFullName } from '@/object-record/record-field/ui/types/guards/isFieldFullName'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { useAtomFamilySelectorState } from '@/ui/utilities/state/jotai/hooks/useAtomFamilySelectorState'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; import { FieldMetadataType } from '~/generated-metadata/graphql'; @@ -23,7 +23,7 @@ export const useFullNameField = () => { const fieldName = fieldDefinition.metadata.fieldName; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useJsonField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useJsonField.ts index 3e1efedde5..ed54b34640 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useJsonField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useJsonField.ts @@ -2,7 +2,7 @@ import { useContext } from 'react'; import { useRecordFieldInput } from '@/object-record/record-field/ui/hooks/useRecordFieldInput'; import { type FieldJsonValue } from '@/object-record/record-field/ui/types/FieldMetadata'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { usePrecomputedJsonDraftValue } from '@/object-record/record-field/ui/meta-types/hooks/usePrecomputedJsonDraftValue'; @@ -25,7 +25,7 @@ export const useJsonField = () => { const fieldName = fieldDefinition.metadata.fieldName; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useLinksField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useLinksField.ts index 114fe0ab00..799ba872ee 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useLinksField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useLinksField.ts @@ -3,7 +3,7 @@ import { useContext } from 'react'; import { useRecordFieldInput } from '@/object-record/record-field/ui/hooks/useRecordFieldInput'; import { type FieldLinksValue } from '@/object-record/record-field/ui/types/FieldMetadata'; import { isFieldLinks } from '@/object-record/record-field/ui/types/guards/isFieldLinks'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { recordFieldInputDraftValueComponentState } from '@/object-record/record-field/ui/states/recordFieldInputDraftValueComponentState'; @@ -20,7 +20,7 @@ export const useLinksField = () => { const fieldName = fieldDefinition.metadata.fieldName; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useMorphRelationField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useMorphRelationField.ts index eeb745af0c..00c965d943 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useMorphRelationField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useMorphRelationField.ts @@ -2,7 +2,7 @@ import { useContext } from 'react'; import { useGetButtonIcon } from '@/object-record/record-field/ui/hooks/useGetButtonIcon'; import { type FieldRelationValue } from '@/object-record/record-field/ui/types/FieldMetadata'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; @@ -28,7 +28,7 @@ export const useMorphRelationField = < const fieldName = fieldDefinition.metadata.fieldName; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ) as [FieldRelationValue, (value: FieldRelationValue) => void]; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useMultiSelectField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useMultiSelectField.ts index 8223973a2e..0f61c72bac 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useMultiSelectField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useMultiSelectField.ts @@ -7,7 +7,7 @@ import { type FieldMultiSelectValue } from '@/object-record/record-field/ui/type import { assertFieldMetadata } from '@/object-record/record-field/ui/types/guards/assertFieldMetadata'; import { isFieldMultiSelect } from '@/object-record/record-field/ui/types/guards/isFieldMultiSelect'; import { isFieldMultiSelectValue } from '@/object-record/record-field/ui/types/guards/isFieldMultiSelectValue'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { useAtomFamilySelectorState } from '@/ui/utilities/state/jotai/hooks/useAtomFamilySelectorState'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; import { FieldMetadataType } from '~/generated-metadata/graphql'; @@ -24,7 +24,7 @@ export const useMultiSelectField = () => { const { fieldName } = fieldDefinition.metadata; const [fieldValues, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useNumberField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useNumberField.ts index 62520dc1f9..fc58975ae5 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useNumberField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useNumberField.ts @@ -2,7 +2,7 @@ import { useContext } from 'react'; import { useRecordFieldInput } from '@/object-record/record-field/ui/hooks/useRecordFieldInput'; import { type FieldNumberValue } from '@/object-record/record-field/ui/types/FieldMetadata'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { recordFieldInputDraftValueComponentState } from '@/object-record/record-field/ui/states/recordFieldInputDraftValueComponentState'; @@ -20,7 +20,7 @@ export const useNumberField = () => { const fieldName = fieldDefinition.metadata.fieldName; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/usePhonesField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/usePhonesField.ts index 8e73ed65a9..f60880535a 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/usePhonesField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/usePhonesField.ts @@ -3,7 +3,7 @@ import { useContext } from 'react'; import { useRecordFieldInput } from '@/object-record/record-field/ui/hooks/useRecordFieldInput'; import { type FieldPhonesValue } from '@/object-record/record-field/ui/types/FieldMetadata'; import { isFieldPhones } from '@/object-record/record-field/ui/types/guards/isFieldPhones'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { recordFieldInputDraftValueComponentState } from '@/object-record/record-field/ui/states/recordFieldInputDraftValueComponentState'; @@ -20,7 +20,7 @@ export const usePhonesField = () => { const fieldName = fieldDefinition.metadata.fieldName; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useRatingField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useRatingField.ts index 6b64dd67d9..5c558986ab 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useRatingField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useRatingField.ts @@ -1,6 +1,6 @@ import { useContext } from 'react'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { type FieldRatingValue } from 'twenty-shared/types'; @@ -17,7 +17,7 @@ export const useRatingField = () => { const fieldName = fieldDefinition.metadata.fieldName; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useRelationField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useRelationField.ts index a97059e0c6..9766717f25 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useRelationField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useRelationField.ts @@ -2,7 +2,7 @@ import { useContext } from 'react'; import { useGetButtonIcon } from '@/object-record/record-field/ui/hooks/useGetButtonIcon'; import { type FieldRelationValue } from '@/object-record/record-field/ui/types/FieldMetadata'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext'; @@ -26,7 +26,7 @@ export const useRelationField = () => { const fieldName = fieldDefinition.metadata.fieldName; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ) as [FieldRelationValue, (value: FieldRelationValue) => void]; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useSelectField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useSelectField.ts index 019ecab654..40047e93ee 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useSelectField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useSelectField.ts @@ -1,7 +1,7 @@ import { useContext } from 'react'; import { useRecordFieldInput } from '@/object-record/record-field/ui/hooks/useRecordFieldInput'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { recordFieldInputDraftValueComponentState } from '@/object-record/record-field/ui/states/recordFieldInputDraftValueComponentState'; @@ -21,7 +21,7 @@ export const useSelectField = () => { const { fieldName } = fieldDefinition.metadata; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useTextField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useTextField.ts index 22c7e668b5..de086f977b 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useTextField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useTextField.ts @@ -7,7 +7,7 @@ import { type FieldTextValue } from '@/object-record/record-field/ui/types/Field import { assertFieldMetadata } from '@/object-record/record-field/ui/types/guards/assertFieldMetadata'; import { isFieldText } from '@/object-record/record-field/ui/types/guards/isFieldText'; import { isFieldTextValue } from '@/object-record/record-field/ui/types/guards/isFieldTextValue'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { useAtomFamilySelectorState } from '@/ui/utilities/state/jotai/hooks/useAtomFamilySelectorState'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; import { FieldMetadataType } from '~/generated-metadata/graphql'; @@ -20,7 +20,7 @@ export const useTextField = () => { const fieldName = fieldDefinition.metadata.fieldName; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ); const fieldTextValue = isFieldTextValue(fieldValue) ? fieldValue : ''; diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useUuidField.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useUuidField.ts index 397dd78644..466a194f97 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useUuidField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useUuidField.ts @@ -5,7 +5,7 @@ import { type FieldUUidValue } from '@/object-record/record-field/ui/types/Field import { assertFieldMetadata } from '@/object-record/record-field/ui/types/guards/assertFieldMetadata'; import { isFieldTextValue } from '@/object-record/record-field/ui/types/guards/isFieldTextValue'; import { isFieldUuid } from '@/object-record/record-field/ui/types/guards/isFieldUuid'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { useAtomFamilySelectorState } from '@/ui/utilities/state/jotai/hooks/useAtomFamilySelectorState'; import { FieldMetadataType } from '~/generated-metadata/graphql'; @@ -17,7 +17,7 @@ export const useUuidField = () => { const fieldName = fieldDefinition.metadata.fieldName; const [fieldValue, setFieldValue] = useAtomFamilySelectorState( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId, fieldName }, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/FilesFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/FilesFieldInput.tsx index 317887033d..271e7037cc 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/FilesFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/FilesFieldInput.tsx @@ -1,4 +1,4 @@ -import { isAttachmentPreviewEnabledStateV2 } from '@/client-config/states/isAttachmentPreviewEnabledStateV2'; +import { isAttachmentPreviewEnabledState } from '@/client-config/states/isAttachmentPreviewEnabledState'; import { useFileUpload } from '@/file-upload/hooks/useFileUpload'; import { FieldInputEventContext } from '@/object-record/record-field/ui/contexts/FieldInputEventContext'; import { useFilesField } from '@/object-record/record-field/ui/meta-types/hooks/useFilesField'; @@ -11,7 +11,7 @@ import { recordFieldInputIsFieldInErrorComponentState } from '@/object-record/re import { type FieldFilesValue } from '@/object-record/record-field/ui/types/FieldMetadata'; import { filesSchema } from '@/object-record/record-field/ui/types/guards/isFieldFilesValue'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; -import { filePreviewStateV2 } from '@/ui/field/display/states/filePreviewStateV2'; +import { filePreviewState } from '@/ui/field/display/states/filePreviewState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { useSetAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useSetAtomComponentState'; @@ -28,9 +28,9 @@ export const FilesFieldInput = () => { const { t } = useLingui(); const [isUploading, setIsUploading] = useState(false); const { enqueueErrorSnackBar } = useSnackBar(); - const setFilePreview = useSetAtomState(filePreviewStateV2); + const setFilePreview = useSetAtomState(filePreviewState); const isAttachmentPreviewEnabled = useAtomStateValue( - isAttachmentPreviewEnabledStateV2, + isAttachmentPreviewEnabledState, ); const { onEscape, onClickOutside, onEnter } = useContext( diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/__stories__/RelationOneToManyFieldInput.stories.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/__stories__/RelationOneToManyFieldInput.stories.tsx index a893085e81..14a8307809 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/__stories__/RelationOneToManyFieldInput.stories.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/components/__stories__/RelationOneToManyFieldInput.stories.tsx @@ -20,7 +20,7 @@ import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldCont import { useOpenFieldInputEditMode } from '@/object-record/record-field/ui/hooks/useOpenFieldInputEditMode'; import { RelationOneToManyFieldInput } from '@/object-record/record-field/ui/meta-types/input/components/RelationOneToManyFieldInput'; import { RecordFieldComponentInstanceContext } from '@/object-record/record-field/ui/states/contexts/RecordFieldComponentInstanceContext'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType'; import { FieldMetadataType } from 'twenty-shared/types'; import { RelationType } from '~/generated-metadata/graphql'; @@ -56,7 +56,7 @@ const RelationOneToManyFieldInputWithContext = () => { ); const setRecordStoreFieldValue = useSetAtom( - recordStoreFamilySelectorV2.selectorFamily({ + recordStoreFamilySelector.selectorFamily({ fieldName: 'people', recordId: 'recordId', }), diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/__tests__/useMorphPersistManyToOne.test.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/__tests__/useMorphPersistManyToOne.test.tsx index 2ea2400053..ad6bd061b8 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/__tests__/useMorphPersistManyToOne.test.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/__tests__/useMorphPersistManyToOne.test.tsx @@ -1,6 +1,4 @@ import { act, renderHook, waitFor } from '@testing-library/react'; -import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; import { useMorphPersistManyToOne } from '@/object-record/record-field/ui/meta-types/input/hooks/useMorphPersistManyToOne'; import { type FieldDefinition } from '@/object-record/record-field/ui/types/FieldDefinition'; @@ -90,24 +88,16 @@ const mockMorphFieldDefinition = { }, } as FieldDefinition; -const Wrapper = ({ children }: { children: ReactNode }) => ( - {children} -); - describe('useMorphPersistManyToOne', () => { beforeEach(() => { mockUpdateOneRecord.mockClear(); }); it('should set all morph relation fields to null when detaching (valueToPersist is null)', async () => { - const { result } = renderHook( - () => - useMorphPersistManyToOne({ - objectMetadataNameSingular: 'task', - }), - { - wrapper: Wrapper, - }, + const { result } = renderHook(() => + useMorphPersistManyToOne({ + objectMetadataNameSingular: 'task', + }), ); await act(async () => { @@ -132,14 +122,10 @@ describe('useMorphPersistManyToOne', () => { }); it('should set all morph relation fields to null when detaching (valueToPersist is undefined)', async () => { - const { result } = renderHook( - () => - useMorphPersistManyToOne({ - objectMetadataNameSingular: 'task', - }), - { - wrapper: Wrapper, - }, + const { result } = renderHook(() => + useMorphPersistManyToOne({ + objectMetadataNameSingular: 'task', + }), ); await act(async () => { @@ -164,14 +150,10 @@ describe('useMorphPersistManyToOne', () => { }); it('should update the specific relation field when selecting a record', async () => { - const { result } = renderHook( - () => - useMorphPersistManyToOne({ - objectMetadataNameSingular: 'task', - }), - { - wrapper: Wrapper, - }, + const { result } = renderHook(() => + useMorphPersistManyToOne({ + objectMetadataNameSingular: 'task', + }), ); await act(async () => { diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useMorphPersistManyToOne.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useMorphPersistManyToOne.ts index c744c4450a..ba5edb3f5d 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useMorphPersistManyToOne.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useMorphPersistManyToOne.ts @@ -3,7 +3,7 @@ import { useCallback } from 'react'; import { type FieldDefinition } from '@/object-record/record-field/ui/types/FieldDefinition'; import { type FieldMetadata } from '@/object-record/record-field/ui/types/FieldMetadata'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; @@ -81,7 +81,7 @@ export const useMorphPersistManyToOne = ({ }); const currentValue: unknown = store.get( - recordStoreFamilySelectorV2.selectorFamily({ + recordStoreFamilySelector.selectorFamily({ recordId, fieldName: computedFieldName, }), diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenFilesFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenFilesFieldInput.tsx index ceac0ab343..bddc7a4266 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenFilesFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenFilesFieldInput.tsx @@ -1,9 +1,9 @@ import { useFileUpload } from '@/file-upload/hooks/useFileUpload'; import { useUploadFilesFieldFile } from '@/object-record/record-field/ui/meta-types/hooks/useUploadFilesFieldFile'; import { uploadMultipleFiles } from '@/object-record/record-field/ui/meta-types/utils/uploadMultipleFiles'; -import { filesFieldUploadStateV2 } from '@/object-record/record-field/ui/states/filesFieldUploadStateV2'; +import { filesFieldUploadState } from '@/object-record/record-field/ui/states/filesFieldUploadState'; import { type FieldFilesValue } from '@/object-record/record-field/ui/types/FieldMetadata'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { RECORD_TABLE_CELL_INPUT_ID_PREFIX } from '@/object-record/record-table/constants/RecordTableCellInputIdPrefix'; import { RecordTableComponentInstanceContext } from '@/object-record/record-table/states/context/RecordTableComponentInstanceContext'; import { recordTableCellEditModePositionComponentState } from '@/object-record/record-table/states/recordTableCellEditModePositionComponentState'; @@ -60,7 +60,7 @@ export const useOpenFilesFieldInput = () => { }; }) => { const fieldValue = store.get( - recordStoreFamilySelectorV2.selectorFamily({ + recordStoreFamilySelector.selectorFamily({ recordId, fieldName, }), @@ -95,7 +95,7 @@ export const useOpenFilesFieldInput = () => { const currentFileCount = isDefined(fieldValue) ? fieldValue.length : 0; store.set( - filesFieldUploadStateV2.atomFamily({ recordId, fieldName }), + filesFieldUploadState.atomFamily({ recordId, fieldName }), 'UPLOAD_WINDOW_OPEN', ); @@ -108,7 +108,7 @@ export const useOpenFilesFieldInput = () => { }); store.set( - filesFieldUploadStateV2.atomFamily({ recordId, fieldName }), + filesFieldUploadState.atomFamily({ recordId, fieldName }), null, ); @@ -130,7 +130,7 @@ export const useOpenFilesFieldInput = () => { } store.set( - filesFieldUploadStateV2.atomFamily({ recordId, fieldName }), + filesFieldUploadState.atomFamily({ recordId, fieldName }), 'UPLOADING_FILE', ); @@ -148,7 +148,7 @@ export const useOpenFilesFieldInput = () => { } } finally { store.set( - filesFieldUploadStateV2.atomFamily({ recordId, fieldName }), + filesFieldUploadState.atomFamily({ recordId, fieldName }), null, ); @@ -170,7 +170,7 @@ export const useOpenFilesFieldInput = () => { }, onCancel: () => { store.set( - filesFieldUploadStateV2.atomFamily({ recordId, fieldName }), + filesFieldUploadState.atomFamily({ recordId, fieldName }), null, ); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenMorphRelationManyToOneFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenMorphRelationManyToOneFieldInput.tsx index 0fe7e69338..cc0d270452 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenMorphRelationManyToOneFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenMorphRelationManyToOneFieldInput.tsx @@ -6,7 +6,7 @@ import { } from '@/object-record/record-field/ui/types/FieldMetadata'; import { useSingleRecordPickerOpen } from '@/object-record/record-picker/single-record-picker/hooks/useSingleRecordPickerOpen'; import { singleRecordPickerSelectedIdComponentState } from '@/object-record/record-picker/single-record-picker/states/singleRecordPickerSelectedIdComponentState'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { getRecordFieldInputInstanceId } from '@/object-record/utils/getRecordFieldInputId'; import { usePushFocusItemToFocusStack } from '@/ui/utilities/focus/hooks/usePushFocusItemToFocusStack'; import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType'; @@ -45,7 +45,7 @@ export const useOpenMorphRelationManyToOneFieldInput = () => { const fieldValue = potentielFieldNames .map((fieldName) => { return store.get( - recordStoreFamilySelectorV2.selectorFamily({ + recordStoreFamilySelector.selectorFamily({ recordId, fieldName, }), diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenMorphRelationOneToManyFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenMorphRelationOneToManyFieldInput.tsx index b53ddfda99..950d5f9b62 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenMorphRelationOneToManyFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenMorphRelationOneToManyFieldInput.tsx @@ -11,7 +11,7 @@ import { multipleRecordPickerPickableMorphItemsComponentState } from '@/object-r import { multipleRecordPickerSearchableObjectMetadataItemsComponentState } from '@/object-record/record-picker/multiple-record-picker/states/multipleRecordPickerSearchableObjectMetadataItemsComponentState'; import { type RecordPickerPickableMorphItem } from '@/object-record/record-picker/types/RecordPickerPickableMorphItem'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; -import { recordStoreMorphOneToManyValueWithObjectNameFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreMorphOneToManyValueWithObjectNameFamilySelectorV2'; +import { recordStoreMorphOneToManyValueWithObjectNameFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreMorphOneToManyValueWithObjectNameFamilySelector'; import { getRecordFieldInputInstanceId } from '@/object-record/utils/getRecordFieldInputId'; import { usePushFocusItemToFocusStack } from '@/ui/utilities/focus/hooks/usePushFocusItemToFocusStack'; import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType'; @@ -47,7 +47,7 @@ export const useOpenMorphRelationOneToManyFieldInput = () => { ); const morphValuesWithObjectNameSingularFieldValue = store.get( - recordStoreMorphOneToManyValueWithObjectNameFamilySelectorV2.selectorFamily( + recordStoreMorphOneToManyValueWithObjectNameFamilySelector.selectorFamily( { recordId, morphRelations: fieldDefinition.metadata.morphRelations, diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenRelationFromManyFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenRelationFromManyFieldInput.tsx index 1861b95d1a..96f6f0aaa2 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenRelationFromManyFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenRelationFromManyFieldInput.tsx @@ -11,7 +11,7 @@ import { type RecordPickerPickableMorphItem } from '@/object-record/record-picke import { useStore } from 'jotai'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { getRecordFieldInputInstanceId } from '@/object-record/utils/getRecordFieldInputId'; import { usePushFocusItemToFocusStack } from '@/ui/utilities/focus/hooks/usePushFocusItemToFocusStack'; import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType'; @@ -44,7 +44,7 @@ export const useOpenRelationFromManyFieldInput = () => { const fieldValue = (store.get( - recordStoreFamilySelectorV2.selectorFamily({ recordId, fieldName }), + recordStoreFamilySelector.selectorFamily({ recordId, fieldName }), ) as FieldRelationValue) ?? []; const objectMetadataItems = store.get(objectMetadataItemsState.atom); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenRelationToOneFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenRelationToOneFieldInput.tsx index 0cea6165aa..f2fa1d8077 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenRelationToOneFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenRelationToOneFieldInput.tsx @@ -4,7 +4,7 @@ import { } from '@/object-record/record-field/ui/types/FieldMetadata'; import { useSingleRecordPickerOpen } from '@/object-record/record-picker/single-record-picker/hooks/useSingleRecordPickerOpen'; import { singleRecordPickerSelectedIdComponentState } from '@/object-record/record-picker/single-record-picker/states/singleRecordPickerSelectedIdComponentState'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { getRecordFieldInputInstanceId } from '@/object-record/utils/getRecordFieldInputId'; import { usePushFocusItemToFocusStack } from '@/ui/utilities/focus/hooks/usePushFocusItemToFocusStack'; import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType'; @@ -33,7 +33,7 @@ export const useOpenRelationToOneFieldInput = () => { prefix, }); const fieldValue = store.get( - recordStoreFamilySelectorV2.selectorFamily({ recordId, fieldName }), + recordStoreFamilySelector.selectorFamily({ recordId, fieldName }), ) as FieldRelationValue; if (isDefined(fieldValue)) { diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/states/filesFieldUploadStateV2.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/states/filesFieldUploadState.ts similarity index 77% rename from packages/twenty-front/src/modules/object-record/record-field/ui/states/filesFieldUploadStateV2.ts rename to packages/twenty-front/src/modules/object-record/record-field/ui/states/filesFieldUploadState.ts index bd96456e2d..cadfe1ea76 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/states/filesFieldUploadStateV2.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/states/filesFieldUploadState.ts @@ -7,10 +7,10 @@ type FilesFieldUploadStateKey = { type FilesFieldUploadState = 'UPLOAD_WINDOW_OPEN' | 'UPLOADING_FILE' | null; -export const filesFieldUploadStateV2 = createAtomFamilyState< +export const filesFieldUploadState = createAtomFamilyState< FilesFieldUploadState, FilesFieldUploadStateKey >({ - key: 'filesFieldUploadStateV2', + key: 'filesFieldUploadState', defaultValue: null, }); diff --git a/packages/twenty-front/src/modules/object-record/record-group/states/recordGroupPendingDragEndReorderStateV2.ts b/packages/twenty-front/src/modules/object-record/record-group/states/recordGroupPendingDragEndReorderState.ts similarity index 68% rename from packages/twenty-front/src/modules/object-record/record-group/states/recordGroupPendingDragEndReorderStateV2.ts rename to packages/twenty-front/src/modules/object-record/record-group/states/recordGroupPendingDragEndReorderState.ts index ddd028ad2f..10d3a4b13c 100644 --- a/packages/twenty-front/src/modules/object-record/record-group/states/recordGroupPendingDragEndReorderStateV2.ts +++ b/packages/twenty-front/src/modules/object-record/record-group/states/recordGroupPendingDragEndReorderState.ts @@ -2,8 +2,8 @@ import { type OnDragEndResponder } from '@hello-pangea/dnd'; import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const recordGroupPendingDragEndReorderStateV2 = +export const recordGroupPendingDragEndReorderState = createAtomState | null>({ - key: 'recordGroupPendingDragEndReorderStateV2', + key: 'recordGroupPendingDragEndReorderState', defaultValue: null, }); diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleToggleTrashColumnFilter.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleToggleTrashColumnFilter.ts index a15d4bb06b..b5c68197d0 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleToggleTrashColumnFilter.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleToggleTrashColumnFilter.ts @@ -29,7 +29,7 @@ export const useHandleToggleTrashColumnFilter = ({ const { columnDefinitions } = useColumnDefinitionsFromObjectMetadata(objectMetadataItem); - const isSoftDeleteFilterActiveComponentRecoilState = + const isSoftDeleteFilterActiveComponentAtom = useAtomComponentStateCallbackState( isSoftDeleteFilterActiveComponentState, viewBarId, @@ -72,9 +72,9 @@ export const useHandleToggleTrashColumnFilter = ({ const toggleSoftDeleteFilterState = useCallback( (currentState: boolean) => { - store.set(isSoftDeleteFilterActiveComponentRecoilState, currentState); + store.set(isSoftDeleteFilterActiveComponentAtom, currentState); }, - [isSoftDeleteFilterActiveComponentRecoilState, store], + [isSoftDeleteFilterActiveComponentAtom, store], ); return { handleToggleTrashColumnFilter, diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexStates.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexStates.ts index 169b394432..897b42b7f6 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexStates.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexStates.ts @@ -17,7 +17,6 @@ import { recordIndexFieldDefinitionsState } from '@/object-record/record-index/s import { recordIndexGroupAggregateFieldMetadataItemComponentState } from '@/object-record/record-index/states/recordIndexGroupAggregateFieldMetadataItemComponentState'; import { recordIndexGroupAggregateOperationComponentState } from '@/object-record/record-index/states/recordIndexGroupAggregateOperationComponentState'; import { recordIndexOpenRecordInState } from '@/object-record/record-index/states/recordIndexOpenRecordInState'; -import { recordIndexOpenRecordInStateV2 } from '@/object-record/record-index/states/recordIndexOpenRecordInStateV2'; import { recordIndexShouldHideEmptyRecordGroupsComponentState } from '@/object-record/record-index/states/recordIndexShouldHideEmptyRecordGroupsComponentState'; import { recordIndexViewTypeState } from '@/object-record/record-index/states/recordIndexViewTypeState'; import { viewFieldAggregateOperationState } from '@/object-record/record-table/record-table-footer/states/viewFieldAggregateOperationState'; @@ -251,7 +250,6 @@ export const useLoadRecordIndexStates = () => { batchSet(recordIndexViewTypeState.atom, view.type); batchSet(recordIndexOpenRecordInState.atom, view.openRecordIn); - batchSet(recordIndexOpenRecordInStateV2.atom, view.openRecordIn); batchSet( recordIndexCalendarFieldMetadataIdState.atom, diff --git a/packages/twenty-front/src/modules/object-record/record-index/states/recordIndexOpenRecordInStateV2.ts b/packages/twenty-front/src/modules/object-record/record-index/states/recordIndexOpenRecordInStateV2.ts deleted file mode 100644 index e227b3abab..0000000000 --- a/packages/twenty-front/src/modules/object-record/record-index/states/recordIndexOpenRecordInStateV2.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -import { ViewOpenRecordInType } from '@/views/types/ViewOpenRecordInType'; - -export const recordIndexOpenRecordInStateV2 = - createAtomState({ - key: 'recordIndexOpenRecordInStateV2', - defaultValue: ViewOpenRecordInType.SIDE_PANEL, - }); diff --git a/packages/twenty-front/src/modules/object-record/record-merge/hooks/useMergeRecordsSelectedRecords.ts b/packages/twenty-front/src/modules/object-record/record-merge/hooks/useMergeRecordsSelectedRecords.ts index 7b6a24db61..28be68cce1 100644 --- a/packages/twenty-front/src/modules/object-record/record-merge/hooks/useMergeRecordsSelectedRecords.ts +++ b/packages/twenty-front/src/modules/object-record/record-merge/hooks/useMergeRecordsSelectedRecords.ts @@ -1,6 +1,6 @@ import { commandMenuNavigationMorphItemsByPageState } from '@/command-menu/states/commandMenuNavigationMorphItemsByPageState'; import { CommandMenuPageComponentInstanceContext } from '@/command-menu/states/contexts/CommandMenuPageComponentInstanceContext'; -import { recordStoreRecordsSelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreRecordsSelectorV2'; +import { recordStoreRecordsSelector } from '@/object-record/record-store/states/selectors/recordStoreRecordsSelector'; import { useComponentInstanceStateContext } from '@/ui/utilities/state/component-state/hooks/useComponentInstanceStateContext'; import { useAtomFamilySelectorValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilySelectorValue'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; @@ -20,7 +20,7 @@ export const useMergeRecordsSelectedRecords = () => { ?.map((morphItem) => morphItem.recordId) ?? []; const selectedRecords = useAtomFamilySelectorValue( - recordStoreRecordsSelectorV2, + recordStoreRecordsSelector, { recordIds: selectedRecordIds, }, diff --git a/packages/twenty-front/src/modules/object-record/record-picker/single-record-picker/hooks/__tests__/useSingleRecordPickerRecords.test.tsx b/packages/twenty-front/src/modules/object-record/record-picker/single-record-picker/hooks/__tests__/useSingleRecordPickerRecords.test.tsx index 6d4570ce8d..b2e27683d2 100644 --- a/packages/twenty-front/src/modules/object-record/record-picker/single-record-picker/hooks/__tests__/useSingleRecordPickerRecords.test.tsx +++ b/packages/twenty-front/src/modules/object-record/record-picker/single-record-picker/hooks/__tests__/useSingleRecordPickerRecords.test.tsx @@ -1,6 +1,5 @@ import { act, renderHook } from '@testing-library/react'; import { type ChangeEvent } from 'react'; -import { RecoilRoot } from 'recoil'; import { useSingleRecordPickerSearch } from '@/object-record/record-picker/single-record-picker/hooks/useSingleRecordPickerSearch'; import { SingleRecordPickerComponentInstanceContext } from '@/object-record/record-picker/single-record-picker/states/contexts/SingleRecordPickerComponentInstanceContext'; @@ -10,7 +9,7 @@ import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/use const instanceId = 'instanceId'; const Wrapper = ({ children }: { children: React.ReactNode }) => ( - {children} + {children} ); diff --git a/packages/twenty-front/src/modules/object-record/record-show/components/PageLayoutRecordPageRenderer.tsx b/packages/twenty-front/src/modules/object-record/record-show/components/PageLayoutRecordPageRenderer.tsx index a746189d98..d76a10cf68 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/components/PageLayoutRecordPageRenderer.tsx +++ b/packages/twenty-front/src/modules/object-record/record-show/components/PageLayoutRecordPageRenderer.tsx @@ -4,7 +4,7 @@ import { InformationBannerDeletedRecord } from '@/information-banner/components/ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { RecordShowContainerContextStoreTargetedRecordsEffect } from '@/object-record/record-show/components/RecordShowContainerContextStoreTargetedRecordsEffect'; import { RecordShowEffect } from '@/object-record/record-show/components/RecordShowEffect'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { PageLayoutRenderer } from '@/page-layout/components/PageLayoutRenderer'; import { usePageLayoutIdForRecord } from '@/page-layout/hooks/usePageLayoutIdForRecord'; import { LayoutRenderingProvider } from '@/ui/layout/contexts/LayoutRenderingContext'; @@ -44,7 +44,7 @@ export const PageLayoutRecordPageRenderer = ({ isInRightDrawer: boolean; }) => { const recordDeletedAt = useAtomFamilySelectorValue( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId: targetRecordIdentifier.id, fieldName: 'deletedAt', diff --git a/packages/twenty-front/src/modules/object-record/record-show/components/RecordShowEffect.tsx b/packages/twenty-front/src/modules/object-record/record-show/components/RecordShowEffect.tsx index 24a55fa1df..d20289fe60 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/components/RecordShowEffect.tsx +++ b/packages/twenty-front/src/modules/object-record/record-show/components/RecordShowEffect.tsx @@ -3,7 +3,6 @@ import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadat import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { buildFindOneRecordForShowPageOperationSignature } from '@/object-record/record-show/graphql/operations/factories/findOneRecordForShowPageOperationSignatureFactory'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; -import { recordStoreFamilyStateV2 } from '@/object-record/record-store/states/recordStoreFamilyStateV2'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { useStore } from 'jotai'; import { useCallback, useEffect } from 'react'; @@ -44,7 +43,6 @@ export const RecordShowEffect = ({ if (JSON.stringify(previousRecordValue) !== JSON.stringify(newRecord)) { store.set(recordStoreFamilyState.atomFamily(recordId), newRecord); - store.set(recordStoreFamilyStateV2.atomFamily(recordId), newRecord); } }, [recordId, store], diff --git a/packages/twenty-front/src/modules/object-record/record-show/components/SummaryCard.tsx b/packages/twenty-front/src/modules/object-record/record-show/components/SummaryCard.tsx index 3c2a61ff6a..ca16f3fbcc 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/components/SummaryCard.tsx +++ b/packages/twenty-front/src/modules/object-record/record-show/components/SummaryCard.tsx @@ -7,8 +7,8 @@ import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldCont import { usePersonAvatarUpload } from '@/object-record/record-show/hooks/usePersonAvatarUpload'; import { useRecordShowContainerActions } from '@/object-record/record-show/hooks/useRecordShowContainerActions'; import { useRecordShowContainerData } from '@/object-record/record-show/hooks/useRecordShowContainerData'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; -import { recordStoreIdentifierFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreIdentifierFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; +import { recordStoreIdentifierFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreIdentifierFamilySelector'; import { RecordTitleCell } from '@/object-record/record-title-cell/components/RecordTitleCell'; import { RecordTitleCellContainerType } from '@/object-record/record-title-cell/types/RecordTitleCellContainerType'; import { ShowPageSummaryCard } from '@/ui/layout/show-page/components/ShowPageSummaryCard'; @@ -39,7 +39,7 @@ export const SummaryCard = ({ }); const recordCreatedAt = useAtomFamilySelectorValue( - recordStoreFamilySelectorV2, + recordStoreFamilySelector, { recordId: objectRecordId, fieldName: 'createdAt', @@ -61,7 +61,7 @@ export const SummaryCard = ({ const isMobile = useIsMobile() || isInRightDrawer; const recordIdentifier = useAtomFamilySelectorValue( - recordStoreIdentifierFamilySelectorV2, + recordStoreIdentifierFamilySelector, { recordId: objectRecordId, allowRequestsToTwentyIcons, diff --git a/packages/twenty-front/src/modules/object-record/record-store/hooks/useRecordFieldValue.ts b/packages/twenty-front/src/modules/object-record/record-store/hooks/useRecordFieldValue.ts index 497200827a..4b929252e5 100644 --- a/packages/twenty-front/src/modules/object-record/record-store/hooks/useRecordFieldValue.ts +++ b/packages/twenty-front/src/modules/object-record/record-store/hooks/useRecordFieldValue.ts @@ -2,14 +2,14 @@ import { useAtomValue } from 'jotai'; import { type FieldDefinition } from '@/object-record/record-field/ui/types/FieldDefinition'; import { type FieldMetadata } from '@/object-record/record-field/ui/types/FieldMetadata'; -import { recordStoreFieldValueSelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFieldValueSelectorV2'; +import { recordStoreFieldValueSelector } from '@/object-record/record-store/states/selectors/recordStoreFieldValueSelector'; export const useRecordFieldValue = ( recordId: string, fieldName: string, fieldDefinition: Pick, 'type' | 'metadata'>, ) => { - const fieldValue = recordStoreFieldValueSelectorV2({ + const fieldValue = recordStoreFieldValueSelector({ recordId, fieldName, fieldDefinition: { diff --git a/packages/twenty-front/src/modules/object-record/record-store/hooks/useUpsertRecordsInStore.ts b/packages/twenty-front/src/modules/object-record/record-store/hooks/useUpsertRecordsInStore.ts index b10b4ffd94..da4ac1b0bd 100644 --- a/packages/twenty-front/src/modules/object-record/record-store/hooks/useUpsertRecordsInStore.ts +++ b/packages/twenty-front/src/modules/object-record/record-store/hooks/useUpsertRecordsInStore.ts @@ -1,7 +1,6 @@ import { filterRecordOnGqlFields } from '@/object-record/cache/utils/filterRecordOnGqlFields'; import { type RecordGqlFields } from '@/object-record/graphql/record-gql-fields/types/RecordGqlFields'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; -import { recordStoreFamilyStateV2 } from '@/object-record/record-store/states/recordStoreFamilyStateV2'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { useCallback } from 'react'; import { useStore } from 'jotai'; @@ -40,10 +39,6 @@ export const useUpsertRecordsInStore = () => { recordStoreFamilyState.atomFamily(partialRecord.id), newRecord, ); - store.set( - recordStoreFamilyStateV2.atomFamily(partialRecord.id), - newRecord, - ); continue; } @@ -63,10 +58,6 @@ export const useUpsertRecordsInStore = () => { recordStoreFamilyState.atomFamily(partialRecord.id), updatedRecord, ); - store.set( - recordStoreFamilyStateV2.atomFamily(partialRecord.id), - updatedRecord, - ); } } }, diff --git a/packages/twenty-front/src/modules/object-record/record-store/states/recordStoreFamilyStateV2.ts b/packages/twenty-front/src/modules/object-record/record-store/states/recordStoreFamilyStateV2.ts deleted file mode 100644 index 59719a23b7..0000000000 --- a/packages/twenty-front/src/modules/object-record/record-store/states/recordStoreFamilyStateV2.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; -import { createAtomFamilyState } from '@/ui/utilities/state/jotai/utils/createAtomFamilyState'; - -export const recordStoreFamilyStateV2 = createAtomFamilyState< - ObjectRecord | null | undefined, - string ->({ - key: 'recordStoreFamilyStateV2', - defaultValue: null, -}); diff --git a/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreFamilySelectorV2.ts b/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreFamilySelector.ts similarity index 86% rename from packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreFamilySelectorV2.ts rename to packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreFamilySelector.ts index ac980137cc..702a342d84 100644 --- a/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreFamilySelectorV2.ts +++ b/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreFamilySelector.ts @@ -2,11 +2,11 @@ import { recordStoreFamilyState } from '@/object-record/record-store/states/reco import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { createAtomWritableFamilySelector } from '@/ui/utilities/state/jotai/utils/createAtomWritableFamilySelector'; -export const recordStoreFamilySelectorV2 = createAtomWritableFamilySelector< +export const recordStoreFamilySelector = createAtomWritableFamilySelector< unknown, { recordId: string; fieldName: string } >({ - key: 'recordStoreFamilySelectorV2', + key: 'recordStoreFamilySelector', get: ({ recordId, fieldName }) => ({ get }) => diff --git a/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreFieldValueSelectorV2.ts b/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreFieldValueSelector.ts similarity index 92% rename from packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreFieldValueSelectorV2.ts rename to packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreFieldValueSelector.ts index b9f8455620..daf9912699 100644 --- a/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreFieldValueSelectorV2.ts +++ b/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreFieldValueSelector.ts @@ -3,7 +3,7 @@ import { atom, type Atom } from 'jotai'; import { type FieldDefinition } from '@/object-record/record-field/ui/types/FieldDefinition'; import { type FieldMetadata } from '@/object-record/record-field/ui/types/FieldMetadata'; import { isFieldMorphRelation } from '@/object-record/record-field/ui/types/guards/isFieldMorphRelation'; -import { recordStoreFamilyStateV2 } from '@/object-record/record-store/states/recordStoreFamilyStateV2'; +import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { createAtomFamilySelector } from '@/ui/utilities/state/jotai/utils/createAtomFamilySelector'; import { RelationType, type ObjectRecord } from 'twenty-shared/types'; import { computeMorphRelationFieldName, isDefined } from 'twenty-shared/utils'; @@ -16,7 +16,7 @@ const simpleFieldValueSelector = createAtomFamilySelector< get: ({ recordId, fieldName }) => ({ get }) => - get(recordStoreFamilyStateV2, recordId)?.[fieldName], + get(recordStoreFamilyState, recordId)?.[fieldName], }); const morphAtomCache = new Map>(); @@ -48,7 +48,7 @@ const getMorphRelationFieldValueAtom = ( ).morphRelations ?? []; const derivedAtom = atom((get) => { - const record = get(recordStoreFamilyStateV2.atomFamily(recordId)); + const record = get(recordStoreFamilyState.atomFamily(recordId)); const morphValuesWithObjectName = morphRelations.map((morphRelation) => { const computedFieldName = computeMorphRelationFieldName({ @@ -100,7 +100,7 @@ const getMorphRelationFieldValueAtom = ( return derivedAtom; }; -export const recordStoreFieldValueSelectorV2 = ({ +export const recordStoreFieldValueSelector = ({ recordId, fieldName, fieldDefinition, diff --git a/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreIdentifierFamilySelectorV2.ts b/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreIdentifierFamilySelector.ts similarity index 92% rename from packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreIdentifierFamilySelectorV2.ts rename to packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreIdentifierFamilySelector.ts index 5487d17854..d98a99e6d6 100644 --- a/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreIdentifierFamilySelectorV2.ts +++ b/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreIdentifierFamilySelector.ts @@ -11,11 +11,11 @@ type RecordStoreIdentifierFamilyKey = { isFilesFieldMigrated?: boolean; }; -export const recordStoreIdentifierFamilySelectorV2 = createAtomFamilySelector< +export const recordStoreIdentifierFamilySelector = createAtomFamilySelector< ObjectRecordIdentifier | null, RecordStoreIdentifierFamilyKey >({ - key: 'recordStoreIdentifierFamilySelectorV2', + key: 'recordStoreIdentifierFamilySelector', get: ({ recordId, diff --git a/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreMorphOneToManyValueWithObjectNameFamilySelectorV2.ts b/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreMorphOneToManyValueWithObjectNameFamilySelector.ts similarity index 98% rename from packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreMorphOneToManyValueWithObjectNameFamilySelectorV2.ts rename to packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreMorphOneToManyValueWithObjectNameFamilySelector.ts index 65c4e435d5..ff05997a76 100644 --- a/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreMorphOneToManyValueWithObjectNameFamilySelectorV2.ts +++ b/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreMorphOneToManyValueWithObjectNameFamilySelector.ts @@ -15,10 +15,10 @@ type MorphValueWithObjectName = { value: ObjectRecord[] | ObjectRecord; }; -export const recordStoreMorphOneToManyValueWithObjectNameFamilySelectorV2 = +export const recordStoreMorphOneToManyValueWithObjectNameFamilySelector = createAtomFamilySelector( { - key: 'recordStoreMorphOneToManyValueWithObjectNameFamilySelectorV2', + key: 'recordStoreMorphOneToManyValueWithObjectNameFamilySelector', get: ({ recordId, morphRelations }: MorphOneToManyFamilyKey) => ({ get }) => { diff --git a/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreRecordsSelectorV2.ts b/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreRecordsSelector.ts similarity index 85% rename from packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreRecordsSelectorV2.ts rename to packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreRecordsSelector.ts index 3dcdee7947..006adf1d08 100644 --- a/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreRecordsSelectorV2.ts +++ b/packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreRecordsSelector.ts @@ -7,11 +7,11 @@ type RecordStoreRecordsFamilyKey = { recordIds: string[]; }; -export const recordStoreRecordsSelectorV2 = createAtomFamilySelector< +export const recordStoreRecordsSelector = createAtomFamilySelector< ObjectRecord[], RecordStoreRecordsFamilyKey >({ - key: 'recordStoreRecordsSelectorV2', + key: 'recordStoreRecordsSelector', get: ({ recordIds }: RecordStoreRecordsFamilyKey) => ({ get }) => diff --git a/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useSetRecordTableData.ts b/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useSetRecordTableData.ts index 860e8b2d6a..409f5d1e3c 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useSetRecordTableData.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useSetRecordTableData.ts @@ -8,7 +8,6 @@ import { } from '@/object-record/record-index/states/selectors/recordIndexAllRecordIdsComponentSelector'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; -import { recordStoreFamilyStateV2 } from '@/object-record/record-store/states/recordStoreFamilyStateV2'; import { useFocusedRecordTableRow } from '@/object-record/record-table/hooks/useFocusedRecordTableRow'; import { useUnfocusRecordTableCell } from '@/object-record/record-table/record-table-cell/hooks/useUnfocusRecordTableCell'; import { hasUserSelectedAllRowsComponentState } from '@/object-record/record-table/record-table-row/states/hasUserSelectedAllRowsFamilyState'; @@ -91,7 +90,6 @@ export const useSetRecordTableData = ({ } as T; store.set(recordStoreFamilyState.atomFamily(record.id), newRecord); - store.set(recordStoreFamilyStateV2.atomFamily(record.id), newRecord); } } diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/__tests__/useMoveHoverToCurrentCell.test.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/__tests__/useMoveHoverToCurrentCell.test.tsx index f871ef62fa..3442190357 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/__tests__/useMoveHoverToCurrentCell.test.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/__tests__/useMoveHoverToCurrentCell.test.tsx @@ -1,7 +1,6 @@ import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider, useAtomValue } from 'jotai'; import { act } from 'react'; -import { RecoilRoot } from 'recoil'; import { RecordTableComponentInstance } from '@/object-record/record-table/components/RecordTableComponentInstance'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; @@ -18,21 +17,17 @@ import { recordTableHoverPositionComponentState } from '@/object-record/record-t const Wrapper = ({ children }: { children: React.ReactNode }) => ( - - - - - - {children} - - - - - + + + + + {children} + + + + ); diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/__tests__/useSetIsRecordTableFocusActive.test.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/__tests__/useSetIsRecordTableFocusActive.test.tsx index 6b9b31e0ca..df6daebce6 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/__tests__/useSetIsRecordTableFocusActive.test.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/__tests__/useSetIsRecordTableFocusActive.test.tsx @@ -1,7 +1,6 @@ import { renderHook } from '@testing-library/react'; import { useAtomValue } from 'jotai'; import React, { act } from 'react'; -import { RecoilRoot } from 'recoil'; import { RecordTableComponentInstance } from '@/object-record/record-table/components/RecordTableComponentInstance'; import { useSetIsRecordTableCellFocusActive } from '@/object-record/record-table/record-table-cell/hooks/useSetIsRecordTableCellFocusActive'; @@ -20,11 +19,9 @@ const mockGetElementById = jest.spyOn(document, 'getElementById'); const instanceId = { instanceId: 'test-table-id' }; const Wrapper = ({ children }: { children: React.ReactNode }) => ( - - - {children} - - + + {children} + ); const renderHooks = () => { diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/internal/__tests__/useCloseRecordTableCellInGroup.test.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/internal/__tests__/useCloseRecordTableCellInGroup.test.tsx index abd2302920..4b85aa1c73 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/internal/__tests__/useCloseRecordTableCellInGroup.test.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/internal/__tests__/useCloseRecordTableCellInGroup.test.tsx @@ -1,6 +1,5 @@ import { act, renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; @@ -34,42 +33,38 @@ const Wrapper = ({ children }: { children: React.ReactNode }) => { return ( - - - - + + + - - + - - - {children} - - - - - - - - + {children} + + + + + + + ); }; diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/internal/__tests__/useCloseRecordTableCellNoGroup.test.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/internal/__tests__/useCloseRecordTableCellNoGroup.test.tsx index cc4fdfc8f3..401c7b482c 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/internal/__tests__/useCloseRecordTableCellNoGroup.test.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/internal/__tests__/useCloseRecordTableCellNoGroup.test.tsx @@ -1,6 +1,5 @@ import { act, renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; @@ -34,43 +33,39 @@ const Wrapper = ({ children }: { children: React.ReactNode }) => { return ( - - - {}} + + {}} + > + - - - + - - - {children} - - - - - - - - + {children} + + + + + + + ); }; diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCell.ts b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCell.ts index 4e8e322ece..b8f01967bd 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCell.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCell.ts @@ -2,7 +2,7 @@ import { useInitDraftValue } from '@/object-record/record-field/ui/hooks/useInit import { type FieldDefinition } from '@/object-record/record-field/ui/types/FieldDefinition'; import { type FieldMetadata } from '@/object-record/record-field/ui/types/FieldMetadata'; import { isFieldValueEmpty } from '@/object-record/record-field/ui/utils/isFieldValueEmpty'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { FOCUS_CLICK_OUTSIDE_LISTENER_ID } from '@/object-record/record-table/constants/FocusClickOutsideListenerId'; import { RECORD_TABLE_CELL_INPUT_ID_PREFIX } from '@/object-record/record-table/constants/RecordTableCellInputIdPrefix'; import { useLeaveTableFocus } from '@/object-record/record-table/hooks/internal/useLeaveTableFocus'; @@ -94,7 +94,7 @@ export const useOpenRecordTableCell = (recordTableId: string) => { const isFirstColumnCell = cellPosition.column === 0; const fieldValue = store.get( - recordStoreFamilySelectorV2.selectorFamily({ + recordStoreFamilySelector.selectorFamily({ recordId, fieldName: fieldDefinition.metadata.fieldName, }), diff --git a/packages/twenty-front/src/modules/object-record/record-update-multiple/hooks/__tests__/useUpdateMultipleRecordsActions.test.ts b/packages/twenty-front/src/modules/object-record/record-update-multiple/hooks/__tests__/useUpdateMultipleRecordsActions.test.ts index f1415e2b82..266f93d043 100644 --- a/packages/twenty-front/src/modules/object-record/record-update-multiple/hooks/__tests__/useUpdateMultipleRecordsActions.test.ts +++ b/packages/twenty-front/src/modules/object-record/record-update-multiple/hooks/__tests__/useUpdateMultipleRecordsActions.test.ts @@ -21,7 +21,7 @@ const mockUseFilterValueDependencies = jest.mocked(useFilterValueDependencies); const mockUseContextStoreObjectMetadataItemOrThrow = jest.mocked( useContextStoreObjectMetadataItemOrThrow, ); -const mockUseRecoilComponentValueV2 = jest.mocked(useAtomComponentStateValue); +const mockUseAtomComponentStateValue = jest.mocked(useAtomComponentStateValue); describe('useUpdateMultipleRecordsActions', () => { const mockIncrementalUpdateManyRecords = jest.fn(); @@ -45,7 +45,7 @@ describe('useUpdateMultipleRecordsActions', () => { filterValueDependencies: {}, } as any); - mockUseRecoilComponentValueV2.mockReturnValue({}); + mockUseAtomComponentStateValue.mockReturnValue({}); mockComputeContextStoreFilters.mockReturnValue('mock-filter' as any); }); diff --git a/packages/twenty-front/src/modules/object-record/spreadsheet-import/hooks/__tests__/useBuildSpreadSheetImportFields.test.tsx b/packages/twenty-front/src/modules/object-record/spreadsheet-import/hooks/__tests__/useBuildSpreadSheetImportFields.test.tsx index 2471f1fd73..644e0bbb2a 100644 --- a/packages/twenty-front/src/modules/object-record/spreadsheet-import/hooks/__tests__/useBuildSpreadSheetImportFields.test.tsx +++ b/packages/twenty-front/src/modules/object-record/spreadsheet-import/hooks/__tests__/useBuildSpreadSheetImportFields.test.tsx @@ -1,7 +1,6 @@ import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; import { useIcons } from 'twenty-ui/display'; import { JestObjectMetadataItemSetter } from '~/testing/jest/JestObjectMetadataItemSetter'; @@ -16,9 +15,7 @@ import { FieldMetadataType, RelationType } from '~/generated-metadata/graphql'; const Wrapper = ({ children }: { children: ReactNode }) => { return ( - - {children} - + {children} ); }; @@ -381,13 +378,11 @@ describe('useBuildSpreadSheetImportFields', () => { const RelationTestWrapper = ({ children }: { children: ReactNode }) => ( - - - {children} - - + + {children} + ); diff --git a/packages/twenty-front/src/modules/onboarding/hooks/__tests__/useOnboardingStatus.test.ts b/packages/twenty-front/src/modules/onboarding/hooks/__tests__/useOnboardingStatus.test.ts index b2325fd958..214e72e8f1 100644 --- a/packages/twenty-front/src/modules/onboarding/hooks/__tests__/useOnboardingStatus.test.ts +++ b/packages/twenty-front/src/modules/onboarding/hooks/__tests__/useOnboardingStatus.test.ts @@ -1,8 +1,6 @@ import { renderHook } from '@testing-library/react'; import { createElement, act } from 'react'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; - import { type CurrentUser, currentUserState, @@ -26,11 +24,7 @@ const currentUser = { } as CurrentUser; const Wrapper = ({ children }: { children: React.ReactNode }) => - createElement( - JotaiProvider, - { store: jotaiStore }, - createElement(RecoilRoot, null, children), - ); + createElement(JotaiProvider, { store: jotaiStore }, children); const renderHooks = () => { const { result } = renderHook( diff --git a/packages/twenty-front/src/modules/onboarding/hooks/__tests__/useSetNextOnboardingStatus.test.ts b/packages/twenty-front/src/modules/onboarding/hooks/__tests__/useSetNextOnboardingStatus.test.ts index 628c366ae9..9e660ef5fc 100644 --- a/packages/twenty-front/src/modules/onboarding/hooks/__tests__/useSetNextOnboardingStatus.test.ts +++ b/packages/twenty-front/src/modules/onboarding/hooks/__tests__/useSetNextOnboardingStatus.test.ts @@ -1,7 +1,6 @@ import { act, renderHook } from '@testing-library/react'; import { createElement } from 'react'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; import { v4 } from 'uuid'; import { currentUserState } from '@/auth/states/currentUserState'; @@ -26,11 +25,7 @@ import { } from '~/testing/mock-data/users'; const Wrapper = ({ children }: { children: React.ReactNode }) => - createElement( - JotaiProvider, - { store: jotaiStore }, - createElement(RecoilRoot, null, children), - ); + createElement(JotaiProvider, { store: jotaiStore }, children); const renderHooks = ( onboardingStatus: OnboardingStatus, diff --git a/packages/twenty-front/src/modules/page-layout/hooks/useSetIsPageLayoutInEditMode.ts b/packages/twenty-front/src/modules/page-layout/hooks/useSetIsPageLayoutInEditMode.ts index 4a59c019eb..8ea6a2e1e1 100644 --- a/packages/twenty-front/src/modules/page-layout/hooks/useSetIsPageLayoutInEditMode.ts +++ b/packages/twenty-front/src/modules/page-layout/hooks/useSetIsPageLayoutInEditMode.ts @@ -1,5 +1,5 @@ import { COMMAND_MENU_COMPONENT_INSTANCE_ID } from '@/command-menu/constants/CommandMenuComponentInstanceId'; -import { isCommandMenuOpenedStateV2 } from '@/command-menu/states/isCommandMenuOpenedStateV2'; +import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { contextStoreIsPageInEditModeComponentState } from '@/context-store/states/contextStoreIsPageInEditModeComponentState'; import { PageLayoutComponentInstanceContext } from '@/page-layout/states/contexts/PageLayoutComponentInstanceContext'; @@ -37,7 +37,7 @@ export const useSetIsPageLayoutInEditMode = (pageLayoutIdFromProps: string) => { store.set(currentPageLayoutIdState.atom, value ? pageLayoutId : null); - const isCommandMenuOpened = store.get(isCommandMenuOpenedStateV2.atom); + const isCommandMenuOpened = store.get(isCommandMenuOpenedState.atom); if (isCommandMenuOpened) { store.set( diff --git a/packages/twenty-front/src/modules/page-layout/widgets/field/components/FieldWidget.tsx b/packages/twenty-front/src/modules/page-layout/widgets/field/components/FieldWidget.tsx index 6562909d49..fec38f50b0 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/field/components/FieldWidget.tsx +++ b/packages/twenty-front/src/modules/page-layout/widgets/field/components/FieldWidget.tsx @@ -5,7 +5,7 @@ import { isFieldMorphRelation } from '@/object-record/record-field/ui/types/guar import { isFieldRelation } from '@/object-record/record-field/ui/types/guards/isFieldRelation'; import { PropertyBoxSkeletonLoader } from '@/object-record/record-inline-cell/property-box/components/PropertyBoxSkeletonLoader'; import { useRecordShowContainerData } from '@/object-record/record-show/hooks/useRecordShowContainerData'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { useResolveFieldMetadataIdFromNameOrId } from '@/page-layout/hooks/useResolveFieldMetadataIdFromNameOrId'; import { type PageLayoutWidget } from '@/page-layout/types/PageLayoutWidget'; import { FieldWidgetDisplay } from '@/page-layout/widgets/field/components/FieldWidgetDisplay'; @@ -62,7 +62,7 @@ export const FieldWidget = ({ widget }: FieldWidgetProps) => { resolvedFieldMetadataId ?? '', ); - const record = useAtomFamilySelectorValue(recordStoreFamilySelectorV2, { + const record = useAtomFamilySelectorValue(recordStoreFamilySelector, { recordId: targetRecord.id, fieldName: fieldMetadataItem?.name ?? '', }); diff --git a/packages/twenty-front/src/modules/page-layout/widgets/field/components/__stories__/FieldWidget.stories.tsx b/packages/twenty-front/src/modules/page-layout/widgets/field/components/__stories__/FieldWidget.stories.tsx index 359695cdc0..2b5d213992 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/field/components/__stories__/FieldWidget.stories.tsx +++ b/packages/twenty-front/src/modules/page-layout/widgets/field/components/__stories__/FieldWidget.stories.tsx @@ -12,7 +12,6 @@ import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadat import { isAppMetadataReadyState } from '@/metadata-store/states/isAppMetadataReadyState'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; -import { recordStoreFamilyStateV2 } from '@/object-record/record-store/states/recordStoreFamilyStateV2'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; import { PageLayoutContentProvider } from '@/page-layout/contexts/PageLayoutContentContext'; import { @@ -261,7 +260,6 @@ const mockCompanyRecord: ObjectRecord = { // Sets a record in both Jotai stores so field display hooks can read it const setRecordInStores = (recordId: string, record: ObjectRecord) => { jotaiStore.set(recordStoreFamilyState.atomFamily(recordId), record); - jotaiStore.set(recordStoreFamilyStateV2.atomFamily(recordId), record); }; const JestMetadataAndApolloMocksWrapper = getJestMetadataAndApolloMocksWrapper({ diff --git a/packages/twenty-front/src/modules/page-layout/widgets/field/hooks/useOpenFieldWidgetFieldInputEditMode.ts b/packages/twenty-front/src/modules/page-layout/widgets/field/hooks/useOpenFieldWidgetFieldInputEditMode.ts index 257a108332..714293a84c 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/field/hooks/useOpenFieldWidgetFieldInputEditMode.ts +++ b/packages/twenty-front/src/modules/page-layout/widgets/field/hooks/useOpenFieldWidgetFieldInputEditMode.ts @@ -22,7 +22,7 @@ import { isFieldMorphRelationOneToMany } from '@/object-record/record-field/ui/t import { isFieldRelationManyToOne } from '@/object-record/record-field/ui/types/guards/isFieldRelationManyToOne'; import { isFieldRelationOneToMany } from '@/object-record/record-field/ui/types/guards/isFieldRelationOneToMany'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { usePushFocusItemToFocusStack } from '@/ui/utilities/focus/hooks/usePushFocusItemToFocusStack'; import { useRemoveFocusItemFromFocusStackById } from '@/ui/utilities/focus/hooks/useRemoveFocusItemFromFocusStackById'; import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType'; @@ -67,7 +67,7 @@ export const useOpenFieldWidgetFieldInputEditMode = () => { ) ) { const fieldValue = store.get( - recordStoreFamilySelectorV2.selectorFamily({ + recordStoreFamilySelector.selectorFamily({ recordId, fieldName: fieldDefinition.metadata.fieldName, }), diff --git a/packages/twenty-front/src/modules/page-layout/widgets/graph/graphWidgetBarChart/components/GraphWidgetBarChart.tsx b/packages/twenty-front/src/modules/page-layout/widgets/graph/graphWidgetBarChart/components/GraphWidgetBarChart.tsx index 21c3cd853c..bd671acb89 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/graph/graphWidgetBarChart/components/GraphWidgetBarChart.tsx +++ b/packages/twenty-front/src/modules/page-layout/widgets/graph/graphWidgetBarChart/components/GraphWidgetBarChart.tsx @@ -1,4 +1,4 @@ -import { isSidePanelAnimatingStateV2 } from '@/command-menu/states/isSidePanelAnimatingStateV2'; +import { isSidePanelAnimatingState } from '@/command-menu/states/isSidePanelAnimatingState'; import { pageLayoutDraggingWidgetIdComponentState } from '@/page-layout/states/pageLayoutDraggingWidgetIdComponentState'; import { pageLayoutResizingWidgetIdComponentState } from '@/page-layout/states/pageLayoutResizingWidgetIdComponentState'; import { GraphWidgetChartContainer } from '@/page-layout/widgets/graph/components/GraphWidgetChartContainer'; @@ -111,7 +111,7 @@ export const GraphWidgetBarChart = ({ pageLayoutResizingWidgetIdComponentState, ); - const isSidePanelAnimating = useAtomStateValue(isSidePanelAnimatingStateV2); + const isSidePanelAnimating = useAtomStateValue(isSidePanelAnimatingState); const isLayoutAnimating = isSidePanelAnimating || draggingWidgetId === id || resizingWidgetId === id; diff --git a/packages/twenty-front/src/modules/page-layout/widgets/graph/graphWidgetBarChart/hooks/__tests__/useBarChartData.test.ts b/packages/twenty-front/src/modules/page-layout/widgets/graph/graphWidgetBarChart/hooks/__tests__/useBarChartData.test.ts index 07a7e1479c..ecea2a77c6 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/graph/graphWidgetBarChart/hooks/__tests__/useBarChartData.test.ts +++ b/packages/twenty-front/src/modules/page-layout/widgets/graph/graphWidgetBarChart/hooks/__tests__/useBarChartData.test.ts @@ -3,18 +3,18 @@ import { type BarChartSeriesWithColor } from '@/page-layout/widgets/graph/graphW import { type GraphColorRegistry } from '@/page-layout/widgets/graph/types/GraphColorRegistry'; import { renderHook } from '@testing-library/react'; -const mockUseRecoilComponentValue = jest.fn(); +const mockUseAtomComponentStateValue = jest.fn(); jest.mock( '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue', () => ({ - useAtomComponentStateValue: () => mockUseRecoilComponentValue(), + useAtomComponentStateValue: () => mockUseAtomComponentStateValue(), }), ); describe('useBarChartData', () => { beforeEach(() => { jest.clearAllMocks(); - mockUseRecoilComponentValue.mockReturnValue([]); + mockUseAtomComponentStateValue.mockReturnValue([]); }); const mockColorRegistry: GraphColorRegistry = { @@ -194,7 +194,7 @@ describe('useBarChartData', () => { }); it('should filter visible keys based on hidden legend ids', () => { - mockUseRecoilComponentValue.mockReturnValue(['costs']); + mockUseAtomComponentStateValue.mockReturnValue(['costs']); const { result } = renderHook(() => useBarChartData({ @@ -211,7 +211,7 @@ describe('useBarChartData', () => { }); it('should maintain colors after filtering', () => { - mockUseRecoilComponentValue.mockReturnValue(['sales']); + mockUseAtomComponentStateValue.mockReturnValue(['sales']); const { result } = renderHook(() => useBarChartData({ @@ -226,7 +226,7 @@ describe('useBarChartData', () => { }); it('should keep all items in legend even when filtering', () => { - mockUseRecoilComponentValue.mockReturnValue(['sales']); + mockUseAtomComponentStateValue.mockReturnValue(['sales']); const { result } = renderHook(() => useBarChartData({ @@ -242,7 +242,10 @@ describe('useBarChartData', () => { }); it('should handle hidden ids that do not exist in keys', () => { - mockUseRecoilComponentValue.mockReturnValue(['nonexistent', 'alsoNotReal']); + mockUseAtomComponentStateValue.mockReturnValue([ + 'nonexistent', + 'alsoNotReal', + ]); const { result } = renderHook(() => useBarChartData({ diff --git a/packages/twenty-front/src/modules/page-layout/widgets/graph/graphWidgetLineChart/hooks/__tests__/useLineChartData.test.ts b/packages/twenty-front/src/modules/page-layout/widgets/graph/graphWidgetLineChart/hooks/__tests__/useLineChartData.test.ts index 6d4ac830eb..eb4d100cfe 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/graph/graphWidgetLineChart/hooks/__tests__/useLineChartData.test.ts +++ b/packages/twenty-front/src/modules/page-layout/widgets/graph/graphWidgetLineChart/hooks/__tests__/useLineChartData.test.ts @@ -5,18 +5,18 @@ import { renderHook } from '@testing-library/react'; import { useLineChartData } from '@/page-layout/widgets/graph/graphWidgetLineChart/hooks/useLineChartData'; import { type LineChartSeries } from '~/generated-metadata/graphql'; -const mockUseRecoilComponentValue = jest.fn(); +const mockUseAtomComponentStateValue = jest.fn(); jest.mock( '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue', () => ({ - useAtomComponentStateValue: () => mockUseRecoilComponentValue(), + useAtomComponentStateValue: () => mockUseAtomComponentStateValue(), }), ); describe('useLineChartData', () => { beforeEach(() => { jest.clearAllMocks(); - mockUseRecoilComponentValue.mockReturnValue([]); + mockUseAtomComponentStateValue.mockReturnValue([]); }); const mockColorRegistry: GraphColorRegistry = { @@ -193,7 +193,7 @@ describe('useLineChartData', () => { }); it('should filter visible data based on hidden legend ids', () => { - mockUseRecoilComponentValue.mockReturnValue(['series2']); + mockUseAtomComponentStateValue.mockReturnValue(['series2']); const { result } = renderHook(() => useLineChartData({ @@ -211,7 +211,7 @@ describe('useLineChartData', () => { }); it('should maintain colors after filtering', () => { - mockUseRecoilComponentValue.mockReturnValue(['series1']); + mockUseAtomComponentStateValue.mockReturnValue(['series1']); const { result } = renderHook(() => useLineChartData({ @@ -226,7 +226,7 @@ describe('useLineChartData', () => { }); it('should keep all items in legend even when filtering', () => { - mockUseRecoilComponentValue.mockReturnValue(['series1']); + mockUseAtomComponentStateValue.mockReturnValue(['series1']); const { result } = renderHook(() => useLineChartData({ @@ -242,7 +242,7 @@ describe('useLineChartData', () => { }); it('should maintain alignment between nivoData and colors when filtering', () => { - mockUseRecoilComponentValue.mockReturnValue(['series1']); + mockUseAtomComponentStateValue.mockReturnValue(['series1']); const { result } = renderHook(() => useLineChartData({ @@ -259,7 +259,10 @@ describe('useLineChartData', () => { }); it('should handle hidden ids that do not exist in data', () => { - mockUseRecoilComponentValue.mockReturnValue(['nonexistent', 'alsoNotReal']); + mockUseAtomComponentStateValue.mockReturnValue([ + 'nonexistent', + 'alsoNotReal', + ]); const { result } = renderHook(() => useLineChartData({ diff --git a/packages/twenty-front/src/modules/page-layout/widgets/graph/graphWidgetPieChart/hooks/__tests__/usePieChartData.test.ts b/packages/twenty-front/src/modules/page-layout/widgets/graph/graphWidgetPieChart/hooks/__tests__/usePieChartData.test.ts index 9082e4e1db..90b1d675c4 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/graph/graphWidgetPieChart/hooks/__tests__/usePieChartData.test.ts +++ b/packages/twenty-front/src/modules/page-layout/widgets/graph/graphWidgetPieChart/hooks/__tests__/usePieChartData.test.ts @@ -4,18 +4,18 @@ import { type GraphColorRegistry } from '@/page-layout/widgets/graph/types/Graph import { renderHook } from '@testing-library/react'; import { type PieChartDataItem } from '~/generated-metadata/graphql'; -const mockUseRecoilComponentValue = jest.fn(); +const mockUseAtomComponentStateValue = jest.fn(); jest.mock( '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue', () => ({ - useAtomComponentStateValue: () => mockUseRecoilComponentValue(), + useAtomComponentStateValue: () => mockUseAtomComponentStateValue(), }), ); describe('usePieChartData', () => { beforeEach(() => { jest.clearAllMocks(); - mockUseRecoilComponentValue.mockReturnValue([]); + mockUseAtomComponentStateValue.mockReturnValue([]); }); const mockColorRegistry: GraphColorRegistry = { @@ -140,7 +140,7 @@ describe('usePieChartData', () => { }); it('should filter enriched data based on hidden legend ids', () => { - mockUseRecoilComponentValue.mockReturnValue(['item2']); + mockUseAtomComponentStateValue.mockReturnValue(['item2']); const { result } = renderHook(() => usePieChartData({ @@ -158,7 +158,7 @@ describe('usePieChartData', () => { }); it('should maintain colors after filtering', () => { - mockUseRecoilComponentValue.mockReturnValue(['item1']); + mockUseAtomComponentStateValue.mockReturnValue(['item1']); const { result } = renderHook(() => usePieChartData({ @@ -172,7 +172,7 @@ describe('usePieChartData', () => { }); it('should keep all items in legend even when filtering', () => { - mockUseRecoilComponentValue.mockReturnValue(['item1', 'item2']); + mockUseAtomComponentStateValue.mockReturnValue(['item1', 'item2']); const { result } = renderHook(() => usePieChartData({ @@ -187,7 +187,7 @@ describe('usePieChartData', () => { }); it('should preserve original percentages after filtering', () => { - mockUseRecoilComponentValue.mockReturnValue(['item2']); + mockUseAtomComponentStateValue.mockReturnValue(['item2']); const { result } = renderHook(() => usePieChartData({ @@ -203,7 +203,10 @@ describe('usePieChartData', () => { }); it('should handle hidden ids that do not exist in data', () => { - mockUseRecoilComponentValue.mockReturnValue(['nonexistent', 'alsoNotReal']); + mockUseAtomComponentStateValue.mockReturnValue([ + 'nonexistent', + 'alsoNotReal', + ]); const { result } = renderHook(() => usePieChartData({ diff --git a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelsContainer.tsx b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelsContainer.tsx index 897871e471..cb4f636a5a 100644 --- a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelsContainer.tsx +++ b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsMessageChannelsContainer.tsx @@ -13,7 +13,7 @@ import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { SettingsAccountsMessageChannelDetails } from '@/settings/accounts/components/SettingsAccountsMessageChannelDetails'; import { SettingsNewAccountSection } from '@/settings/accounts/components/SettingsNewAccountSection'; import { SETTINGS_ACCOUNT_MESSAGE_CHANNELS_TAB_LIST_COMPONENT_ID } from '@/settings/accounts/constants/SettingsAccountMessageChannelsTabListComponentId'; -import { settingsAccountsSelectedMessageChannelStateV2 } from '@/settings/accounts/states/settingsAccountsSelectedMessageChannelStateV2'; +import { settingsAccountsSelectedMessageChannelState } from '@/settings/accounts/states/settingsAccountsSelectedMessageChannelState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { TabList } from '@/ui/layout/tab-list/components/TabList'; import { activeTabIdComponentState } from '@/ui/layout/tab-list/states/activeTabIdComponentState'; @@ -32,7 +32,7 @@ export const SettingsAccountsMessageChannelsContainer = () => { ); const currentWorkspaceMember = useAtomStateValue(currentWorkspaceMemberState); const setSelectedMessageChannel = useSetAtomState( - settingsAccountsSelectedMessageChannelStateV2, + settingsAccountsSelectedMessageChannelState, ); const { records: accounts } = useFindManyRecords({ diff --git a/packages/twenty-front/src/modules/settings/accounts/components/message-folders/SettingsAccountsMessageFoldersCard.tsx b/packages/twenty-front/src/modules/settings/accounts/components/message-folders/SettingsAccountsMessageFoldersCard.tsx index 9496527804..d54f955402 100644 --- a/packages/twenty-front/src/modules/settings/accounts/components/message-folders/SettingsAccountsMessageFoldersCard.tsx +++ b/packages/twenty-front/src/modules/settings/accounts/components/message-folders/SettingsAccountsMessageFoldersCard.tsx @@ -9,7 +9,7 @@ import { SettingsMessageFoldersTreeItem } from '@/settings/accounts/components/m import { computeFolderIdsForSyncToggle } from '@/settings/accounts/components/message-folders/utils/computeFolderIdsForSyncToggle'; import { computeMessageFolderTree } from '@/settings/accounts/components/message-folders/utils/computeMessageFolderTree'; import { useUpdateMessageFoldersSyncStatus } from '@/settings/accounts/hooks/useUpdateMessageFoldersSyncStatus'; -import { settingsAccountsSelectedMessageChannelStateV2 } from '@/settings/accounts/states/settingsAccountsSelectedMessageChannelStateV2'; +import { settingsAccountsSelectedMessageChannelState } from '@/settings/accounts/states/settingsAccountsSelectedMessageChannelState'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { SettingsTextInput } from '@/ui/input/components/SettingsTextInput'; import { Table } from '@/ui/layout/table/components/Table'; @@ -73,7 +73,7 @@ export const SettingsAccountsMessageFoldersCard = () => { const { enqueueErrorSnackBar } = useSnackBar(); const settingsAccountsSelectedMessageChannel = useAtomStateValue( - settingsAccountsSelectedMessageChannelStateV2, + settingsAccountsSelectedMessageChannelState, ); const { updateMessageFoldersSyncStatus } = diff --git a/packages/twenty-front/src/modules/settings/accounts/hooks/__tests__/useTriggerProviderReconnect.test.tsx b/packages/twenty-front/src/modules/settings/accounts/hooks/__tests__/useTriggerProviderReconnect.test.tsx index eca3cedd90..41ef5e74ba 100644 --- a/packages/twenty-front/src/modules/settings/accounts/hooks/__tests__/useTriggerProviderReconnect.test.tsx +++ b/packages/twenty-front/src/modules/settings/accounts/hooks/__tests__/useTriggerProviderReconnect.test.tsx @@ -3,8 +3,6 @@ import { CalendarChannelVisibility, } from '~/generated/graphql'; import { act, renderHook } from '@testing-library/react'; -import { type ReactNode } from 'react'; -import { RecoilRoot } from 'recoil'; import { ConnectedAccountProvider, SettingsPath } from 'twenty-shared/types'; import { useTriggerProviderReconnect } from '@/settings/accounts/hooks/useTriggerProviderReconnect'; @@ -22,10 +20,6 @@ jest.mock('~/hooks/useNavigateSettings', () => ({ useNavigateSettings: jest.fn().mockImplementation(() => mockNavigate), })); -const Wrapper = ({ children }: { children: ReactNode }) => ( - {children} -); - describe('useTriggerProviderReconnect', () => { beforeEach(() => { jest.clearAllMocks(); @@ -33,9 +27,7 @@ describe('useTriggerProviderReconnect', () => { describe('IMAP_SMTP_CALDAV provider', () => { it('should navigate to new connection when no accountId is provided', async () => { - const { result } = renderHook(() => useTriggerProviderReconnect(), { - wrapper: Wrapper, - }); + const { result } = renderHook(() => useTriggerProviderReconnect()); await act(async () => { await result.current.triggerProviderReconnect( @@ -50,9 +42,7 @@ describe('useTriggerProviderReconnect', () => { }); it('should navigate to edit connection when accountId is provided', async () => { - const { result } = renderHook(() => useTriggerProviderReconnect(), { - wrapper: Wrapper, - }); + const { result } = renderHook(() => useTriggerProviderReconnect()); const accountId = 'test-account-id-123'; @@ -73,9 +63,7 @@ describe('useTriggerProviderReconnect', () => { }); it('should ignore options parameter for IMAP_SMTP_CALDAV provider', async () => { - const { result } = renderHook(() => useTriggerProviderReconnect(), { - wrapper: Wrapper, - }); + const { result } = renderHook(() => useTriggerProviderReconnect()); const accountId = 'test-account-id-123'; const options = { @@ -103,9 +91,7 @@ describe('useTriggerProviderReconnect', () => { describe('OAuth providers', () => { it('should trigger OAuth for Google provider without options', async () => { - const { result } = renderHook(() => useTriggerProviderReconnect(), { - wrapper: Wrapper, - }); + const { result } = renderHook(() => useTriggerProviderReconnect()); await act(async () => { await result.current.triggerProviderReconnect( @@ -123,9 +109,7 @@ describe('useTriggerProviderReconnect', () => { }); it('should trigger OAuth for Microsoft provider without options', async () => { - const { result } = renderHook(() => useTriggerProviderReconnect(), { - wrapper: Wrapper, - }); + const { result } = renderHook(() => useTriggerProviderReconnect()); await act(async () => { await result.current.triggerProviderReconnect( @@ -143,9 +127,7 @@ describe('useTriggerProviderReconnect', () => { }); it('should trigger OAuth for Google provider with options', async () => { - const { result } = renderHook(() => useTriggerProviderReconnect(), { - wrapper: Wrapper, - }); + const { result } = renderHook(() => useTriggerProviderReconnect()); const options = { redirectLocation: '/custom-redirect', @@ -173,9 +155,7 @@ describe('useTriggerProviderReconnect', () => { }); it('should trigger OAuth for Microsoft provider with options', async () => { - const { result } = renderHook(() => useTriggerProviderReconnect(), { - wrapper: Wrapper, - }); + const { result } = renderHook(() => useTriggerProviderReconnect()); const options = { redirectLocation: '/another-redirect', @@ -202,9 +182,7 @@ describe('useTriggerProviderReconnect', () => { }); it('should ignore accountId parameter for OAuth providers', async () => { - const { result } = renderHook(() => useTriggerProviderReconnect(), { - wrapper: Wrapper, - }); + const { result } = renderHook(() => useTriggerProviderReconnect()); await act(async () => { await result.current.triggerProviderReconnect( @@ -223,9 +201,7 @@ describe('useTriggerProviderReconnect', () => { }); it('should pass skipMessageChannelConfiguration option to OAuth providers', async () => { - const { result } = renderHook(() => useTriggerProviderReconnect(), { - wrapper: Wrapper, - }); + const { result } = renderHook(() => useTriggerProviderReconnect()); const options = { skipMessageChannelConfiguration: true, @@ -253,9 +229,7 @@ describe('useTriggerProviderReconnect', () => { describe('error handling', () => { it('should handle triggerApisOAuth errors gracefully', async () => { - const { result } = renderHook(() => useTriggerProviderReconnect(), { - wrapper: Wrapper, - }); + const { result } = renderHook(() => useTriggerProviderReconnect()); const error = new Error('OAuth failed'); mockTriggerApisOAuth.mockRejectedValue(error); diff --git a/packages/twenty-front/src/modules/settings/accounts/states/settingsAccountsSelectedMessageChannelStateV2.ts b/packages/twenty-front/src/modules/settings/accounts/states/settingsAccountsSelectedMessageChannelState.ts similarity index 65% rename from packages/twenty-front/src/modules/settings/accounts/states/settingsAccountsSelectedMessageChannelStateV2.ts rename to packages/twenty-front/src/modules/settings/accounts/states/settingsAccountsSelectedMessageChannelState.ts index 7c4ad3fc67..0bab085e36 100644 --- a/packages/twenty-front/src/modules/settings/accounts/states/settingsAccountsSelectedMessageChannelStateV2.ts +++ b/packages/twenty-front/src/modules/settings/accounts/states/settingsAccountsSelectedMessageChannelState.ts @@ -2,8 +2,8 @@ import { type MessageChannel } from '@/accounts/types/MessageChannel'; import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const settingsAccountsSelectedMessageChannelStateV2 = +export const settingsAccountsSelectedMessageChannelState = createAtomState({ - key: 'settingsAccountsSelectedMessageChannelStateV2', + key: 'settingsAccountsSelectedMessageChannelState', defaultValue: null, }); diff --git a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx index fdc8c85107..a738822307 100644 --- a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx +++ b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx @@ -1,6 +1,6 @@ import { canManageFeatureFlagsState } from '@/client-config/states/canManageFeatureFlagsState'; import { SettingsAdminWorkspaceContent } from '@/settings/admin-panel/components/SettingsAdminWorkspaceContent'; -import { userLookupResultStateV2 } from '@/settings/admin-panel/states/userLookupResultStateV2'; +import { userLookupResultState } from '@/settings/admin-panel/states/userLookupResultState'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { SettingsTextInput } from '@/ui/input/components/SettingsTextInput'; import { TabList } from '@/ui/layout/tab-list/components/TabList'; @@ -47,7 +47,7 @@ export const SettingsAdminGeneral = () => { SETTINGS_ADMIN_USER_LOOKUP_WORKSPACE_TABS_ID, ); const [userLookupResult, setUserLookupResult] = useAtomState( - userLookupResultStateV2, + userLookupResultState, ); const [isUserLookupLoading, setIsUserLookupLoading] = useState(false); diff --git a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx index 6fd64374bc..a63d74e248 100644 --- a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx +++ b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx @@ -5,7 +5,7 @@ import { SettingsAdminTableCard } from '@/settings/admin-panel/components/Settin import { useFeatureFlagState } from '@/settings/admin-panel/hooks/useFeatureFlagState'; import { useImpersonationAuth } from '@/settings/admin-panel/hooks/useImpersonationAuth'; import { useImpersonationRedirect } from '@/settings/admin-panel/hooks/useImpersonationRedirect'; -import { userLookupResultStateV2 } from '@/settings/admin-panel/states/userLookupResultStateV2'; +import { userLookupResultState } from '@/settings/admin-panel/states/userLookupResultState'; import { type WorkspaceInfo } from '@/settings/admin-panel/types/WorkspaceInfo'; import { getWorkspaceSchemaName } from '@/settings/admin-panel/utils/get-workspace-schema-name.util'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; @@ -70,7 +70,7 @@ export const SettingsAdminWorkspaceContent = ({ const [impersonate] = useImpersonateMutation(); const { updateFeatureFlagState } = useFeatureFlagState(); - const userLookupResult = useAtomStateValue(userLookupResultStateV2); + const userLookupResult = useAtomStateValue(userLookupResultState); const { t } = useLingui(); diff --git a/packages/twenty-front/src/modules/settings/admin-panel/hooks/useFeatureFlagState.ts b/packages/twenty-front/src/modules/settings/admin-panel/hooks/useFeatureFlagState.ts index 5ba4985798..cf4d04a218 100644 --- a/packages/twenty-front/src/modules/settings/admin-panel/hooks/useFeatureFlagState.ts +++ b/packages/twenty-front/src/modules/settings/admin-panel/hooks/useFeatureFlagState.ts @@ -1,11 +1,11 @@ -import { userLookupResultStateV2 } from '@/settings/admin-panel/states/userLookupResultStateV2'; +import { userLookupResultState } from '@/settings/admin-panel/states/userLookupResultState'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { type FeatureFlagKey } from '~/generated-metadata/graphql'; import { isDefined } from 'twenty-shared/utils'; export const useFeatureFlagState = () => { const [userLookupResult, setUserLookupResult] = useAtomState( - userLookupResultStateV2, + userLookupResultState, ); const updateFeatureFlagState = ( diff --git a/packages/twenty-front/src/modules/settings/admin-panel/states/userLookupResultStateV2.ts b/packages/twenty-front/src/modules/settings/admin-panel/states/userLookupResultState.ts similarity index 62% rename from packages/twenty-front/src/modules/settings/admin-panel/states/userLookupResultStateV2.ts rename to packages/twenty-front/src/modules/settings/admin-panel/states/userLookupResultState.ts index 859e68274a..8a488b9229 100644 --- a/packages/twenty-front/src/modules/settings/admin-panel/states/userLookupResultStateV2.ts +++ b/packages/twenty-front/src/modules/settings/admin-panel/states/userLookupResultState.ts @@ -2,7 +2,7 @@ import { type UserLookup } from '@/settings/admin-panel/types/UserLookup'; import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const userLookupResultStateV2 = createAtomState({ - key: 'userLookupResultStateV2', +export const userLookupResultState = createAtomState({ + key: 'userLookupResultState', defaultValue: null, }); diff --git a/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelSetFieldValueEffect.tsx b/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelSetFieldValueEffect.tsx index 59be85e8e0..94ead37b1a 100644 --- a/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelSetFieldValueEffect.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelSetFieldValueEffect.tsx @@ -1,4 +1,4 @@ -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { useEffect } from 'react'; import { useSetAtom } from 'jotai'; @@ -14,7 +14,7 @@ export const SettingsDataModelSetFieldValueEffect = ({ value, }: SettingsDataModelSetFieldValueEffectProps) => { const setFieldValue = useSetAtom( - recordStoreFamilySelectorV2.selectorFamily({ + recordStoreFamilySelector.selectorFamily({ recordId, fieldName: gqlFieldName, }), diff --git a/packages/twenty-front/src/modules/settings/developers/hooks/__tests__/useWebhookForm.test.tsx b/packages/twenty-front/src/modules/settings/developers/hooks/__tests__/useWebhookForm.test.tsx index ea7698eff3..bffe4aab80 100644 --- a/packages/twenty-front/src/modules/settings/developers/hooks/__tests__/useWebhookForm.test.tsx +++ b/packages/twenty-front/src/modules/settings/developers/hooks/__tests__/useWebhookForm.test.tsx @@ -2,7 +2,6 @@ import { MockedProvider } from '@apollo/client/testing'; import { act, renderHook } from '@testing-library/react'; import { type ReactNode } from 'react'; import { MemoryRouter } from 'react-router-dom'; -import { RecoilRoot } from 'recoil'; import { WebhookFormMode } from '@/settings/developers/constants/WebhookFormMode'; import { CREATE_WEBHOOK } from '@/settings/developers/graphql/mutations/createWebhook'; @@ -125,9 +124,7 @@ const Wrapper = ({ mocks?: any[]; }) => ( - - {children} - + {children} ); diff --git a/packages/twenty-front/src/modules/settings/hooks/__tests__/useSettingsNavigationItems.test.tsx b/packages/twenty-front/src/modules/settings/hooks/__tests__/useSettingsNavigationItems.test.tsx index 72fdd688b5..605520a7f3 100644 --- a/packages/twenty-front/src/modules/settings/hooks/__tests__/useSettingsNavigationItems.test.tsx +++ b/packages/twenty-front/src/modules/settings/hooks/__tests__/useSettingsNavigationItems.test.tsx @@ -3,7 +3,6 @@ import { MockedProvider } from '@apollo/client/testing'; import { renderHook } from '@testing-library/react'; import { type ReactNode } from 'react'; import { MemoryRouter } from 'react-router-dom'; -import { RecoilRoot } from 'recoil'; import { SettingsPath } from 'twenty-shared/types'; import { type Billing, @@ -53,17 +52,15 @@ const mockBilling: Billing = { const Wrapper = ({ children }: { children: ReactNode }) => ( - - - - - {children} - - - - + + + + {children} + + + ); diff --git a/packages/twenty-front/src/modules/settings/lab/hooks/useLabPublicFeatureFlags.ts b/packages/twenty-front/src/modules/settings/lab/hooks/useLabPublicFeatureFlags.ts index 47f79fce82..35b550ce17 100644 --- a/packages/twenty-front/src/modules/settings/lab/hooks/useLabPublicFeatureFlags.ts +++ b/packages/twenty-front/src/modules/settings/lab/hooks/useLabPublicFeatureFlags.ts @@ -1,5 +1,5 @@ import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; -import { labPublicFeatureFlagsStateV2 } from '@/client-config/states/labPublicFeatureFlagsStateV2'; +import { labPublicFeatureFlagsState } from '@/client-config/states/labPublicFeatureFlagsState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { t } from '@lingui/core/macro'; import { useState } from 'react'; @@ -15,7 +15,7 @@ export const useLabPublicFeatureFlags = () => { const [currentWorkspace, setCurrentWorkspace] = useAtomState( currentWorkspaceState, ); - const labPublicFeatureFlags = useAtomStateValue(labPublicFeatureFlagsStateV2); + const labPublicFeatureFlags = useAtomStateValue(labPublicFeatureFlagsState); const [updateLabPublicFeatureFlag] = useUpdateLabPublicFeatureFlagMutation({ onCompleted: (data) => { diff --git a/packages/twenty-front/src/modules/settings/members/hooks/useWorkspaceMemberRoles.ts b/packages/twenty-front/src/modules/settings/members/hooks/useWorkspaceMemberRoles.ts index fdc73f551d..ab7aa87139 100644 --- a/packages/twenty-front/src/modules/settings/members/hooks/useWorkspaceMemberRoles.ts +++ b/packages/twenty-front/src/modules/settings/members/hooks/useWorkspaceMemberRoles.ts @@ -1,12 +1,10 @@ import { useSettingsAllRoles } from '@/settings/roles/hooks/useSettingsAllRoles'; -import { settingsRolesIsLoadingStateV2 } from '@/settings/roles/states/settingsRolesIsLoadingStateV2'; +import { settingsRolesIsLoadingState } from '@/settings/roles/states/settingsRolesIsLoadingState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; export const useWorkspaceMemberRoles = (workspaceMemberId: string) => { const settingsAllRoles = useSettingsAllRoles(); - const settingsRolesIsLoading = useAtomStateValue( - settingsRolesIsLoadingStateV2, - ); + const settingsRolesIsLoading = useAtomStateValue(settingsRolesIsLoadingState); const roles = workspaceMemberId ? settingsAllRoles.filter((role) => diff --git a/packages/twenty-front/src/modules/settings/roles/components/SettingsRolesContainer.tsx b/packages/twenty-front/src/modules/settings/roles/components/SettingsRolesContainer.tsx index 971c3abff5..ed298ce385 100644 --- a/packages/twenty-front/src/modules/settings/roles/components/SettingsRolesContainer.tsx +++ b/packages/twenty-front/src/modules/settings/roles/components/SettingsRolesContainer.tsx @@ -7,7 +7,7 @@ import { SettingsRoleDefaultRole } from '@/settings/roles/components/SettingsRol import { SettingsRolesList } from '@/settings/roles/components/SettingsRolesList'; import { useSettingsAllRoles } from '@/settings/roles/hooks/useSettingsAllRoles'; -import { settingsRolesIsLoadingStateV2 } from '@/settings/roles/states/settingsRolesIsLoadingStateV2'; +import { settingsRolesIsLoadingState } from '@/settings/roles/states/settingsRolesIsLoadingState'; import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { Trans, useLingui } from '@lingui/react/macro'; @@ -17,9 +17,7 @@ export const SettingsRolesContainer = () => { const { t } = useLingui(); const settingsAllRoles = useSettingsAllRoles(); - const settingsRolesIsLoading = useAtomStateValue( - settingsRolesIsLoadingStateV2, - ); + const settingsRolesIsLoading = useAtomStateValue(settingsRolesIsLoadingState); if (settingsRolesIsLoading && !settingsAllRoles) { return null; diff --git a/packages/twenty-front/src/modules/settings/roles/components/SettingsRolesQueryEffect.tsx b/packages/twenty-front/src/modules/settings/roles/components/SettingsRolesQueryEffect.tsx index d587b9eb89..45b4c09e73 100644 --- a/packages/twenty-front/src/modules/settings/roles/components/SettingsRolesQueryEffect.tsx +++ b/packages/twenty-front/src/modules/settings/roles/components/SettingsRolesQueryEffect.tsx @@ -1,7 +1,7 @@ import { settingsDraftRoleFamilyState } from '@/settings/roles/states/settingsDraftRoleFamilyState'; import { settingsPersistedRoleFamilyState } from '@/settings/roles/states/settingsPersistedRoleFamilyState'; import { settingsRoleIdsState } from '@/settings/roles/states/settingsRoleIdsState'; -import { settingsRolesIsLoadingStateV2 } from '@/settings/roles/states/settingsRolesIsLoadingStateV2'; +import { settingsRolesIsLoadingState } from '@/settings/roles/states/settingsRolesIsLoadingState'; import { type RoleWithPartialMembers } from '@/settings/roles/types/RoleWithPartialMembers'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { useStore } from 'jotai'; @@ -16,7 +16,7 @@ export const SettingsRolesQueryEffect = () => { }); const setSettingsRolesIsLoading = useSetAtomState( - settingsRolesIsLoadingStateV2, + settingsRolesIsLoadingState, ); const store = useStore(); diff --git a/packages/twenty-front/src/modules/settings/roles/hooks/useSettingsAllRoles.ts b/packages/twenty-front/src/modules/settings/roles/hooks/useSettingsAllRoles.ts index 3197fa52e2..4f89ce4907 100644 --- a/packages/twenty-front/src/modules/settings/roles/hooks/useSettingsAllRoles.ts +++ b/packages/twenty-front/src/modules/settings/roles/hooks/useSettingsAllRoles.ts @@ -5,6 +5,7 @@ import { useStore } from 'jotai'; import { isDefined } from 'twenty-shared/utils'; export const useSettingsAllRoles = () => { + // eslint-disable-next-line twenty/matching-state-variable const roleIds = useAtomStateValue(settingsRoleIdsState); const store = useStore(); diff --git a/packages/twenty-front/src/modules/settings/roles/role/components/SettingsRole.tsx b/packages/twenty-front/src/modules/settings/roles/role/components/SettingsRole.tsx index 8efff4561a..6cdad08a61 100644 --- a/packages/twenty-front/src/modules/settings/roles/role/components/SettingsRole.tsx +++ b/packages/twenty-front/src/modules/settings/roles/role/components/SettingsRole.tsx @@ -9,7 +9,7 @@ import { SETTINGS_ROLE_DETAIL_TABS } from '@/settings/roles/role/constants/Setti import { useSaveDraftRoleToDB } from '@/settings/roles/role/hooks/useSaveDraftRoleToDB'; import { settingsDraftRoleFamilyState } from '@/settings/roles/states/settingsDraftRoleFamilyState'; import { settingsPersistedRoleFamilyState } from '@/settings/roles/states/settingsPersistedRoleFamilyState'; -import { settingsRolesIsLoadingStateV2 } from '@/settings/roles/states/settingsRolesIsLoadingStateV2'; +import { settingsRolesIsLoadingState } from '@/settings/roles/states/settingsRolesIsLoadingState'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; import { TabList } from '@/ui/layout/tab-list/components/TabList'; @@ -45,9 +45,7 @@ export const SettingsRole = ({ roleId, isCreateMode }: SettingsRoleProps) => { const [isSaving, setIsSaving] = useState(false); - const settingsRolesIsLoading = useAtomStateValue( - settingsRolesIsLoadingStateV2, - ); + const settingsRolesIsLoading = useAtomStateValue(settingsRolesIsLoadingState); const settingsDraftRole = useAtomFamilyStateValue( settingsDraftRoleFamilyState, diff --git a/packages/twenty-front/src/modules/settings/roles/states/settingsRolesIsLoadingState.ts b/packages/twenty-front/src/modules/settings/roles/states/settingsRolesIsLoadingState.ts new file mode 100644 index 0000000000..350c61357d --- /dev/null +++ b/packages/twenty-front/src/modules/settings/roles/states/settingsRolesIsLoadingState.ts @@ -0,0 +1,6 @@ +import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; + +export const settingsRolesIsLoadingState = createAtomState({ + key: 'settingsRolesIsLoadingState', + defaultValue: true, +}); diff --git a/packages/twenty-front/src/modules/settings/roles/states/settingsRolesIsLoadingStateV2.ts b/packages/twenty-front/src/modules/settings/roles/states/settingsRolesIsLoadingStateV2.ts deleted file mode 100644 index fc4d4f4a1c..0000000000 --- a/packages/twenty-front/src/modules/settings/roles/states/settingsRolesIsLoadingStateV2.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; - -export const settingsRolesIsLoadingStateV2 = createAtomState({ - key: 'settingsRolesIsLoadingStateV2', - defaultValue: true, -}); diff --git a/packages/twenty-front/src/modules/settings/workspace/components/NameField.tsx b/packages/twenty-front/src/modules/settings/workspace/components/NameField.tsx index 1682724f7a..d5c92bfae0 100644 --- a/packages/twenty-front/src/modules/settings/workspace/components/NameField.tsx +++ b/packages/twenty-front/src/modules/settings/workspace/components/NameField.tsx @@ -45,7 +45,7 @@ export const NameField = ({ const debouncedUpdate = useCallback( useDebouncedCallback(async (name: string) => { if (isEmpty(name)) return; - // update local recoil state when workspace name is updated + // update local state when workspace name is updated setCurrentWorkspace((currentValue) => { if (currentValue === null) { return null; diff --git a/packages/twenty-front/src/modules/spreadsheet-import/hooks/__tests__/useSpreadsheetImport.test.tsx b/packages/twenty-front/src/modules/spreadsheet-import/hooks/__tests__/useSpreadsheetImport.test.tsx index 6f8ebe223c..6474a30d03 100644 --- a/packages/twenty-front/src/modules/spreadsheet-import/hooks/__tests__/useSpreadsheetImport.test.tsx +++ b/packages/twenty-front/src/modules/spreadsheet-import/hooks/__tests__/useSpreadsheetImport.test.tsx @@ -47,7 +47,7 @@ export const mockedSpreadsheetOptions: SpreadsheetImportDialogOptions = { }; describe('useSpreadsheetImport', () => { - it('should set isOpen to true, and update the options in the Recoil state', async () => { + it('should set isOpen to true, and update the options in state', async () => { const { result } = renderHook( () => ({ useSpreadsheetImport: useOpenSpreadsheetImportDialog(), diff --git a/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/SelectHeader.stories.tsx b/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/SelectHeader.stories.tsx index 452707399e..bd35e37a4b 100644 --- a/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/SelectHeader.stories.tsx +++ b/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/SelectHeader.stories.tsx @@ -12,7 +12,6 @@ import { DialogComponentInstanceContext } from '@/ui/feedback/dialog-manager/con import { isModalOpenedComponentState } from '@/ui/layout/modal/states/isModalOpenedComponentState'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; const meta: Meta = { title: 'Modules/SpreadsheetImport/SelectHeaderStep', @@ -30,9 +29,7 @@ const meta: Meta = { ); return ( - - - + ); }, diff --git a/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/SelectSheet.stories.tsx b/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/SelectSheet.stories.tsx index e7266f70e2..51edcd2fa7 100644 --- a/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/SelectSheet.stories.tsx +++ b/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/SelectSheet.stories.tsx @@ -9,7 +9,6 @@ import { DialogComponentInstanceContext } from '@/ui/feedback/dialog-manager/con import { isModalOpenedComponentState } from '@/ui/layout/modal/states/isModalOpenedComponentState'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; const meta: Meta = { title: 'Modules/SpreadsheetImport/SelectSheetStep', @@ -27,9 +26,7 @@ const meta: Meta = { ); return ( - - - + ); }, diff --git a/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/Steps.stories.tsx b/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/Steps.stories.tsx index 5f3aa49dd0..cb5de9ec61 100644 --- a/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/Steps.stories.tsx +++ b/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/Steps.stories.tsx @@ -16,7 +16,7 @@ const meta: Meta = { ContextStoreDecorator, ], parameters: { - initialRecoilState: { + initialState: { [stepBarInternalState.key]: { activeStep: 0 }, }, }, diff --git a/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/Upload.stories.tsx b/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/Upload.stories.tsx index b367e7f5d1..ab23bac035 100644 --- a/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/Upload.stories.tsx +++ b/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/Upload.stories.tsx @@ -9,7 +9,6 @@ import { DialogComponentInstanceContext } from '@/ui/feedback/dialog-manager/con import { isModalOpenedComponentState } from '@/ui/layout/modal/states/isModalOpenedComponentState'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; import { ContextStoreDecorator } from '~/testing/decorators/ContextStoreDecorator'; import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator'; import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator'; @@ -32,9 +31,7 @@ const meta: Meta = { ); return ( - - - + ); }, diff --git a/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/Validation.stories.tsx b/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/Validation.stories.tsx index c4fcd89a4c..8a16f33a66 100644 --- a/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/Validation.stories.tsx +++ b/packages/twenty-front/src/modules/spreadsheet-import/steps/components/__stories__/Validation.stories.tsx @@ -12,7 +12,6 @@ import { DialogComponentInstanceContext } from '@/ui/feedback/dialog-manager/con import { isModalOpenedComponentState } from '@/ui/layout/modal/states/isModalOpenedComponentState'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; const meta: Meta = { title: 'Modules/SpreadsheetImport/ValidationStep', @@ -30,9 +29,7 @@ const meta: Meta = { ); return ( - - - + ); }, diff --git a/packages/twenty-front/src/modules/ui/feedback/dialog-manager/hooks/__tests__/useDialogManager.test.tsx b/packages/twenty-front/src/modules/ui/feedback/dialog-manager/hooks/__tests__/useDialogManager.test.tsx index e78631b142..5140067a8d 100644 --- a/packages/twenty-front/src/modules/ui/feedback/dialog-manager/hooks/__tests__/useDialogManager.test.tsx +++ b/packages/twenty-front/src/modules/ui/feedback/dialog-manager/hooks/__tests__/useDialogManager.test.tsx @@ -1,6 +1,5 @@ import { act, renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; import { v4 as uuidv4 } from 'uuid'; import { DialogComponentInstanceContext } from '@/ui/feedback/dialog-manager/contexts/DialogComponentInstanceContext'; @@ -19,15 +18,13 @@ jest.mock('uuid'); (uuidv4 as jest.Mock).mockReturnValue(mockedUuid); const Wrapper = ({ children }: { children: React.ReactNode }) => ( - - - - {children} - - - + + + {children} + + ); const renderHookConfig = { diff --git a/packages/twenty-front/src/modules/ui/field/display/components/FilesDisplay.tsx b/packages/twenty-front/src/modules/ui/field/display/components/FilesDisplay.tsx index e96f02f23f..57824f949c 100644 --- a/packages/twenty-front/src/modules/ui/field/display/components/FilesDisplay.tsx +++ b/packages/twenty-front/src/modules/ui/field/display/components/FilesDisplay.tsx @@ -1,9 +1,9 @@ import { downloadFile } from '@/activities/files/utils/downloadFile'; -import { isAttachmentPreviewEnabledStateV2 } from '@/client-config/states/isAttachmentPreviewEnabledStateV2'; +import { isAttachmentPreviewEnabledState } from '@/client-config/states/isAttachmentPreviewEnabledState'; import { type FieldFilesValue } from '@/object-record/record-field/ui/types/FieldMetadata'; import { FileChip } from '@/ui/field/display/components/FileChip'; import { UploadFileChip } from '@/ui/field/display/components/UploadFileChip'; -import { filePreviewStateV2 } from '@/ui/field/display/states/filePreviewStateV2'; +import { filePreviewState } from '@/ui/field/display/states/filePreviewState'; import { ExpandableList } from '@/ui/layout/expandable-list/components/ExpandableList'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; @@ -22,9 +22,9 @@ export const FilesDisplay = ({ isUploadWindowOpen = false, isFileUploading = false, }: FilesDisplayProps) => { - const setFilePreview = useSetAtomState(filePreviewStateV2); + const setFilePreview = useSetAtomState(filePreviewState); const isAttachmentPreviewEnabled = useAtomStateValue( - isAttachmentPreviewEnabledStateV2, + isAttachmentPreviewEnabledState, ); const handlePreview = (file: FieldFilesValue) => { diff --git a/packages/twenty-front/src/modules/ui/field/display/components/GlobalFilePreviewModal.tsx b/packages/twenty-front/src/modules/ui/field/display/components/GlobalFilePreviewModal.tsx index 3a747ff007..ad958e15b7 100644 --- a/packages/twenty-front/src/modules/ui/field/display/components/GlobalFilePreviewModal.tsx +++ b/packages/twenty-front/src/modules/ui/field/display/components/GlobalFilePreviewModal.tsx @@ -1,5 +1,5 @@ import { downloadFile } from '@/activities/files/utils/downloadFile'; -import { filePreviewStateV2 } from '@/ui/field/display/states/filePreviewStateV2'; +import { filePreviewState } from '@/ui/field/display/states/filePreviewState'; import { Modal } from '@/ui/layout/modal/components/Modal'; import { useModal } from '@/ui/layout/modal/hooks/useModal'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; @@ -72,7 +72,7 @@ const StyledLoadingText = styled.div` export const GlobalFilePreviewModal = (): JSX.Element | null => { const { t } = useLingui(); - const [filePreview, setFilePreview] = useAtomState(filePreviewStateV2); + const [filePreview, setFilePreview] = useAtomState(filePreviewState); const { openModal, closeModal } = useModal(); useEffect(() => { diff --git a/packages/twenty-front/src/modules/ui/field/display/states/filePreviewStateV2.ts b/packages/twenty-front/src/modules/ui/field/display/states/filePreviewStateV2.ts deleted file mode 100644 index dfe1c5262d..0000000000 --- a/packages/twenty-front/src/modules/ui/field/display/states/filePreviewStateV2.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { type FieldFilesValue } from '@/object-record/record-field/ui/types/FieldMetadata'; -import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; - -export const filePreviewStateV2 = createAtomState({ - key: 'filePreviewStateV2', - defaultValue: null, -}); diff --git a/packages/twenty-front/src/modules/ui/input/components/internal/date/hooks/__tests__/useParseZonedDateTimeToIMaskDateTimeInputString.test.tsx b/packages/twenty-front/src/modules/ui/input/components/internal/date/hooks/__tests__/useParseZonedDateTimeToIMaskDateTimeInputString.test.tsx index f641c6498d..51cac0afc7 100644 --- a/packages/twenty-front/src/modules/ui/input/components/internal/date/hooks/__tests__/useParseZonedDateTimeToIMaskDateTimeInputString.test.tsx +++ b/packages/twenty-front/src/modules/ui/input/components/internal/date/hooks/__tests__/useParseZonedDateTimeToIMaskDateTimeInputString.test.tsx @@ -1,6 +1,5 @@ import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; import { Temporal } from 'temporal-polyfill'; import { DateFormat } from '@/localization/constants/DateFormat'; @@ -31,11 +30,7 @@ describe('useParseZonedDateTimeToIMaskDateTimeInputString', () => { numberFormat: NumberFormat.COMMAS_AND_DOT, calendarStartDay: CalendarStartDay.MONDAY, }); - return ( - - {children} - - ); + return {children}; }; it('should format with day first format (DD/MM/YYYY, HH:mm)', () => { diff --git a/packages/twenty-front/src/modules/ui/input/components/internal/date/hooks/__tests__/useUserTimezone.test.tsx b/packages/twenty-front/src/modules/ui/input/components/internal/date/hooks/__tests__/useUserTimezone.test.tsx index 5ca63084dd..f096e8b889 100644 --- a/packages/twenty-front/src/modules/ui/input/components/internal/date/hooks/__tests__/useUserTimezone.test.tsx +++ b/packages/twenty-front/src/modules/ui/input/components/internal/date/hooks/__tests__/useUserTimezone.test.tsx @@ -1,6 +1,5 @@ import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { useUserTimezone } from '@/ui/input/components/internal/date/hooks/useUserTimezone'; @@ -26,9 +25,7 @@ describe('useUserTimezone', () => { it('should return system timezone when currentWorkspaceMember is null', () => { const Wrapper = ({ children }: { children: React.ReactNode }) => ( - - {children} - + {children} ); const { result } = renderHook(() => useUserTimezone(), { @@ -60,11 +57,7 @@ describe('useUserTimezone', () => { children, }: { children: React.ReactNode; - }) => ( - - {children} - - ); + }) => {children}; const { result } = renderHook(() => useUserTimezone(), { wrapper: WrapperWithSystemTimezone, @@ -97,11 +90,7 @@ describe('useUserTimezone', () => { children, }: { children: React.ReactNode; - }) => ( - - {children} - - ); + }) => {children}; const { result } = renderHook(() => useUserTimezone(), { wrapper: WrapperWithUserTimezone, diff --git a/packages/twenty-front/src/modules/ui/input/hooks/__tests__/useIconPicker.test.tsx b/packages/twenty-front/src/modules/ui/input/hooks/__tests__/useIconPicker.test.tsx index 9c08c5a2e0..613df695d6 100644 --- a/packages/twenty-front/src/modules/ui/input/hooks/__tests__/useIconPicker.test.tsx +++ b/packages/twenty-front/src/modules/ui/input/hooks/__tests__/useIconPicker.test.tsx @@ -1,15 +1,12 @@ import { renderHook } from '@testing-library/react'; import { act } from 'react'; -import { RecoilRoot } from 'recoil'; import { useIconPicker } from '@/ui/input/hooks/useIconPicker'; import { Icon123, IconApps } from 'twenty-ui/display'; describe('useIconPicker', () => { it('should return correct iconPickerState', async () => { - const { result } = renderHook(() => useIconPicker(), { - wrapper: RecoilRoot, - }); + const { result } = renderHook(() => useIconPicker()); const { Icon, iconKey, setIconPicker } = result.current; @@ -19,9 +16,7 @@ describe('useIconPicker', () => { }); it('should update the icon', async () => { - const { result } = renderHook(() => useIconPicker(), { - wrapper: RecoilRoot, - }); + const { result } = renderHook(() => useIconPicker()); const { Icon, iconKey, setIconPicker } = result.current; diff --git a/packages/twenty-front/src/modules/ui/layout/dropdown/components/__stories__/Dropdown.stories.tsx b/packages/twenty-front/src/modules/ui/layout/dropdown/components/__stories__/Dropdown.stories.tsx index 6a2a711b1f..cf6c23d693 100644 --- a/packages/twenty-front/src/modules/ui/layout/dropdown/components/__stories__/Dropdown.stories.tsx +++ b/packages/twenty-front/src/modules/ui/layout/dropdown/components/__stories__/Dropdown.stories.tsx @@ -16,9 +16,6 @@ import { DropdownMenuHeaderLeftComponent } from '@/ui/layout/dropdown/components // TEMP_DISABLED_TEST: Commented out unused imports due to commented tests // import { Modal } from '@/ui/layout/modal/components/Modal'; // import { isModalOpenedComponentState } from '@/ui/layout/modal/states/isModalOpenedComponentState'; -// import { focusStackState } from '@/ui/utilities/focus/states/focusStackState'; -// import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType'; -// import { type SetRecoilState } from 'recoil'; import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; import { DropdownMenuHeader } from '@/ui/layout/dropdown/components/DropdownMenuHeader/DropdownMenuHeader'; import { DropdownMenuInput } from '@/ui/layout/dropdown/components/DropdownMenuInput'; @@ -377,7 +374,7 @@ export const WithInput: Story = { // }; // TEMP_DISABLED_TEST: Commented out unused function -// const initializeModalState = ({ set }: { set: SetRecoilState }) => { +// const initializeModalState = ({ set }: { set: (atom: any, value: any) => void }) => { // set( // isModalOpenedComponentState.atomFamily({ // instanceId: modalId, diff --git a/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/__tests__/useCloseAnyOpenDropdown.test.tsx b/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/__tests__/useCloseAnyOpenDropdown.test.tsx index 401068949a..aab39666b1 100644 --- a/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/__tests__/useCloseAnyOpenDropdown.test.tsx +++ b/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/__tests__/useCloseAnyOpenDropdown.test.tsx @@ -1,7 +1,6 @@ import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { act } from 'react'; -import { RecoilRoot } from 'recoil'; import { DropdownComponentInstanceContext } from '@/ui/layout/dropdown/contexts/DropdownComponentInstanceContext'; import { useCloseAnyOpenDropdown } from '@/ui/layout/dropdown/hooks/useCloseAnyOpenDropdown'; @@ -15,13 +14,11 @@ const dropdownId = 'test-dropdown-id'; const Wrapper = ({ children }: { children: React.ReactNode }) => { return ( - - - {children} - - + + {children} + ); }; diff --git a/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/__tests__/useCloseDropdown.test.tsx b/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/__tests__/useCloseDropdown.test.tsx index a4e816d9f3..8079bfa14b 100644 --- a/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/__tests__/useCloseDropdown.test.tsx +++ b/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/__tests__/useCloseDropdown.test.tsx @@ -1,7 +1,6 @@ import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { act } from 'react'; -import { RecoilRoot } from 'recoil'; import { DropdownComponentInstanceContext } from '@/ui/layout/dropdown/contexts/DropdownComponentInstanceContext'; import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown'; @@ -16,16 +15,14 @@ const outsideDropdownId = 'test-dropdown-id-outside'; const Wrapper = ({ children }: { children: React.ReactNode }) => { return ( - - - {children} - - - + + {children} + + ); }; diff --git a/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/__tests__/useOpenDropdown.test.tsx b/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/__tests__/useOpenDropdown.test.tsx index 72752b2b71..7b90d9a314 100644 --- a/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/__tests__/useOpenDropdown.test.tsx +++ b/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/__tests__/useOpenDropdown.test.tsx @@ -1,8 +1,6 @@ import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { act } from 'react'; -import { RecoilRoot } from 'recoil'; - import { DropdownComponentInstanceContext } from '@/ui/layout/dropdown/contexts/DropdownComponentInstanceContext'; import { useOpenDropdown } from '@/ui/layout/dropdown/hooks/useOpenDropdown'; import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDropdownOpenComponentState'; @@ -15,16 +13,14 @@ const outsideDropdownId = 'test-dropdown-id-outside'; const Wrapper = ({ children }: { children: React.ReactNode }) => { return ( - - - {children} - - - + + {children} + + ); }; diff --git a/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/__tests__/useToggleDropdown.test.tsx b/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/__tests__/useToggleDropdown.test.tsx index 69219d1ee4..3b3047c4c2 100644 --- a/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/__tests__/useToggleDropdown.test.tsx +++ b/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/__tests__/useToggleDropdown.test.tsx @@ -1,7 +1,6 @@ import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { act } from 'react'; -import { RecoilRoot } from 'recoil'; import { DropdownComponentInstanceContext } from '@/ui/layout/dropdown/contexts/DropdownComponentInstanceContext'; import { useToggleDropdown } from '@/ui/layout/dropdown/hooks/useToggleDropdown'; @@ -15,16 +14,14 @@ const outsideDropdownId = 'test-dropdown-id-outside'; const Wrapper = ({ children }: { children: React.ReactNode }) => { return ( - - - {children} - - - + + {children} + + ); }; diff --git a/packages/twenty-front/src/modules/ui/layout/hooks/__tests__/useShowAuthModal.test.tsx b/packages/twenty-front/src/modules/ui/layout/hooks/__tests__/useShowAuthModal.test.tsx index 1d67efa241..bf0c66ca3e 100644 --- a/packages/twenty-front/src/modules/ui/layout/hooks/__tests__/useShowAuthModal.test.tsx +++ b/packages/twenty-front/src/modules/ui/layout/hooks/__tests__/useShowAuthModal.test.tsx @@ -1,6 +1,5 @@ import { renderHook } from '@testing-library/react'; import * as reactRouterDom from 'react-router-dom'; -import { RecoilRoot } from 'recoil'; import { useShowAuthModal } from '@/ui/layout/hooks/useShowAuthModal'; import { AppPath } from 'twenty-shared/types'; @@ -23,14 +22,9 @@ const setupMockIsMatchingLocation = (pathname: string) => { }; const getResult = () => - renderHook( - () => { - return useShowAuthModal(); - }, - { - wrapper: RecoilRoot, - }, - ); + renderHook(() => { + return useShowAuthModal(); + }); const testCases = [ { loc: AppPath.Verify, res: true }, diff --git a/packages/twenty-front/src/modules/ui/layout/modal/hooks/__tests__/useModal.spec.tsx b/packages/twenty-front/src/modules/ui/layout/modal/hooks/__tests__/useModal.spec.tsx index 7862152ebc..e2da09a534 100644 --- a/packages/twenty-front/src/modules/ui/layout/modal/hooks/__tests__/useModal.spec.tsx +++ b/packages/twenty-front/src/modules/ui/layout/modal/hooks/__tests__/useModal.spec.tsx @@ -1,7 +1,6 @@ import { renderHook } from '@testing-library/react'; import { createStore, Provider } from 'jotai'; import { type ReactNode, act } from 'react'; -import { RecoilRoot } from 'recoil'; import { useModal } from '@/ui/layout/modal/hooks/useModal'; import { isModalOpenedComponentState } from '@/ui/layout/modal/states/isModalOpenedComponentState'; @@ -13,9 +12,7 @@ const createTestWrapper = () => { const store = createStore(); const TestWrapper = ({ children }: { children: ReactNode }) => ( - - {children} - + {children} ); return TestWrapper; diff --git a/packages/twenty-front/src/modules/ui/layout/page-header/components/PageHeaderToggleCommandMenuButton.tsx b/packages/twenty-front/src/modules/ui/layout/page-header/components/PageHeaderToggleCommandMenuButton.tsx index a23987fc33..03b059fd79 100644 --- a/packages/twenty-front/src/modules/ui/layout/page-header/components/PageHeaderToggleCommandMenuButton.tsx +++ b/packages/twenty-front/src/modules/ui/layout/page-header/components/PageHeaderToggleCommandMenuButton.tsx @@ -1,7 +1,7 @@ import { COMMAND_MENU_SEARCH_BAR_HEIGHT_MOBILE } from '@/command-menu/constants/CommandMenuSearchBarHeightMobile'; import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; -import { isCommandMenuOpenedStateV2 } from '@/command-menu/states/isCommandMenuOpenedStateV2'; -import { isNavigationMenuInEditModeStateV2 } from '@/navigation-menu-item/states/isNavigationMenuInEditModeStateV2'; +import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; +import { isNavigationMenuInEditModeState } from '@/navigation-menu-item/states/isNavigationMenuInEditModeState'; import { RootStackingContextZIndices } from '@/ui/layout/constants/RootStackingContextZIndices'; import { PAGE_HEADER_COMMAND_MENU_BUTTON_CLICK_OUTSIDE_ID } from '@/ui/layout/page-header/constants/PageHeaderCommandMenuButtonClickOutsideId'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; @@ -122,9 +122,9 @@ const AnimatedIcon = ({ export const PageHeaderToggleCommandMenuButton = () => { const { toggleCommandMenu } = useCommandMenu(); - const isCommandMenuOpened = useAtomStateValue(isCommandMenuOpenedStateV2); + const isCommandMenuOpened = useAtomStateValue(isCommandMenuOpenedState); const isNavigationMenuInEditMode = useAtomStateValue( - isNavigationMenuInEditModeStateV2, + isNavigationMenuInEditModeState, ); const isMobile = useIsMobile(); diff --git a/packages/twenty-front/src/modules/ui/layout/show-page/components/FieldRichTextCard.tsx b/packages/twenty-front/src/modules/ui/layout/show-page/components/FieldRichTextCard.tsx index 6151cfe717..7aff409cc8 100644 --- a/packages/twenty-front/src/modules/ui/layout/show-page/components/FieldRichTextCard.tsx +++ b/packages/twenty-front/src/modules/ui/layout/show-page/components/FieldRichTextCard.tsx @@ -1,6 +1,6 @@ import { SKELETON_LOADER_HEIGHT_SIZES } from '@/activities/components/SkeletonLoader'; import { type CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; -import { recordStoreFamilySelectorV2 } from '@/object-record/record-store/states/selectors/recordStoreFamilySelectorV2'; +import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; import { useTargetRecord } from '@/ui/layout/contexts/useTargetRecord'; import { ScrollWrapper } from '@/ui/utilities/scroll/components/ScrollWrapper'; import { useTheme } from '@emotion/react'; @@ -48,13 +48,10 @@ const LoadingSkeleton = () => { export const FieldRichTextCard = () => { const targetRecord = useTargetRecord(); - const activityBodyV2 = useAtomFamilySelectorValue( - recordStoreFamilySelectorV2, - { - recordId: targetRecord.id, - fieldName: 'bodyV2', - }, - ); + const activityBodyV2 = useAtomFamilySelectorValue(recordStoreFamilySelector, { + recordId: targetRecord.id, + fieldName: 'bodyV2', + }); const activityObjectNameSingular = targetRecord.targetObjectNameSingular as | CoreObjectNameSingular.Note diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/MultiWorkspaceDropdownButton.tsx b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/MultiWorkspaceDropdownButton.tsx index 099a573d54..fc8ae775cb 100644 --- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/MultiWorkspaceDropdownButton.tsx +++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/MultiWorkspaceDropdownButton.tsx @@ -4,13 +4,13 @@ import { MultiWorkspaceDropdownDefaultComponents } from '@/ui/navigation/navigat import { MultiWorkspaceDropdownThemesComponents } from '@/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspaceDropdownThemesComponents'; import { MultiWorkspaceDropdownWorkspacesListComponents } from '@/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspaceDropdownWorkspacesListComponents'; import { MULTI_WORKSPACE_DROPDOWN_ID } from '@/ui/navigation/navigation-drawer/constants/MultiWorkspaceDropdownId'; -import { multiWorkspaceDropdownStateV2 } from '@/ui/navigation/navigation-drawer/states/multiWorkspaceDropdownStateV2'; +import { multiWorkspaceDropdownState } from '@/ui/navigation/navigation-drawer/states/multiWorkspaceDropdownState'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { useMemo } from 'react'; export const MultiWorkspaceDropdownButton = () => { const [multiWorkspaceDropdown, setMultiWorkspaceDropdown] = useAtomState( - multiWorkspaceDropdownStateV2, + multiWorkspaceDropdownState, ); const DropdownComponents = useMemo(() => { diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspaceDropdownDefaultComponents.tsx b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspaceDropdownDefaultComponents.tsx index f70bb6f9c8..8e47627310 100644 --- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspaceDropdownDefaultComponents.tsx +++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspaceDropdownDefaultComponents.tsx @@ -18,7 +18,7 @@ import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/Drop import { DropdownMenuSeparator } from '@/ui/layout/dropdown/components/DropdownMenuSeparator'; import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown'; import { MULTI_WORKSPACE_DROPDOWN_ID } from '@/ui/navigation/navigation-drawer/constants/MultiWorkspaceDropdownId'; -import { multiWorkspaceDropdownStateV2 } from '@/ui/navigation/navigation-drawer/states/multiWorkspaceDropdownStateV2'; +import { multiWorkspaceDropdownState } from '@/ui/navigation/navigation-drawer/states/multiWorkspaceDropdownState'; import { useColorScheme } from '@/ui/theme/hooks/useColorScheme'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { type ApolloError } from '@apollo/client'; @@ -76,7 +76,7 @@ export const MultiWorkspaceDropdownDefaultComponents = () => { const [signUpInNewWorkspaceMutation] = useSignUpInNewWorkspaceMutation(); const setMultiWorkspaceDropdownState = useSetAtomState( - multiWorkspaceDropdownStateV2, + multiWorkspaceDropdownState, ); const handleSupport = () => { diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspaceDropdownThemesComponents.tsx b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspaceDropdownThemesComponents.tsx index 312d0c54e2..50cbfc44d1 100644 --- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspaceDropdownThemesComponents.tsx +++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspaceDropdownThemesComponents.tsx @@ -2,7 +2,7 @@ import { DropdownContent } from '@/ui/layout/dropdown/components/DropdownContent import { DropdownMenuHeader } from '@/ui/layout/dropdown/components/DropdownMenuHeader/DropdownMenuHeader'; import { DropdownMenuHeaderLeftComponent } from '@/ui/layout/dropdown/components/DropdownMenuHeader/internal/DropdownMenuHeaderLeftComponent'; import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; -import { multiWorkspaceDropdownStateV2 } from '@/ui/navigation/navigation-drawer/states/multiWorkspaceDropdownStateV2'; +import { multiWorkspaceDropdownState } from '@/ui/navigation/navigation-drawer/states/multiWorkspaceDropdownState'; import { useColorScheme } from '@/ui/theme/hooks/useColorScheme'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { useLingui } from '@lingui/react/macro'; @@ -15,7 +15,7 @@ export const MultiWorkspaceDropdownThemesComponents = () => { const { setColorScheme, colorScheme, colorSchemeList } = useColorScheme(); const setMultiWorkspaceDropdownState = useSetAtomState( - multiWorkspaceDropdownStateV2, + multiWorkspaceDropdownState, ); return ( diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspaceDropdownWorkspacesListComponents.tsx b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspaceDropdownWorkspacesListComponents.tsx index 0fdd385a42..683b83fd5c 100644 --- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspaceDropdownWorkspacesListComponents.tsx +++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspaceDropdownWorkspacesListComponents.tsx @@ -3,7 +3,7 @@ import { DropdownMenuHeader } from '@/ui/layout/dropdown/components/DropdownMenu import { DropdownMenuHeaderLeftComponent } from '@/ui/layout/dropdown/components/DropdownMenuHeader/internal/DropdownMenuHeaderLeftComponent'; import { DropdownMenuSearchInput } from '@/ui/layout/dropdown/components/DropdownMenuSearchInput'; import { DropdownMenuSeparator } from '@/ui/layout/dropdown/components/DropdownMenuSeparator'; -import { multiWorkspaceDropdownStateV2 } from '@/ui/navigation/navigation-drawer/states/multiWorkspaceDropdownStateV2'; +import { multiWorkspaceDropdownState } from '@/ui/navigation/navigation-drawer/states/multiWorkspaceDropdownState'; import { useLingui } from '@lingui/react/macro'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; @@ -20,7 +20,7 @@ export const MultiWorkspaceDropdownWorkspacesListComponents = () => { const availableWorkspaces = useAtomStateValue(availableWorkspacesState); const setMultiWorkspaceDropdownState = useSetAtomState( - multiWorkspaceDropdownStateV2, + multiWorkspaceDropdownState, ); const [searchValue, setSearchValue] = useState(''); diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerBackButton.tsx b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerBackButton.tsx index 793dcc222e..f900005172 100644 --- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerBackButton.tsx +++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerBackButton.tsx @@ -2,7 +2,7 @@ import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { isNavigationDrawerExpandedState } from '@/ui/navigation/states/isNavigationDrawerExpanded'; -import { navigationDrawerExpandedMemorizedStateV2 } from '@/ui/navigation/states/navigationDrawerExpandedMemorizedStateV2'; +import { navigationDrawerExpandedMemorizedState } from '@/ui/navigation/states/navigationDrawerExpandedMemorizedState'; import { navigationMemorizedUrlState } from '@/ui/navigation/states/navigationMemorizedUrlState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; @@ -53,7 +53,7 @@ export const NavigationDrawerBackButton = ({ isNavigationDrawerExpandedState, ); const navigationDrawerExpandedMemorized = useAtomStateValue( - navigationDrawerExpandedMemorizedStateV2, + navigationDrawerExpandedMemorizedState, ); const isWorkspaceSuspended = useIsWorkspaceActivationStatusEqualsTo( diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/states/currentFavoriteFolderIdState.ts b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/states/currentFavoriteFolderIdState.ts new file mode 100644 index 0000000000..56d0eab587 --- /dev/null +++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/states/currentFavoriteFolderIdState.ts @@ -0,0 +1,6 @@ +import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; + +export const currentFavoriteFolderIdState = createAtomState({ + key: 'currentFavoriteFolderIdState', + defaultValue: null, +}); diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/states/currentFavoriteFolderIdStateV2.ts b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/states/currentFavoriteFolderIdStateV2.ts deleted file mode 100644 index 9a978666ad..0000000000 --- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/states/currentFavoriteFolderIdStateV2.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; - -export const currentFavoriteFolderIdStateV2 = createAtomState({ - key: 'currentFavoriteFolderIdStateV2', - defaultValue: null, -}); diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/states/currentNavigationMenuItemFolderIdStateV2.ts b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/states/currentNavigationMenuItemFolderIdState.ts similarity index 51% rename from packages/twenty-front/src/modules/ui/navigation/navigation-drawer/states/currentNavigationMenuItemFolderIdStateV2.ts rename to packages/twenty-front/src/modules/ui/navigation/navigation-drawer/states/currentNavigationMenuItemFolderIdState.ts index c02fcd545f..80d0b3ed2a 100644 --- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/states/currentNavigationMenuItemFolderIdStateV2.ts +++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/states/currentNavigationMenuItemFolderIdState.ts @@ -1,8 +1,8 @@ import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const currentNavigationMenuItemFolderIdStateV2 = createAtomState< +export const currentNavigationMenuItemFolderIdState = createAtomState< string | null >({ - key: 'currentNavigationMenuItemFolderIdStateV2', + key: 'currentNavigationMenuItemFolderIdState', defaultValue: null, }); diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/states/multiWorkspaceDropdownStateV2.ts b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/states/multiWorkspaceDropdownState.ts similarity index 61% rename from packages/twenty-front/src/modules/ui/navigation/navigation-drawer/states/multiWorkspaceDropdownStateV2.ts rename to packages/twenty-front/src/modules/ui/navigation/navigation-drawer/states/multiWorkspaceDropdownState.ts index 9c8476d5b7..6f18d85519 100644 --- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/states/multiWorkspaceDropdownStateV2.ts +++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/states/multiWorkspaceDropdownState.ts @@ -1,8 +1,8 @@ import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const multiWorkspaceDropdownStateV2 = createAtomState< +export const multiWorkspaceDropdownState = createAtomState< 'default' | 'workspaces-list' | 'themes' >({ - key: 'multiWorkspaceDropdownStateV2', + key: 'multiWorkspaceDropdownState', defaultValue: 'default', }); diff --git a/packages/twenty-front/src/modules/ui/navigation/states/navigationDrawerExpandedMemorizedStateV2.ts b/packages/twenty-front/src/modules/ui/navigation/states/navigationDrawerExpandedMemorizedState.ts similarity index 52% rename from packages/twenty-front/src/modules/ui/navigation/states/navigationDrawerExpandedMemorizedStateV2.ts rename to packages/twenty-front/src/modules/ui/navigation/states/navigationDrawerExpandedMemorizedState.ts index 7293a509d4..ee4a040e62 100644 --- a/packages/twenty-front/src/modules/ui/navigation/states/navigationDrawerExpandedMemorizedStateV2.ts +++ b/packages/twenty-front/src/modules/ui/navigation/states/navigationDrawerExpandedMemorizedState.ts @@ -4,8 +4,7 @@ import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomStat const isMobile = window.innerWidth <= MOBILE_VIEWPORT; -export const navigationDrawerExpandedMemorizedStateV2 = - createAtomState({ - key: 'navigationDrawerExpandedMemorizedStateV2', - defaultValue: !isMobile, - }); +export const navigationDrawerExpandedMemorizedState = createAtomState({ + key: 'navigationDrawerExpandedMemorizedState', + defaultValue: !isMobile, +}); diff --git a/packages/twenty-front/src/modules/ui/theme/hooks/__tests__/useColorScheme.test.tsx b/packages/twenty-front/src/modules/ui/theme/hooks/__tests__/useColorScheme.test.tsx index 97d91dccc8..c63c544916 100644 --- a/packages/twenty-front/src/modules/ui/theme/hooks/__tests__/useColorScheme.test.tsx +++ b/packages/twenty-front/src/modules/ui/theme/hooks/__tests__/useColorScheme.test.tsx @@ -1,7 +1,5 @@ import { act, renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; - import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { useColorScheme } from '@/ui/theme/hooks/useColorScheme'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; @@ -34,9 +32,7 @@ const workspaceMember: Omit< describe('useColorScheme', () => { it('should update color scheme', async () => { const Wrapper = ({ children }: { children: React.ReactNode }) => ( - - {children} - + {children} ); const { result } = renderHook( diff --git a/packages/twenty-front/src/modules/ui/theme/hooks/__tests__/useSystemColorScheme.test.tsx b/packages/twenty-front/src/modules/ui/theme/hooks/__tests__/useSystemColorScheme.test.tsx index c8dc9dd437..2a1195d86a 100644 --- a/packages/twenty-front/src/modules/ui/theme/hooks/__tests__/useSystemColorScheme.test.tsx +++ b/packages/twenty-front/src/modules/ui/theme/hooks/__tests__/useSystemColorScheme.test.tsx @@ -1,5 +1,4 @@ import { renderHook } from '@testing-library/react'; -import { RecoilRoot } from 'recoil'; import { useSystemColorScheme } from '@/ui/theme/hooks/useSystemColorScheme'; @@ -19,9 +18,7 @@ Object.defineProperty(window, 'matchMedia', { describe('useSystemColorScheme', () => { it('should update color scheme', async () => { - const { result } = renderHook(() => useSystemColorScheme(), { - wrapper: RecoilRoot, - }); + const { result } = renderHook(() => useSystemColorScheme()); expect(result.current).toBe('Light'); }); diff --git a/packages/twenty-front/src/modules/ui/utilities/drag-select/components/__tests__/DragSelect.test.tsx b/packages/twenty-front/src/modules/ui/utilities/drag-select/components/__tests__/DragSelect.test.tsx index 5458ff0a87..a3647aca79 100644 --- a/packages/twenty-front/src/modules/ui/utilities/drag-select/components/__tests__/DragSelect.test.tsx +++ b/packages/twenty-front/src/modules/ui/utilities/drag-select/components/__tests__/DragSelect.test.tsx @@ -1,6 +1,5 @@ import { render } from '@testing-library/react'; import { act } from 'react'; -import { RecoilRoot } from 'recoil'; import { type PointerEventListener } from '@/ui/utilities/pointer-event/types/PointerEventListener'; import { useDragSelect } from '@/ui/utilities/drag-select/hooks/useDragSelect'; @@ -47,13 +46,11 @@ describe('DragSelect', () => { const renderDragSelect = (selectionBoundaryClass?: string) => { return render( - - - , + , ); }; @@ -111,12 +108,10 @@ describe('DragSelect', () => { expect(() => { render( - - - , + , ); }).not.toThrow(); }); @@ -152,12 +147,10 @@ describe('DragSelect', () => { it('should work without scrollWrapperComponentInstanceId (universal compatibility)', () => { expect(() => { render( - - - , + , ); }).not.toThrow(); diff --git a/packages/twenty-front/src/modules/ui/utilities/drag-select/hooks/__tests__/useDragSelect.test.tsx b/packages/twenty-front/src/modules/ui/utilities/drag-select/hooks/__tests__/useDragSelect.test.tsx index 5baca9bf0f..9cecb8189a 100644 --- a/packages/twenty-front/src/modules/ui/utilities/drag-select/hooks/__tests__/useDragSelect.test.tsx +++ b/packages/twenty-front/src/modules/ui/utilities/drag-select/hooks/__tests__/useDragSelect.test.tsx @@ -1,15 +1,12 @@ import { renderHook } from '@testing-library/react'; import { Provider as JotaiProvider } from 'jotai'; import { type ReactNode, act } from 'react'; -import { RecoilRoot } from 'recoil'; import { useDragSelect } from '@/ui/utilities/drag-select/hooks/useDragSelect'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; const Wrapper = ({ children }: { children: ReactNode }) => ( - - {children} - + {children} ); describe('useDragSelect', () => { diff --git a/packages/twenty-front/src/modules/ui/utilities/drag-select/hooks/useDragSelect.ts b/packages/twenty-front/src/modules/ui/utilities/drag-select/hooks/useDragSelect.ts index 2a53e03541..3d88e32f6c 100644 --- a/packages/twenty-front/src/modules/ui/utilities/drag-select/hooks/useDragSelect.ts +++ b/packages/twenty-front/src/modules/ui/utilities/drag-select/hooks/useDragSelect.ts @@ -1,6 +1,6 @@ import { useCallback } from 'react'; -import { isDragSelectionStartEnabledStateV2 } from '@/ui/utilities/drag-select/states/internal/isDragSelectionStartEnabledStateV2'; +import { isDragSelectionStartEnabledState } from '@/ui/utilities/drag-select/states/internal/isDragSelectionStartEnabledState'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { useStore } from 'jotai'; @@ -8,7 +8,7 @@ export const useDragSelect = () => { const store = useStore(); const setIsDragSelectionStartEnabled = useSetAtomState( - isDragSelectionStartEnabledStateV2, + isDragSelectionStartEnabledState, ); const setDragSelectionStartEnabled = (isEnabled: boolean) => { @@ -16,7 +16,7 @@ export const useDragSelect = () => { }; const isDragSelectionStartEnabled = useCallback( - () => store.get(isDragSelectionStartEnabledStateV2.atom), + () => store.get(isDragSelectionStartEnabledState.atom), [store], ); diff --git a/packages/twenty-front/src/modules/ui/utilities/drag-select/states/internal/isDragSelectionStartEnabledState.ts b/packages/twenty-front/src/modules/ui/utilities/drag-select/states/internal/isDragSelectionStartEnabledState.ts new file mode 100644 index 0000000000..d8fc000e50 --- /dev/null +++ b/packages/twenty-front/src/modules/ui/utilities/drag-select/states/internal/isDragSelectionStartEnabledState.ts @@ -0,0 +1,6 @@ +import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; + +export const isDragSelectionStartEnabledState = createAtomState({ + key: 'drag-select/isDragSelectionStartEnabledState', + defaultValue: true, +}); diff --git a/packages/twenty-front/src/modules/ui/utilities/drag-select/states/internal/isDragSelectionStartEnabledStateV2.ts b/packages/twenty-front/src/modules/ui/utilities/drag-select/states/internal/isDragSelectionStartEnabledStateV2.ts deleted file mode 100644 index 18ef458b30..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/drag-select/states/internal/isDragSelectionStartEnabledStateV2.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; - -export const isDragSelectionStartEnabledStateV2 = createAtomState({ - key: 'drag-select/isDragSelectionStartEnabledStateV2', - defaultValue: true, -}); diff --git a/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/__tests__/useGoToHotkeys.test.tsx b/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/__tests__/useGoToHotkeys.test.tsx index c2a46b5b20..6ca0118656 100644 --- a/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/__tests__/useGoToHotkeys.test.tsx +++ b/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/__tests__/useGoToHotkeys.test.tsx @@ -1,6 +1,5 @@ import { act, fireEvent, renderHook } from '@testing-library/react'; import { MemoryRouter, useLocation } from 'react-router-dom'; -import { RecoilRoot } from 'recoil'; import { useGoToHotkeys } from '@/ui/utilities/hotkey/hooks/useGoToHotkeys'; @@ -9,7 +8,7 @@ const Wrapper = ({ children }: { children: React.ReactNode }) => ( initialEntries={['/one', '/two', { pathname: '/three' }]} initialIndex={1} > - {children} + {children} ); const renderHookConfig = { diff --git a/packages/twenty-front/src/modules/ui/utilities/pointer-event/hooks/__tests__/useListenClickOutside.test.tsx b/packages/twenty-front/src/modules/ui/utilities/pointer-event/hooks/__tests__/useListenClickOutside.test.tsx index e37dab1186..02feea5def 100644 --- a/packages/twenty-front/src/modules/ui/utilities/pointer-event/hooks/__tests__/useListenClickOutside.test.tsx +++ b/packages/twenty-front/src/modules/ui/utilities/pointer-event/hooks/__tests__/useListenClickOutside.test.tsx @@ -1,6 +1,5 @@ import { fireEvent, renderHook } from '@testing-library/react'; import React, { act } from 'react'; -import { RecoilRoot } from 'recoil'; import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useListenClickOutside'; import { isDefined } from 'twenty-shared/utils'; @@ -8,9 +7,7 @@ import { isDefined } from 'twenty-shared/utils'; const containerRef = React.createRef(); const Wrapper = ({ children }: { children: React.ReactNode }) => ( - -
{children}
-
+
{children}
); const listenerId = 'listenerId'; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackState.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackState.ts deleted file mode 100644 index b82927c62d..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackState.ts +++ /dev/null @@ -1,131 +0,0 @@ -/* eslint-disable prefer-arrow/prefer-arrow-functions */ -import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; -import { type ComponentFamilyReadOnlySelector } from '@/ui/utilities/state/component-state/types/ComponentFamilyReadOnlySelector'; -import { type ComponentFamilySelector } from '@/ui/utilities/state/component-state/types/ComponentFamilySelector'; -import { type ComponentFamilyState } from '@/ui/utilities/state/component-state/types/ComponentFamilyState'; -import { type ComponentReadOnlySelector } from '@/ui/utilities/state/component-state/types/ComponentReadOnlySelector'; -import { type ComponentSelector } from '@/ui/utilities/state/component-state/types/ComponentSelector'; -import { type ComponentState } from '@/ui/utilities/state/component-state/types/ComponentState'; -import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { - type RecoilState, - type RecoilValueReadOnly, - type SerializableParam, -} from 'recoil'; - -export function useRecoilComponentCallbackState( - componentState: ComponentState, - instanceIdFromProps?: string, -): RecoilState; -export function useRecoilComponentCallbackState( - componentSelector: ComponentSelector, - instanceIdFromProps?: string, -): RecoilState; -export function useRecoilComponentCallbackState( - componentReadOnlySelector: ComponentReadOnlySelector, - instanceIdFromProps?: string, -): RecoilValueReadOnly; -export function useRecoilComponentCallbackState< - ValueType, - FamilyKey extends SerializableParam, ->( - componentFamilyState: ComponentFamilyState, - instanceIdFromProps?: string, -): (familyKey: FamilyKey) => RecoilState; -export function useRecoilComponentCallbackState< - ValueType, - FamilyKey extends SerializableParam, ->( - componentFamilySelector: ComponentFamilySelector, - instanceIdFromProps?: string, -): (familyKey: FamilyKey) => RecoilState; -export function useRecoilComponentCallbackState< - ValueType, - FamilyKey extends SerializableParam, ->( - componentFamilyReadOnlySelector: ComponentFamilyReadOnlySelector< - ValueType, - FamilyKey - >, - instanceIdFromProps?: string, -): (familyKey: FamilyKey) => RecoilValueReadOnly; -export function useRecoilComponentCallbackState< - ValueType, - FamilyKey extends SerializableParam, ->( - componentFamilyState: ComponentFamilyState, - instanceIdFromProps?: string, -): (familyKey: FamilyKey) => RecoilState; -export function useRecoilComponentCallbackState< - InferedComponentState extends - | ComponentState - | ComponentSelector - | ComponentReadOnlySelector - | ComponentFamilyState - | ComponentFamilySelector - | ComponentFamilyReadOnlySelector, - ValueType, - FamilyKey extends SerializableParam = never, ->( - componentState: InferedComponentState, - instanceIdFromProps?: string, -): - | RecoilState - | RecoilValueReadOnly - | ((familyKey: FamilyKey) => RecoilState) - | ((familyKey: FamilyKey) => RecoilValueReadOnly) { - const componentStateKey = componentState.key; - - const componentInstanceContext = - globalComponentInstanceContextMap.get(componentStateKey); - - if (!componentInstanceContext) { - throw new Error( - `Instance context for key "${componentStateKey}" is not defined, check the component state declaration.`, - ); - } - - const instanceId = useAvailableComponentInstanceIdOrThrow( - componentInstanceContext, - instanceIdFromProps, - ); - - switch (componentState.type) { - case 'ComponentState': { - return componentState.atomFamily({ - instanceId, - }); - } - case 'ComponentSelector': { - return componentState.selectorFamily({ - instanceId, - }); - } - case 'ComponentReadOnlySelector': { - return componentState.selectorFamily({ - instanceId, - }); - } - case 'ComponentFamilyState': { - return (familyKey: FamilyKey) => - componentState.atomFamily({ - instanceId, - familyKey, - }); - } - case 'ComponentFamilySelector': { - return (familyKey: FamilyKey) => - componentState.selectorFamily({ - instanceId, - familyKey, - }); - } - case 'ComponentFamilyReadOnlySelector': { - return (familyKey: FamilyKey) => - componentState.selectorFamily({ - instanceId, - familyKey, - }); - } - } -} diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyCallbackState.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyCallbackState.ts deleted file mode 100644 index 7161d83268..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyCallbackState.ts +++ /dev/null @@ -1,101 +0,0 @@ -/* eslint-disable prefer-arrow/prefer-arrow-functions */ -import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; -import { type ComponentFamilyReadOnlySelector } from '@/ui/utilities/state/component-state/types/ComponentFamilyReadOnlySelector'; -import { type ComponentFamilySelector } from '@/ui/utilities/state/component-state/types/ComponentFamilySelector'; -import { type ComponentFamilyState } from '@/ui/utilities/state/component-state/types/ComponentFamilyState'; -import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { useCallback } from 'react'; -import { - type RecoilState, - type RecoilValueReadOnly, - type SerializableParam, -} from 'recoil'; - -export function useRecoilComponentFamilyCallbackState< - ValueType, - FamilyKey extends SerializableParam, ->( - componentFamilyState: ComponentFamilyState, - instanceIdFromProps?: string, -): (familyKey: FamilyKey) => RecoilState; -export function useRecoilComponentFamilyCallbackState< - ValueType, - FamilyKey extends SerializableParam, ->( - componentFamilySelector: ComponentFamilySelector, - instanceIdFromProps?: string, -): (familyKey: FamilyKey) => RecoilState; -export function useRecoilComponentFamilyCallbackState< - ValueType, - FamilyKey extends SerializableParam, ->( - componentFamilyReadOnlySelector: ComponentFamilyReadOnlySelector< - ValueType, - FamilyKey - >, - instanceIdFromProps?: string, -): (familyKey: FamilyKey) => RecoilValueReadOnly; -export function useRecoilComponentFamilyCallbackState< - ValueType, - FamilyKey extends SerializableParam, ->( - componentFamilyState: ComponentFamilyState, - instanceIdFromProps?: string, -): (familyKey: FamilyKey) => RecoilState; -export function useRecoilComponentFamilyCallbackState< - ComponentState extends - | ComponentFamilyState - | ComponentFamilySelector - | ComponentFamilyReadOnlySelector, - ValueType, - FamilyKey extends SerializableParam = never, ->( - componentState: ComponentState, - instanceIdFromProps?: string, -): - | RecoilState - | RecoilValueReadOnly - | ((familyKey: FamilyKey) => RecoilState) - | ((familyKey: FamilyKey) => RecoilValueReadOnly) { - const componentStateKey = componentState.key; - - const componentInstanceContext = - globalComponentInstanceContextMap.get(componentStateKey); - - if (!componentInstanceContext) { - throw new Error( - `Instance context for key "${componentStateKey}" is not defined, check the component state declaration.`, - ); - } - - const instanceId = useAvailableComponentInstanceIdOrThrow( - componentInstanceContext, - instanceIdFromProps, - ); - - return useCallback( - (familyKey: FamilyKey) => { - switch (componentState.type) { - case 'ComponentFamilyState': { - return componentState.atomFamily({ - instanceId, - familyKey, - }); - } - case 'ComponentFamilySelector': { - return componentState.selectorFamily({ - instanceId, - familyKey, - }); - } - case 'ComponentFamilyReadOnlySelector': { - return componentState.selectorFamily({ - instanceId, - familyKey, - }); - } - } - }, - [componentState, instanceId], - ); -} diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyState.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyState.ts deleted file mode 100644 index 107666f3b8..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyState.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; -import { type ComponentFamilySelector } from '@/ui/utilities/state/component-state/types/ComponentFamilySelector'; -import { type ComponentFamilyState } from '@/ui/utilities/state/component-state/types/ComponentFamilyState'; -import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type SerializableParam, useRecoilState } from 'recoil'; - -export const useRecoilComponentFamilyState = < - StateType, - FamilyKey extends SerializableParam, ->( - componentState: - | ComponentFamilyState - | ComponentFamilySelector, - familyKey: FamilyKey, - instanceIdFromProps?: string, -) => { - const componentInstanceContext = globalComponentInstanceContextMap.get( - componentState.key, - ); - - if (!componentInstanceContext) { - throw new Error( - `Instance context for key "${componentState.key}" is not defined`, - ); - } - - const instanceId = useAvailableComponentInstanceIdOrThrow( - componentInstanceContext, - instanceIdFromProps, - ); - - const familySelector = - componentState.type === 'ComponentFamilyState' - ? componentState.atomFamily({ instanceId, familyKey }) - : componentState.selectorFamily({ instanceId, familyKey }); - - return useRecoilState(familySelector); -}; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyValue.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyValue.ts deleted file mode 100644 index c1ed6517fb..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyValue.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* eslint-disable react-hooks/rules-of-hooks */ -import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; -import { type ComponentFamilyReadOnlySelector } from '@/ui/utilities/state/component-state/types/ComponentFamilyReadOnlySelector'; -import { type ComponentFamilySelector } from '@/ui/utilities/state/component-state/types/ComponentFamilySelector'; -import { type ComponentFamilyState } from '@/ui/utilities/state/component-state/types/ComponentFamilyState'; -import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type SerializableParam, useRecoilValue } from 'recoil'; - -export const useRecoilComponentFamilyValue = < - StateType, - FamilyKey extends SerializableParam, ->( - componentState: - | ComponentFamilyState - | ComponentFamilySelector - | ComponentFamilyReadOnlySelector, - familyKey: FamilyKey, - instanceIdFromProps?: string, -): StateType => { - const instanceContext = globalComponentInstanceContextMap.get( - componentState.key, - ); - - if (!instanceContext) { - throw new Error( - `Instance context for key "${componentState.key}" is not defined`, - ); - } - - const instanceId = useAvailableComponentInstanceIdOrThrow( - instanceContext, - instanceIdFromProps, - ); - - switch (componentState.type) { - case 'ComponentFamilyState': { - return useRecoilValue( - componentState.atomFamily({ familyKey, instanceId }), - ); - } - case 'ComponentFamilySelector': { - return useRecoilValue( - componentState.selectorFamily({ familyKey, instanceId }), - ); - } - case 'ComponentFamilyReadOnlySelector': { - return useRecoilValue( - componentState.selectorFamily({ familyKey, instanceId }), - ); - } - } -}; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useRecoilComponentState.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useRecoilComponentState.ts deleted file mode 100644 index 02c7242507..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useRecoilComponentState.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; -import { type ComponentState } from '@/ui/utilities/state/component-state/types/ComponentState'; -import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { useRecoilState } from 'recoil'; - -export const useRecoilComponentState = ( - componentState: ComponentState, - instanceIdFromProps?: string, -) => { - const componentInstanceContext = globalComponentInstanceContextMap.get( - componentState.key, - ); - - if (!componentInstanceContext) { - throw new Error( - `Instance context for key "${componentState.key}" is not defined`, - ); - } - - const instanceId = useAvailableComponentInstanceIdOrThrow( - componentInstanceContext, - instanceIdFromProps, - ); - - return useRecoilState(componentState.atomFamily({ instanceId })); -}; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useRecoilComponentValue.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useRecoilComponentValue.ts deleted file mode 100644 index f113c99c85..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useRecoilComponentValue.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; -import { type ComponentReadOnlySelector } from '@/ui/utilities/state/component-state/types/ComponentReadOnlySelector'; -import { type ComponentSelector } from '@/ui/utilities/state/component-state/types/ComponentSelector'; -import { type ComponentState } from '@/ui/utilities/state/component-state/types/ComponentState'; -import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { - type RecoilState, - type RecoilValueReadOnly, - useRecoilValue, -} from 'recoil'; - -export const useRecoilComponentValue = ( - componentState: - | ComponentState - | ComponentSelector - | ComponentReadOnlySelector, - instanceIdFromProps?: string, -) => { - const instanceContext = globalComponentInstanceContextMap.get( - componentState.key, - ); - - if (!instanceContext) { - throw new Error( - `Instance context for key "${componentState.key}" is not defined`, - ); - } - - const instanceId = useAvailableComponentInstanceIdOrThrow( - instanceContext, - instanceIdFromProps, - ); - - let state: RecoilState | RecoilValueReadOnly; - - if (componentState.type === 'ComponentState') { - state = componentState.atomFamily({ instanceId }); - } else if ( - componentState.type === 'ComponentSelector' || - componentState.type === 'ComponentReadOnlySelector' - ) { - state = componentState.selectorFamily({ instanceId }); - } else { - throw new Error('Invalid component state type'); - } - - return useRecoilValue(state); -}; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useSetRecoilComponentFamilyState.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useSetRecoilComponentFamilyState.ts deleted file mode 100644 index 03af56fda7..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useSetRecoilComponentFamilyState.ts +++ /dev/null @@ -1,56 +0,0 @@ -/* eslint-disable react-hooks/rules-of-hooks */ - -// We're disabling rules-of-hooks because we're sure that the call order cannot be modified -// because a component state cannot change its type during its lifecycle - -import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; -import { type ComponentFamilySelector } from '@/ui/utilities/state/component-state/types/ComponentFamilySelector'; -import { type ComponentFamilyState } from '@/ui/utilities/state/component-state/types/ComponentFamilyState'; -import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { - type SerializableParam, - type SetterOrUpdater, - useSetRecoilState, -} from 'recoil'; - -export const useSetRecoilComponentFamilyState = < - StateType, - FamilyKey extends SerializableParam, ->( - componentState: - | ComponentFamilyState - | ComponentFamilySelector, - familyKey: FamilyKey, - instanceIdFromProps?: string, -): SetterOrUpdater => { - const componentInstanceContext = globalComponentInstanceContextMap.get( - componentState.key, - ); - - if (!componentInstanceContext) { - throw new Error( - `Instance context for key "${componentState.key}" is not defined`, - ); - } - - const instanceId = useAvailableComponentInstanceIdOrThrow( - componentInstanceContext, - instanceIdFromProps, - ); - - switch (componentState.type) { - case 'ComponentFamilyState': { - return useSetRecoilState( - componentState.atomFamily({ familyKey, instanceId }), - ); - } - case 'ComponentFamilySelector': { - return useSetRecoilState( - componentState.selectorFamily({ - familyKey, - instanceId, - }), - ); - } - } -}; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useSetRecoilComponentState.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useSetRecoilComponentState.ts deleted file mode 100644 index e44814cc7b..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/hooks/useSetRecoilComponentState.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; -import { type ComponentSelector } from '@/ui/utilities/state/component-state/types/ComponentSelector'; -import { type ComponentState } from '@/ui/utilities/state/component-state/types/ComponentState'; -import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { - type RecoilState, - type SetterOrUpdater, - useSetRecoilState, -} from 'recoil'; - -export const useSetRecoilComponentState = ( - componentState: ComponentState | ComponentSelector, - instanceIdFromProps?: string, -): SetterOrUpdater => { - const componentInstanceContext = globalComponentInstanceContextMap.get( - componentState.key, - ); - - if (!componentInstanceContext) { - throw new Error( - `Instance context for key "${componentState.key}" is not defined`, - ); - } - - const instanceId = useAvailableComponentInstanceIdOrThrow( - componentInstanceContext, - instanceIdFromProps, - ); - - let state: RecoilState; - - if (componentState.type === 'ComponentState') { - state = componentState.atomFamily({ instanceId }); - } else if (componentState.type === 'ComponentSelector') { - state = componentState.selectorFamily({ instanceId }); - } else { - throw new Error('Invalid component state type'); - } - - return useSetRecoilState(state); -}; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentFamilyReadOnlySelector.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentFamilyReadOnlySelector.ts deleted file mode 100644 index d954ea7c0e..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentFamilyReadOnlySelector.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type ComponentFamilyStateKey } from '@/ui/utilities/state/component-state/types/ComponentFamilyStateKey'; -import { type ComponentStateType } from '@/ui/utilities/state/component-state/types/ComponentStateType'; -import { type RecoilValueReadOnly, type SerializableParam } from 'recoil'; - -export type ComponentFamilyReadOnlySelector< - StateType, - FamilyKey extends SerializableParam, -> = { - type: Extract; - key: string; - selectorFamily: ( - componentFamilyStateKey: ComponentFamilyStateKey, - ) => RecoilValueReadOnly; -}; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentFamilySelector.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentFamilySelector.ts deleted file mode 100644 index 35027fbb26..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentFamilySelector.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type ComponentFamilyStateKey } from '@/ui/utilities/state/component-state/types/ComponentFamilyStateKey'; -import { type ComponentStateType } from '@/ui/utilities/state/component-state/types/ComponentStateType'; -import { type RecoilState, type SerializableParam } from 'recoil'; - -export type ComponentFamilySelector< - StateType, - FamilyKey extends SerializableParam, -> = { - type: Extract; - key: string; - selectorFamily: ( - componentFamilyStateKey: ComponentFamilyStateKey, - ) => RecoilState; -}; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentFamilyState.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentFamilyState.ts deleted file mode 100644 index 99a21e412d..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentFamilyState.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type ComponentFamilyStateKey } from '@/ui/utilities/state/component-state/types/ComponentFamilyStateKey'; -import { type ComponentStateType } from '@/ui/utilities/state/component-state/types/ComponentStateType'; -import { type RecoilState, type SerializableParam } from 'recoil'; - -export type ComponentFamilyState< - StateType, - FamilyKey extends SerializableParam, -> = { - type: Extract; - key: string; - atomFamily: ( - componentFamilyStateKey: ComponentFamilyStateKey, - ) => RecoilState; -}; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentFamilyStateKey.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentFamilyStateKey.ts deleted file mode 100644 index 8d5bb3e916..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentFamilyStateKey.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { type ComponentStateKey } from '@/ui/utilities/state/component-state/types/ComponentStateKey'; -import { type SerializableParam } from 'recoil'; - -export type ComponentFamilyStateKey = - ComponentStateKey & { - familyKey: FamilyKey; - }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentReadOnlySelector.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentReadOnlySelector.ts deleted file mode 100644 index d2ac58b6c5..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentReadOnlySelector.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type ComponentStateKey } from '@/ui/utilities/state/component-state/types/ComponentStateKey'; -import { type ComponentStateType } from '@/ui/utilities/state/component-state/types/ComponentStateType'; -import { type RecoilValueReadOnly } from 'recoil'; - -export type ComponentReadOnlySelector = { - type: Extract; - key: string; - selectorFamily: ( - componentStateKey: ComponentStateKey, - ) => RecoilValueReadOnly; -}; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentSelector.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentSelector.ts deleted file mode 100644 index bf0defc573..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentSelector.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type ComponentStateKey } from '@/ui/utilities/state/component-state/types/ComponentStateKey'; -import { type ComponentStateType } from '@/ui/utilities/state/component-state/types/ComponentStateType'; -import { type RecoilState } from 'recoil'; - -export type ComponentSelector = { - type: Extract; - key: string; - selectorFamily: ( - componentStateKey: ComponentStateKey, - ) => RecoilState; -}; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentState.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentState.ts deleted file mode 100644 index 6f22b80ee6..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/types/ComponentState.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { type ComponentStateKey } from '@/ui/utilities/state/component-state/types/ComponentStateKey'; -import { type ComponentStateType } from '@/ui/utilities/state/component-state/types/ComponentStateType'; -import { type RecoilState } from 'recoil'; - -export type ComponentState = { - type: Extract; - key: string; - atomFamily: (componentStateKey: ComponentStateKey) => RecoilState; -}; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentFamilySelector.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentFamilySelector.ts deleted file mode 100644 index 6290d1f503..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentFamilySelector.ts +++ /dev/null @@ -1,79 +0,0 @@ -/* eslint-disable prefer-arrow/prefer-arrow-functions */ -import { selectorFamily, type SerializableParam } from 'recoil'; - -import { type ComponentFamilyReadOnlySelector } from '@/ui/utilities/state/component-state/types/ComponentFamilyReadOnlySelector'; -import { type ComponentFamilySelector } from '@/ui/utilities/state/component-state/types/ComponentFamilySelector'; -import { type ComponentFamilyStateKey } from '@/ui/utilities/state/component-state/types/ComponentFamilyStateKey'; -import { type ComponentInstanceStateContext } from '@/ui/utilities/state/component-state/types/ComponentInstanceStateContext'; -import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type SelectorGetter } from '@/ui/utilities/state/types/SelectorGetter'; -import { type SelectorSetter } from '@/ui/utilities/state/types/SelectorSetter'; -import { isDefined } from 'twenty-shared/utils'; - -export function createComponentFamilySelector< - ValueType, - FamilyKey extends SerializableParam, ->(options: { - key: string; - get: SelectorGetter>; - set?: never; - componentInstanceContext: ComponentInstanceStateContext | null; -}): ComponentFamilyReadOnlySelector; - -export function createComponentFamilySelector< - ValueType, - FamilyKey extends SerializableParam, ->(options: { - key: string; - get: SelectorGetter>; - set: SelectorSetter>; - componentInstanceContext: ComponentInstanceStateContext | null; -}): ComponentFamilySelector; - -export function createComponentFamilySelector< - ValueType, - FamilyKey extends SerializableParam, ->({ - key, - get, - set, - componentInstanceContext, -}: { - key: string; - get: SelectorGetter>; - set?: SelectorSetter>; - componentInstanceContext: ComponentInstanceStateContext | null; -}): - | ComponentFamilySelector - | ComponentFamilyReadOnlySelector { - if (isDefined(componentInstanceContext)) { - globalComponentInstanceContextMap.set(key, componentInstanceContext); - } - - if (isDefined(set)) { - return { - type: 'ComponentFamilySelector', - key, - selectorFamily: selectorFamily< - ValueType, - ComponentFamilyStateKey - >({ - key, - get, - set, - }), - } satisfies ComponentFamilySelector; - } else { - return { - type: 'ComponentFamilyReadOnlySelector', - key, - selectorFamily: selectorFamily< - ValueType, - ComponentFamilyStateKey - >({ - key, - get, - }), - } satisfies ComponentFamilyReadOnlySelector; - } -} diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentFamilyState.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentFamilyState.ts deleted file mode 100644 index 7b85651109..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentFamilyState.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { type ComponentFamilyState } from '@/ui/utilities/state/component-state/types/ComponentFamilyState'; -import { type ComponentFamilyStateKey } from '@/ui/utilities/state/component-state/types/ComponentFamilyStateKey'; -import { type ComponentInstanceStateContext } from '@/ui/utilities/state/component-state/types/ComponentInstanceStateContext'; -import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { - type AtomEffect, - atomFamily, - type Loadable, - type RecoilValue, - type SerializableParam, - type WrappedValue, -} from 'recoil'; -import { isDefined } from 'twenty-shared/utils'; - -type CreateComponentFamilyStateArgs< - ValueType, - FamilyKey extends SerializableParam, -> = { - key: string; - defaultValue: - | ValueType - | (( - param: ComponentFamilyStateKey, - ) => - | ValueType - | RecoilValue - | Promise - | Loadable - | WrappedValue); - componentInstanceContext: ComponentInstanceStateContext | null; - effects?: - | AtomEffect[] - | (( - param: ComponentFamilyStateKey, - ) => ReadonlyArray>); -}; - -export const createComponentFamilyState = < - ValueType, - FamilyKey extends SerializableParam, ->({ - key, - effects, - defaultValue, - componentInstanceContext, -}: CreateComponentFamilyStateArgs): ComponentFamilyState< - ValueType, - FamilyKey -> => { - if (isDefined(componentInstanceContext)) { - globalComponentInstanceContextMap.set(key, componentInstanceContext); - } - - return { - type: 'ComponentFamilyState', - key, - atomFamily: atomFamily>({ - key, - default: defaultValue, - effects, - }), - } satisfies ComponentFamilyState; -}; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentSelector.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentSelector.ts deleted file mode 100644 index 5fa667bc48..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentSelector.ts +++ /dev/null @@ -1,62 +0,0 @@ -/* eslint-disable prefer-arrow/prefer-arrow-functions */ -import { selectorFamily } from 'recoil'; - -import { type ComponentInstanceStateContext } from '@/ui/utilities/state/component-state/types/ComponentInstanceStateContext'; -import { type ComponentReadOnlySelector } from '@/ui/utilities/state/component-state/types/ComponentReadOnlySelector'; -import { type ComponentSelector } from '@/ui/utilities/state/component-state/types/ComponentSelector'; -import { type ComponentStateKey } from '@/ui/utilities/state/component-state/types/ComponentStateKey'; -import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type SelectorGetter } from '@/ui/utilities/state/types/SelectorGetter'; -import { type SelectorSetter } from '@/ui/utilities/state/types/SelectorSetter'; -import { isDefined } from 'twenty-shared/utils'; - -export function createComponentSelector(options: { - key: string; - get: SelectorGetter; - set?: never; - componentInstanceContext: ComponentInstanceStateContext | null; -}): ComponentReadOnlySelector; - -export function createComponentSelector(options: { - key: string; - get: SelectorGetter; - set: SelectorSetter; - componentInstanceContext: ComponentInstanceStateContext | null; -}): ComponentSelector; - -export function createComponentSelector({ - key, - get, - set, - componentInstanceContext, -}: { - key: string; - get: SelectorGetter; - set?: SelectorSetter; - componentInstanceContext: ComponentInstanceStateContext | null; -}): ComponentSelector | ComponentReadOnlySelector { - if (isDefined(componentInstanceContext)) { - globalComponentInstanceContextMap.set(key, componentInstanceContext); - } - - if (isDefined(set)) { - return { - type: 'ComponentSelector', - key, - selectorFamily: selectorFamily({ - key, - get, - set, - }), - } satisfies ComponentSelector; - } else { - return { - type: 'ComponentReadOnlySelector', - key, - selectorFamily: selectorFamily({ - key, - get, - }), - } satisfies ComponentReadOnlySelector; - } -} diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentState.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentState.ts deleted file mode 100644 index 5fa10bf87a..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentState.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { type ComponentInstanceStateContext } from '@/ui/utilities/state/component-state/types/ComponentInstanceStateContext'; -import { type ComponentState } from '@/ui/utilities/state/component-state/types/ComponentState'; -import { type ComponentStateKey } from '@/ui/utilities/state/component-state/types/ComponentStateKey'; -import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type AtomEffect, atomFamily } from 'recoil'; -import { isDefined } from 'twenty-shared/utils'; - -type CreateComponentInstanceStateArgs = { - key: string; - defaultValue: ValueType; - componentInstanceContext: ComponentInstanceStateContext | null; - effects?: AtomEffect[]; -}; - -export const createComponentState = ({ - key, - defaultValue, - componentInstanceContext, - effects, -}: CreateComponentInstanceStateArgs): ComponentState => { - if (isDefined(componentInstanceContext)) { - globalComponentInstanceContextMap.set(key, componentInstanceContext); - } - - return { - type: 'ComponentState', - key, - atomFamily: atomFamily({ - key, - default: defaultValue, - effects: effects, - }), - } satisfies ComponentState; -}; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/MIGRATION_PLAN.md b/packages/twenty-front/src/modules/ui/utilities/state/jotai/MIGRATION_PLAN.md deleted file mode 100644 index 57389dbaf0..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/MIGRATION_PLAN.md +++ /dev/null @@ -1,425 +0,0 @@ -# Recoil → Jotai Migration Plan - -## Overview - -- **429 state files** + **69 selector files** = ~500 total Recoil-based state definitions -- **5 already migrated** (dropdown component states) -- Organized into **14 PRs** by module area, starting from lowest-level (fewest dependencies) to highest-level - -## State Creation Patterns (Recoil → Jotai) - -| Recoil Pattern | Count | Jotai Equivalent | -|---|---|---| -| `createState()` | ~100 global states | `createStateV2()` → Jotai `atom()` | -| `createComponentState()` | ~200 component states | `createComponentStateV2()` → Jotai `atom()` with instance cache | -| `createComponentFamilyState()` | ~27 component family states | New `createComponentFamilyStateV2()` → Jotai `atom()` with two-level cache | -| `createComponentSelector()` | ~28 component selectors | New `createComponentSelectorV2()` → Jotai derived `atom()` | -| `createComponentFamilySelector()` | ~9 component family selectors | New `createComponentFamilySelectorV2()` | -| Raw `atom()` from recoil | 3 | Jotai `atom()` via `createStateV2()` | -| Raw `atomFamily()` from recoil | 3 | Jotai `atom()` via `createFamilyStateV2()` | -| Raw `selector()` from recoil | 11 | Jotai derived `atom()` via `createSelectorV2()` | -| Raw `selectorFamily()` from recoil | ~21 | Jotai derived `atom()` via family pattern | - -## Hook Migration - -| Recoil Hook | Jotai Equivalent | -|---|---| -| `useRecoilValue()` | `useRecoilValueV2()` (already exists, wraps `useAtomValue`) | -| `useRecoilState()` | `useRecoilStateV2()` (already exists, wraps `useAtom`) | -| `useSetRecoilState()` | `useSetRecoilStateV2()` (already exists, wraps `useSetAtom`) | -| `useResetRecoilState()` | `jotaiStore.set(atom, defaultValue)` or new `useResetAtom` wrapper | -| `useRecoilComponentValue()` | `useRecoilComponentValueV2()` (already exists) | -| `useSetRecoilComponentState()` | `useSetRecoilComponentStateV2()` (already exists) | -| `useRecoilComponentState()` | `useRecoilComponentStateV2()` (already exists) | -| `useRecoilCallback()` | `useCallback()` + `jotaiStore.get/set` | - -## Infrastructure Needed Before Migration - -Before starting the PRs below, these Jotai V2 utilities need to be created (if not already): - -- [x] `createStateV2()` — global atom -- [x] `createFamilyStateV2()` — global atom family -- [x] `createSelectorV2()` — global derived atom -- [x] `createComponentStateV2()` — instance-scoped atom -- [x] `createComponentFamilyStateV2()` — instance-scoped atom family -- [ ] `createComponentSelectorV2()` — instance-scoped derived atom -- [ ] `createComponentFamilySelectorV2()` — instance-scoped derived atom family -- [ ] `createFamilySelectorV2()` — global derived atom family (for raw selectorFamily replacements) - ---- - -## PR 1: UI Utilities — Focus, Hotkeys, Loading, Pointer Events, Scroll ✅ DONE - -Low-level utilities used across the entire app. No dependencies on other app states. - -### States (16 files) -``` -ui/utilities/focus/states/focusStackState.ts -ui/utilities/hotkey/states/internal/pendingHotkeysState.ts -ui/utilities/loading-state/states/currentPageLocationState.ts -ui/utilities/pointer-event/states/clickOutsideListenerIsActivatedComponentState.ts -ui/utilities/pointer-event/states/clickOutsideListenerIsMouseDownInsideComponentState.ts -ui/utilities/pointer-event/states/clickOutsideListenerMouseDownHappenedComponentState.ts -ui/utilities/scroll/states/scrollWrapperScrollBottomComponentState.ts -ui/utilities/scroll/states/scrollWrapperScrollLeftComponentState.ts -ui/utilities/scroll/states/scrollWrapperScrollTopComponentState.ts -``` - -### Selectors (3 files) -``` -ui/utilities/focus/states/currentFocusIdSelector.ts -ui/utilities/focus/states/currentFocusedItemSelector.ts -ui/utilities/focus/states/currentGlobalHotkeysConfigSelector.ts -``` - -### Notes -- `focusStackState` is used by the dropdown hooks — needs to be migrated to unblock removing `useRecoilCallback` from dropdown hooks -- Focus selectors depend on `focusStackState` - ---- - -## PR 2: UI Layout — Selectable List, Modal, Tab List, Table ✅ DONE - -Core layout primitives used by record-table, record-board, and many other modules. - -### States (7 files) -``` -ui/layout/selectable-list/states/isSelectedItemIdComponentFamilyState.ts -ui/layout/selectable-list/states/selectableItemIdsComponentState.ts -ui/layout/selectable-list/states/selectedItemIdComponentState.ts -ui/layout/modal/states/isModalOpenedComponentState.ts -ui/layout/tab-list/states/activeTabIdComponentState.ts -ui/layout/table/states/sortedFieldByTableFamilyState.ts -``` - -### Selectors (1 file) -``` -ui/layout/selectable-list/states/selectors/isSelectedItemIdComponentFamilySelector.ts -``` - ---- - -## PR 3: UI Navigation, Theme, Input, Feedback, Field ✅ DONE - -### States (12 files) -``` -ui/navigation/navigation-drawer/states/isAdvancedModeEnabledState.ts -ui/navigation/navigation-drawer/states/isNavigationSectionOpenFamilyState.ts -ui/navigation/states/isNavigationDrawerExpanded.ts (raw Recoil atom) -ui/navigation/states/navigationDrawerWidthState.ts -ui/navigation/states/navigationMemorizedUrlState.ts -ui/navigation/states/shouldNavigateBackToMemorizedUrlOnSaveState.ts -ui/navigation/step-bar/states/stepBarInternalState.ts -ui/theme/states/persistedColorSchemeState.ts -ui/input/states/iconPickerState.ts -ui/input/states/iconPickerVisibleCountState.ts -ui/feedback/dialog-manager/states/dialogInternalComponentState.ts -ui/feedback/snack-bar-manager/states/snackBarInternalComponentState.ts -ui/field/display/states/filePreviewState.ts -``` - ---- - -## PR 4: Auth, Domain Manager, App, Captcha, Chrome Extension ✅ DONE - -Core authentication and app-level states. Very widely imported (~195 external imports for auth). - -### States (25 files) -``` -auth/states/availableWorkspacesState.ts -auth/states/billingCheckoutSessionState.ts -auth/states/currentUserState.ts -auth/states/currentUserWorkspaceState.ts -auth/states/currentWorkspaceDeletedMembersState.ts -auth/states/currentWorkspaceMemberState.ts -auth/states/currentWorkspaceMembersState.ts -auth/states/currentWorkspaceState.ts -auth/states/isCurrentUserLoadedState.ts -auth/states/lastAuthenticatedMethodState.ts -auth/states/loginTokenState.ts -auth/states/previousUrlState.ts -auth/states/signInUpModeState.ts -auth/states/signInUpStepState.ts -auth/states/tokenPairState.ts -auth/states/workspacePublicDataState.ts -domain-manager/states/domainConfigurationState.ts -domain-manager/states/lastAuthenticatedWorkspaceDomainState.ts -app/states/isAppEffectRedirectEnabledState.ts -app/states/verifyEmailRedirectPathState.ts -captcha/states/captchaTokenState.ts -captcha/states/isCaptchaScriptLoadedState.ts -captcha/states/isRequestingCaptchaTokenState.ts -chrome-extension-sidecar/states/isLoadingTokensFromExtensionState.ts -workspace/states/workspaceAuthBypassProvidersState.ts -workspace/states/workspaceAuthProvidersState.ts -workspace/states/workspaceBypassModeState.ts -``` - -### Selectors (2 files) -``` -auth/states/isImpersonatingState.ts (raw Recoil selector) -auth/states/objectPermissionsFamilySelector.ts -``` - ---- - -## PR 5: Client Config ✅ DONE - -26 simple global states, mostly boolean feature flags. Low risk. - -### States (26 files) -``` -client-config/states/aiModelsState.ts -client-config/states/apiConfigState.ts -client-config/states/appVersionState.ts -client-config/states/authProvidersState.ts -client-config/states/billingState.ts -client-config/states/calendarBookingPageIdState.ts -client-config/states/canManageFeatureFlagsState.ts -client-config/states/captchaState.ts -client-config/states/chromeExtensionIdState.ts -client-config/states/clientConfigApiStatusState.ts -client-config/states/isAnalyticsEnabledState.ts -client-config/states/isAttachmentPreviewEnabledState.ts -client-config/states/isClickHouseConfiguredState.ts -client-config/states/isCloudflareIntegrationEnabledState.ts -client-config/states/isConfigVariablesInDbEnabledState.ts -client-config/states/isDeveloperDefaultSignInPrefilledState.ts -client-config/states/isEmailVerificationRequiredState.ts -client-config/states/isEmailingDomainsEnabledState.ts -client-config/states/isGoogleCalendarEnabledState.ts -client-config/states/isGoogleMessagingEnabledState.ts -client-config/states/isImapSmtpCaldavEnabledState.ts -client-config/states/isMicrosoftCalendarEnabledState.ts -client-config/states/isMicrosoftMessagingEnabledState.ts -client-config/states/isMultiWorkspaceEnabledState.ts -client-config/states/sentryConfigState.ts -client-config/states/supportChatState.ts -``` - ---- - -## PR 6: Object Metadata - -Core metadata states used by record-table, record-board, views, etc. - -### States (3 files) -``` -object-metadata/states/lastFieldMetadataItemUpdateState.ts -object-metadata/states/objectMetadataItemsState.ts -``` - -### Selectors (12 files) -``` -object-metadata/states/availableFieldMetadataItemsForFilterFamilySelector.ts -object-metadata/states/availableFieldMetadataItemsForSortFamilySelector.ts -object-metadata/states/fieldMetadataItemByIdSelector.ts -object-metadata/states/flattenedFieldMetadataItemsSelector.ts -object-metadata/states/flattenedReadableFieldMetadataItemIdsSelector.ts -object-metadata/states/isFieldMetadataItemFilterableAndSortableSelector.ts -object-metadata/states/isFieldMetadataItemLabelIdentifierSelector.ts -object-metadata/states/labelIdentifierFieldMetadataItemSelector.ts -object-metadata/states/objectMetadataItemFamilySelector.ts -object-metadata/states/objectMetadataItemsByNamePluralMapSelector.ts -object-metadata/states/objectMetadataItemsByNameSingularMapSelector.ts -object-metadata/states/objectMetadataItemsBySingularNameSelector.ts -``` - -### Notes -- Object metadata selectors are raw `selectorFamily()` from Recoil — needs `createFamilySelectorV2()` utility -- Very widely depended on (~135 external imports) - ---- - -## PR 7: Object Record — Record Store - -The central record store, depended on by almost everything (~190 external imports). - -### States (2 files) -``` -object-record/states/recordStoreFamilyState.ts (raw atomFamily) -object-record/record-store/states/recordStoreFamilyState.ts -``` - -### Selectors (1 file remaining) -``` -object-record/record-store/states/selectors/recordStoreFieldValueSelector.ts ✅ MIGRATED (useRecordFieldValue uses V2) -object-record/record-store/states/selectors/recordStoreIdentifierSelector.ts ✅ MIGRATED (recordStoreIdentifierFamilySelectorV2) -object-record/record-store/states/selectors/recordStoreIdentifiersSelector.ts ✅ MIGRATED (already V2, now uses recordStoreFamilyState) -object-record/record-store/states/selectors/recordStoreMorphOneToManyValueWithObjectNameFamilySelector.ts ✅ MIGRATED -object-record/record-store/states/selectors/recordStoreRecordsSelector.ts ✅ MIGRATED (recordStoreRecordsSelectorV2) -``` - ---- - -## PR 8: Object Record — Filters, Sorts, Groups, Drag, Field, Calendar, Board, Picker - -### States (~80 files) -``` -object-record/object-filter-dropdown/states/ (12 files) -object-record/object-sort-dropdown/states/ (3 files) -object-record/record-filter/states/ (2 files) -object-record/record-filter-group/states/ (1 file) -object-record/record-sort/states/ (1 file) -object-record/record-group/states/ (3 files) -object-record/record-drag/states/ (7 files) -object-record/record-field/states/ (6 files) — filesFieldUploadState ✅ MIGRATED (deleted, use filesFieldUploadStateV2) -object-record/record-field-list/states/ (2 files) -object-record/record-calendar/states/ (6 files) -object-record/record-board/states/ (18 files) -object-record/record-picker/states/ (15 files) -object-record/record-right-drawer/states/ (2 files) -object-record/record-merge/states/ (2 files) -object-record/record-title-cell/states/ (1 file) -object-record/advanced-filter/states/ (1 selector) -``` - -### Selectors (~20 files) -``` -object-record/record-group/states/selectors/ (6 files) -object-record/record-index/states/selectors/ (5 files) -object-record/record-board/states/selectors/ (2 files) -object-record/record-calendar/states/selectors/ (2 files) -object-record/record-picker/states/selectors/ (5 files) -object-record/record-field/states/ (1 selector) -object-record/object-filter-dropdown/states/ (1 selector) -``` - ---- - -## PR 9: Object Record — Record Table - -Largest single module (40 states + 10 selectors). - -### States (~40 files) -``` -object-record/record-table/states/ (all component states) -object-record/record-table/record-table-row/states/ -object-record/record-table/record-table-footer/states/ -object-record/record-table/record-table-section/states/ -object-record/record-table/virtualization/states/ -``` - -### Selectors (~10 files) -``` -object-record/record-table/states/selectors/ -object-record/record-table/record-table-row/states/ -object-record/record-table/virtualization/states/ -``` - ---- - -## PR 10: Object Record — Record Index - -### States (~17 files) -``` -object-record/record-index/states/ (all files) -``` - -### Selectors (~5 files) -``` -object-record/record-index/states/selectors/ (all files) -``` - ---- - -## PR 11: Views, Favorites, Navigation, Prefetch, Localization - -### States (~30 files) -``` -views/states/ (10 files) -views/view-picker/states/ (13 files) -favorites/favorite-folder-picker/states/ (4 files) -navigation/states/ (3 files) -prefetch/states/ (4 files) -localization/states/ (1 file) -information-banner/states/ (1 file) -``` - -### Selectors (~8 files) -``` -views/states/selectors/ (6 files) -favorites/states/selectors/ (1 file) -favorites/favorite-folder-picker/states/selectors/ (1 file) -``` - ---- - -## PR 12: Context Store, Command Menu, Action Menu - -### States (~22 files) -``` -context-store/states/ (10 files) -command-menu/states/ (10 files) -command-menu/pages/*/states/ (10 files) -action-menu/states/ (1 file) -action-menu/actions/states/ (1 file) -``` - ---- - -## PR 13: Workflow, Page Layout, AI, Activities - -### States (~45 files) -``` -workflow/states/ (6 files) -workflow/workflow-diagram/states/ (12 files) -workflow/workflow-steps/states/ (7 files) -workflow/workflow-variables/states/ (2 files) -page-layout/states/ (17 files) -page-layout/widgets/states/ (10 files) -ai/states/ (2 files) -activities/states/ (5 files) -blocknote-editor/states/ (1 file) -``` - -### Selectors (~3 files) -``` -workflow/states/selectors/ (2 files) -workflow/workflow-steps/filters/states/ (1 selector) -page-layout/states/selectors/ (1 file) -``` - ---- - -## PR 14: Settings, SSE, Spreadsheet Import, Misc - -Leaf modules with few external consumers. - -### States (~30 files) -``` -settings/admin-panel/ (4 files) -settings/data-model/ (2 files) -settings/developers/ (1 file) -settings/domains/ (3 files) -settings/logic-functions/ (1 file) -settings/playground/ (1 file) -settings/roles/ (4 files) -settings/security/ (2 files) -sse-db-event/states/ (9 files) -spreadsheet-import/states/ (4 files) -``` - -### Selectors (1 file) -``` -settings/roles/states/settingsAllRolesSelector.ts -``` - ---- - -## Testing Strategy - -Each PR should: -1. Migrate state definitions (swap `createState` → `createStateV2`, etc.) -2. Update all consumer hooks (swap `useRecoilValue` → `useRecoilValueV2`, etc.) -3. Update `useRecoilCallback` → `useCallback` + `jotaiStore.get/set` -4. Run `npx nx typecheck twenty-front` -5. Run `npx nx test twenty-front` for affected test files -6. Verify affected Storybook stories - -## Notes - -- The `beforeEach: resetJotaiStore()` in `.storybook/preview.tsx` handles Storybook isolation globally -- Unit tests need `JotaiProvider store={jotaiStore}` in their wrappers and `beforeEach` resets for affected atoms -- Some states use `effects` (e.g., `cookieStorageEffect`, `localStorageEffect`) — these need Jotai `onMount` equivalents -- States with `useResetRecoilState` need a wrapper or direct `jotaiStore.set(atom, defaultValue)` diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilySelectorCallbackState.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilySelectorCallbackState.ts index 5dddaf76a1..66c25e7895 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilySelectorCallbackState.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilySelectorCallbackState.ts @@ -2,18 +2,18 @@ import { useCallback } from 'react'; import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type ComponentFamilySelectorV2 } from '@/ui/utilities/state/jotai/types/ComponentFamilySelectorV2'; +import { type ComponentFamilySelector } from '@/ui/utilities/state/jotai/types/ComponentFamilySelector'; export const useAtomComponentFamilySelectorCallbackState = < StateType, FamilyKey, >( - componentFamilySelector: ComponentFamilySelectorV2, + componentFamilySelector: ComponentFamilySelector, instanceIdFromProps?: string, ): (( familyKey: FamilyKey, ) => ReturnType< - ComponentFamilySelectorV2['selectorFamily'] + ComponentFamilySelector['selectorFamily'] >) => { const componentInstanceContext = globalComponentInstanceContextMap.get( componentFamilySelector.key, diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilySelectorValue.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilySelectorValue.ts index fd87314430..6f3e0973be 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilySelectorValue.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilySelectorValue.ts @@ -2,10 +2,10 @@ import { useAtomValue } from 'jotai'; import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type ComponentFamilySelectorV2 } from '@/ui/utilities/state/jotai/types/ComponentFamilySelectorV2'; +import { type ComponentFamilySelector } from '@/ui/utilities/state/jotai/types/ComponentFamilySelector'; export const useAtomComponentFamilySelectorValue = ( - componentFamilySelector: ComponentFamilySelectorV2, + componentFamilySelector: ComponentFamilySelector, familyKey: FamilyKey, instanceIdFromProps?: string, ): StateType => { diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilyState.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilyState.ts index 4bcb7ba4f7..94eda9c9a4 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilyState.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilyState.ts @@ -2,10 +2,10 @@ import { useAtom } from 'jotai'; import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type ComponentFamilyStateV2 } from '@/ui/utilities/state/jotai/types/ComponentFamilyStateV2'; +import { type ComponentFamilyState } from '@/ui/utilities/state/jotai/types/ComponentFamilyState'; export const useAtomComponentFamilyState = ( - componentState: ComponentFamilyStateV2, + componentState: ComponentFamilyState, familyKey: FamilyKey, instanceIdFromProps?: string, ): [ diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilyStateCallbackState.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilyStateCallbackState.ts index da14126b08..35ed31b761 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilyStateCallbackState.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilyStateCallbackState.ts @@ -2,16 +2,14 @@ import { useCallback } from 'react'; import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type ComponentFamilyStateV2 } from '@/ui/utilities/state/jotai/types/ComponentFamilyStateV2'; +import { type ComponentFamilyState } from '@/ui/utilities/state/jotai/types/ComponentFamilyState'; export const useAtomComponentFamilyStateCallbackState = ( - componentFamilyState: ComponentFamilyStateV2, + componentFamilyState: ComponentFamilyState, instanceIdFromProps?: string, ): (( familyKey: FamilyKey, -) => ReturnType< - ComponentFamilyStateV2['atomFamily'] ->) => { +) => ReturnType['atomFamily']>) => { const componentInstanceContext = globalComponentInstanceContextMap.get( componentFamilyState.key, ); diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilyStateValue.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilyStateValue.ts index 444ec6f5bf..cd7f00f6c7 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilyStateValue.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentFamilyStateValue.ts @@ -2,10 +2,10 @@ import { useAtomValue } from 'jotai'; import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type ComponentFamilyStateV2 } from '@/ui/utilities/state/jotai/types/ComponentFamilyStateV2'; +import { type ComponentFamilyState } from '@/ui/utilities/state/jotai/types/ComponentFamilyState'; export const useAtomComponentFamilyStateValue = ( - componentState: ComponentFamilyStateV2, + componentState: ComponentFamilyState, familyKey: FamilyKey, instanceIdFromProps?: string, ): StateType => { diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentSelectorCallbackState.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentSelectorCallbackState.ts index 7037f1e463..725c0ad33e 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentSelectorCallbackState.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentSelectorCallbackState.ts @@ -2,12 +2,12 @@ import { useMemo } from 'react'; import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type ComponentSelectorV2 } from '@/ui/utilities/state/jotai/types/ComponentSelectorV2'; +import { type ComponentSelector } from '@/ui/utilities/state/jotai/types/ComponentSelector'; export const useAtomComponentSelectorCallbackState = ( - componentSelector: ComponentSelectorV2, + componentSelector: ComponentSelector, instanceIdFromProps?: string, -): ReturnType['selectorFamily']> => { +): ReturnType['selectorFamily']> => { const componentInstanceContext = globalComponentInstanceContextMap.get( componentSelector.key, ); diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentSelectorValue.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentSelectorValue.ts index ae7de6a972..9cca9e9fea 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentSelectorValue.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentSelectorValue.ts @@ -2,10 +2,10 @@ import { useAtomValue } from 'jotai'; import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type ComponentSelectorV2 } from '@/ui/utilities/state/jotai/types/ComponentSelectorV2'; +import { type ComponentSelector } from '@/ui/utilities/state/jotai/types/ComponentSelector'; export const useAtomComponentSelectorValue = ( - componentSelector: ComponentSelectorV2, + componentSelector: ComponentSelector, instanceIdFromProps?: string, ): StateType => { const componentInstanceContext = globalComponentInstanceContextMap.get( diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentState.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentState.ts index c437a346bd..4104fb41a1 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentState.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentState.ts @@ -2,10 +2,10 @@ import { useAtom } from 'jotai'; import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type ComponentStateV2 } from '@/ui/utilities/state/jotai/types/ComponentStateV2'; +import { type ComponentState } from '@/ui/utilities/state/jotai/types/ComponentState'; export const useAtomComponentState = ( - componentState: ComponentStateV2, + componentState: ComponentState, instanceIdFromProps?: string, ): [ StateType, diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentStateCallbackState.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentStateCallbackState.ts index 5e29992eb2..c6fc385c95 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentStateCallbackState.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentStateCallbackState.ts @@ -2,12 +2,12 @@ import { useMemo } from 'react'; import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type ComponentStateV2 } from '@/ui/utilities/state/jotai/types/ComponentStateV2'; +import { type ComponentState } from '@/ui/utilities/state/jotai/types/ComponentState'; export const useAtomComponentStateCallbackState = ( - componentState: ComponentStateV2, + componentState: ComponentState, instanceIdFromProps?: string, -): ReturnType['atomFamily']> => { +): ReturnType['atomFamily']> => { const componentInstanceContext = globalComponentInstanceContextMap.get( componentState.key, ); diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentStateValue.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentStateValue.ts index 804a730b4f..1a125c2f9b 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentStateValue.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomComponentStateValue.ts @@ -2,10 +2,10 @@ import { useAtomValue } from 'jotai'; import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type ComponentStateV2 } from '@/ui/utilities/state/jotai/types/ComponentStateV2'; +import { type ComponentState } from '@/ui/utilities/state/jotai/types/ComponentState'; export const useAtomComponentStateValue = ( - componentState: ComponentStateV2, + componentState: ComponentState, instanceIdFromProps?: string, ): StateType => { const componentInstanceContext = globalComponentInstanceContextMap.get( diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomFamilySelectorState.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomFamilySelectorState.ts index b7f91a9f3e..a42342bfae 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomFamilySelectorState.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomFamilySelectorState.ts @@ -1,9 +1,9 @@ import { useAtom } from 'jotai'; -import { type WritableFamilySelectorV2 } from '@/ui/utilities/state/jotai/types/WritableFamilySelectorV2'; +import { type WritableFamilySelector } from '@/ui/utilities/state/jotai/types/WritableFamilySelector'; export const useAtomFamilySelectorState = ( - familySelector: WritableFamilySelectorV2, + familySelector: WritableFamilySelector, familyKey: FamilyKey, ): [ ValueType, diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomFamilySelectorValue.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomFamilySelectorValue.ts index 6a781faa73..601d7681d6 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomFamilySelectorValue.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomFamilySelectorValue.ts @@ -1,12 +1,12 @@ import { useAtomValue } from 'jotai'; -import { type FamilySelectorV2 } from '@/ui/utilities/state/jotai/types/FamilySelectorV2'; -import { type WritableFamilySelectorV2 } from '@/ui/utilities/state/jotai/types/WritableFamilySelectorV2'; +import { type FamilySelector } from '@/ui/utilities/state/jotai/types/FamilySelector'; +import { type WritableFamilySelector } from '@/ui/utilities/state/jotai/types/WritableFamilySelector'; export const useAtomFamilySelectorValue = ( familySelector: - | FamilySelectorV2 - | WritableFamilySelectorV2, + | FamilySelector + | WritableFamilySelector, familyKey: FamilyKey, ): ValueType => { return useAtomValue(familySelector.selectorFamily(familyKey)); diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue.ts index e3df51e649..c957aadc51 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue.ts @@ -1,9 +1,9 @@ import { useAtomValue } from 'jotai'; -import { type FamilyStateV2 } from '@/ui/utilities/state/jotai/types/FamilyStateV2'; +import { type FamilyState } from '@/ui/utilities/state/jotai/types/FamilyState'; export const useAtomFamilyStateValue = ( - familyState: FamilyStateV2, + familyState: FamilyState, familyKey: FamilyKey, ): ValueType => { return useAtomValue(familyState.atomFamily(familyKey)); diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomState.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomState.ts index 4564eb29dc..8d208d7e60 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomState.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomState.ts @@ -1,10 +1,10 @@ import { useAtom } from 'jotai'; -import { type StateV2 } from '@/ui/utilities/state/jotai/types/StateV2'; -import { type WritableSelectorV2 } from '@/ui/utilities/state/jotai/types/WritableSelectorV2'; +import { type State } from '@/ui/utilities/state/jotai/types/State'; +import { type WritableSelector } from '@/ui/utilities/state/jotai/types/WritableSelector'; export const useAtomState = ( - state: StateV2 | WritableSelectorV2, + state: State | WritableSelector, ): [ ValueType, (value: ValueType | ((prev: ValueType) => ValueType)) => void, diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomStateValue.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomStateValue.ts index 822f7a7092..f65377cdf1 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomStateValue.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useAtomStateValue.ts @@ -1,14 +1,11 @@ import { useAtomValue as useJotaiAtomValue } from 'jotai'; -import { type SelectorV2 } from '@/ui/utilities/state/jotai/types/SelectorV2'; -import { type StateV2 } from '@/ui/utilities/state/jotai/types/StateV2'; -import { type WritableSelectorV2 } from '@/ui/utilities/state/jotai/types/WritableSelectorV2'; +import { type Selector } from '@/ui/utilities/state/jotai/types/Selector'; +import { type State } from '@/ui/utilities/state/jotai/types/State'; +import { type WritableSelector } from '@/ui/utilities/state/jotai/types/WritableSelector'; export const useAtomStateValue = ( - state: - | StateV2 - | SelectorV2 - | WritableSelectorV2, + state: State | Selector | WritableSelector, ): ValueType => { return useJotaiAtomValue(state.atom); }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useSetAtomComponentFamilyState.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useSetAtomComponentFamilyState.ts index 133bb7f758..13c44c1537 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useSetAtomComponentFamilyState.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useSetAtomComponentFamilyState.ts @@ -2,10 +2,10 @@ import { useSetAtom } from 'jotai'; import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type ComponentFamilyStateV2 } from '@/ui/utilities/state/jotai/types/ComponentFamilyStateV2'; +import { type ComponentFamilyState } from '@/ui/utilities/state/jotai/types/ComponentFamilyState'; export const useSetAtomComponentFamilyState = ( - componentState: ComponentFamilyStateV2, + componentState: ComponentFamilyState, familyKey: FamilyKey, instanceIdFromProps?: string, ): ((value: ValueType | ((prev: ValueType) => ValueType)) => void) => { diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useSetAtomComponentState.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useSetAtomComponentState.ts index bcd23d03c1..6ab73fd4d8 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useSetAtomComponentState.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useSetAtomComponentState.ts @@ -2,10 +2,10 @@ import { useSetAtom } from 'jotai'; import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type ComponentStateV2 } from '@/ui/utilities/state/jotai/types/ComponentStateV2'; +import { type ComponentState } from '@/ui/utilities/state/jotai/types/ComponentState'; export const useSetAtomComponentState = ( - componentState: ComponentStateV2, + componentState: ComponentState, instanceIdFromProps?: string, ): ((value: ValueType | ((prev: ValueType) => ValueType)) => void) => { const componentInstanceContext = globalComponentInstanceContextMap.get( diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useSetAtomFamilyState.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useSetAtomFamilyState.ts index d5679f222f..7e7b95ac17 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useSetAtomFamilyState.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useSetAtomFamilyState.ts @@ -1,9 +1,9 @@ import { useSetAtom } from 'jotai'; -import { type FamilyStateV2 } from '@/ui/utilities/state/jotai/types/FamilyStateV2'; +import { type FamilyState } from '@/ui/utilities/state/jotai/types/FamilyState'; export const useSetAtomFamilyState = ( - familyState: FamilyStateV2, + familyState: FamilyState, familyKey: FamilyKey, ): ((value: ValueType | ((prev: ValueType) => ValueType)) => void) => { return useSetAtom(familyState.atomFamily(familyKey)); diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useSetAtomState.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useSetAtomState.ts index f19945fb73..96d8138e57 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useSetAtomState.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/hooks/useSetAtomState.ts @@ -1,9 +1,9 @@ import { useSetAtom } from 'jotai'; -import { type StateV2 } from '@/ui/utilities/state/jotai/types/StateV2'; +import { type State } from '@/ui/utilities/state/jotai/types/State'; export const useSetAtomState = ( - state: StateV2, + state: State, ): ((value: ValueType | ((prev: ValueType) => ValueType)) => void) => { return useSetAtom(state.atom); }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentFamilySelectorV2.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentFamilySelector.ts similarity index 58% rename from packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentFamilySelectorV2.ts rename to packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentFamilySelector.ts index d60e8d5f72..b328606477 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentFamilySelectorV2.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentFamilySelector.ts @@ -1,9 +1,9 @@ import { type Atom } from 'jotai'; -import { type ComponentFamilyStateKey } from '@/ui/utilities/state/jotai/types/ComponentFamilyStateV2'; +import { type ComponentFamilyStateKey } from '@/ui/utilities/state/jotai/types/ComponentFamilyState'; -export type ComponentFamilySelectorV2 = { - type: 'ComponentFamilySelectorV2'; +export type ComponentFamilySelector = { + type: 'ComponentFamilySelector'; key: string; selectorFamily: (key: ComponentFamilyStateKey) => Atom; }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentFamilyStateV2.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentFamilyState.ts similarity index 83% rename from packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentFamilyStateV2.ts rename to packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentFamilyState.ts index c943c7ae2a..1eb3702bcb 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentFamilyStateV2.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentFamilyState.ts @@ -12,8 +12,8 @@ export type ComponentFamilyStateKey = ComponentStateKey & { familyKey: FamilyKey; }; -export type ComponentFamilyStateV2 = { - type: 'ComponentFamilyStateV2'; +export type ComponentFamilyState = { + type: 'ComponentFamilyState'; key: string; atomFamily: ( key: ComponentFamilyStateKey, diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentSelectorV2.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentSelector.ts similarity index 73% rename from packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentSelectorV2.ts rename to packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentSelector.ts index 6e31fbf1aa..325da3c66f 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentSelectorV2.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentSelector.ts @@ -2,8 +2,8 @@ import { type Atom } from 'jotai'; import { type ComponentStateKey } from '@/ui/utilities/state/component-state/types/ComponentStateKey'; -export type ComponentSelectorV2 = { - type: 'ComponentSelectorV2'; +export type ComponentSelector = { + type: 'ComponentSelector'; key: string; selectorFamily: (key: ComponentStateKey) => Atom; }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentStateV2.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentState.ts similarity index 83% rename from packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentStateV2.ts rename to packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentState.ts index f1623843f3..fe2379d9b3 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentStateV2.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/ComponentState.ts @@ -8,8 +8,8 @@ type JotaiWritableAtom = WritableAtom< void >; -export type ComponentStateV2 = { - type: 'ComponentStateV2'; +export type ComponentState = { + type: 'ComponentState'; key: string; atomFamily: (key: ComponentStateKey) => JotaiWritableAtom; }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/FamilySelectorV2.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/FamilySelector.ts similarity index 56% rename from packages/twenty-front/src/modules/ui/utilities/state/jotai/types/FamilySelectorV2.ts rename to packages/twenty-front/src/modules/ui/utilities/state/jotai/types/FamilySelector.ts index 7089b16a06..15a21ae82c 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/FamilySelectorV2.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/FamilySelector.ts @@ -1,7 +1,7 @@ import { type Atom } from 'jotai'; -export type FamilySelectorV2 = { - type: 'FamilySelectorV2'; +export type FamilySelector = { + type: 'FamilySelector'; key: string; selectorFamily: (key: FamilyKey) => Atom; }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/FamilyStateV2.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/FamilyState.ts similarity index 79% rename from packages/twenty-front/src/modules/ui/utilities/state/jotai/types/FamilyStateV2.ts rename to packages/twenty-front/src/modules/ui/utilities/state/jotai/types/FamilyState.ts index 9d64912cb1..0d417ae3fc 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/FamilyStateV2.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/FamilyState.ts @@ -6,8 +6,8 @@ type JotaiWritableAtom = WritableAtom< void >; -export type FamilyStateV2 = { - type: 'FamilyStateV2'; +export type FamilyState = { + type: 'FamilyState'; key: string; atomFamily: (key: FamilyKey) => JotaiWritableAtom; } & ((key: FamilyKey) => JotaiWritableAtom); diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/SelectorV2.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/Selector.ts similarity index 56% rename from packages/twenty-front/src/modules/ui/utilities/state/jotai/types/SelectorV2.ts rename to packages/twenty-front/src/modules/ui/utilities/state/jotai/types/Selector.ts index 799989c8a3..e0eda926e6 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/SelectorV2.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/Selector.ts @@ -1,7 +1,7 @@ import { type Atom } from 'jotai'; -export type SelectorV2 = { - type: 'SelectorV2'; +export type Selector = { + type: 'Selector'; key: string; atom: Atom; }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/SelectorCallbacks.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/SelectorCallbacks.ts new file mode 100644 index 0000000000..a68bb5306b --- /dev/null +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/SelectorCallbacks.ts @@ -0,0 +1,54 @@ +import { type ComponentStateKey } from '@/ui/utilities/state/component-state/types/ComponentStateKey'; +import { type ComponentFamilySelector } from '@/ui/utilities/state/jotai/types/ComponentFamilySelector'; +import { + type ComponentFamilyStateKey, + type ComponentFamilyState, +} from '@/ui/utilities/state/jotai/types/ComponentFamilyState'; +import { type ComponentSelector } from '@/ui/utilities/state/jotai/types/ComponentSelector'; +import { type ComponentState } from '@/ui/utilities/state/jotai/types/ComponentState'; +import { type FamilySelector } from '@/ui/utilities/state/jotai/types/FamilySelector'; +import { type FamilyState } from '@/ui/utilities/state/jotai/types/FamilyState'; +import { type Selector } from '@/ui/utilities/state/jotai/types/Selector'; +import { type State } from '@/ui/utilities/state/jotai/types/State'; + +export type SelectorGetter = { + get: { + (state: State | Selector): ValueType; + ( + familyState: + | FamilyState + | FamilySelector, + familyKey: FamilyKey, + ): ValueType; + ( + componentState: ComponentState, + key: ComponentStateKey, + ): ValueType; + ( + componentFamilyState: ComponentFamilyState, + key: ComponentFamilyStateKey, + ): ValueType; + ( + componentSelector: ComponentSelector, + key: ComponentStateKey, + ): ValueType; + ( + componentFamilySelector: ComponentFamilySelector, + key: ComponentFamilyStateKey, + ): ValueType; + }; +}; + +export type SelectorSetter = SelectorGetter & { + set: { + ( + state: State, + value: ValueType | ((prev: ValueType) => ValueType), + ): void; + ( + familyState: FamilyState, + familyKey: FamilyKey, + value: ValueType | ((prev: ValueType) => ValueType), + ): void; + }; +}; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/SelectorCallbacksV2.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/SelectorCallbacksV2.ts deleted file mode 100644 index 385cfd4ec0..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/SelectorCallbacksV2.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { type ComponentStateKey } from '@/ui/utilities/state/component-state/types/ComponentStateKey'; -import { type ComponentFamilySelectorV2 } from '@/ui/utilities/state/jotai/types/ComponentFamilySelectorV2'; -import { - type ComponentFamilyStateKey, - type ComponentFamilyStateV2, -} from '@/ui/utilities/state/jotai/types/ComponentFamilyStateV2'; -import { type ComponentSelectorV2 } from '@/ui/utilities/state/jotai/types/ComponentSelectorV2'; -import { type ComponentStateV2 } from '@/ui/utilities/state/jotai/types/ComponentStateV2'; -import { type FamilySelectorV2 } from '@/ui/utilities/state/jotai/types/FamilySelectorV2'; -import { type FamilyStateV2 } from '@/ui/utilities/state/jotai/types/FamilyStateV2'; -import { type SelectorV2 } from '@/ui/utilities/state/jotai/types/SelectorV2'; -import { type StateV2 } from '@/ui/utilities/state/jotai/types/StateV2'; - -export type SelectorGetterV2 = { - get: { - (state: StateV2 | SelectorV2): ValueType; - ( - familyState: - | FamilyStateV2 - | FamilySelectorV2, - familyKey: FamilyKey, - ): ValueType; - ( - componentState: ComponentStateV2, - key: ComponentStateKey, - ): ValueType; - ( - componentFamilyState: ComponentFamilyStateV2, - key: ComponentFamilyStateKey, - ): ValueType; - ( - componentSelector: ComponentSelectorV2, - key: ComponentStateKey, - ): ValueType; - ( - componentFamilySelector: ComponentFamilySelectorV2, - key: ComponentFamilyStateKey, - ): ValueType; - }; -}; - -export type SelectorSetterV2 = SelectorGetterV2 & { - set: { - ( - state: StateV2, - value: ValueType | ((prev: ValueType) => ValueType), - ): void; - ( - familyState: FamilyStateV2, - familyKey: FamilyKey, - value: ValueType | ((prev: ValueType) => ValueType), - ): void; - }; -}; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/StateV2.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/State.ts similarity index 75% rename from packages/twenty-front/src/modules/ui/utilities/state/jotai/types/StateV2.ts rename to packages/twenty-front/src/modules/ui/utilities/state/jotai/types/State.ts index 55913d3f6b..5593887efc 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/StateV2.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/State.ts @@ -1,7 +1,7 @@ import { type WritableAtom } from 'jotai'; -export type StateV2 = { - type: 'StateV2'; +export type State = { + type: 'State'; key: string; atom: WritableAtom< ValueType, diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/WritableFamilySelectorV2.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/WritableFamilySelector.ts similarity index 67% rename from packages/twenty-front/src/modules/ui/utilities/state/jotai/types/WritableFamilySelectorV2.ts rename to packages/twenty-front/src/modules/ui/utilities/state/jotai/types/WritableFamilySelector.ts index 20833f972d..881f51f233 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/WritableFamilySelectorV2.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/WritableFamilySelector.ts @@ -1,7 +1,7 @@ import { type WritableAtom } from 'jotai'; -export type WritableFamilySelectorV2 = { - type: 'WritableFamilySelectorV2'; +export type WritableFamilySelector = { + type: 'WritableFamilySelector'; key: string; selectorFamily: ( key: FamilyKey, diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/WritableSelectorV2.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/WritableSelector.ts similarity index 68% rename from packages/twenty-front/src/modules/ui/utilities/state/jotai/types/WritableSelectorV2.ts rename to packages/twenty-front/src/modules/ui/utilities/state/jotai/types/WritableSelector.ts index 47f6c6db2c..374610d419 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/WritableSelectorV2.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/types/WritableSelector.ts @@ -1,7 +1,7 @@ import { type WritableAtom } from 'jotai'; -export type WritableSelectorV2 = { - type: 'WritableSelectorV2'; +export type WritableSelector = { + type: 'WritableSelector'; key: string; atom: WritableAtom< ValueType, diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/buildGetHelper.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/buildGetHelper.ts index 679f6a217f..728c0e92d2 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/buildGetHelper.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/buildGetHelper.ts @@ -3,82 +3,82 @@ import { type Getter } from 'jotai'; import { type ComponentStateKey } from '@/ui/utilities/state/component-state/types/ComponentStateKey'; import { type ComponentFamilyStateKey, - type ComponentFamilyStateV2, -} from '@/ui/utilities/state/jotai/types/ComponentFamilyStateV2'; -import { type ComponentFamilySelectorV2 } from '@/ui/utilities/state/jotai/types/ComponentFamilySelectorV2'; -import { type ComponentSelectorV2 } from '@/ui/utilities/state/jotai/types/ComponentSelectorV2'; -import { type ComponentStateV2 } from '@/ui/utilities/state/jotai/types/ComponentStateV2'; -import { type FamilySelectorV2 } from '@/ui/utilities/state/jotai/types/FamilySelectorV2'; -import { type FamilyStateV2 } from '@/ui/utilities/state/jotai/types/FamilyStateV2'; -import { type SelectorV2 } from '@/ui/utilities/state/jotai/types/SelectorV2'; -import { type StateV2 } from '@/ui/utilities/state/jotai/types/StateV2'; + type ComponentFamilyState, +} from '@/ui/utilities/state/jotai/types/ComponentFamilyState'; +import { type ComponentFamilySelector } from '@/ui/utilities/state/jotai/types/ComponentFamilySelector'; +import { type ComponentSelector } from '@/ui/utilities/state/jotai/types/ComponentSelector'; +import { type ComponentState } from '@/ui/utilities/state/jotai/types/ComponentState'; +import { type FamilySelector } from '@/ui/utilities/state/jotai/types/FamilySelector'; +import { type FamilyState } from '@/ui/utilities/state/jotai/types/FamilyState'; +import { type Selector } from '@/ui/utilities/state/jotai/types/Selector'; +import { type State } from '@/ui/utilities/state/jotai/types/State'; export const buildGetHelper = (jotaiGet: Getter) => ( stateOrFamily: - | StateV2 - | SelectorV2 - | FamilyStateV2 - | FamilySelectorV2 - | ComponentStateV2 - | ComponentFamilyStateV2 - | ComponentSelectorV2 - | ComponentFamilySelectorV2, + | State + | Selector + | FamilyState + | FamilySelector + | ComponentState + | ComponentFamilyState + | ComponentSelector + | ComponentFamilySelector, keyOrFamilyKey?: | FamilyKey | ComponentStateKey | ComponentFamilyStateKey, ): ValueType => { - if (stateOrFamily.type === 'ComponentStateV2') { + if (stateOrFamily.type === 'ComponentState') { return jotaiGet( - (stateOrFamily as ComponentStateV2).atomFamily( + (stateOrFamily as ComponentState).atomFamily( keyOrFamilyKey as ComponentStateKey, ), ); } - if (stateOrFamily.type === 'ComponentFamilyStateV2') { + if (stateOrFamily.type === 'ComponentFamilyState') { return jotaiGet( ( - stateOrFamily as ComponentFamilyStateV2 + stateOrFamily as ComponentFamilyState ).atomFamily(keyOrFamilyKey as ComponentFamilyStateKey), ); } - if (stateOrFamily.type === 'ComponentSelectorV2') { + if (stateOrFamily.type === 'ComponentSelector') { return jotaiGet( - (stateOrFamily as ComponentSelectorV2).selectorFamily( + (stateOrFamily as ComponentSelector).selectorFamily( keyOrFamilyKey as ComponentStateKey, ), ); } - if (stateOrFamily.type === 'ComponentFamilySelectorV2') { + if (stateOrFamily.type === 'ComponentFamilySelector') { return jotaiGet( ( - stateOrFamily as ComponentFamilySelectorV2 + stateOrFamily as ComponentFamilySelector ).selectorFamily(keyOrFamilyKey as ComponentFamilyStateKey), ); } - if (stateOrFamily.type === 'FamilyStateV2') { + if (stateOrFamily.type === 'FamilyState') { return jotaiGet( - (stateOrFamily as FamilyStateV2).atomFamily( + (stateOrFamily as FamilyState).atomFamily( keyOrFamilyKey as FamilyKey, ), ); } - if (stateOrFamily.type === 'FamilySelectorV2') { + if (stateOrFamily.type === 'FamilySelector') { return jotaiGet( - ( - stateOrFamily as FamilySelectorV2 - ).selectorFamily(keyOrFamilyKey as FamilyKey), + (stateOrFamily as FamilySelector).selectorFamily( + keyOrFamilyKey as FamilyKey, + ), ); } return jotaiGet( - (stateOrFamily as StateV2 | SelectorV2).atom, + (stateOrFamily as State | Selector).atom, ); }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/buildSetHelper.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/buildSetHelper.ts index 7b0d7d057e..c5b0e267db 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/buildSetHelper.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/buildSetHelper.ts @@ -1,18 +1,18 @@ import { type Setter } from 'jotai'; -import { type FamilyStateV2 } from '@/ui/utilities/state/jotai/types/FamilyStateV2'; -import { type StateV2 } from '@/ui/utilities/state/jotai/types/StateV2'; +import { type FamilyState } from '@/ui/utilities/state/jotai/types/FamilyState'; +import { type State } from '@/ui/utilities/state/jotai/types/State'; export const buildSetHelper = (jotaiSet: Setter) => ( - stateOrFamily: StateV2 | FamilyStateV2, + stateOrFamily: State | FamilyState, valueOrFamilyKey: ValueType | ((prev: ValueType) => ValueType) | FamilyKey, familyValue?: ValueType | ((prev: ValueType) => ValueType), ): void => { - if (stateOrFamily.type === 'FamilyStateV2') { + if (stateOrFamily.type === 'FamilyState') { jotaiSet( - (stateOrFamily as FamilyStateV2).atomFamily( + (stateOrFamily as FamilyState).atomFamily( valueOrFamilyKey as FamilyKey, ), familyValue as ValueType | ((prev: ValueType) => ValueType), @@ -21,7 +21,7 @@ export const buildSetHelper = } jotaiSet( - (stateOrFamily as StateV2).atom, + (stateOrFamily as State).atom, valueOrFamilyKey as ValueType | ((prev: ValueType) => ValueType), ); }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomComponentFamilySelector.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomComponentFamilySelector.ts index ea635c2af1..b4909b2cb9 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomComponentFamilySelector.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomComponentFamilySelector.ts @@ -2,9 +2,9 @@ import { atom, type Atom } from 'jotai'; import { type ComponentInstanceStateContext } from '@/ui/utilities/state/component-state/types/ComponentInstanceStateContext'; import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type ComponentFamilySelectorV2 } from '@/ui/utilities/state/jotai/types/ComponentFamilySelectorV2'; -import { type ComponentFamilyStateKey } from '@/ui/utilities/state/jotai/types/ComponentFamilyStateV2'; -import { type SelectorGetterV2 } from '@/ui/utilities/state/jotai/types/SelectorCallbacksV2'; +import { type ComponentFamilySelector } from '@/ui/utilities/state/jotai/types/ComponentFamilySelector'; +import { type ComponentFamilyStateKey } from '@/ui/utilities/state/jotai/types/ComponentFamilyState'; +import { type SelectorGetter } from '@/ui/utilities/state/jotai/types/SelectorCallbacks'; import { buildGetHelper } from '@/ui/utilities/state/jotai/utils/buildGetHelper'; import { isDefined } from 'twenty-shared/utils'; @@ -16,9 +16,9 @@ export const createAtomComponentFamilySelector = ({ key: string; get: ( key: ComponentFamilyStateKey, - ) => (callbacks: SelectorGetterV2) => ValueType; + ) => (callbacks: SelectorGetter) => ValueType; componentInstanceContext: ComponentInstanceStateContext | null; -}): ComponentFamilySelectorV2 => { +}): ComponentFamilySelector => { if (isDefined(componentInstanceContext)) { globalComponentInstanceContextMap.set(key, componentInstanceContext); } @@ -54,7 +54,7 @@ export const createAtomComponentFamilySelector = ({ }; return { - type: 'ComponentFamilySelectorV2', + type: 'ComponentFamilySelector', key, selectorFamily, }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomComponentFamilyState.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomComponentFamilyState.ts index 66850c0a7e..fe056f51e8 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomComponentFamilyState.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomComponentFamilyState.ts @@ -4,8 +4,8 @@ import { type ComponentInstanceStateContext } from '@/ui/utilities/state/compone import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; import { type ComponentFamilyStateKey, - type ComponentFamilyStateV2, -} from '@/ui/utilities/state/jotai/types/ComponentFamilyStateV2'; + type ComponentFamilyState, +} from '@/ui/utilities/state/jotai/types/ComponentFamilyState'; import { isDefined } from 'twenty-shared/utils'; export const createAtomComponentFamilyState = ({ @@ -16,21 +16,21 @@ export const createAtomComponentFamilyState = ({ key: string; defaultValue: ValueType; componentInstanceContext: ComponentInstanceStateContext | null; -}): ComponentFamilyStateV2 => { +}): ComponentFamilyState => { if (isDefined(componentInstanceContext)) { globalComponentInstanceContextMap.set(key, componentInstanceContext); } const atomCache = new Map< string, - ReturnType['atomFamily']> + ReturnType['atomFamily']> >(); const familyFunction = ({ instanceId, familyKey, }: ComponentFamilyStateKey): ReturnType< - ComponentFamilyStateV2['atomFamily'] + ComponentFamilyState['atomFamily'] > => { const familyKeyStr = typeof familyKey === 'string' ? familyKey : JSON.stringify(familyKey); @@ -50,7 +50,7 @@ export const createAtomComponentFamilyState = ({ }; return { - type: 'ComponentFamilyStateV2', + type: 'ComponentFamilyState', key, atomFamily: familyFunction, }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomComponentSelector.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomComponentSelector.ts index 30aac6698a..b9cfd36315 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomComponentSelector.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomComponentSelector.ts @@ -3,8 +3,8 @@ import { atom, type Atom } from 'jotai'; import { type ComponentInstanceStateContext } from '@/ui/utilities/state/component-state/types/ComponentInstanceStateContext'; import { type ComponentStateKey } from '@/ui/utilities/state/component-state/types/ComponentStateKey'; import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type ComponentSelectorV2 } from '@/ui/utilities/state/jotai/types/ComponentSelectorV2'; -import { type SelectorGetterV2 } from '@/ui/utilities/state/jotai/types/SelectorCallbacksV2'; +import { type ComponentSelector } from '@/ui/utilities/state/jotai/types/ComponentSelector'; +import { type SelectorGetter } from '@/ui/utilities/state/jotai/types/SelectorCallbacks'; import { buildGetHelper } from '@/ui/utilities/state/jotai/utils/buildGetHelper'; import { isDefined } from 'twenty-shared/utils'; @@ -14,9 +14,9 @@ export const createAtomComponentSelector = ({ componentInstanceContext, }: { key: string; - get: (key: ComponentStateKey) => (callbacks: SelectorGetterV2) => ValueType; + get: (key: ComponentStateKey) => (callbacks: SelectorGetter) => ValueType; componentInstanceContext: ComponentInstanceStateContext | null; -}): ComponentSelectorV2 => { +}): ComponentSelector => { if (isDefined(componentInstanceContext)) { globalComponentInstanceContextMap.set(key, componentInstanceContext); } @@ -47,7 +47,7 @@ export const createAtomComponentSelector = ({ }; return { - type: 'ComponentSelectorV2', + type: 'ComponentSelector', key, selectorFamily, }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomComponentState.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomComponentState.ts index 7871d4b58e..93decf64a6 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomComponentState.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomComponentState.ts @@ -3,7 +3,7 @@ import { atom } from 'jotai'; import { type ComponentInstanceStateContext } from '@/ui/utilities/state/component-state/types/ComponentInstanceStateContext'; import { type ComponentStateKey } from '@/ui/utilities/state/component-state/types/ComponentStateKey'; import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; -import { type ComponentStateV2 } from '@/ui/utilities/state/jotai/types/ComponentStateV2'; +import { type ComponentState } from '@/ui/utilities/state/jotai/types/ComponentState'; import { isDefined } from 'twenty-shared/utils'; export const createAtomComponentState = ({ @@ -14,20 +14,20 @@ export const createAtomComponentState = ({ key: string; defaultValue: ValueType; componentInstanceContext: ComponentInstanceStateContext | null; -}): ComponentStateV2 => { +}): ComponentState => { if (isDefined(componentInstanceContext)) { globalComponentInstanceContextMap.set(key, componentInstanceContext); } const atomCache = new Map< string, - ReturnType['atomFamily']> + ReturnType['atomFamily']> >(); const familyFunction = ({ instanceId, }: ComponentStateKey): ReturnType< - ComponentStateV2['atomFamily'] + ComponentState['atomFamily'] > => { const existing = atomCache.get(instanceId); @@ -43,7 +43,7 @@ export const createAtomComponentState = ({ }; return { - type: 'ComponentStateV2', + type: 'ComponentState', key, atomFamily: familyFunction, }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomFamilySelector.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomFamilySelector.ts index a2ebb94a0b..48db765ed6 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomFamilySelector.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomFamilySelector.ts @@ -1,7 +1,7 @@ import { atom, type Atom } from 'jotai'; -import { type FamilySelectorV2 } from '@/ui/utilities/state/jotai/types/FamilySelectorV2'; -import { type SelectorGetterV2 } from '@/ui/utilities/state/jotai/types/SelectorCallbacksV2'; +import { type FamilySelector } from '@/ui/utilities/state/jotai/types/FamilySelector'; +import { type SelectorGetter } from '@/ui/utilities/state/jotai/types/SelectorCallbacks'; import { buildGetHelper } from '@/ui/utilities/state/jotai/utils/buildGetHelper'; export const createAtomFamilySelector = ({ @@ -9,8 +9,8 @@ export const createAtomFamilySelector = ({ get, }: { key: string; - get: (familyKey: FamilyKey) => (callbacks: SelectorGetterV2) => ValueType; -}): FamilySelectorV2 => { + get: (familyKey: FamilyKey) => (callbacks: SelectorGetter) => ValueType; +}): FamilySelector => { const atomCache = new Map>(); const selectorFamily = (familyKey: FamilyKey): Atom => { @@ -38,7 +38,7 @@ export const createAtomFamilySelector = ({ }; return { - type: 'FamilySelectorV2', + type: 'FamilySelector', key, selectorFamily, }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomFamilyState.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomFamilyState.ts index 5b32820009..31a8f740d1 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomFamilyState.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomFamilyState.ts @@ -1,7 +1,7 @@ import { atom } from 'jotai'; import { atomWithStorage } from 'jotai/utils'; -import { type FamilyStateV2 } from '@/ui/utilities/state/jotai/types/FamilyStateV2'; +import { type FamilyState } from '@/ui/utilities/state/jotai/types/FamilyState'; export const createAtomFamilyState = ({ key, @@ -11,15 +11,15 @@ export const createAtomFamilyState = ({ key: string; defaultValue: ValueType; useLocalStorage?: boolean; -}): FamilyStateV2 => { +}): FamilyState => { const atomCache = new Map< string, - ReturnType['atomFamily']> + ReturnType['atomFamily']> >(); const familyFunction = ( familyKey: FamilyKey, - ): ReturnType['atomFamily']> => { + ): ReturnType['atomFamily']> => { const cacheKey = typeof familyKey === 'string' ? familyKey : JSON.stringify(familyKey); @@ -40,7 +40,7 @@ export const createAtomFamilyState = ({ }; return Object.assign(familyFunction, { - type: 'FamilyStateV2' as const, + type: 'FamilyState' as const, key, atomFamily: familyFunction, }); diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomSelector.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomSelector.ts index c4a7fe4d0c..f5aadf0ee6 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomSelector.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomSelector.ts @@ -1,7 +1,7 @@ import { atom } from 'jotai'; -import { type SelectorGetterV2 } from '@/ui/utilities/state/jotai/types/SelectorCallbacksV2'; -import { type SelectorV2 } from '@/ui/utilities/state/jotai/types/SelectorV2'; +import { type SelectorGetter } from '@/ui/utilities/state/jotai/types/SelectorCallbacks'; +import { type Selector } from '@/ui/utilities/state/jotai/types/Selector'; import { buildGetHelper } from '@/ui/utilities/state/jotai/utils/buildGetHelper'; export const createAtomSelector = ({ @@ -9,8 +9,8 @@ export const createAtomSelector = ({ get, }: { key: string; - get: (callbacks: SelectorGetterV2) => ValueType; -}): SelectorV2 => { + get: (callbacks: SelectorGetter) => ValueType; +}): Selector => { const derivedAtom = atom((jotaiGet) => { const getHelper = buildGetHelper(jotaiGet); @@ -20,7 +20,7 @@ export const createAtomSelector = ({ derivedAtom.debugLabel = key; return { - type: 'SelectorV2', + type: 'Selector', key, atom: derivedAtom, }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomState.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomState.ts index f07fbaea06..6b98475626 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomState.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomState.ts @@ -2,7 +2,7 @@ import { atom, type WritableAtom } from 'jotai'; import { atomWithStorage } from 'jotai/utils'; import { isDefined } from 'twenty-shared/utils'; -import { type StateV2 } from '@/ui/utilities/state/jotai/types/StateV2'; +import { type State } from '@/ui/utilities/state/jotai/types/State'; import { createJotaiCookieStorage } from '@/ui/utilities/state/jotai/utils/createJotaiCookieStorage'; type CookieStorageConfig = { @@ -32,7 +32,7 @@ export const createAtomState = ({ defaultValue: ValueType; useLocalStorage?: boolean; useCookieStorage?: CookieStorageConfig; -}): StateV2 => { +}): State => { let baseAtom: StateAtom; if (isDefined(useCookieStorage)) { @@ -59,7 +59,7 @@ export const createAtomState = ({ baseAtom.debugLabel = key; return { - type: 'StateV2', + type: 'State', key, atom: baseAtom, }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomWritableFamilySelector.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomWritableFamilySelector.ts index 0fbbe97726..77de367b21 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomWritableFamilySelector.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomWritableFamilySelector.ts @@ -1,10 +1,10 @@ import { atom, type WritableAtom } from 'jotai'; import { - type SelectorGetterV2, - type SelectorSetterV2, -} from '@/ui/utilities/state/jotai/types/SelectorCallbacksV2'; -import { type WritableFamilySelectorV2 } from '@/ui/utilities/state/jotai/types/WritableFamilySelectorV2'; + type SelectorGetter, + type SelectorSetter, +} from '@/ui/utilities/state/jotai/types/SelectorCallbacks'; +import { type WritableFamilySelector } from '@/ui/utilities/state/jotai/types/WritableFamilySelector'; import { buildGetHelper } from '@/ui/utilities/state/jotai/utils/buildGetHelper'; import { buildSetHelper } from '@/ui/utilities/state/jotai/utils/buildSetHelper'; @@ -14,11 +14,11 @@ export const createAtomWritableFamilySelector = ({ set, }: { key: string; - get: (familyKey: FamilyKey) => (callbacks: SelectorGetterV2) => ValueType; + get: (familyKey: FamilyKey) => (callbacks: SelectorGetter) => ValueType; set: ( familyKey: FamilyKey, - ) => (callbacks: SelectorSetterV2, newValue: ValueType) => void; -}): WritableFamilySelectorV2 => { + ) => (callbacks: SelectorSetter, newValue: ValueType) => void; +}): WritableFamilySelector => { const atomCache = new Map< string, WritableAtom< @@ -79,7 +79,7 @@ export const createAtomWritableFamilySelector = ({ }; return { - type: 'WritableFamilySelectorV2', + type: 'WritableFamilySelector', key, selectorFamily, }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomWritableSelector.ts b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomWritableSelector.ts index b2fe5361d3..76d125df39 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomWritableSelector.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/jotai/utils/createAtomWritableSelector.ts @@ -1,10 +1,10 @@ import { atom } from 'jotai'; import { - type SelectorGetterV2, - type SelectorSetterV2, -} from '@/ui/utilities/state/jotai/types/SelectorCallbacksV2'; -import { type WritableSelectorV2 } from '@/ui/utilities/state/jotai/types/WritableSelectorV2'; + type SelectorGetter, + type SelectorSetter, +} from '@/ui/utilities/state/jotai/types/SelectorCallbacks'; +import { type WritableSelector } from '@/ui/utilities/state/jotai/types/WritableSelector'; import { buildGetHelper } from '@/ui/utilities/state/jotai/utils/buildGetHelper'; import { buildSetHelper } from '@/ui/utilities/state/jotai/utils/buildSetHelper'; @@ -14,9 +14,9 @@ export const createAtomWritableSelector = ({ set, }: { key: string; - get: (callbacks: SelectorGetterV2) => ValueType; - set: (callbacks: SelectorSetterV2, newValue: ValueType) => void; -}): WritableSelectorV2 => { + get: (callbacks: SelectorGetter) => ValueType; + set: (callbacks: SelectorSetter, newValue: ValueType) => void; +}): WritableSelector => { const derivedAtom = atom( (jotaiGet) => { const getHelper = buildGetHelper(jotaiGet); @@ -45,7 +45,7 @@ export const createAtomWritableSelector = ({ derivedAtom.debugLabel = key; return { - type: 'WritableSelectorV2', + type: 'WritableSelector', key, atom: derivedAtom, }; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/types/SelectorGetter.ts b/packages/twenty-front/src/modules/ui/utilities/state/types/SelectorGetter.ts deleted file mode 100644 index 96535d9fa2..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/types/SelectorGetter.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { - type GetCallback, - type GetRecoilValue, - type Loadable, - type RecoilValue, - type WrappedValue, -} from 'recoil'; - -export type SelectorGetter = ( - param: P, -) => (opts: { - get: GetRecoilValue; - getCallback: GetCallback; -}) => Promise | RecoilValue | Loadable | WrappedValue | T; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/types/SelectorSetter.ts b/packages/twenty-front/src/modules/ui/utilities/state/types/SelectorSetter.ts deleted file mode 100644 index 666948d7e3..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/types/SelectorSetter.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { - type DefaultValue, - type GetRecoilValue, - type ResetRecoilState, - type SetRecoilState, -} from 'recoil'; - -export type SelectorSetter = ( - param: P, -) => ( - opts: { set: SetRecoilState; get: GetRecoilValue; reset: ResetRecoilState }, - newValue: T | DefaultValue, -) => void; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/utils/createFamilyState.ts b/packages/twenty-front/src/modules/ui/utilities/state/utils/createFamilyState.ts deleted file mode 100644 index ee6c0f33e8..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/utils/createFamilyState.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { type AtomEffect, atomFamily, type SerializableParam } from 'recoil'; - -export const createFamilyState = < - ValueType, - FamilyKey extends SerializableParam, ->({ - key, - defaultValue, - effects, -}: { - key: string; - defaultValue: ValueType; - effects?: ReadonlyArray>; -}) => { - return atomFamily({ - key, - default: defaultValue, - effects, - }); -}; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/utils/createState.ts b/packages/twenty-front/src/modules/ui/utilities/state/utils/createState.ts deleted file mode 100644 index 7fe0628041..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/utils/createState.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { atom, type AtomEffect } from 'recoil'; - -export const createState = ({ - key, - defaultValue, - effects, -}: { - key: string; - defaultValue: ValueType; - effects?: ReadonlyArray>; -}) => { - const recoilState = atom({ - key, - default: defaultValue, - effects, - }); - return recoilState; -}; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/utils/getSnapshotValue.ts b/packages/twenty-front/src/modules/ui/utilities/state/utils/getSnapshotValue.ts deleted file mode 100644 index fe6d776ae6..0000000000 --- a/packages/twenty-front/src/modules/ui/utilities/state/utils/getSnapshotValue.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { - type RecoilState, - type RecoilValueReadOnly, - type Snapshot, -} from 'recoil'; - -export const getSnapshotValue = ( - snapshot: Snapshot, - state: RecoilState | RecoilValueReadOnly, -) => { - return snapshot.getLoadable(state).getValue(); -}; diff --git a/packages/twenty-front/src/modules/views/hooks/__tests__/useInitializeFilterOnFieldMetadataItemFromViewBarFilterDropdown.test.tsx b/packages/twenty-front/src/modules/views/hooks/__tests__/useInitializeFilterOnFieldMetadataItemFromViewBarFilterDropdown.test.tsx index 2ae3b3ff0f..9f2e3da916 100644 --- a/packages/twenty-front/src/modules/views/hooks/__tests__/useInitializeFilterOnFieldMetadataItemFromViewBarFilterDropdown.test.tsx +++ b/packages/twenty-front/src/modules/views/hooks/__tests__/useInitializeFilterOnFieldMetadataItemFromViewBarFilterDropdown.test.tsx @@ -1,7 +1,6 @@ import { renderHook } from '@testing-library/react'; import { act } from 'react'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; import { objectFilterDropdownFilterIsSelectedComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownFilterIsSelectedComponentState'; import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState'; @@ -53,17 +52,15 @@ const wrapper = ({ children }: { children: React.ReactNode }) => { ); return ( - - + - - {children} - - - + {children} + + ); }; diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase.tsx index 0e119e7e05..895745d337 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase.tsx @@ -1,6 +1,6 @@ import { ActionMenuContext } from '@/action-menu/contexts/ActionMenuContext'; import { commandMenuWidthState } from '@/command-menu/states/commandMenuWidthState'; -import { isCommandMenuOpenedStateV2 } from '@/command-menu/states/isCommandMenuOpenedStateV2'; +import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; import { useListenToSidePanelClosing } from '@/ui/layout/right-drawer/hooks/useListenToSidePanelClosing'; import { useAtomComponentStateCallbackState } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateCallbackState'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; @@ -257,7 +257,7 @@ export const WorkflowDiagramCanvasBase = ({ return { nodes, edges }; }, [currentWorkflowDiagram, workflowInsertStepIds]); - const isCommandMenuOpened = useAtomStateValue(isCommandMenuOpenedStateV2); + const isCommandMenuOpened = useAtomStateValue(isCommandMenuOpenedState); const { isInRightDrawer } = useContext(ActionMenuContext); const handleEdgesChange = ( diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/__stories__/WorkflowDiagramEmptyTriggerEditable.stories.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/__stories__/WorkflowDiagramEmptyTriggerEditable.stories.tsx index 9011bae297..0b32fe4350 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/__stories__/WorkflowDiagramEmptyTriggerEditable.stories.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/__stories__/WorkflowDiagramEmptyTriggerEditable.stories.tsx @@ -6,7 +6,6 @@ import { WorkflowDiagramEmptyTriggerEditable } from '@/workflow/workflow-diagram import '@xyflow/react/dist/style.css'; import { useStore } from 'jotai'; import { useEffect } from 'react'; -import { RecoilRoot } from 'recoil'; import { isDefined } from 'twenty-shared/utils'; import { ComponentDecorator } from 'twenty-ui/testing'; import { ReactflowDecorator } from '~/testing/decorators/ReactflowDecorator'; @@ -50,13 +49,11 @@ export const Default: Story = { decorators: [ (Story) => (
- - - - - + + +
), ReactflowDecorator, @@ -71,15 +68,13 @@ export const Selected: Story = { decorators: [ (Story) => (
- - - - - - - + + + + +
), ReactflowDecorator, diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/__stories__/WorkflowDiagramStepNodeEditableContent.stories.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/__stories__/WorkflowDiagramStepNodeEditableContent.stories.tsx index 3d03cf134b..620c6e467d 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/__stories__/WorkflowDiagramStepNodeEditableContent.stories.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/__stories__/WorkflowDiagramStepNodeEditableContent.stories.tsx @@ -7,7 +7,6 @@ import { WorkflowDiagramStepNodeEditableContent } from '@/workflow/workflow-diag import '@xyflow/react/dist/style.css'; import { useStore } from 'jotai'; import { useEffect } from 'react'; -import { RecoilRoot } from 'recoil'; import { isDefined } from 'twenty-shared/utils'; import { CatalogDecorator, type CatalogStory } from 'twenty-ui/testing'; import { ReactflowDecorator } from '~/testing/decorators/ReactflowDecorator'; @@ -176,17 +175,15 @@ export const Catalog: CatalogStory< (Story, { args }) => { return (
- - + - - - - - + + +
); }, diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/hooks/useRightDrawerState.ts b/packages/twenty-front/src/modules/workflow/workflow-diagram/hooks/useRightDrawerState.ts index 7940999947..a8e1470363 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/hooks/useRightDrawerState.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/hooks/useRightDrawerState.ts @@ -1,4 +1,4 @@ -import { isCommandMenuOpenedStateV2 } from '@/command-menu/states/isCommandMenuOpenedStateV2'; +import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; import { type CommandMenuAnimationVariant } from '@/command-menu/types/CommandMenuAnimationVariant'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useIsMobile } from 'twenty-ui/utilities'; @@ -7,7 +7,7 @@ export const useRightDrawerState = (): { rightDrawerState: CommandMenuAnimationVariant; } => { const isMobile = useIsMobile(); - const isCommandMenuOpened = useAtomStateValue(isCommandMenuOpenedStateV2); + const isCommandMenuOpened = useAtomStateValue(isCommandMenuOpenedState); if (isMobile) { return { diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/components/WorkflowStepFooter.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/components/WorkflowStepFooter.tsx index f6ad430b46..6f3cda5754 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/components/WorkflowStepFooter.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/components/WorkflowStepFooter.tsx @@ -9,7 +9,7 @@ import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/use import { useDeleteStep } from '@/workflow/workflow-steps/hooks/useDeleteStep'; import { useDuplicateStep } from '@/workflow/workflow-steps/hooks/useDuplicateStep'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; -import { workflowAiAgentActionAgentStateV2 } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentActionAgentStateV2'; +import { workflowAiAgentActionAgentState } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentActionAgentState'; import { useLingui } from '@lingui/react/macro'; import { useId } from 'react'; import { SettingsPath } from 'twenty-shared/types'; @@ -45,7 +45,7 @@ export const WorkflowStepFooter = ({ const { deleteStep } = useDeleteStep(); const navigateSettings = useNavigateSettings(); const workflowAiAgentActionAgent = useAtomStateValue( - workflowAiAgentActionAgentStateV2, + workflowAiAgentActionAgentState, ); const shouldPinDeleteButton = !isDefined(additionalActions) || additionalActions.length === 0; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/__tests__/useCreateStep.test.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/__tests__/useCreateStep.test.tsx index c8f4fd5e20..9390d5c16f 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/__tests__/useCreateStep.test.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/__tests__/useCreateStep.test.tsx @@ -1,5 +1,4 @@ import { act, renderHook } from '@testing-library/react'; -import { RecoilRoot } from 'recoil'; import { WorkflowVisualizerComponentInstanceContext } from '@/workflow/workflow-diagram/states/contexts/WorkflowVisualizerComponentInstanceContext'; import { useCreateStep } from '@/workflow/workflow-steps/hooks/useCreateStep'; @@ -40,15 +39,13 @@ const wrapper = ({ children }: { children: React.ReactNode }) => { 'workflow-visualizer-instance-id'; return ( - - - {children} - - + + {children} + ); }; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/__tests__/useDeleteStep.test.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/__tests__/useDeleteStep.test.tsx index 23ba5db332..ef3ab6a0f4 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/__tests__/useDeleteStep.test.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/__tests__/useDeleteStep.test.tsx @@ -2,7 +2,6 @@ import React from 'react'; import { useDeleteStep } from '@/workflow/workflow-steps/hooks/useDeleteStep'; import { renderHook } from '@testing-library/react'; -import { RecoilRoot } from 'recoil'; import { WorkflowVisualizerComponentInstanceContext } from '@/workflow/workflow-diagram/states/contexts/WorkflowVisualizerComponentInstanceContext'; const mockDeleteWorkflowVersionStep = jest.fn(); @@ -55,15 +54,13 @@ const wrapper = ({ children }: { children: React.ReactNode }) => { 'workflow-visualizer-instance-id'; return ( - - - {children} - - + + {children} + ); }; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/__tests__/useDuplicateStep.test.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/__tests__/useDuplicateStep.test.tsx index b0b6881c79..e2f19ea44e 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/__tests__/useDuplicateStep.test.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/__tests__/useDuplicateStep.test.tsx @@ -1,6 +1,5 @@ import { useDuplicateStep } from '@/workflow/workflow-steps/hooks/useDuplicateStep'; import { act, renderHook } from '@testing-library/react'; -import { RecoilRoot } from 'recoil'; import { WorkflowVisualizerComponentInstanceContext } from '@/workflow/workflow-diagram/states/contexts/WorkflowVisualizerComponentInstanceContext'; const mockGetUpdatableWorkflowVersion = jest.fn(); @@ -38,15 +37,13 @@ const wrapper = ({ children }: { children: React.ReactNode }) => { 'workflow-visualizer-instance-id'; return ( - - - {children} - - + + {children} + ); }; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsTab.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsTab.tsx index 7cb60b4cd1..148c70e3e1 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsTab.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsTab.tsx @@ -5,9 +5,9 @@ import { type WorkflowAiAgentAction } from '@/workflow/types/Workflow'; import { useWorkflowAiAgentPermissionActions } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/hooks/useWorkflowAiAgentPermissionActions'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; -import { workflowAiAgentActionAgentStateV2 } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentActionAgentStateV2'; -import { workflowAiAgentPermissionsIsAddingPermissionStateV2 } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsIsAddingPermissionStateV2'; -import { workflowAiAgentPermissionsSelectedObjectIdStateV2 } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsSelectedObjectIdStateV2'; +import { workflowAiAgentActionAgentState } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentActionAgentState'; +import { workflowAiAgentPermissionsIsAddingPermissionState } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsIsAddingPermissionState'; +import { workflowAiAgentPermissionsSelectedObjectIdState } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsSelectedObjectIdState'; import styled from '@emotion/styled'; import { t } from '@lingui/core/macro'; import { useState } from 'react'; @@ -76,17 +76,17 @@ export const WorkflowAiAgentPermissionsTab = ({ refetchAgent, }: WorkflowAiAgentPermissionsTabProps) => { const workflowAiAgentActionAgent = useAtomStateValue( - workflowAiAgentActionAgentStateV2, + workflowAiAgentActionAgentState, ); const [ workflowAiAgentPermissionsSelectedObjectId, setWorkflowAiAgentPermissionsSelectedObjectId, - ] = useAtomState(workflowAiAgentPermissionsSelectedObjectIdStateV2); + ] = useAtomState(workflowAiAgentPermissionsSelectedObjectIdState); const [ workflowAiAgentPermissionsIsAddingPermission, setWorkflowAiAgentPermissionsIsAddingPermission, - ] = useAtomState(workflowAiAgentPermissionsIsAddingPermissionStateV2); + ] = useAtomState(workflowAiAgentPermissionsIsAddingPermissionState); const { alphaSortedActiveNonSystemObjectMetadataItems: objectMetadataItems } = useFilteredObjectMetadataItems(); diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx index dd2f8ca728..21eafae73f 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx @@ -1,7 +1,7 @@ import { FormTextFieldInput } from '@/object-record/record-field/ui/form-types/components/FormTextFieldInput'; import { Select } from '@/ui/input/components/Select'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; -import { workflowAiAgentActionAgentStateV2 } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentActionAgentStateV2'; +import { workflowAiAgentActionAgentState } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentActionAgentState'; import { WorkflowVariablePicker } from '@/workflow/workflow-variables/components/WorkflowVariablePicker'; import { t } from '@lingui/core/macro'; import { @@ -33,7 +33,7 @@ export const WorkflowAiAgentPromptTab = ({ onResponseFormatChange, }: WorkflowAiAgentPromptTabProps) => { const workflowAiAgentActionAgent = useAtomStateValue( - workflowAiAgentActionAgentStateV2, + workflowAiAgentActionAgentState, ); return ( <> diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowEditActionAiAgent.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowEditActionAiAgent.tsx index 819030f3bf..24e05c91c5 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowEditActionAiAgent.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowEditActionAiAgent.tsx @@ -13,8 +13,8 @@ import { WorkflowAiAgentPermissionsTab } from '@/workflow/workflow-steps/workflo import { WORKFLOW_AI_AGENT_TABS } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/constants/WorkflowAiAgentTabs'; import { useResetWorkflowAiAgentPermissionsStateOnCommandMenuClose } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/hooks/useResetWorkflowAiAgentPermissionsStateOnCommandMenuClose'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; -import { workflowAiAgentActionAgentStateV2 } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentActionAgentStateV2'; -import { workflowAiAgentPermissionsIsAddingPermissionStateV2 } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsIsAddingPermissionStateV2'; +import { workflowAiAgentActionAgentState } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentActionAgentState'; +import { workflowAiAgentPermissionsIsAddingPermissionState } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsIsAddingPermissionState'; import styled from '@emotion/styled'; import { useLingui } from '@lingui/react/macro'; import { @@ -66,7 +66,7 @@ export const WorkflowEditActionAiAgent = ({ const componentInstanceId = `${WORKFLOW_AI_AGENT_TAB_LIST_COMPONENT_ID}-${action.id}`; const agentId = action.settings.input.agentId; const [workflowAiAgentActionAgent, setWorkflowAiAgentActionAgent] = - useAtomState(workflowAiAgentActionAgentStateV2); + useAtomState(workflowAiAgentActionAgentState); const { loading: agentLoading, refetch: refetchAgent } = useFindOneAgentQuery( { variables: { id: agentId || '' }, @@ -217,7 +217,7 @@ export const WorkflowEditActionAiAgent = ({ const [ workflowAiAgentPermissionsIsAddingPermission, setWorkflowAiAgentPermissionsIsAddingPermission, - ] = useAtomState(workflowAiAgentPermissionsIsAddingPermissionStateV2); + ] = useAtomState(workflowAiAgentPermissionsIsAddingPermissionState); const role = rolesData?.getRoles.find( (item) => item.id === workflowAiAgentActionAgent?.roleId, diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/hooks/useResetWorkflowAiAgentPermissionsStateOnCommandMenuClose.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/hooks/useResetWorkflowAiAgentPermissionsStateOnCommandMenuClose.ts index 75c776e79d..704b69d8e6 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/hooks/useResetWorkflowAiAgentPermissionsStateOnCommandMenuClose.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/hooks/useResetWorkflowAiAgentPermissionsStateOnCommandMenuClose.ts @@ -1,17 +1,17 @@ import { useListenToSidePanelClosing } from '@/ui/layout/right-drawer/hooks/useListenToSidePanelClosing'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; -import { workflowAiAgentActionAgentStateV2 } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentActionAgentStateV2'; -import { workflowAiAgentPermissionsIsAddingPermissionStateV2 } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsIsAddingPermissionStateV2'; -import { workflowAiAgentPermissionsSelectedObjectIdStateV2 } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsSelectedObjectIdStateV2'; +import { workflowAiAgentActionAgentState } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentActionAgentState'; +import { workflowAiAgentPermissionsIsAddingPermissionState } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsIsAddingPermissionState'; +import { workflowAiAgentPermissionsSelectedObjectIdState } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsSelectedObjectIdState'; export const useResetWorkflowAiAgentPermissionsStateOnCommandMenuClose = () => { const setSelectedObjectId = useSetAtomState( - workflowAiAgentPermissionsSelectedObjectIdStateV2, + workflowAiAgentPermissionsSelectedObjectIdState, ); const setIsAddingPermission = useSetAtomState( - workflowAiAgentPermissionsIsAddingPermissionStateV2, + workflowAiAgentPermissionsIsAddingPermissionState, ); - const setAgentState = useSetAtomState(workflowAiAgentActionAgentStateV2); + const setAgentState = useSetAtomState(workflowAiAgentActionAgentState); const resetPermissionState = () => { setSelectedObjectId(undefined); diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/hooks/useWorkflowAiAgentPermissionActions.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/hooks/useWorkflowAiAgentPermissionActions.ts index d5fec0c9a0..2bb652610a 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/hooks/useWorkflowAiAgentPermissionActions.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/hooks/useWorkflowAiAgentPermissionActions.ts @@ -5,9 +5,9 @@ import { useSettingsRolePermissionFlagConfig } from '@/settings/roles/role-permi import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { CRUD_PERMISSIONS } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/constants/WorkflowAiAgentCrudPermissions'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; -import { workflowAiAgentActionAgentStateV2 } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentActionAgentStateV2'; -import { workflowAiAgentPermissionsIsAddingPermissionStateV2 } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsIsAddingPermissionStateV2'; -import { workflowAiAgentPermissionsSelectedObjectIdStateV2 } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsSelectedObjectIdStateV2'; +import { workflowAiAgentActionAgentState } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentActionAgentState'; +import { workflowAiAgentPermissionsIsAddingPermissionState } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsIsAddingPermissionState'; +import { workflowAiAgentPermissionsSelectedObjectIdState } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsSelectedObjectIdState'; import { t } from '@lingui/core/macro'; import { useMemo } from 'react'; import { isDefined } from 'twenty-shared/utils'; @@ -37,7 +37,7 @@ export const useWorkflowAiAgentPermissionActions = ({ }: UseWorkflowAiAgentPermissionActionsParams) => { const { enqueueSuccessSnackBar } = useSnackBar(); const [workflowAiAgentActionAgent, setWorkflowAiAgentActionAgent] = - useAtomState(workflowAiAgentActionAgentStateV2); + useAtomState(workflowAiAgentActionAgentState); const { alphaSortedActiveNonSystemObjectMetadataItems: objectMetadataItems } = useFilteredObjectMetadataItems(); const settingsPermissionsConfig = useSettingsRolePermissionFlagConfig({ @@ -48,10 +48,10 @@ export const useWorkflowAiAgentPermissionActions = ({ }); const [, setWorkflowAiAgentPermissionsSelectedObjectId] = useAtomState( - workflowAiAgentPermissionsSelectedObjectIdStateV2, + workflowAiAgentPermissionsSelectedObjectIdState, ); const [, setWorkflowAiAgentPermissionsIsAddingPermission] = useAtomState( - workflowAiAgentPermissionsIsAddingPermissionStateV2, + workflowAiAgentPermissionsIsAddingPermissionState, ); const [createRole] = useCreateOneRoleMutation(); @@ -118,7 +118,7 @@ export const useWorkflowAiAgentPermissionActions = ({ const { refetchedAgent } = await refetchAgentAndRoles(); - // Update Recoil state with the refetched agent to ensure roleId is available + // Update state with the refetched agent to ensure roleId is available // Apollo's onCompleted is not called on refetch, so we need to update manually if (isDefined(refetchedAgent)) { setWorkflowAiAgentActionAgent(refetchedAgent); diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentActionAgentStateV2.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentActionAgentState.ts similarity index 64% rename from packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentActionAgentStateV2.ts rename to packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentActionAgentState.ts index 2e4339f017..ad83f69391 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentActionAgentStateV2.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentActionAgentState.ts @@ -2,9 +2,9 @@ import { type Agent } from '~/generated-metadata/graphql'; import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const workflowAiAgentActionAgentStateV2 = createAtomState< +export const workflowAiAgentActionAgentState = createAtomState< Agent | undefined >({ - key: 'workflowAiAgentActionAgentStateV2', + key: 'workflowAiAgentActionAgentState', defaultValue: undefined, }); diff --git a/packages/twenty-front/src/modules/navigation-menu-item/states/isNavigationMenuItemFolderCreatingStateV2.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsIsAddingPermissionState.ts similarity index 53% rename from packages/twenty-front/src/modules/navigation-menu-item/states/isNavigationMenuItemFolderCreatingStateV2.ts rename to packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsIsAddingPermissionState.ts index 8e14f1e803..c0c27403a7 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/states/isNavigationMenuItemFolderCreatingStateV2.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsIsAddingPermissionState.ts @@ -1,7 +1,7 @@ import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -export const isNavigationMenuItemFolderCreatingStateV2 = +export const workflowAiAgentPermissionsIsAddingPermissionState = createAtomState({ - key: 'isNavigationMenuItemFolderCreatingStateV2', + key: 'workflowAiAgentPermissionsIsAddingPermissionState', defaultValue: false, }); diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsIsAddingPermissionStateV2.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsIsAddingPermissionStateV2.ts deleted file mode 100644 index cff8b65e58..0000000000 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsIsAddingPermissionStateV2.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; - -export const workflowAiAgentPermissionsIsAddingPermissionStateV2 = - createAtomState({ - key: 'workflowAiAgentPermissionsIsAddingPermissionStateV2', - defaultValue: false, - }); diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsSelectedObjectIdState.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsSelectedObjectIdState.ts new file mode 100644 index 0000000000..fb3167a02b --- /dev/null +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsSelectedObjectIdState.ts @@ -0,0 +1,8 @@ +import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; + +export const workflowAiAgentPermissionsSelectedObjectIdState = createAtomState< + string | undefined +>({ + key: 'workflowAiAgentPermissionsSelectedObjectIdState', + defaultValue: undefined, +}); diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsSelectedObjectIdStateV2.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsSelectedObjectIdStateV2.ts deleted file mode 100644 index 5b5334dadd..0000000000 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/states/workflowAiAgentPermissionsSelectedObjectIdStateV2.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; - -export const workflowAiAgentPermissionsSelectedObjectIdStateV2 = - createAtomState({ - key: 'workflowAiAgentPermissionsSelectedObjectIdStateV2', - defaultValue: undefined, - }); diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/http-request-action/hooks/__tests__/useTestHttpRequest.test.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/http-request-action/hooks/__tests__/useTestHttpRequest.test.ts index 997e899815..06abbcccb8 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/http-request-action/hooks/__tests__/useTestHttpRequest.test.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/http-request-action/hooks/__tests__/useTestHttpRequest.test.ts @@ -3,7 +3,6 @@ import { type HttpRequestFormData } from '@/workflow/workflow-steps/workflow-act import { useMutation } from '@apollo/client'; import { act, renderHook } from '@testing-library/react'; import React from 'react'; -import { RecoilRoot } from 'recoil'; import { resolveInput } from 'twenty-shared/utils'; import { useTestHttpRequest } from '@/workflow/workflow-steps/workflow-actions/http-request-action/hooks/useTestHttpRequest'; @@ -87,7 +86,7 @@ describe('useTestHttpRequest', () => { }; const wrapper = ({ children }: { children: React.ReactNode }) => - React.createElement(RecoilRoot, null, children); + React.createElement(React.Fragment, null, children); beforeEach(() => { jest.clearAllMocks(); diff --git a/packages/twenty-front/src/modules/workspace/hooks/__tests__/useSubscriptionStatus.test.ts b/packages/twenty-front/src/modules/workspace/hooks/__tests__/useSubscriptionStatus.test.ts index 7617273b94..8ed27f6878 100644 --- a/packages/twenty-front/src/modules/workspace/hooks/__tests__/useSubscriptionStatus.test.ts +++ b/packages/twenty-front/src/modules/workspace/hooks/__tests__/useSubscriptionStatus.test.ts @@ -1,7 +1,6 @@ import { act, renderHook } from '@testing-library/react'; import { createElement } from 'react'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; import { v4 } from 'uuid'; import { @@ -24,11 +23,7 @@ const currentWorkspace = { } as CurrentWorkspace; const Wrapper = ({ children }: { children: React.ReactNode }) => - createElement( - JotaiProvider, - { store: jotaiStore }, - createElement(RecoilRoot, null, children), - ); + createElement(JotaiProvider, { store: jotaiStore }, children); const renderHooks = () => { const { result } = renderHook( diff --git a/packages/twenty-front/src/pages/settings/accounts/SettingsAccountsConfiguration.tsx b/packages/twenty-front/src/pages/settings/accounts/SettingsAccountsConfiguration.tsx index 52d74c9e92..97539f490e 100644 --- a/packages/twenty-front/src/pages/settings/accounts/SettingsAccountsConfiguration.tsx +++ b/packages/twenty-front/src/pages/settings/accounts/SettingsAccountsConfiguration.tsx @@ -8,7 +8,7 @@ import { type MessageChannel } from '@/accounts/types/MessageChannel'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useGenerateDepthRecordGqlFieldsFromObject } from '@/object-record/graphql/record-gql-fields/hooks/useGenerateDepthRecordGqlFieldsFromObject'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; -import { settingsAccountsSelectedMessageChannelStateV2 } from '@/settings/accounts/states/settingsAccountsSelectedMessageChannelStateV2'; +import { settingsAccountsSelectedMessageChannelState } from '@/settings/accounts/states/settingsAccountsSelectedMessageChannelState'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { SettingsPath } from 'twenty-shared/types'; import { getSettingsPath, isDefined } from 'twenty-shared/utils'; @@ -31,7 +31,7 @@ export const SettingsAccountsConfiguration = () => { const [startChannelSyncMutation, { loading: isSubmitting }] = useStartChannelSyncMutation(); const setSelectedMessageChannel = useSetAtomState( - settingsAccountsSelectedMessageChannelStateV2, + settingsAccountsSelectedMessageChannelState, ); const [currentStep, setCurrentStep] = diff --git a/packages/twenty-front/src/testing/decorators/PageDecorator.tsx b/packages/twenty-front/src/testing/decorators/PageDecorator.tsx index 8806b9c535..46f63a864a 100644 --- a/packages/twenty-front/src/testing/decorators/PageDecorator.tsx +++ b/packages/twenty-front/src/testing/decorators/PageDecorator.tsx @@ -10,8 +10,6 @@ import { Route, RouterProvider, } from 'react-router-dom'; -import { RecoilRoot } from 'recoil'; - import { ClientConfigProviderEffect } from '@/client-config/components/ClientConfigProviderEffect'; import { ApolloCoreClientMockedProvider } from '@/object-metadata/hooks/__mocks__/ApolloCoreClientMockedProvider'; @@ -24,7 +22,6 @@ import { ClientConfigProvider } from '~/modules/client-config/components/ClientC import { mockedApolloClient } from '~/testing/mockedApolloClient'; import { MainContextStoreProvider } from '@/context-store/components/MainContextStoreProvider'; -import { RecoilDebugObserverEffect } from '@/debug/components/RecoilDebugObserver'; import { PreComputedChipGeneratorsProvider } from '@/object-metadata/components/PreComputedChipGeneratorsProvider'; import { RecordComponentInstanceContextsWrapper } from '@/object-record/components/RecordComponentInstanceContextsWrapper'; import { PrefetchDataProvider } from '@/prefetch/components/PrefetchDataProvider'; @@ -78,42 +75,39 @@ await dynamicActivate(SOURCE_LOCALE); const Providers = () => { return ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); }; diff --git a/packages/twenty-front/src/testing/decorators/RootDecorator.tsx b/packages/twenty-front/src/testing/decorators/RootDecorator.tsx index 0e5f51ac70..81e260fee9 100644 --- a/packages/twenty-front/src/testing/decorators/RootDecorator.tsx +++ b/packages/twenty-front/src/testing/decorators/RootDecorator.tsx @@ -1,25 +1,20 @@ import { ApolloProvider } from '@apollo/client'; import { type Decorator } from '@storybook/react-vite'; import { Provider as JotaiProvider } from 'jotai'; -import { RecoilRoot } from 'recoil'; import { ApolloCoreClientMockedProvider } from '@/object-metadata/hooks/__mocks__/ApolloCoreClientMockedProvider'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; import { mockedApolloClient } from '~/testing/mockedApolloClient'; -export const RootDecorator: Decorator = (Story, context) => { - const { parameters } = context; - +export const RootDecorator: Decorator = (Story) => { return ( - - - - - - - + + + + + ); }; diff --git a/packages/twenty-front/src/testing/jest/getJestMetadataAndApolloMocksAndActionMenuWrapper.tsx b/packages/twenty-front/src/testing/jest/getJestMetadataAndApolloMocksAndActionMenuWrapper.tsx index f41f966603..7bdcea9340 100644 --- a/packages/twenty-front/src/testing/jest/getJestMetadataAndApolloMocksAndActionMenuWrapper.tsx +++ b/packages/twenty-front/src/testing/jest/getJestMetadataAndApolloMocksAndActionMenuWrapper.tsx @@ -3,7 +3,6 @@ import { ContextStoreComponentInstanceContext } from '@/context-store/states/con import { type MockedResponse } from '@apollo/client/testing'; import { type ReactNode } from 'react'; import type { Store } from 'jotai/vanilla/store'; -import { type MutableSnapshot } from 'recoil'; import { isDefined } from 'twenty-shared/utils'; import { JestContextStoreSetter, @@ -17,14 +16,12 @@ export type GetJestMetadataAndApolloMocksAndActionMenuWrapperProps = { apolloMocks: | readonly MockedResponse, Record>[] | undefined; - onInitializeRecoilSnapshot?: (snapshot: MutableSnapshot) => void; onInitializeJotaiStore?: (store: Store) => void; componentInstanceId: string; } & JestContextStoreSetterMocks; export const getJestMetadataAndApolloMocksAndActionMenuWrapper = ({ apolloMocks, - onInitializeRecoilSnapshot, onInitializeJotaiStore, contextStoreTargetedRecordsRule, contextStoreCurrentViewId, @@ -36,7 +33,6 @@ export const getJestMetadataAndApolloMocksAndActionMenuWrapper = ({ }: GetJestMetadataAndApolloMocksAndActionMenuWrapperProps) => { const Wrapper = getJestMetadataAndApolloMocksWrapper({ apolloMocks, - onInitializeRecoilSnapshot, onInitializeJotaiStore, }); diff --git a/packages/twenty-front/src/testing/jest/getJestMetadataAndApolloMocksWrapper.tsx b/packages/twenty-front/src/testing/jest/getJestMetadataAndApolloMocksWrapper.tsx index e5ff9bd4b0..51dce92e9c 100644 --- a/packages/twenty-front/src/testing/jest/getJestMetadataAndApolloMocksWrapper.tsx +++ b/packages/twenty-front/src/testing/jest/getJestMetadataAndApolloMocksWrapper.tsx @@ -1,7 +1,6 @@ import { MockedProvider, type MockedResponse } from '@apollo/client/testing'; import { Provider as JotaiProvider } from 'jotai'; import { type ReactNode } from 'react'; -import { RecoilRoot, type MutableSnapshot } from 'recoil'; import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext'; @@ -17,7 +16,6 @@ import { JestObjectMetadataItemSetter } from '~/testing/jest/JestObjectMetadataI export const getJestMetadataAndApolloMocksWrapper = ({ apolloMocks, cache, - onInitializeRecoilSnapshot, onInitializeJotaiStore, objectMetadataItems, }: { @@ -25,7 +23,6 @@ export const getJestMetadataAndApolloMocksWrapper = ({ apolloMocks?: | readonly MockedResponse, Record>[] | undefined; - onInitializeRecoilSnapshot?: (snapshot: MutableSnapshot) => void; onInitializeJotaiStore?: (store: typeof jotaiStore) => void; objectMetadataItems?: ObjectMetadataItem[]; }) => { @@ -33,29 +30,27 @@ export const getJestMetadataAndApolloMocksWrapper = ({ return ({ children }: { children: ReactNode }) => ( - - - - - + + + + - - - {children} - - - - - - - + {children} + + + + + + ); }; diff --git a/packages/twenty-front/src/utils/recoil/cookieStorageEffect.ts b/packages/twenty-front/src/utils/recoil/cookieStorageEffect.ts deleted file mode 100644 index a7f6925a63..0000000000 --- a/packages/twenty-front/src/utils/recoil/cookieStorageEffect.ts +++ /dev/null @@ -1,69 +0,0 @@ -import omit from 'lodash.omit'; -import { type AtomEffect } from 'recoil'; -import { isDefined } from 'twenty-shared/utils'; -import { z } from 'zod'; -import { cookieStorage } from '~/utils/cookie-storage'; - -const customCookieAttributeZodSchema = z.object({ - cookieAttributes: z.object({ - expires: z.union([z.number(), z.instanceof(Date)]).optional(), - path: z.string().optional(), - domain: z.string().optional(), - secure: z.boolean().optional(), - }), -}); - -const isCustomCookiesAttributesValue = ( - value: unknown, -): value is { cookieAttributes: Cookies.CookieAttributes } => - customCookieAttributeZodSchema.safeParse(value).success; - -export const cookieStorageEffect = - ( - key: string, - attributes?: Cookies.CookieAttributes, - hooks?: { - validateInitFn?: (payload: T) => boolean; - }, - ): AtomEffect => - ({ setSelf, onSet }) => { - const savedValue = cookieStorage.getItem(key); - if ( - isDefined(savedValue) && - savedValue.length !== 0 && - (!isDefined(hooks?.validateInitFn) || - hooks.validateInitFn(JSON.parse(savedValue))) - ) { - setSelf(JSON.parse(savedValue)); - } - - const defaultAttributes = { - expires: new Date(Date.now() + 1000 * 60 * 60 * 24 * 180), - ...(attributes ?? {}), - }; - - onSet((newValue, _, isReset) => { - const cookieAttributes = { - ...defaultAttributes, - ...(isCustomCookiesAttributesValue(newValue) - ? newValue.cookieAttributes - : {}), - }; - if ( - !newValue || - (Object.keys(newValue).length === 1 && - isCustomCookiesAttributesValue(newValue)) - ) { - cookieStorage.removeItem(key, cookieAttributes); - return; - } - - isReset - ? cookieStorage.removeItem(key, cookieAttributes) - : cookieStorage.setItem( - key, - JSON.stringify(omit(newValue, ['cookieAttributes'])), - cookieAttributes, - ); - }); - }; diff --git a/packages/twenty-front/src/utils/recoil/localStorageEffect.ts b/packages/twenty-front/src/utils/recoil/localStorageEffect.ts deleted file mode 100644 index 1eb958ab8d..0000000000 --- a/packages/twenty-front/src/utils/recoil/localStorageEffect.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { type AtomEffect } from 'recoil'; -import { isDefined } from 'twenty-shared/utils'; - -export const localStorageEffect = - (key?: string): AtomEffect => - ({ setSelf, onSet, node }) => { - const savedValue = localStorage.getItem(key ?? node.key); - if (isDefined(savedValue)) { - try { - setSelf(JSON.parse(savedValue)); - } catch { - // Invalid JSON in localStorage, ignore and use default value - localStorage.removeItem(key ?? node.key); - } - } - - onSet((newValue, _, isReset) => { - isReset - ? localStorage.removeItem(key ?? node.key) - : localStorage.setItem(key ?? node.key, JSON.stringify(newValue)); - }); - }; diff --git a/packages/twenty-ui/src/components/avatar-chip/__stories__/AvatarChip.stories.tsx b/packages/twenty-ui/src/components/avatar-chip/__stories__/AvatarChip.stories.tsx index a58be39904..e0fae77a6d 100644 --- a/packages/twenty-ui/src/components/avatar-chip/__stories__/AvatarChip.stories.tsx +++ b/packages/twenty-ui/src/components/avatar-chip/__stories__/AvatarChip.stories.tsx @@ -1,12 +1,12 @@ import { type Meta, type StoryObj } from '@storybook/react-vite'; import { IconBuildingSkyscraper, IconUser } from '@ui/display'; -import { ComponentDecorator, RecoilRootDecorator } from '@ui/testing'; +import { ComponentDecorator, JotaiRootDecorator } from '@ui/testing'; import { AvatarChip } from '../AvatarChip'; const meta: Meta = { title: 'UI/Components/AvatarChip', component: AvatarChip, - decorators: [ComponentDecorator, RecoilRootDecorator], + decorators: [ComponentDecorator, JotaiRootDecorator], }; export default meta; diff --git a/packages/twenty-ui/src/display/avatar/components/__stories__/Avatar.stories.tsx b/packages/twenty-ui/src/display/avatar/components/__stories__/Avatar.stories.tsx index 1836da5a04..b0108897c9 100644 --- a/packages/twenty-ui/src/display/avatar/components/__stories__/Avatar.stories.tsx +++ b/packages/twenty-ui/src/display/avatar/components/__stories__/Avatar.stories.tsx @@ -3,7 +3,7 @@ import { type Meta, type StoryObj } from '@storybook/react-vite'; import { AVATAR_URL_MOCK, ComponentDecorator, - RecoilRootDecorator, + JotaiRootDecorator, } from '@ui/testing'; import { Avatar } from '../Avatar'; @@ -11,7 +11,7 @@ import { Avatar } from '../Avatar'; const meta: Meta = { title: 'Modules/Users/Avatar', component: Avatar, - decorators: [ComponentDecorator, RecoilRootDecorator], + decorators: [ComponentDecorator, JotaiRootDecorator], args: { avatarUrl: AVATAR_URL_MOCK, size: 'md', diff --git a/packages/twenty-ui/src/display/avatar/components/__stories__/AvatarGroup.stories.tsx b/packages/twenty-ui/src/display/avatar/components/__stories__/AvatarGroup.stories.tsx index 79c0739db6..d26b1dd3cc 100644 --- a/packages/twenty-ui/src/display/avatar/components/__stories__/AvatarGroup.stories.tsx +++ b/packages/twenty-ui/src/display/avatar/components/__stories__/AvatarGroup.stories.tsx @@ -7,7 +7,7 @@ import { AVATAR_URL_MOCK, CatalogDecorator, ComponentDecorator, - RecoilRootDecorator, + JotaiRootDecorator, } from '@ui/testing'; import { AvatarGroup, type AvatarGroupProps } from '../AvatarGroup'; @@ -39,7 +39,7 @@ export default meta; type Story = StoryObj; export const Default: Story = { - decorators: [ComponentDecorator, RecoilRootDecorator], + decorators: [ComponentDecorator, JotaiRootDecorator], }; export const Catalog: Story = { @@ -64,5 +64,5 @@ export const Catalog: Story = { ], }, }, - decorators: [CatalogDecorator, RecoilRootDecorator], + decorators: [CatalogDecorator, JotaiRootDecorator], }; diff --git a/packages/twenty-ui/src/display/icon/components/__stories__/Icon.stories.tsx b/packages/twenty-ui/src/display/icon/components/__stories__/Icon.stories.tsx index 73518f49ba..91c92831b5 100644 --- a/packages/twenty-ui/src/display/icon/components/__stories__/Icon.stories.tsx +++ b/packages/twenty-ui/src/display/icon/components/__stories__/Icon.stories.tsx @@ -2,7 +2,7 @@ import { type Meta, type StoryObj } from '@storybook/react-vite'; import { IconsProvider } from '@ui/display/icon/providers/IconsProvider'; import { ComponentDecorator } from '@ui/testing/decorators/ComponentDecorator'; -import { RecoilRootDecorator } from '@ui/testing/decorators/RecoilRootDecorator'; +import { JotaiRootDecorator } from '@ui/testing/decorators/JotaiRootDecorator'; import { Icon } from '../Icon'; @@ -16,7 +16,7 @@ const meta: Meta = { ), - RecoilRootDecorator, + JotaiRootDecorator, ], }; diff --git a/packages/twenty-ui/src/input/button/components/__stories__/TabButton.stories.tsx b/packages/twenty-ui/src/input/button/components/__stories__/TabButton.stories.tsx index 9e08b988be..a2d29fee87 100644 --- a/packages/twenty-ui/src/input/button/components/__stories__/TabButton.stories.tsx +++ b/packages/twenty-ui/src/input/button/components/__stories__/TabButton.stories.tsx @@ -13,7 +13,7 @@ import { CatalogDecorator, type CatalogStory, ComponentWithRouterDecorator, - RecoilRootDecorator, + JotaiRootDecorator, } from '@ui/testing'; // Mimic the TabList container styling for proper positioning @@ -39,7 +39,7 @@ const StyledTabContainer = styled.div` const meta: Meta = { title: 'UI/Input/Button/TabButton', component: TabButton, - decorators: [ComponentWithRouterDecorator, RecoilRootDecorator], + decorators: [ComponentWithRouterDecorator, JotaiRootDecorator], args: { id: 'tab-button', title: 'Tab Title', diff --git a/packages/twenty-ui/src/navigation/menu/menu-item/components/__stories__/MenuItemMultiSelectAvatar.stories.tsx b/packages/twenty-ui/src/navigation/menu/menu-item/components/__stories__/MenuItemMultiSelectAvatar.stories.tsx index caff5be4bf..fab640122d 100644 --- a/packages/twenty-ui/src/navigation/menu/menu-item/components/__stories__/MenuItemMultiSelectAvatar.stories.tsx +++ b/packages/twenty-ui/src/navigation/menu/menu-item/components/__stories__/MenuItemMultiSelectAvatar.stories.tsx @@ -8,7 +8,7 @@ import { type CatalogOptions, type CatalogStory, ComponentDecorator, - RecoilRootDecorator, + JotaiRootDecorator, } from '@ui/testing'; import { MenuItemMultiSelectAvatar } from '../MenuItemMultiSelectAvatar'; @@ -27,7 +27,7 @@ export const Default: Story = { contextualText: 'Contextual text', avatar: , }, - decorators: [ComponentDecorator, RecoilRootDecorator], + decorators: [ComponentDecorator, JotaiRootDecorator], }; export const Catalog: CatalogStory = { @@ -81,5 +81,5 @@ export const Catalog: CatalogStory = { } as CatalogOptions, }, }, - decorators: [CatalogDecorator, RecoilRootDecorator], + decorators: [CatalogDecorator, JotaiRootDecorator], }; diff --git a/packages/twenty-ui/src/navigation/menu/menu-item/components/__stories__/MenuItemSelectAvatar.stories.tsx b/packages/twenty-ui/src/navigation/menu/menu-item/components/__stories__/MenuItemSelectAvatar.stories.tsx index 5522a275ef..08e6879de8 100644 --- a/packages/twenty-ui/src/navigation/menu/menu-item/components/__stories__/MenuItemSelectAvatar.stories.tsx +++ b/packages/twenty-ui/src/navigation/menu/menu-item/components/__stories__/MenuItemSelectAvatar.stories.tsx @@ -8,7 +8,7 @@ import { type CatalogOptions, type CatalogStory, ComponentDecorator, - RecoilRootDecorator, + JotaiRootDecorator, } from '@ui/testing'; import { MenuItemSelectAvatar } from '../MenuItemSelectAvatar'; @@ -29,7 +29,7 @@ export const Default: Story = { argTypes: { className: { control: false }, }, - decorators: [ComponentDecorator, RecoilRootDecorator], + decorators: [ComponentDecorator, JotaiRootDecorator], }; export const Catalog: CatalogStory = { @@ -89,5 +89,5 @@ export const Catalog: CatalogStory = { } as CatalogOptions, }, }, - decorators: [CatalogDecorator, RecoilRootDecorator], + decorators: [CatalogDecorator, JotaiRootDecorator], }; diff --git a/packages/twenty-ui/src/testing/decorators/RecoilRootDecorator.tsx b/packages/twenty-ui/src/testing/decorators/JotaiRootDecorator.tsx similarity index 52% rename from packages/twenty-ui/src/testing/decorators/RecoilRootDecorator.tsx rename to packages/twenty-ui/src/testing/decorators/JotaiRootDecorator.tsx index 0b98b6b97c..b4ec98bce4 100644 --- a/packages/twenty-ui/src/testing/decorators/RecoilRootDecorator.tsx +++ b/packages/twenty-ui/src/testing/decorators/JotaiRootDecorator.tsx @@ -2,8 +2,7 @@ import { type Decorator } from '@storybook/react-vite'; import { Provider as JotaiProvider } from 'jotai'; -// Kept as RecoilRootDecorator name for backward compatibility during migration -export const RecoilRootDecorator: Decorator = (Story, _context) => ( +export const JotaiRootDecorator: Decorator = (Story) => ( diff --git a/packages/twenty-ui/src/testing/index.ts b/packages/twenty-ui/src/testing/index.ts index 7becddb6a9..8d8675d81b 100644 --- a/packages/twenty-ui/src/testing/index.ts +++ b/packages/twenty-ui/src/testing/index.ts @@ -20,7 +20,7 @@ export { computeLocation, ComponentWithRouterDecorator, } from './decorators/ComponentWithRouterDecorator'; -export { RecoilRootDecorator } from './decorators/RecoilRootDecorator'; +export { JotaiRootDecorator } from './decorators/JotaiRootDecorator'; export { RouterDecorator } from './decorators/RouterDecorator'; export { AVATAR_URL_MOCK } from './mocks/avatarUrlMock'; export type { CatalogStory } from './types/CatalogStory';