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"));
|