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:
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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>({
|
||||
|
||||
Reference in New Issue
Block a user