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

Rename symbols for clarity, fully remove empty query params

Browse files
Files changed (2) hide show
  1. src/App.tsx +9 -10
  2. src/useSearchParams.ts +5 -1
src/App.tsx CHANGED
@@ -27,14 +27,13 @@ const usePersistedTextfield = (fieldName: string) => {
27
  },
28
  [fieldName, setSearchParams]
29
  );
30
- return { textField, setTextField };
31
  };
32
 
33
  function App() {
34
  const [loading, setLoading] = useState(false);
35
- const { textField: datasetUrl, setTextField: setDatasetUrl } =
36
- usePersistedTextfield("datasetUrl");
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(textField);
120
  };
121
 
122
  return (
@@ -130,15 +129,15 @@ function App() {
130
  <Textarea
131
  rows={2}
132
  name="textField"
133
- onChange={(e) => setTextField(e.target.value)}
134
- value={textField}
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={!textField || textField === datasetUrl}
142
  >
143
  Load
144
  </Button>
@@ -146,7 +145,7 @@ function App() {
146
  variant={"secondary"}
147
  type="button"
148
  onClick={() => {
149
- setTextField(DEFAULT_DATASET_URL);
150
  setDatasetUrl(DEFAULT_DATASET_URL);
151
  }}
152
  >
@@ -156,7 +155,7 @@ function App() {
156
  type="button"
157
  variant={"destructive"}
158
  onClick={() => {
159
- setTextField("");
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
- url.searchParams.set(key, value);
 
 
 
 
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"));