Tony Powell commited on
Commit
843fee0
·
1 Parent(s): 5c42f3b

Move db instantiation into custom hook

Browse files
Files changed (2) hide show
  1. src/App.tsx +2 -28
  2. src/useDuckDb.ts +35 -0
src/App.tsx CHANGED
@@ -1,10 +1,10 @@
1
  import { useCallback, useEffect, useState } from "react";
2
- import { createDb } from "./duck";
3
  import { Table } from "./table";
4
  import { AsyncDuckDBConnection } from "@duckdb/duckdb-wasm";
5
  import { Button } from "~/components/ui/button";
6
  import { Textarea } from "~/components/ui/textarea";
7
  import { useSearchParams } from "~/useSearchParams";
 
8
 
9
  const DEFAULT_DATASET_URL =
10
  "https://huggingface.co/datasets/openai/openai_humaneval/resolve/main/openai_humaneval/test-00000-of-00001.parquet";
@@ -34,35 +34,9 @@ function App() {
34
  const [loading, setLoading] = useState(false);
35
  const [datasetUrl, setDatasetUrl] = usePersistedTextfield("datasetUrl");
36
  const [nextDatasetUrl, setNextDatasetUrl] = useState(() => datasetUrl);
37
- const [db, setDb] = useState<Awaited<ReturnType<typeof createDb>> | null>(
38
- null
39
- );
40
  const [dataset, setDataset] = useState<null>(null);
41
  const [error, setError] = useState<string | null>(null);
42
- useEffect(() => {
43
- const status = {
44
- killed: false,
45
- };
46
- const initDb = async () => {
47
- const db = await createDb();
48
- if (status.killed) {
49
- db.terminate();
50
- return;
51
- }
52
- setDb(db);
53
- };
54
- initDb();
55
-
56
- return () => {
57
- status.killed = true;
58
- setDb((db) => {
59
- if (db) {
60
- db.terminate();
61
- }
62
- return null;
63
- });
64
- };
65
- }, []);
66
 
67
  useEffect(() => {
68
  if (db && datasetUrl) {
 
1
  import { useCallback, useEffect, useState } from "react";
 
2
  import { Table } from "./table";
3
  import { AsyncDuckDBConnection } from "@duckdb/duckdb-wasm";
4
  import { Button } from "~/components/ui/button";
5
  import { Textarea } from "~/components/ui/textarea";
6
  import { useSearchParams } from "~/useSearchParams";
7
+ import { useDuckDb } from "~/useDuckDb";
8
 
9
  const DEFAULT_DATASET_URL =
10
  "https://huggingface.co/datasets/openai/openai_humaneval/resolve/main/openai_humaneval/test-00000-of-00001.parquet";
 
34
  const [loading, setLoading] = useState(false);
35
  const [datasetUrl, setDatasetUrl] = usePersistedTextfield("datasetUrl");
36
  const [nextDatasetUrl, setNextDatasetUrl] = useState(() => datasetUrl);
 
 
 
37
  const [dataset, setDataset] = useState<null>(null);
38
  const [error, setError] = useState<string | null>(null);
39
+ const db = useDuckDb();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
 
41
  useEffect(() => {
42
  if (db && datasetUrl) {
src/useDuckDb.ts ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { useEffect, useState } from "react";
2
+ import { createDb } from "~/duck";
3
+
4
+ export const useDuckDb = () => {
5
+ const [db, setDb] = useState<Awaited<ReturnType<typeof createDb>> | null>(
6
+ null
7
+ );
8
+
9
+ useEffect(() => {
10
+ const status = {
11
+ killed: false,
12
+ };
13
+ const initDb = async () => {
14
+ const db = await createDb();
15
+ if (status.killed) {
16
+ db.terminate();
17
+ return;
18
+ }
19
+ setDb(db);
20
+ };
21
+ initDb();
22
+
23
+ return () => {
24
+ status.killed = true;
25
+ setDb((db) => {
26
+ if (db) {
27
+ db.terminate();
28
+ }
29
+ return null;
30
+ });
31
+ };
32
+ }, []);
33
+
34
+ return db;
35
+ };