feat: migrate connectors to jotai + tanstack

This commit is contained in:
CREDO23 2025-12-19 00:45:38 +02:00
parent e38b925c2a
commit 2cdc6874dc
2 changed files with 17 additions and 19 deletions

View file

@ -5,6 +5,7 @@ import { useAtom, useAtomValue } from "jotai";
import { Brain, Check, FolderOpen, Minus, Plus, PlusCircle, Zap } from "lucide-react"; import { Brain, Check, FolderOpen, Minus, Plus, PlusCircle, Zap } from "lucide-react";
import { useParams, useRouter } from "next/navigation"; import { useParams, useRouter } from "next/navigation";
import React, { Suspense, useCallback, useMemo, useState } from "react"; import React, { Suspense, useCallback, useMemo, useState } from "react";
import { connectorsAtom } from "@/atoms/connectors/connector-query.atoms";
import { documentTypeCountsAtom } from "@/atoms/documents/document-query.atoms"; import { documentTypeCountsAtom } from "@/atoms/documents/document-query.atoms";
import { updateLLMPreferencesMutationAtom } from "@/atoms/llm-config/llm-config-mutation.atoms"; import { updateLLMPreferencesMutationAtom } from "@/atoms/llm-config/llm-config-mutation.atoms";
import { import {
@ -34,7 +35,6 @@ import {
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip";
import { getConnectorIcon } from "@/contracts/enums/connectorIcons"; import { getConnectorIcon } from "@/contracts/enums/connectorIcons";
import type { Document } from "@/contracts/types/document.types"; import type { Document } from "@/contracts/types/document.types";
import { useSearchSourceConnectors } from "@/hooks/use-search-source-connectors";
const DocumentSelector = React.memo( const DocumentSelector = React.memo(
({ ({
@ -143,15 +143,9 @@ const ConnectorSelector = React.memo(
const isLoaded = !!documentTypeCountsData; const isLoaded = !!documentTypeCountsData;
// Fetch live search connectors immediately (non-indexable) const { data: searchConnectors = [], isLoading: connectorsLoading } =
const { useAtomValue(connectorsAtom);
connectors: searchConnectors,
isLoading: connectorsLoading,
isLoaded: connectorsLoaded,
fetchConnectors,
} = useSearchSourceConnectors(false, Number(search_space_id));
// Filter for non-indexable connectors (live search)
const liveSearchConnectors = React.useMemo( const liveSearchConnectors = React.useMemo(
() => searchConnectors.filter((connector) => !connector.is_indexable), () => searchConnectors.filter((connector) => !connector.is_indexable),
[searchConnectors] [searchConnectors]

View file

@ -1,8 +1,11 @@
import { zodResolver } from "@hookform/resolvers/zod"; import { zodResolver } from "@hookform/resolvers/zod";
import { useAtomValue } from "jotai";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { useCallback, useEffect, useState } from "react"; import { useCallback, useEffect, useState } from "react";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { toast } from "sonner"; import { toast } from "sonner";
import { updateConnectorMutationAtom } from "@/atoms/connectors/connector-mutation.atoms";
import { connectorsAtom } from "@/atoms/connectors/connector-query.atoms";
import { import {
type EditConnectorFormValues, type EditConnectorFormValues,
type EditMode, type EditMode,
@ -11,10 +14,8 @@ import {
type GithubRepo, type GithubRepo,
githubPatSchema, githubPatSchema,
} from "@/components/editConnector/types"; } from "@/components/editConnector/types";
import { import type { EnumConnectorName } from "@/contracts/enums/connector";
type SearchSourceConnector, import type { SearchSourceConnector } from "@/hooks/use-search-source-connectors";
useSearchSourceConnectors,
} from "@/hooks/use-search-source-connectors";
import { authenticatedFetch } from "@/lib/auth-utils"; import { authenticatedFetch } from "@/lib/auth-utils";
const normalizeListInput = (value: unknown): string[] => { const normalizeListInput = (value: unknown): string[] => {
@ -51,11 +52,8 @@ const normalizeBoolean = (value: unknown): boolean | null => {
export function useConnectorEditPage(connectorId: number, searchSpaceId: string) { export function useConnectorEditPage(connectorId: number, searchSpaceId: string) {
const router = useRouter(); const router = useRouter();
const { const { data: connectors = [], isLoading: connectorsLoading } = useAtomValue(connectorsAtom);
connectors, const { mutateAsync: updateConnector } = useAtomValue(updateConnectorMutationAtom);
updateConnector,
isLoading: connectorsLoading,
} = useSearchSourceConnectors(false, parseInt(searchSpaceId));
// State managed by the hook // State managed by the hook
const [connector, setConnector] = useState<SearchSourceConnector | null>(null); const [connector, setConnector] = useState<SearchSourceConnector | null>(null);
@ -544,7 +542,13 @@ export function useConnectorEditPage(connectorId: number, searchSpaceId: string)
} }
try { try {
await updateConnector(connectorId, updatePayload); await updateConnector({
id: connectorId,
data: {
...updatePayload,
connector_type: connector.connector_type as EnumConnectorName,
},
});
toast.success("Connector updated!"); toast.success("Connector updated!");
const newlySavedConfig = updatePayload.config || originalConfig; const newlySavedConfig = updatePayload.config || originalConfig;
setOriginalConfig(newlySavedConfig); setOriginalConfig(newlySavedConfig);