10
10
<div class =" flex gap-5 flex-column-reverse md:flex-row" >
11
11
<div class =" flex-auto p-fluid" >
12
12
13
+ <InputGroup >
14
+ <InputGroupAddon >
15
+ <i class =" pi pi-search" />
16
+ </InputGroupAddon >
17
+ <InputText type =" text" placeholder =" Datasets" class =" w-full"
18
+ v-model =" datasets.query.search" @keydown.enter =" datasets.search()" />
19
+ <Button label =" Search" @click =" datasets.search()" />
20
+ </InputGroup >
13
21
22
+ <DataTable :value =" datasets.records" stripedRows @sort =" (e) => datasets.sortDataTable(e)" >
23
+ <Column field =" props.name" header =" Name" sortable >
24
+ <template #body =" slotProps " >
25
+ <NuxtLink :to =" `/dataset/${slotProps.data.props.id}`" v-ripple >
26
+ {{ slotProps.data.props.name }}
27
+ </NuxtLink >
28
+ </template >
29
+ </Column >
30
+ <Column field =" extra.rowCount" header =" Row Count" sortable ></Column >
31
+ <Column field =" extra.totalQuantity" header =" Total Quantity" sortable ></Column >
32
+ <Column header =" Manage" >
33
+ <template #body =" slotProps " >
34
+ <NuxtLink :to =" `/dataset/${slotProps.data.props.id}`" class =" mr-2 no-underline" >
35
+ <Button icon =" pi pi-eye" title =" View" alt =" View Dataset" />
36
+ </NuxtLink >
37
+ <NuxtLink v-if =" slotProps.data.meta?.isOwner" :to =" `/dataset/${slotProps.data.props.id}/edit`" class =" mr-2 no-underline" >
38
+ <Button icon =" pi pi-pencil" severity =" success" title =" Edit" alt =" Edit Dataset" />
39
+ </NuxtLink >
40
+ <Button v-if =" slotProps.data.meta?.isOwner" title =" Delete" alt =" Delete Dataset" icon =" pi pi-trash" severity =" danger" @click =" slotProps.data.delete()" />
41
+ </template >
42
+ </Column >
43
+ </DataTable >
44
+ <Pager :kind =" datasets" />
14
45
15
46
16
47
</div >
17
48
</div >
49
+
50
+ </div >
51
+
52
+ <div class =" surface-card mt-5 p-5 border-1 surface-border border-round" >
53
+
54
+ <div class =" flex gap-5 flex-column-reverse md:flex-row" >
55
+ <div class =" flex-auto p-fluid" >
56
+
57
+
58
+ <h2 class =" mt-0" >Create Dataset</h2 >
59
+
60
+ <Form :send =" () => datasets.create()" >
61
+ <div class =" flex gap-5 flex-column-reverse md:flex-row" >
62
+ <div class =" flex-auto p-fluid" >
63
+
64
+ <div class =" mb-4" >
65
+ <FormInput name =" name" type =" text" v-model =" datasets.new.name" required label =" Name" />
66
+ </div >
67
+ <div >
68
+ <Button type =" submit" class =" w-auto" severity =" success" >
69
+ <i class =" pi pi-plus mr-1" ></i > Create Dataset
70
+ </Button >
71
+ </div >
72
+ </div >
73
+
74
+ </div >
75
+ </Form >
76
+
77
+ </div >
78
+ </div >
18
79
</div >
19
80
</div >
20
81
@@ -40,6 +101,18 @@ const game = useVingRecord({
40
101
await game .fetch ();
41
102
onBeforeRouteLeave (() => game .dispose ());
42
103
104
+ const datasets = useVingKind ({
105
+ listApi: ` /api/${ restVersion ()} /dataset` ,
106
+ createApi: ` /api/${ restVersion ()} /dataset` ,
107
+ query: { includeMeta: true , sortBy: ' createdAt' , sortOrder: ' desc' , includeExtra: [' totalQuantity' ,' rowCount' ] },
108
+ newDefaults: { name: ' ' , gameId: id },
109
+ });
110
+ await Promise .all ([
111
+ datasets .search (),
112
+ datasets .fetchPropsOptions (),
113
+ ]);
114
+ onBeforeRouteLeave (() => datasets .dispose ());
115
+
43
116
const dt = useDateTime ();
44
117
45
118
</script >
0 commit comments