Skip to content

Commit 440f50c

Browse files
authored
Merge pull request #99 from BEXIS2/table
Table
2 parents c6be886 + d45cc78 commit 440f50c

File tree

8 files changed

+107
-53
lines changed

8 files changed

+107
-53
lines changed

src/lib/components/Facets/Facets.svelte

Lines changed: 49 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,14 @@
1111
export let showAll = false;
1212
export let open = false;
1313
14-
let selected: { [key: string]: SelectedFacetGroup };
15-
let selectedItems: {
16-
[key: string]: {
17-
[key: string]: boolean;
18-
};
19-
} = {};
20-
let selectedGroups: { [key: string]: boolean } = {};
14+
export const showMore = (groupName: string) => {
15+
const group: SelectedFacetGroup = selected[groupName];
2116
22-
const dispatch = createEventDispatcher();
17+
dispatch('showMoreOpenChange', {
18+
group: group.name,
19+
open: true
20+
});
2321
24-
const modalStore = getModalStore();
25-
const showMore = (group: SelectedFacetGroup) => {
2622
modalStore.trigger({
2723
type: 'component',
2824
title: `${group.displayName}`,
@@ -37,14 +33,50 @@
3733
});
3834
};
3935
36+
let selected: { [key: string]: SelectedFacetGroup };
37+
let selectedItems: {
38+
[key: string]: {
39+
[key: string]: boolean;
40+
};
41+
} = {};
42+
let selectedGroups: { [key: string]: boolean } = {};
43+
44+
const dispatch = createEventDispatcher();
45+
46+
const modalStore = getModalStore();
47+
4048
const handleSave = (group: SelectedFacetGroup) => {
41-
Object.keys(group.children).forEach((key) => {
42-
selectedItems[group.name][key] = group.children[key].selected || false;
49+
const { name: groupName, children } = group;
50+
51+
dispatch('showMoreOpenChange', {
52+
group: groupName,
53+
open: false
4354
});
55+
56+
for (const key in children) {
57+
const selectedValue = children[key].selected || false;
58+
selectedItems[groupName][key] = selectedValue;
59+
60+
if (selected[groupName].children[key].selected !== selectedValue) {
61+
selected[groupName].children[key].selected = selectedValue;
62+
}
63+
}
64+
65+
dispatch('showMoreSelect', [
66+
{
67+
parent: groupName,
68+
selected: Object.keys(children).map((key) => children[key].selected)
69+
}
70+
]);
71+
4472
modalStore.close();
4573
};
4674
47-
const handleCancel = () => {
75+
const handleCancel = (groupName: string) => {
76+
dispatch('showMoreOpenChange', {
77+
group: groupName,
78+
open: false
79+
});
4880
modalStore.close();
4981
};
5082
@@ -75,9 +107,10 @@
75107
});
76108
}
77109
78-
changed.length && dispatch('change', changed);
110+
changed.length && dispatch('facetSelect', changed);
79111
};
80112
113+
// Keeping the sorting function, but stays unused for now
81114
const sortOptions = () => {
82115
// Sort facets in a descending order if count exits, or sort alphabetically
83116
Object.keys(selected).forEach((group) => {
@@ -139,7 +172,7 @@
139172
});
140173
141174
$: displayedGroups = structuredClone($groups);
142-
$: selectedItems, mapSelected('items'), sortOptions();
175+
$: selectedItems, mapSelected('items'); // sortOptions(); // Sorting is not used for now
143176
$: selectedGroups, mapSelected('groups');
144177
</script>
145178

@@ -177,7 +210,7 @@
177210
<!-- Trigger for the Modal to view all options -->
178211
{#if group.children.length > 5}
179212
<TreeViewItem hyphenOpacity="opacity-0">
180-
<button class="anchor" on:click={() => showMore(selected[group.name])}>more</button
213+
<button class="anchor" on:click={() => showMore(group.name)}>more</button
181214
></TreeViewItem
182215
>
183216
{/if}

src/lib/components/Facets/ShowMore.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
44
export let group: SelectedFacetGroup;
55
export let handleSave: (group: SelectedFacetGroup) => {};
6-
export let handleCancel: () => {};
6+
export let handleCancel: (groupName: string) => {};
77
88
let selected = structuredClone(group.children);
99
@@ -25,7 +25,7 @@
2525
const onCancel = () => {
2626
console.log(selected, group.children);
2727
selected = structuredClone(group.children);
28-
handleCancel();
28+
handleCancel(group.name);
2929
};
3030
3131
const gridClass = (items: any[]) => {

src/lib/components/Table/TableContent.svelte

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -390,10 +390,11 @@
390390
class="flex gap-2"
391391
on:submit|preventDefault={() => {
392392
if (serverSide && !sendModel) {
393-
throw new Error('Server-side configuration is missing');
394-
} else {
395-
sendModel.q = searchValue;
396-
}
393+
throw new Error('Server-side configuration is missing');
394+
} else {
395+
sendModel.q = searchValue;
396+
}
397+
397398
$filterValue = searchValue;
398399
}}
399400
>
@@ -410,12 +411,10 @@ sendModel.q = searchValue;
410411
class="absolute right-3 items-center"
411412
on:click|preventDefault={() => {
412413
if (serverSide && !sendModel) {
413-
throw new Error('Server-side configuration is missing');
414-
} else {
415-
sendModel.q = '';
416-
}
417-
418-
$filterValue = searchValue;
414+
throw new Error('Server-side configuration is missing');
415+
} else {
416+
sendModel.q = '';
417+
}
419418

420419
searchValue = '';
421420
$filterValue = '';
@@ -428,10 +427,10 @@ sendModel.q = '';
428427
class="btn variant-filled-primary"
429428
on:click|preventDefault={() => {
430429
if (serverSide && !sendModel) {
431-
throw new Error('Server-side configuration is missing');
432-
} else {
433-
sendModel.q = searchValue;
434-
}
430+
throw new Error('Server-side configuration is missing');
431+
} else {
432+
sendModel.q = searchValue;
433+
}
435434

436435
$filterValue = searchValue;
437436
}}>Search</button
@@ -574,6 +573,13 @@ sendModel.q = searchValue;
574573
{/each}
575574
</tbody>
576575
</table>
576+
{#if $pageRows.length === 0}
577+
<div
578+
class="p-8 flex items-center justify-center bg-tertiary-500/30 dark:bg-tertiary-900/10"
579+
>
580+
No rows available
581+
</div>
582+
{/if}
577583
</div>
578584
</div>
579585
{:else}

src/lib/components/Table/TablePagination.svelte

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,7 @@
117117
<div class="flex justify-end items-center">
118118
<span class="text-sm text-gray-500">
119119
{#if $pageCount > 0}
120-
{#if $pageCount == 1}
121-
1 page
122-
{:else}
123-
{$pageCount} pages
124-
{/if}
120+
Page {$pageIndex + 1} of {$pageCount}
125121
{:else}
126122
No pages
127123
{/if}

src/routes/components/facets/examples/FacetsGroupSelection.svelte

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@
1515
svelte={facetsGroupSelectionSvelte}
1616
data={facetsNoGroupSelectionData}
1717
>
18-
<Facets groups={groupsStore} groupSelection open on:change={(e) => console.log(e)} />
18+
<Facets
19+
groups={groupsStore}
20+
groupSelection
21+
open
22+
on:facetSelect={(e) => console.log(e)}
23+
on:showMoreSelect={(e) => console.log(e)}
24+
on:showMoreOpenChange={(e) => console.log(e)}
25+
/>
1926
</CodeContainer>
2027
</div>

src/routes/components/facets/examples/FacetsNoGroupSelection.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@
1515
svelte={facetsNoGroupSelectionSvelte}
1616
data={facetsNoGroupSelectionData}
1717
>
18-
<Facets groups={groupsStore} showAll on:change={(e) => console.log(e)} />
18+
<Facets groups={groupsStore} showAll on:facetSelect={(e) => console.log(e)} />
1919
</CodeContainer>
2020
</div>

src/routes/components/table/docs/TableExamplesDocs.svelte

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import TableServer from '../examples/TableServer.svelte';
1414
</script>
1515

16-
<div class="grid gap-1">
16+
<div class="grid gap-1 w-full overflow-auto">
1717
<h2 class="h2">Examples</h2>
1818
<TableSimple />
1919
<TableGroups />
@@ -30,7 +30,8 @@
3030
<TableUrLs />
3131
<TableUsersAndAdmins />
3232
</div>
33-
<div id="Test">
33+
<div id="Server-side">
34+
<h2 class="h2">Server-side tables</h2>
3435
<TableServer />
3536
</div>
3637
</div>
Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
<script lang="ts">
2+
import { onMount } from 'svelte';
23
import { writable } from 'svelte/store';
34
45
import CodeContainer from '$docs/components/CodeContainer.svelte';
56
import Table from '$lib/components/Table/Table.svelte';
7+
import { setApiConfig } from '$lib';
68
import { serverSideTableHTML } from '../data/codeBlocks';
79
import type { TableConfig } from '$lib/models/Models';
810
@@ -11,22 +13,31 @@
1113
name: string;
1214
};
1315
14-
const tableStore = writable<ServerTableType[]>([]);
16+
let serverTableConfig: TableConfig<ServerTableType>;
1517
16-
const serverTableConfig: TableConfig<ServerTableType> = {
17-
id: 'serverTable', // a unique id for the table
18-
entityId: 3, // dataset ID
19-
versionId: -1, // vesion ID
20-
data: tableStore, // store to hold and retrieve data
21-
serverSide: true, // serverSide needs to be set to true
22-
// URL for the table to be fetched from
23-
URL: 'https://dev.bexis2.uni-jena.de/api/datatable/',
24-
token: '<your_token>' // API token to access the datasets
25-
};
18+
onMount(async () => {
19+
setApiConfig('https://dev.bexis2.uni-jena.de/', 'admin', '123456');
20+
const tableStore = writable<ServerTableType[]>([]);
21+
22+
serverTableConfig = {
23+
id: 'serverTable', // a unique id for the table
24+
data: tableStore, // store to hold and retrieve data
25+
// URL for the table to be fetched from
26+
pageSizes: [10, 25, 50, 100],
27+
28+
server: {
29+
baseUrl: 'https://dev.bexis2.uni-jena.de/api/datatable/',
30+
entityId: 1, // dataset ID
31+
versionId: -1, // version ID
32+
}
33+
};
34+
});
2635
</script>
2736

2837
<div id="serverTableExample">
2938
<CodeContainer title="Server-side table" svelte={serverSideTableHTML}>
30-
<Table config={serverTableConfig} />
39+
{#if serverTableConfig}
40+
<Table config={serverTableConfig} />
41+
{/if}
3142
</CodeContainer>
3243
</div>

0 commit comments

Comments
 (0)