Migrate twenty ui to jotai (#17900)

## Remove Recoil from twenty-ui

Completely removes the `recoil` dependency from `twenty-ui` by
converting all atoms, hooks, and providers to Jotai equivalents.

### twenty-ui
- `createState` now returns a Jotai `PrimitiveAtom` instead of a Recoil
atom
- `iconsState`, `IconsProvider`, `useIcons` converted to Jotai
(`useSetAtom`, `useAtomValue`)
- `RecoilRootDecorator` now uses Jotai `Provider` (name kept for compat)
- Deleted unused `invalidAvatarUrlsState` (Avatar already uses
`invalidAvatarUrlsAtomV2`)
- Removed `recoil` from `package.json`

### twenty-front
- Created local Recoil `createState` at
`@/ui/utilities/state/utils/createState` for ~112 state files still on
Recoil
- Updated all imports accordingly
- Removed `iconsState` from Recoil snapshot preservation in `useAuth`
(lives in Jotai store now)
This commit is contained in:
Charles Bochet
2026-02-12 16:43:34 +01:00
committed by GitHub
parent 09e48addb2
commit 310d13fd17
139 changed files with 165 additions and 168 deletions
@@ -1,7 +1,7 @@
import { type Locale } from 'date-fns';
import { enUS } from 'date-fns/locale';
import { type APP_LOCALES } from 'twenty-shared/translations';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
type DateLocaleState = {
locale?: keyof typeof APP_LOCALES;
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const forceRegisteredActionsByKeyState = createState<
Record<string, boolean | undefined>
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const emailThreadIdWhenEmailThreadWasClosedState = createState<
string | null
>({
@@ -1,5 +1,5 @@
import { type ActivityTargetableObject } from '@/activities/types/ActivityTargetableEntity';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const activityTargetableEntityArrayState = createState<
ActivityTargetableObject[]
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const canCreateActivityState = createState<boolean>({
key: 'canCreateActivityState',
defaultValue: false,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isActivityInCreateModeState = createState<boolean>({
key: 'isActivityInCreateModeState',
defaultValue: false,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isUpsertingActivityInDBState = createState<boolean>({
key: 'isUpsertingActivityInDBState',
defaultValue: false,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isAppEffectRedirectEnabledState = createState<boolean>({
key: 'isAppEffectRedirectEnabledState',
defaultValue: true,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const verifyEmailRedirectPathState = createState<string | undefined>({
key: 'verifyEmailRedirectPathState',
@@ -20,7 +20,6 @@ import {
import { isMultiWorkspaceEnabledState } from '@/client-config/states/isMultiWorkspaceEnabledState';
import { SnackBarComponentInstanceContext } from '@/ui/feedback/snack-bar-manager/contexts/SnackBarComponentInstanceContext';
import { renderHook } from '@testing-library/react';
import { iconsState } from 'twenty-ui/display';
import { SupportDriver } from '~/generated-metadata/graphql';
const redirectSpy = jest.fn();
@@ -159,7 +158,6 @@ describe('useAuth', () => {
const { result } = renderHook(
() => {
const client = useApolloClient();
const icons = useRecoilValue(iconsState);
const workspaceAuthProviders = useRecoilValue(
workspaceAuthProvidersState,
);
@@ -175,7 +173,6 @@ describe('useAuth', () => {
...useAuth(),
client,
state: {
icons,
workspaceAuthProviders,
billing,
isDeveloperDefaultSignInPrefilled,
@@ -200,7 +197,6 @@ describe('useAuth', () => {
const { state } = result.current;
expect(state.icons).toEqual({});
expect(state.workspaceAuthProviders).toEqual(null);
expect(state.billing).toBeNull();
expect(state.isDeveloperDefaultSignInPrefilled).toBe(false);
@@ -67,7 +67,6 @@ import { i18n } from '@lingui/core';
import { useNavigate, useSearchParams } from 'react-router-dom';
import { SOURCE_LOCALE } from 'twenty-shared/translations';
import { isDefined } from 'twenty-shared/utils';
import { iconsState } from 'twenty-ui/display';
import { cookieStorage } from '~/utils/cookie-storage';
import { getWorkspaceUrl } from '~/utils/getWorkspaceUrl';
@@ -132,7 +131,6 @@ export const useAuth = () => {
const emptySnapshot = snapshot_UNSTABLE();
const iconsValue = snapshot.getLoadable(iconsState).getValue();
const authProvidersValue = snapshot
.getLoadable(workspaceAuthProvidersState)
.getValue();
@@ -164,7 +162,6 @@ export const useAuth = () => {
.getValue();
const initialSnapshot = emptySnapshot.map(({ set }) => {
set(iconsState, iconsValue);
set(workspaceAuthProvidersState, authProvidersValue);
set(billingState, billing);
set(
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
import { type AvailableWorkspaces } from '~/generated-metadata/graphql';
export const availableWorkspacesState = createState<AvailableWorkspaces>({
@@ -1,6 +1,6 @@
import { type BillingCheckoutSession } from '@/auth/types/billingCheckoutSession.type';
import { BILLING_CHECKOUT_SESSION_DEFAULT_VALUE } from '@/billing/constants/BillingCheckoutSessionDefaultValue';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const billingCheckoutSessionState = createState<BillingCheckoutSession>({
key: 'billingCheckoutSessionState',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
import { type User } from '~/generated-metadata/graphql';
export type CurrentUser = Pick<
@@ -1,5 +1,5 @@
import { type ObjectPermissions } from 'twenty-shared/types';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
import { type UserWorkspace } from '~/generated-metadata/graphql';
export type CurrentUserWorkspace = Pick<
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
import { type DeletedWorkspaceMember } from '~/generated-metadata/graphql';
export const currentWorkspaceDeletedMembersState = createState<
@@ -1,5 +1,5 @@
import { type WorkspaceMember } from '@/workspace-member/types/WorkspaceMember';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export type CurrentWorkspaceMember = Omit<
WorkspaceMember,
@@ -1,5 +1,5 @@
import { type PartialWorkspaceMember } from '@/settings/roles/types/RoleWithPartialMembers';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const currentWorkspaceMembersState = createState<
PartialWorkspaceMember[]
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
import {
type Application,
type Role,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isCurrentUserLoadedState = createState<boolean>({
key: 'isCurrentUserLoadedState',
defaultValue: false,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
import { type AuthToken } from '~/generated-metadata/graphql';
export const loginTokenState = createState<AuthToken['token'] | null>({
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const previousUrlState = createState<string>({
key: 'previousUrlState',
defaultValue: '',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const qrCodeState = createState<string | null>({
key: 'qrCodeState',
@@ -1,5 +1,5 @@
import { SignInUpMode } from '@/auth/types/signInUpMode';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const signInUpModeState = createState<SignInUpMode>({
key: 'signInUpModeState',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export enum SignInUpStep {
Init = 'init',
Email = 'email',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
import { type AuthTokenPair } from '~/generated-metadata/graphql';
import { cookieStorageEffect } from '~/utils/recoil/cookieStorageEffect';
@@ -1,5 +1,5 @@
import { type PublicWorkspaceDataOutput } from '~/generated-metadata/graphql';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const workspacePublicDataState =
createState<PublicWorkspaceDataOutput | null>({
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const captchaTokenState = createState<string | undefined>({
key: 'captchaTokenState',
defaultValue: undefined,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isCaptchaScriptLoadedState = createState<boolean>({
key: 'isCaptchaScriptLoadedState',
defaultValue: false,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isRequestingCaptchaTokenState = createState<boolean>({
key: 'isRequestingCaptchaTokenState',
defaultValue: false,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isLoadingTokensFromExtensionState = createState<boolean | null>({
key: 'isLoadingTokensFromExtensionState',
defaultValue: null,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
import { type ClientAiModelConfig } from '~/generated-metadata/graphql';
export const aiModelsState = createState<ClientAiModelConfig[]>({
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const allowRequestsToTwentyIconsState = createState<boolean>({
key: 'allowRequestsToTwentyIcons',
@@ -1,5 +1,5 @@
import { type ApiConfig } from '~/generated-metadata/graphql';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const apiConfigState = createState<ApiConfig | null>({
key: 'apiConfigState',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const appVersionState = createState<string | undefined>({
key: 'appVersion',
@@ -1,5 +1,5 @@
import { type AuthProviders } from '~/generated-metadata/graphql';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const authProvidersState = createState<AuthProviders>({
key: 'authProvidersState',
@@ -1,5 +1,5 @@
import { type Billing } from '~/generated-metadata/graphql';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const billingState = createState<Billing | null>({
key: 'billingState',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const calendarBookingPageIdState = createState<string | null>({
key: 'calendarBookingPageIdState',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const canManageFeatureFlagsState = createState<boolean>({
key: 'canManageFeatureFlagsState',
defaultValue: false,
@@ -1,5 +1,5 @@
import { type Captcha } from '~/generated-metadata/graphql';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const captchaState = createState<Captcha | null>({
key: 'captchaState',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const chromeExtensionIdState = createState<string | null | undefined>({
key: 'chromeExtensionIdState',
defaultValue: null,
@@ -1,5 +1,5 @@
import { type ClientConfig } from '@/client-config/types/ClientConfig';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
type ClientConfigApiStatus = {
isLoadedOnce: boolean;
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isAnalyticsEnabledState = createState<boolean>({
key: 'isAnalyticsEnabled',
defaultValue: false,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isAttachmentPreviewEnabledState = createState<boolean>({
key: 'isAttachmentPreviewEnabled',
defaultValue: false,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isClickHouseConfiguredState = createState<boolean>({
key: 'isClickHouseConfigured',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isCloudflareIntegrationEnabledState = createState<boolean>({
key: 'isCloudflareIntegrationEnabled',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isConfigVariablesInDbEnabledState = createState<boolean>({
key: 'isConfigVariablesInDbEnabled',
defaultValue: false,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isDeveloperDefaultSignInPrefilledState = createState<boolean>({
key: 'isDeveloperDefaultSignInPrefilledState',
defaultValue: false,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isEmailVerificationRequiredState = createState<boolean>({
key: 'isEmailVerificationRequired',
defaultValue: false,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isEmailingDomainsEnabledState = createState<boolean>({
key: 'isEmailingDomainsEnabled',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isGoogleCalendarEnabledState = createState<boolean>({
key: 'isGoogleCalendarEnabled',
defaultValue: false,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isGoogleMessagingEnabledState = createState<boolean>({
key: 'isGoogleMessagingEnabled',
defaultValue: false,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isImapSmtpCaldavEnabledState = createState<boolean>({
key: 'isImapSmtpCaldavEnabled',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isMicrosoftCalendarEnabledState = createState<boolean>({
key: 'isMicrosoftCalendarEnabled',
defaultValue: false,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isMicrosoftMessagingEnabledState = createState<boolean>({
key: 'isMicrosoftMessagingEnabled',
defaultValue: false,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isMultiWorkspaceEnabledState = createState<boolean>({
key: 'isMultiWorkspaceEnabled',
defaultValue: false,
@@ -1,5 +1,5 @@
import { type Sentry } from '~/generated-metadata/graphql';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const sentryConfigState = createState<Sentry | null>({
key: 'sentryConfigState',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
import { type Support, SupportDriver } from '~/generated-metadata/graphql';
export const supportChatState = createState<Support>({
@@ -1,5 +1,5 @@
import { type MorphItem } from '@/object-record/multiple-objects/types/MorphItem';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const commandMenuNavigationMorphItemsByPageState = createState<
Map<string, MorphItem[]>
@@ -1,6 +1,6 @@
import { type CommandMenuPages } from '@/command-menu/types/CommandMenuPages';
import { type IconComponent } from 'twenty-ui/display';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export type CommandMenuNavigationStackItem = {
page: CommandMenuPages;
@@ -1,5 +1,5 @@
import { type IconComponent } from 'twenty-ui/display';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const commandMenuPageInfoState = createState<{
title?: string;
@@ -1,5 +1,5 @@
import { CommandMenuPages } from '@/command-menu/types/CommandMenuPages';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const commandMenuPageState = createState<CommandMenuPages>({
key: 'command-menu/commandMenuPageState',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const commandMenuSearchState = createState<string>({
key: 'command-menu/commandMenuSearchState',
defaultValue: '',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const hasUserSelectedCommandState = createState({
key: 'hasUserSelectedCommandState',
defaultValue: false,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isCommandMenuClosingState = createState({
key: 'command-menu/isCommandMenuClosingState',
defaultValue: false,
@@ -1,5 +1,5 @@
import { type ClientConfig } from '@/client-config/types/ClientConfig';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const domainConfigurationState = createState<
Pick<ClientConfig, 'frontDomain' | 'defaultSubdomain'>
@@ -1,5 +1,5 @@
import { cookieStorageEffect } from '~/utils/recoil/cookieStorageEffect';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const lastAuthenticatedWorkspaceDomainState = createState<
| {
@@ -7,7 +7,7 @@ import { detectNumberFormat } from '@/localization/utils/detection/detectNumberF
import { detectTimeFormat } from '@/localization/utils/detection/detectTimeFormat';
import { detectTimeZone } from '@/localization/utils/detection/detectTimeZone';
import { CalendarStartDay } from 'twenty-shared/constants';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export type WorkspaceMemberFormatPreferences = {
timeZone: string;
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const currentMobileNavigationDrawerState = createState<
'main' | 'settings'
>({
@@ -1,5 +1,5 @@
import { localStorageEffect } from '~/utils/recoil/localStorageEffect';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const lastVisitedObjectMetadataItemIdState = createState<string | null>({
key: 'lastVisitedObjectMetadataItemIdState',
@@ -1,5 +1,5 @@
import { localStorageEffect } from '~/utils/recoil/localStorageEffect';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const lastVisitedViewPerObjectMetadataItemState = createState<Record<
string,
@@ -1,5 +1,5 @@
import type { FieldMetadataItemUpdate } from '@/object-metadata/types/FieldMetadataItemUpdate';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const lastFieldMetadataItemUpdateState =
createState<FieldMetadataItemUpdate | null>({
@@ -1,5 +1,5 @@
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const objectMetadataItemsState = createState<ObjectMetadataItem[]>({
key: 'objectMetadataItemsState',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const shouldAppBeLoadingState = createState<boolean>({
key: 'shouldAppBeLoadingState',
defaultValue: false,
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const lastShowPageRecordIdState = createState<string | null>({
key: 'lastShowPageRecordIdState',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const recordIndexCalendarFieldMetadataIdState = createState<
string | null
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
import { ViewCalendarLayout } from '~/generated-metadata/graphql';
export const recordIndexCalendarLayoutState = createState<ViewCalendarLayout>({
@@ -1,6 +1,6 @@
import { type FieldMetadata } from '@/object-record/record-field/ui/types/FieldMetadata';
import { type ColumnDefinition } from '@/object-record/record-table/types/ColumnDefinition';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const recordIndexFieldDefinitionsState = createState<
ColumnDefinition<FieldMetadata>[]
@@ -1,5 +1,5 @@
import { ViewOpenRecordInType } from '@/views/types/ViewOpenRecordInType';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const recordIndexOpenRecordInState = createState<ViewOpenRecordInType>({
key: 'recordIndexOpenRecordInState',
@@ -1,5 +1,5 @@
import { type ViewType } from '@/views/types/ViewType';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const recordIndexViewTypeState = createState<ViewType | undefined>({
key: 'recordIndexViewTypeState',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const isMergeInProgressState = createState<boolean>({
key: 'isMergeInProgress',
@@ -1,5 +1,5 @@
import { type MergeManySettings } from '@/object-record/hooks/useMergeManyRecords';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const mergeSettingsState = createState<MergeManySettings>({
key: 'mergeSettingsState',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const viewableRecordIdState = createState<string | null>({
key: 'activities/viewable-record-id',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
// TODO: deprecate this state once we remove IS_COMMAND_MENU_V2_ENABLED flag
export const viewableRecordNameSingularState = createState<string | null>({
key: 'activities/viewable-record-name-singular',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const tableWidthResizeIsActiveState = createState({
key: 'tableWidthResizeIsActiveState',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const currentPageLayoutIdState = createState<string | null>({
key: 'currentPageLayoutIdState',
@@ -1,5 +1,5 @@
import { type PageLayout } from '@/page-layout/types/PageLayout';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const recordPageLayoutsState = createState<PageLayout[]>({
key: 'recordPageLayoutsState',
@@ -1,5 +1,5 @@
import { type FavoriteFolder } from '@/favorites/types/FavoriteFolder';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const prefetchFavoriteFoldersState = createState<FavoriteFolder[]>({
key: 'prefetchFavoriteFoldersState',
@@ -1,5 +1,5 @@
import { type Favorite } from '@/favorites/types/Favorite';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const prefetchFavoritesState = createState<Favorite[]>({
key: 'prefetchFavoritesState',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
import { type NavigationMenuItem } from '~/generated-metadata/graphql';
export const prefetchNavigationMenuItemsState = createState<
@@ -1,5 +1,5 @@
import { type ConfigVariableGroupFilter } from '@/settings/admin-panel/config-variables/types/ConfigVariableGroupFilter';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const configVariableGroupFilterState =
createState<ConfigVariableGroupFilter>({
@@ -1,5 +1,5 @@
import { type ConfigVariableSourceFilter } from '@/settings/admin-panel/config-variables/types/ConfigVariableSourceFilter';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const configVariableSourceFilterState =
createState<ConfigVariableSourceFilter>({
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const showHiddenGroupVariablesState = createState<boolean>({
key: 'showHiddenGroupVariablesState',
@@ -1,5 +1,5 @@
import { type DomainValidRecords } from '~/generated-metadata/graphql';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const customDomainRecordsState = createState<{
customDomainRecords: DomainValidRecords | null;
@@ -1,5 +1,5 @@
import { type DomainValidRecords } from '~/generated-metadata/graphql';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const publicDomainRecordsState = createState<{
publicDomainRecords: DomainValidRecords | null;
@@ -1,5 +1,5 @@
import { type PublicDomain } from '~/generated-metadata/graphql';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const selectedPublicDomainState = createState<PublicDomain | undefined>({
key: 'selectedPublicDomainState',
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
import { type FindManyLogicFunctionsQuery } from '~/generated-metadata/graphql';
export type LogicFunction =
@@ -1,4 +1,4 @@
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const openAPIReferenceState = createState<any>({
key: 'OpenAPIReference',
defaultValue: null,
@@ -1,5 +1,5 @@
import { type ApprovedAccessDomain } from '~/generated-metadata/graphql';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const approvedAccessDomainsState = createState<
Omit<ApprovedAccessDomain, '__typename'>[]
@@ -1,7 +1,7 @@
/* @license Enterprise */
import { type SSOIdentityProvider } from '@/settings/security/types/SSOIdentityProvider';
import { createState } from 'twenty-ui/utilities';
import { createState } from '@/ui/utilities/state/utils/createState';
export const SSOIdentitiesProvidersState = createState<
Omit<SSOIdentityProvider, '__typename'>[]

Some files were not shown because too many files have changed in this diff Show More