Skip to content

Commit c4098f6

Browse files
committed
Fix url updates
setSearchParams overwrites all search params, rather than merging
1 parent 52b17f2 commit c4098f6

File tree

4 files changed

+31
-28
lines changed

4 files changed

+31
-28
lines changed

site/src/components/PaginationWidget/utils.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,8 @@ export const getPaginationData = (
8787

8888
export const getPaginationContext = (
8989
searchParams: URLSearchParams,
90-
setSearchParams: ({ page }: { page: string }) => void,
91-
limit = DEFAULT_RECORDS_PER_PAGE,
90+
limit: number = DEFAULT_RECORDS_PER_PAGE,
9291
): PaginationContext => ({
9392
page: getInitialPage(searchParams.get("page")),
9493
limit,
95-
updateURL: (page) => setSearchParams({ page: page.toString() }),
9694
})

site/src/pages/WorkspacesPage/WorkspacesPage.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ const WorkspacesPage: FC = () => {
1515
const [workspacesState, send] = useMachine(workspacesMachine, {
1616
context: {
1717
filter,
18-
paginationContext: getPaginationContext(searchParams, setSearchParams),
18+
paginationContext: getPaginationContext(searchParams),
19+
},
20+
actions: {
21+
// Filter updates always cause page updates (to page 1), so only UPDATE_PAGE triggers updateURL
22+
updateURL: (context, event) =>
23+
setSearchParams({ page: event.page, filter: context.filter }),
1924
},
2025
})
2126

@@ -38,7 +43,6 @@ const WorkspacesPage: FC = () => {
3843
getWorkspacesError={getWorkspacesError}
3944
getCountError={getCountError}
4045
onFilter={(query) => {
41-
setSearchParams({ filter: query })
4246
send({
4347
type: "UPDATE_FILTER",
4448
query,

site/src/xServices/pagination/paginationXService.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { ActorRefFrom, createMachine, sendParent, assign } from "xstate"
33
export interface PaginationContext {
44
page: number
55
limit: number
6-
updateURL: (page: number) => void
76
}
87

98
export type PaginationEvent =
@@ -28,16 +27,16 @@ export const paginationMachine =
2827
initial: "ready",
2928
on: {
3029
NEXT_PAGE: {
31-
actions: ["assignNextPage", "updateURL", "sendRefreshData"],
30+
actions: ["assignNextPage", "sendUpdatePage"],
3231
},
3332
PREVIOUS_PAGE: {
34-
actions: ["assignPreviousPage", "updateURL", "sendRefreshData"],
33+
actions: ["assignPreviousPage", "sendUpdatePage"],
3534
},
3635
GO_TO_PAGE: {
37-
actions: ["assignPage", "updateURL", "sendRefreshData"],
36+
actions: ["assignPage", "sendUpdatePage"],
3837
},
3938
RESET_PAGE: {
40-
actions: ["logReset", "resetPage", "updateURL", "sendRefreshData"],
39+
actions: ["resetPage", "sendUpdatePage"],
4140
},
4241
},
4342
states: {
@@ -46,7 +45,10 @@ export const paginationMachine =
4645
},
4746
{
4847
actions: {
49-
sendRefreshData: sendParent("REFRESH_DATA"),
48+
sendUpdatePage: sendParent((context) => ({
49+
type: "UPDATE_PAGE",
50+
page: context.page.toString(),
51+
})),
5052
assignNextPage: assign({
5153
page: (context) => context.page + 1,
5254
}),
@@ -59,9 +61,6 @@ export const paginationMachine =
5961
resetPage: assign({
6062
page: (_) => 1,
6163
}),
62-
updateURL: (context) => {
63-
context.updateURL(context.page)
64-
},
6564
},
6665
},
6766
)

site/src/xServices/workspaces/workspacesXService.ts

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -221,12 +221,12 @@ interface WorkspacesContext {
221221
}
222222

223223
type WorkspacesEvent =
224-
| { type: "REFRESH_DATA" }
224+
| { type: "UPDATE_PAGE"; page: string }
225225
| { type: "UPDATE_VERSION"; workspaceId: string }
226226
| { type: "UPDATE_FILTER"; query?: string }
227227

228228
export const workspacesMachine =
229-
/** @xstate-layout N4IgpgJg5mDOIC5QHcD2AnA1rADgQwGM4BlAFz1LADoDUBXAO1KoEsIAbMAYgFUAFACIBBACoBRAPoAxAJIAZcQCUA2gAYAuolA5UsFqRaoGWkAA9EARgCsANioBmAEw37q+1YDsLgBwAWbx4ANCAAnohOVFZWjvYeFr5WAJxeThYAvmnBaFi4hCTklDT0TFQwpAYMUADCxaRcEEbULAwAbqiY1GUA6hjY+ESwNYykappIIDp6BkYm5gi+Ho5UjraOqhaq3jYbNsFhCNa+VDYJqp72iX423jEZWb25A2QU1LTDpWDlzdW1XGDo6AwVBw7AoADMMABbD6kHo5fpwIZMUYmSb6QzGcZzGyORJUDYJOIeKzeWKJPaIFZWKjeRKqYluOJWXw2VQ2O4gbJ9PKwZ6FLmPOBUWDkdAVKB8PBQZoUDFcFHjNHTTGgOYAWm8Fjx9i1jl8Tn83gC5NCiDVvgsy1UiUcjg8HiNuKNxI5AoRvIK1DdPJh4rh3IG9UarFa7U6n39gtgCu0unRMyxZts1McG281tShosFIORqoxNJLkcpL8Fscroe7r5XsrPrKftrgYaDCaoY6MMj7uUFjGsamGNmZq2lsSvlU-isGZsiSs9hzxY8VDOtrpNg8l2tvgr8J51ao3oGvu+nZ5fwBQJB4KhHcbcBjEzjysHCDVzKW10SFnsmuLiSc3hzPMYk2VNfH8BYom3AN8hefdb1gKg6BwCBZUqE8iEUMAwVgIMWxDNp2yQlDKHQsBMOw+8lQHRMX1cOx1hZDZU1sDZ7DnU0EDYpYwM3CwthiB1vCsKCoz3A8hWQPB9BEVByPQOAAAtSJw0wRVgvAwUodAAApJ1UVQAEouHEj1YJM-cpNIGS5MU5TKMfajVSTO0l3WGJ3CSUlEhNfYLmONlNVpVMHRsZkRKrT04J3QNFDEKRYuIAAJCRhBEIR7P7BMnJfadvAcWl9Q2cdxzXHNzUtNYbTtQSnQCYTMk5eDq14QRREkAA1MRFGIGQAHkADkMvjFUzHCalokSE54k8L8LC8MrnCWG4-EWNj4gtDwMgahhUAgOATBMvc3hKNhOFRBystG+ZR0iekyQ8a1WKsHMHqXX87TXGwcXscLd0i47mHrb4kVIc7MpG7FqU-G1SVY+xWWeji+KWJJthtM4GQSLcGsO-7ajB4bnzmqhoeLHU3Hhs4ytsKgwK8MmDRtX6nki8y1LFb5JWlBhZUuqjLvVI07GsS4Vj8TxfE-Mr4lUZY-0m+wwOcM5fHLHGmtZ+CjzQ+CCafGiNRnZYhPcNj9TWPj5zsVGtW8i1xfcdl1eimD+S1ojUKgUjyPgRULohs04ktKw01V5lSScHNFbxac31yvivGsZnXZrF2EMk6TZKw+TYCU3W-fB581XcS1FnXe0blcDwxyCDi2OWcvcU-L6ziSZPTLdtO9ccq61VHexjdnWdFacdYAI4tUVzli4i0VrY2R+53oI7sBu4Fs1vIqk3h-Nseyp1PLcRn1w7QsaxvC2tIgA */
229+
/** @xstate-layout N4IgpgJg5mDOIC5QHcD2AnA1rADgQwGM4BlAFz1LADoDUBXAO1KplNIEsGoBhepgYgioG1TgDdUmaqwDqGbPiKxejUgG0ADAF1EoHKljsOw3SAAeiAIyWNVAMwA2AJwAOACyWnAJjsuvGty8AGhAAT0QfWxcAVm9ohwcXAHYkp0sXFwBfTJC0LFxCEnJKGj5mVg4uFQEwdHQMKhwAGwoAMwwAWxYwUjl8xThq9W1TfUNjBlMLBDsnaKovaMtfDQ00jLckhxDwhEiqGO9-OxPZk69s3PkCpTIKalpVfgBVAAUAEQBBABUAUQB9ABiAEkADJ-ABKmh0SBAYyM7BMsOmbm8VA00Q0KRcli2di86TcOwiDioDk8DjcMS8Lm8dg0LgclxAeQUhVgdxKrJucCosHI6EqUFeeCgnAoiIY-GhowMCKRoGmAFocU57J4vG58VSMqliQglR4FmsvF5sX5XMloszuQMOcVqLb2d02JwoH02UpBMJRAwJFIXR6ebAZbD4RMpoglfF5gSGWt8ZYdZZ9ekXFQktEXI58dn3B4LjkWdc7ZzHSXnRU3UG7d6RFRxJJpD0a+y1JYYXo5RHkVHGZYqE43AEYgnnNE7PqaUl0dFTU4NA5Ui41m4bRXbg6qE6lC6ha2vbV6uhGi1SO10F1ZBu4KGu+NJZGDdFAmTacscTSnLn9RkFvS-CTKlNmia0ix3Ip7m3G9YCoOgcAgCUuAPMAITAVpYDrX1-WoeDEMoFC0Iwu84W7R9ewNelSQ0JNyQ0Al4hsE59XOKg3GHId0gcHwkgyMCrn6dky2gwTd2QPAjG+VAiPQOAAAsUMwsx+SgvBWkodAAApMVWABKfgIPtKDDO3CTSCkmT5MUkjw3IxUoznGdVksHw7FA1xZicFi1QcRccVpAleIcF911EyCuRgl4Ph+AFXk+ABxX4bLIhVzAc78DjsawHDc7wdW2MIo2WNVeNNTMaTNLLF1Cz1wrAKKvj+f4ADVfghYhgQAeQAOWSh9UumWYM2cWjVixdxJ0Kg1NXmXzEhcjF3Bo7IiwYVAIDgUxDOEx4mAbCAmjAWV+smCj-HTLK50xZxFg0WZgimxwSrcSkkheuY3GiJJCwE2qjJKXbyh6IUhmO+VTvshBuIORJKQJHx4esKcfOOfwEi-OxUhq4MdrKMGe0hpMYcZQIXMTAkXP1JVoZWNyGSTQkMX44swv+8tWb5AUhRFMUGAlVLbIGvtGSoSxYj8LNPretIqaTWwvG-JwcvYrxfJfH6Wb+4STKrZCYPxuy0oNWlYxiNyTi1fx0inUlYnJJwHY8dwJ3ibHSy3Ey8KQ90byI+AwxSiGjaVJJrCoJYGUCF9s3xFjUTJD7VdcdItjFt2hI9mDTMk6T0Nk2AFP1gOTqfJU3IHb7UmxSI3qxFi7AWKuFbSBImacdPN2Mov73B0uhwbmkXYt-EaJcKn5wWRXuN4r6XNAju6oNoWDQdgdB-NuxLdHqmsvTBXZm4lyMgpJkVqAA */
230230
createMachine(
231231
{
232232
tsTypes: {} as import("./workspacesXService.typegen").Typegen1,
@@ -259,12 +259,6 @@ export const workspacesMachine =
259259
states: {
260260
count: {
261261
initial: "gettingCount",
262-
on: {
263-
UPDATE_FILTER: {
264-
target: ".gettingCount",
265-
actions: ["assignFilter", "sendResetPage"],
266-
},
267-
},
268262
states: {
269263
idle: {},
270264
gettingCount: {
@@ -287,14 +281,15 @@ export const workspacesMachine =
287281
},
288282
},
289283
},
290-
},
291-
workspaces: {
292-
initial: "startingPagination",
293284
on: {
294-
REFRESH_DATA: {
295-
target: ".gettingWorkspaces",
285+
UPDATE_FILTER: {
286+
target: ".gettingCount",
287+
actions: ["assignFilter", "sendResetPage"],
296288
},
297289
},
290+
},
291+
workspaces: {
292+
initial: "startingPagination",
298293
states: {
299294
startingPagination: {
300295
entry: "assignPaginationRef",
@@ -341,11 +336,18 @@ export const workspacesMachine =
341336
after: {
342337
"5000": {
343338
target: "#workspacesState.workspaces.gettingWorkspaces",
344-
internal: true
339+
actions: [],
340+
internal: false,
345341
},
346342
},
347343
},
348344
},
345+
on: {
346+
UPDATE_PAGE: {
347+
target: ".gettingWorkspaces",
348+
actions: "updateURL",
349+
},
350+
},
349351
},
350352
},
351353
},

0 commit comments

Comments
 (0)