Skip to content

Commit 09e0bfd

Browse files
authored
Merge pull request #631 from samply/table-spacing
chore: make pagination button stay in position on last result page
2 parents 29d319d + 16b085a commit 09e0bfd

File tree

3 files changed

+63
-61
lines changed

3 files changed

+63
-61
lines changed

dev.svelte

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,9 @@
327327
console.log("AST:", JSON.stringify(getAst()));
328328
markSiteClaimed("riverside");
329329
markSiteClaimed("summit");
330+
for (const site of ["A", "B", "C", "D", "E"]) {
331+
markSiteClaimed("Site " + site);
332+
}
330333
331334
setTimeout(() => {
332335
setSiteResult("riverside", {
@@ -366,6 +369,13 @@
366369
patients: 33,
367370
},
368371
});
372+
373+
for (const site of ["A", "B", "C", "D", "E"]) {
374+
setSiteResult("Site " + site, {
375+
totals: {},
376+
stratifiers: {},
377+
});
378+
}
369379
}, 1000);
370380
});
371381
@@ -399,7 +409,8 @@
399409
<lens-search-modified-display
400410
>The query has changed!</lens-search-modified-display
401411
>
402-
<lens-result-table></lens-result-table>
412+
<lens-result-table pageSize={5} pageSizeSwitcher={true}
413+
></lens-result-table>
403414
<div>
404415
<lens-chart
405416
title="Geschlecht"

src/components/results/ResultTableComponent.wc.svelte

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
siteStatus,
1313
siteResults,
1414
} from "../../stores/response";
15-
import TableItemComponent from "./TableItemComponent.svelte";
1615
import { lensOptions } from "../../stores/options";
1716
import type { HeaderData } from "../../types/options";
1817
import InfoButtonComponent from "../buttons/InfoButtonComponent.wc.svelte";
@@ -114,6 +113,24 @@
114113
}
115114
};
116115
116+
/**
117+
* adds and removes tableRows from the datarequestsStore whenever a checkbox is checked or unchecked
118+
*/
119+
const updateStoreOnCheck = (tableRow: (string | number)[]): void => {
120+
const siteId = tableRow[0] as string;
121+
const isChecked = $datarequestsStore.includes(siteId);
122+
123+
if (!isChecked) {
124+
datarequestsStore.update((store: string[]) => {
125+
return [...store, siteId];
126+
});
127+
} else {
128+
datarequestsStore.update((store: string[]) => {
129+
return store.filter((site: string) => site !== siteId);
130+
});
131+
}
132+
};
133+
117134
/**
118135
* Configuration options for the result table.
119136
*/
@@ -179,7 +196,7 @@
179196
180197
const pageSizeOptions: number[] = Array.from(
181198
new Set([10, 25, 50, pageSize]),
182-
).sort();
199+
).sort((a, b) => a - b);
183200
let currentPageSize = $state(pageSize);
184201
</script>
185202

@@ -220,10 +237,34 @@
220237
</tr>
221238
</thead>
222239
<tbody part="lens-result-table-table-body">
223-
<!-- eslint-disable-next-line svelte/require-each-key -->
224-
{#each visibleRows as tableRow}
225-
<TableItemComponent {tableRow} />
240+
{#each visibleRows as tableRow (tableRow[0])}
241+
<tr part="lens-result-table-item-body-row">
242+
<td
243+
part="lens-result-table-item-body-cell lens-result-table-item-body-cell-checkbox"
244+
><input
245+
part="lens-result-table-item-body-checkbox"
246+
type="checkbox"
247+
checked={$datarequestsStore.includes(
248+
tableRow[0] as string,
249+
)}
250+
onchange={() => updateStoreOnCheck(tableRow)}
251+
/></td
252+
>
253+
{#each tableRow as data, index (index)}
254+
<td part="lens-result-table-item-body-cell">{data}</td>
255+
{/each}
256+
</tr>
226257
{/each}
258+
<!-- Invisible rows for spacing -->
259+
{#if visibleRows.length < currentPageSize}
260+
{#each Array(currentPageSize - visibleRows.length).keys() as i (i)}
261+
<tr part="lens-result-table-item-body-row">
262+
{#each Array(headerData.length + 1).keys() as j (j)}
263+
<td part="lens-result-table-item-body-cell"></td>
264+
{/each}
265+
</tr>
266+
{/each}
267+
{/if}
227268
</tbody>
228269
</table>
229270
<slot name="lens-result-above-pagination" />
@@ -323,4 +364,9 @@
323364
[part~="lens-result-table-pagination-switcher"] {
324365
margin-left: 20px;
325366
}
367+
368+
[part~="lens-result-table-item-body-row"] {
369+
border-bottom: solid 1px var(--light-gray);
370+
height: 2em;
371+
}
326372
</style>

src/components/results/TableItemComponent.svelte

Lines changed: 0 additions & 55 deletions
This file was deleted.

0 commit comments

Comments
 (0)