Files
twenty/packages/twenty-front/src/testing/profiling/components/ProfilingQueueEffect.tsx
T
Charles Bochet d81f006979 Rename Jotai state hooks and utilities to consistent Atom-based naming (#18209)
## Summary

Rename all Jotai-based state management hooks and utilities to a
consistent naming convention that:
1. Removes legacy Recoil naming (`useRecoilXxxV2`, `createXxxV2`)
2. Always includes `Atom` in the name to distinguish from jotai native
hooks
3. Follows a consistent ordering: `Atom` → `Component` → `Family` →
`Type` (`State`/`Selector`)
4. Includes the type qualifier (`State` or `Selector`) in all
value-reading hooks to avoid naming conflicts with jotai's native
`useAtomValue`

## Naming Convention

**Hooks**:
`use[Set]Atom[Component][Family][State|Selector][Value|State|CallbackState]`
**Utils**: `createAtom[Component][Family][State|Selector]`

## Changes

### Hooks renamed (definition files + all usages across ~1,500 files):

| Old Name (Recoil) | Intermediate (Atom) | Final Name |
|---|---|---|
| `useRecoilValueV2` | `useAtomValue` | **`useAtomStateValue`** |
| `useRecoilStateV2` | `useAtomState` | `useAtomState` |
| `useSetRecoilStateV2` | `useSetAtomState` | `useSetAtomState` |
| `useFamilyRecoilValueV2` | `useFamilyAtomValue` |
**`useAtomFamilyStateValue`** |
| `useSetFamilyRecoilStateV2` | `useSetFamilyAtomState` |
**`useSetAtomFamilyState`** |
| `useFamilySelectorValueV2` | `useFamilySelectorValue` |
**`useAtomFamilySelectorValue`** |
| `useFamilySelectorStateV2` | `useFamilySelectorState` |
**`useAtomFamilySelectorState`** |
| `useRecoilComponentValueV2` | `useAtomComponentValue` |
**`useAtomComponentStateValue`** |
| `useRecoilComponentStateV2` | `useAtomComponentState` |
`useAtomComponentState` |
| `useSetRecoilComponentStateV2` | `useSetAtomComponentState` |
`useSetAtomComponentState` |
| `useRecoilComponentFamilyValueV2` | `useAtomComponentFamilyValue` |
**`useAtomComponentFamilyStateValue`** |
| `useRecoilComponentFamilyStateV2` | `useAtomComponentFamilyState` |
`useAtomComponentFamilyState` |
| `useSetRecoilComponentFamilyStateV2` |
`useSetAtomComponentFamilyState` | `useSetAtomComponentFamilyState` |
| `useRecoilComponentSelectorValueV2` | `useAtomComponentSelectorValue`
| `useAtomComponentSelectorValue` |
| `useRecoilComponentFamilySelectorValueV2` |
`useAtomComponentFamilySelectorValue` |
`useAtomComponentFamilySelectorValue` |
| `useRecoilComponentStateCallbackStateV2` |
`useAtomComponentStateCallbackState` |
`useAtomComponentStateCallbackState` |
| `useRecoilComponentSelectorCallbackStateV2` |
`useAtomComponentSelectorCallbackState` |
`useAtomComponentSelectorCallbackState` |
| `useRecoilComponentFamilyStateCallbackStateV2` |
`useAtomComponentFamilyStateCallbackState` |
`useAtomComponentFamilyStateCallbackState` |
| `useRecoilComponentFamilySelectorCallbackStateV2` |
`useAtomComponentFamilySelectorCallbackState` |
`useAtomComponentFamilySelectorCallbackState` |

### Utilities renamed:

| Old Name (Recoil) | Final Name |
|---|---|
| `createStateV2` | **`createAtomState`** |
| `createFamilyStateV2` | **`createAtomFamilyState`** |
| `createSelectorV2` | **`createAtomSelector`** |
| `createFamilySelectorV2` | **`createAtomFamilySelector`** |
| `createWritableSelectorV2` | **`createAtomWritableSelector`** |
| `createWritableFamilySelectorV2` |
**`createAtomWritableFamilySelector`** |
| `createComponentStateV2` | **`createAtomComponentState`** |
| `createComponentFamilyStateV2` | **`createAtomComponentFamilyState`**
|
| `createComponentSelectorV2` | **`createAtomComponentSelector`** |
| `createComponentFamilySelectorV2` |
**`createAtomComponentFamilySelector`** |

## Details

- All definition files renamed to match new convention
- All import paths and usages updated across the entire `twenty-front`
package
- Jotai's native `useAtomValue` is aliased as `useJotaiAtomValue` in the
wrapper hook to avoid collision
- Legacy Recoil files in `state/utils/` and `component-state/utils/`
left untouched (separate naming scope)
- Typecheck passes cleanly
2026-02-25 01:55:46 +01:00

124 lines
3.6 KiB
TypeScript

import { useEffect } from 'react';
import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState';
import { TIME_BETWEEN_TEST_RUNS_IN_MS } from '~/testing/profiling/constants/TimeBetweenTestRunsInMs';
import { currentProfilingRunIndexState } from '~/testing/profiling/states/currentProfilingRunIndexState';
import { profilingQueueState } from '~/testing/profiling/states/profilingQueueState';
import { profilingSessionRunsState } from '~/testing/profiling/states/profilingSessionRunsState';
import { profilingSessionStatusState } from '~/testing/profiling/states/profilingSessionStatusState';
import { getTestArray } from '~/testing/profiling/utils/getTestArray';
import { sleep } from '~/utils/sleep';
export const ProfilingQueueEffect = ({
profilingId,
numberOfTestsPerRun,
numberOfRuns,
warmUpRounds,
}: {
profilingId: string;
numberOfTestsPerRun: number;
numberOfRuns: number;
warmUpRounds: number;
}) => {
const [currentProfilingRunIndex, setCurrentProfilingRunIndex] = useAtomState(
currentProfilingRunIndexState,
);
const [profilingSessionStatus, setProfilingSessionStatus] = useAtomState(
profilingSessionStatusState,
);
const [profilingSessionRuns, setProfilingSessionRuns] = useAtomState(
profilingSessionRunsState,
);
const [profilingQueue, setProfilingQueue] = useAtomState(profilingQueueState);
useEffect(() => {
(async () => {
if (profilingSessionStatus === 'not_started') {
setProfilingSessionStatus('running');
setCurrentProfilingRunIndex(0);
const newTestRuns = [
...[
...Array.from({ length: warmUpRounds }, (_, i) => `warm-up-${i}`),
],
...[
...Array.from({ length: numberOfRuns }, (_, i) => `real-run-${i}`),
],
'finishing-run-1',
'finishing-run-2',
'finishing-run-3',
];
setProfilingSessionRuns(newTestRuns);
const testArray = getTestArray(
profilingId,
numberOfTestsPerRun,
newTestRuns[0],
);
setProfilingQueue((currentProfilingQueue) => ({
...currentProfilingQueue,
[newTestRuns[0]]: testArray,
}));
} else if (profilingSessionStatus === 'running') {
const testsStillToRun =
profilingQueue[profilingSessionRuns[currentProfilingRunIndex]];
const allTestsAreRun = testsStillToRun.length > 0;
const isFinalRun =
currentProfilingRunIndex === profilingSessionRuns.length - 1;
if (allTestsAreRun) {
if (isFinalRun) {
setProfilingSessionStatus('finished');
return;
}
const timeInMs = profilingSessionRuns[
currentProfilingRunIndex
].startsWith('warm-up')
? TIME_BETWEEN_TEST_RUNS_IN_MS * 2
: TIME_BETWEEN_TEST_RUNS_IN_MS;
await sleep(timeInMs);
const nextIndex = currentProfilingRunIndex + 1;
setCurrentProfilingRunIndex(nextIndex);
const testArray = getTestArray(
profilingId,
numberOfTestsPerRun,
profilingSessionRuns[nextIndex],
);
setProfilingQueue((currentProfilingQueue) => ({
...currentProfilingQueue,
[profilingSessionRuns[nextIndex]]: testArray,
}));
}
}
})();
}, [
profilingQueue,
numberOfTestsPerRun,
profilingId,
currentProfilingRunIndex,
setProfilingQueue,
setCurrentProfilingRunIndex,
profilingSessionStatus,
setProfilingSessionStatus,
profilingSessionRuns,
setProfilingSessionRuns,
numberOfRuns,
warmUpRounds,
]);
return <></>;
};