Spaces:
Running
Running
Tony Powell
commited on
Commit
·
5c42f3b
1
Parent(s):
1a56472
Rename symbols for clarity, fully remove empty query params
Browse files- src/App.tsx +9 -10
- src/useSearchParams.ts +5 -1
src/App.tsx
CHANGED
@@ -27,14 +27,13 @@ const usePersistedTextfield = (fieldName: string) => {
|
|
27 |
},
|
28 |
[fieldName, setSearchParams]
|
29 |
);
|
30 |
-
return
|
31 |
};
|
32 |
|
33 |
function App() {
|
34 |
const [loading, setLoading] = useState(false);
|
35 |
-
const
|
36 |
-
|
37 |
-
const [textField, setTextField] = useState(() => datasetUrl);
|
38 |
const [db, setDb] = useState<Awaited<ReturnType<typeof createDb>> | null>(
|
39 |
null
|
40 |
);
|
@@ -116,7 +115,7 @@ function App() {
|
|
116 |
|
117 |
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
|
118 |
e.preventDefault();
|
119 |
-
setDatasetUrl(
|
120 |
};
|
121 |
|
122 |
return (
|
@@ -130,15 +129,15 @@ function App() {
|
|
130 |
<Textarea
|
131 |
rows={2}
|
132 |
name="textField"
|
133 |
-
onChange={(e) =>
|
134 |
-
value={
|
135 |
className="w-full lg:w-full"
|
136 |
/>
|
137 |
<div className="flex flex-row justify-between gap-2">
|
138 |
<Button
|
139 |
className="w-full"
|
140 |
type="submit"
|
141 |
-
disabled={!
|
142 |
>
|
143 |
Load
|
144 |
</Button>
|
@@ -146,7 +145,7 @@ function App() {
|
|
146 |
variant={"secondary"}
|
147 |
type="button"
|
148 |
onClick={() => {
|
149 |
-
|
150 |
setDatasetUrl(DEFAULT_DATASET_URL);
|
151 |
}}
|
152 |
>
|
@@ -156,7 +155,7 @@ function App() {
|
|
156 |
type="button"
|
157 |
variant={"destructive"}
|
158 |
onClick={() => {
|
159 |
-
|
160 |
setDataset(null);
|
161 |
setDatasetUrl("");
|
162 |
}}
|
|
|
27 |
},
|
28 |
[fieldName, setSearchParams]
|
29 |
);
|
30 |
+
return [textField, setTextField] satisfies [string, (value: string) => void];
|
31 |
};
|
32 |
|
33 |
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 |
);
|
|
|
115 |
|
116 |
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
|
117 |
e.preventDefault();
|
118 |
+
setDatasetUrl(nextDatasetUrl);
|
119 |
};
|
120 |
|
121 |
return (
|
|
|
129 |
<Textarea
|
130 |
rows={2}
|
131 |
name="textField"
|
132 |
+
onChange={(e) => setNextDatasetUrl(e.target.value)}
|
133 |
+
value={nextDatasetUrl}
|
134 |
className="w-full lg:w-full"
|
135 |
/>
|
136 |
<div className="flex flex-row justify-between gap-2">
|
137 |
<Button
|
138 |
className="w-full"
|
139 |
type="submit"
|
140 |
+
disabled={!nextDatasetUrl || nextDatasetUrl === datasetUrl}
|
141 |
>
|
142 |
Load
|
143 |
</Button>
|
|
|
145 |
variant={"secondary"}
|
146 |
type="button"
|
147 |
onClick={() => {
|
148 |
+
setNextDatasetUrl(DEFAULT_DATASET_URL);
|
149 |
setDatasetUrl(DEFAULT_DATASET_URL);
|
150 |
}}
|
151 |
>
|
|
|
155 |
type="button"
|
156 |
variant={"destructive"}
|
157 |
onClick={() => {
|
158 |
+
setNextDatasetUrl("");
|
159 |
setDataset(null);
|
160 |
setDatasetUrl("");
|
161 |
}}
|
src/useSearchParams.ts
CHANGED
@@ -21,7 +21,11 @@ const getServerSnapshot = () => {
|
|
21 |
const setSearchParams = (searchParams: Record<string, string>) => {
|
22 |
const url = new URL(window.location.href);
|
23 |
Object.entries(searchParams).forEach(([key, value]) => {
|
24 |
-
|
|
|
|
|
|
|
|
|
25 |
});
|
26 |
window.history.pushState({}, "", url);
|
27 |
window.dispatchEvent(new PopStateEvent("popstate"));
|
|
|
21 |
const setSearchParams = (searchParams: Record<string, string>) => {
|
22 |
const url = new URL(window.location.href);
|
23 |
Object.entries(searchParams).forEach(([key, value]) => {
|
24 |
+
if (value === undefined || value === null || value === "") {
|
25 |
+
url.searchParams.delete(key);
|
26 |
+
} else {
|
27 |
+
url.searchParams.set(key, value);
|
28 |
+
}
|
29 |
});
|
30 |
window.history.pushState({}, "", url);
|
31 |
window.dispatchEvent(new PopStateEvent("popstate"));
|