Skip to content

Commit c927aa7

Browse files
authored
Merge pull request #434 from codeanker/feature/issue-56-details-auf-seite
Feature/issue 56 details auf seite
2 parents 234fdad + 9c15684 commit c927aa7

4 files changed

Lines changed: 62 additions & 10 deletions

File tree

apps/api/src/services/unterveranstaltung/unterveranstaltungList.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,18 @@ export const unterveranstaltungListProcedure = defineProtectedQueryProcedure({
1111
key: 'list',
1212
roleIds: [Role.ADMIN, Role.GLIEDERUNG_ADMIN],
1313
inputSchema: z.strictObject({
14-
veranstaltungId: z.string().uuid().optional(),
14+
mode: z
15+
.discriminatedUnion('mode', [
16+
z.strictObject({
17+
mode: z.literal('veranstaltung'),
18+
veranstaltungId: z.string().uuid(),
19+
}),
20+
z.strictObject({
21+
mode: z.literal('gliederung'),
22+
gliederungId: z.string().uuid(),
23+
}),
24+
])
25+
.optional(),
1526
table: defineTableInput({
1627
filter: {
1728
gliederungName: z.string().optional(),
@@ -24,12 +35,13 @@ export const unterveranstaltungListProcedure = defineProtectedQueryProcedure({
2435
async handler({
2536
ctx: { account },
2637
input: {
27-
veranstaltungId,
38+
mode,
2839
table: { filter, pagination },
2940
},
3041
}) {
3142
const where: Prisma.UnterveranstaltungWhereInput = {
32-
veranstaltungId,
43+
veranstaltungId: mode?.mode === 'veranstaltung' ? mode.veranstaltungId : undefined,
44+
gliederungId: mode?.mode === 'gliederung' ? mode.gliederungId : undefined,
3345
gliederung: {
3446
name: {
3547
contains: filter?.gliederungName,
@@ -49,7 +61,7 @@ export const unterveranstaltungListProcedure = defineProtectedQueryProcedure({
4961
// Role-based Filter
5062
if (account.role !== Role.ADMIN) {
5163
const gliederung = await getGliederungRequireAdmin(account.id)
52-
where.gliederungId = gliederung.id
64+
where.gliederungId = gliederung.id // TODO:
5365
}
5466

5567
const total = await prisma.unterveranstaltung.count({ where })

apps/frontend/src/components/data/UnterveranstaltungenTable.vue

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,15 @@ import Badge from '../UIComponents/Badge.vue'
1616
import DataGridDoubleLineCell from '../DataGridDoubleLineCell.vue'
1717
1818
const props = defineProps<{
19-
veranstaltungId?: string
19+
mode?:
20+
| {
21+
entity: 'veranstaltung'
22+
veranstaltungId: string
23+
}
24+
| {
25+
entity: 'gliederung'
26+
gliederungId: string
27+
}
2028
}>()
2129
2230
type Unterveranstaltung = RouterOutput['unterveranstaltung']['list']['data'][number]
@@ -37,7 +45,7 @@ const columns = [
3745
id: 'veranstaltungId',
3846
header: 'Veranstaltung',
3947
meta: {
40-
hidden: props.veranstaltungId !== undefined,
48+
hidden: props.mode?.entity === 'veranstaltung' && props.mode.veranstaltungId !== undefined,
4149
filter: {
4250
type: 'select',
4351
async options() {
@@ -57,6 +65,7 @@ const columns = [
5765
header: 'Gliederung',
5866
enableColumnFilter: true,
5967
meta: {
68+
hidden: props.mode?.entity === 'gliederung' && props.mode.gliederungId !== undefined,
6069
filter: {
6170
type: 'text',
6271
},
@@ -127,7 +136,17 @@ const query: Query<Unterveranstaltung> = (pagination, filter) =>
127136
queryKey: ['unterveranstaltung', pagination, filter],
128137
queryFn: () =>
129138
apiClient.unterveranstaltung.list.query({
130-
veranstaltungId: props.veranstaltungId,
139+
mode: props.mode
140+
? props.mode.entity === 'veranstaltung'
141+
? {
142+
mode: props.mode.entity,
143+
veranstaltungId: props.mode.veranstaltungId,
144+
}
145+
: {
146+
mode: props.mode.entity,
147+
gliederungId: props.mode.gliederungId,
148+
}
149+
: undefined,
131150
table: {
132151
pagination: {
133152
pageIndex: pagination.value.pageIndex,

apps/frontend/src/views/Verwaltung/Gliederungen/GliederungDetail.vue

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import FormGliederungGeneral from '@/components/forms/gliederung/FormGliederungG
88
import Tab from '@/components/UIComponents/components/Tab.vue'
99
import Tabs from '@/components/UIComponents/Tabs.vue'
1010
import { useRouteTitle } from '@/composables/useRouteTitle'
11+
import UnterveranstaltungenTable from '@/components/data/UnterveranstaltungenTable.vue'
1112
1213
const route = useRoute()
1314
const { setTitle } = useRouteTitle()
@@ -39,5 +40,18 @@ const tabs = [
3940
/>
4041
</div>
4142
</Tab>
43+
<Tab>
44+
<UnterveranstaltungenTable
45+
v-if="gliederung?.id"
46+
:mode="
47+
gliederung
48+
? {
49+
entity: 'gliederung',
50+
gliederungId: gliederung?.id,
51+
}
52+
: undefined
53+
"
54+
/>
55+
</Tab>
4256
</Tabs>
4357
</template>

apps/frontend/src/views/Verwaltung/Veranstaltungen/VeranstaltungDetail.vue

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -294,9 +294,9 @@ function copyProgramLink() {
294294
>
295295
<div class="my-10 flex items-center justify-between">
296296
<div>
297-
<div class="text-lg font-semibold">Unterveranstaltungen</div>
297+
<div class="text-lg font-semibold">Ausschreibungen</div>
298298
<p class="max-w-2xl text-sm text-gray-500">
299-
Zu dieser Veranstaltung wurden die folgenden Unterveranstaltungen erstellt.
299+
Zu dieser Veranstaltung wurden die folgenden Ausschreibungen erstellt.
300300
</p>
301301
</div>
302302
<RouterLink
@@ -310,7 +310,14 @@ function copyProgramLink() {
310310

311311
<UnterveranstaltungenTable
312312
v-if="veranstaltung?.id"
313-
:veranstaltung-id="veranstaltung?.id"
313+
:mode="
314+
veranstaltung
315+
? {
316+
entity: 'veranstaltung',
317+
veranstaltungId: veranstaltung?.id,
318+
}
319+
: undefined
320+
"
314321
/>
315322
</Tab>
316323
<Tab

0 commit comments

Comments
 (0)