MCPcopy Create free account
hub / github.com/bytebase/bytebase / InstanceSelect

Function InstanceSelect

frontend/src/react/components/InstanceSelect.tsx:22–119  ·  view source on GitHub ↗
({
  value,
  onChange,
  placeholder,
  disabled,
  className,
  portal,
  engines,
}: InstanceSelectProps)

Source from the content-addressed store, hash-verified

20}
21
22export function InstanceSelect({
23 value,
24 onChange,
25 placeholder,
26 disabled,
27 className,
28 portal,
29 engines,
30}: InstanceSelectProps) {
31 const { t } = useTranslation();
32 const [instances, setInstances] = useState<Instance[]>([]);
33
34 // Stabilize engines array to avoid re-fetching on every render
35 const enginesRef = useRef(engines);
36 const stableEngines = useMemo(() => {
37 const prev = enginesRef.current;
38 if (
39 prev &&
40 engines &&
41 prev.length === engines.length &&
42 prev.every((e, i) => e === engines[i])
43 ) {
44 return prev;
45 }
46 enginesRef.current = engines;
47 return engines;
48 }, [engines]);
49
50 const fetchInstances = useCallback(
51 (query: string) => {
52 useAppStore
53 .getState()
54 .fetchInstanceList({
55 pageSize: getDefaultPagination(),
56 filter: { query, engines: stableEngines },
57 })
58 .then((result) => setInstances(result.instances));
59 },
60 [stableEngines]
61 );
62
63 useEffect(() => {
64 fetchInstances("");
65 }, [fetchInstances]);
66
67 const handleChange = useCallback(
68 (name: string) => {
69 const inst = instances.find((i) => i.name === name);
70 onChange(name, inst);
71 },
72 [instances, onChange]
73 );
74
75 return (
76 <Combobox
77 value={value}
78 onChange={handleChange}
79 placeholder={placeholder ?? t("common.instance")}

Callers

nothing calls this directly

Calls 3

getDefaultPaginationFunction · 0.90
tFunction · 0.50

Tested by

no test coverage detected