Skip to content

Commit d97e77d

Browse files
authored
Merge pull request #435 from codeanker/fixes
fixes
2 parents 38c4fa4 + 49736f6 commit d97e77d

7 files changed

Lines changed: 27 additions & 15 deletions

File tree

apps/frontend/src/components/BasicInputs/BasicSelect.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import useValidationModel from '../../composables/useValidationModel'
66
77
import BasicValidationFeedback from './components/BasicValidationFeedback.vue'
88
import { type BasicInputDefaultProps } from './defaultProps'
9+
import cn from '@/helpers/cn'
910
1011
export interface Option {
1112
label: string
@@ -47,9 +48,10 @@ const { model, errorMessage } = useValidationModel(props, emit)
4748
as="div"
4849
:name="id || name || label"
4950
:multiple="props.multiple"
51+
:disabled="disabled"
5052
>
5153
<ListboxButton class="input-style !flex flex-row items-center gap-x-2 justify-between">
52-
<span class="text-start">
54+
<span :class="cn('text-start', { 'text-gray-500': disabled })">
5355
{{ options.find((option) => option.value === modelValue)?.label || placeholder || 'Bitte wählen...' }}
5456
</span>
5557
<ChevronDownIcon class="h-5 text-gray-500 self-end" />

apps/frontend/src/components/BasicInputs/BasicTypeahead.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const props = withDefaults(
1616
/** Flag, die gesetzt werden kann, wenn die query nicht async ist. Debounce wird geskipped */
1717
sync?: InstanceType<typeof Typeahead>['sync']
1818
/** Ob ein Ergebnis von der Query ausgewählt werden muss oder ob auch ein Freitext erlaubt ist */
19+
disabled?: InstanceType<typeof Typeahead>['disabled']
1920
strict?: InstanceType<typeof Typeahead>['strict']
2021
immediate?: InstanceType<typeof Typeahead>['immediate']
2122
debounceTime?: InstanceType<typeof Typeahead>['debounceTime']
@@ -53,6 +54,7 @@ const { model, errorMessage } = useValidationModel(props, emit)
5354
:name="name"
5455
:debounce-time="debounceTime"
5556
:strict="strict"
57+
:disabled="disabled"
5658
>
5759
<template #default="slotData">
5860
<slot v-bind="slotData" />

apps/frontend/src/components/forms/unterveranstaltung/FormUnterveranstaltungGeneral.vue

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script setup lang="ts">
22
import { useAsyncState } from '@vueuse/core'
3-
import { computed, ref } from 'vue'
3+
import { computed, onMounted, ref } from 'vue'
44
55
import { apiClient } from '@/api'
66
import BasicDatepicker from '@/components/BasicInputs/BasicDatepicker.vue'
@@ -11,18 +11,20 @@ import BasicSelect from '@/components/BasicInputs/BasicSelect.vue'
1111
import BasicTypeahead from '@/components/BasicInputs/BasicTypeahead.vue'
1212
import Button from '@/components/UIComponents/Button.vue'
1313
import { loggedInAccount } from '@/composables/useAuthentication'
14-
import router from '@/router'
1514
import type { RouterInput } from '@codeanker/api'
1615
import { UnterveranstaltungTypeMapping, getEnumOptions } from '@codeanker/api'
1716
import { ValidateForm } from '@codeanker/validation'
17+
import { useRoute } from 'vue-router'
1818
1919
const props = defineProps<{
2020
unterveranstaltung?: any
21-
veranstaltungId?: any
21+
veranstaltungId?: string
2222
mode: 'create' | 'update'
2323
onUpdate?: () => void
2424
}>()
2525
26+
const route = useRoute()
27+
2628
const unterveranstaltungId = props.unterveranstaltung?.id
2729
const gliederung = ref(props.unterveranstaltung?.gliederung)
2830
@@ -51,7 +53,7 @@ const {
5153
} = useAsyncState(
5254
async () => {
5355
if (loggedInAccount.value?.role === 'ADMIN') {
54-
unterveranstaltungCopy.value.gliederungId = gliederung.value.id
56+
unterveranstaltungCopy.value.gliederungId = gliederung.value?.id
5557
await apiClient.unterveranstaltung.verwaltungCreate.mutate({
5658
data: unterveranstaltungCopy.value as unknown as RouterInput['unterveranstaltung']['verwaltungCreate']['data'],
5759
})
@@ -152,6 +154,12 @@ const disableddates = computed(() => {
152154
}
153155
return obj
154156
})
157+
158+
onMounted(() => {
159+
if (props.mode === 'create') {
160+
unterveranstaltungCopy.value.veranstaltungId = route.params.veranstaltungId as string
161+
}
162+
})
155163
</script>
156164

157165
<template>
@@ -171,6 +179,7 @@ const disableddates = computed(() => {
171179
label="Veranstaltung"
172180
placeholder="Veranstaltungsort"
173181
:options="veranstaltungen.map((veranstaltung) => ({ label: veranstaltung.name, value: veranstaltung.id }))"
182+
:disabled="route.params.veranstaltungId !== undefined"
174183
/>
175184
</div>
176185
<template v-if="mode === 'create' && loggedInAccount?.role === 'ADMIN'">

apps/frontend/src/views/Anmeldung/components/PublicAusschreibungDaten.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script lang="ts" setup>
22
import InfoList from '@/components/UIComponents/InfoList.vue'
33
import { injectUnterveranstaltung } from '@/layouts/AnmeldungLayout.vue'
4+
import { formatCurrency } from '@codeanker/helpers'
45
import { formatDate } from '@vueuse/core'
56
import { computed } from 'vue'
67
@@ -28,7 +29,7 @@ const keyInfos = computed<KeyInfo[]>(() => {
2829
},
2930
{ title: 'Meldeschluss', value: formatDate(unterveranstaltung.value.meldeschluss, 'DD.MM.YYYY') },
3031
{ title: 'Veranstaltungsort', value: unterveranstaltung.value.veranstaltung.ort?.name ?? '' },
31-
{ title: 'Teilnahmebeitrag', value: unterveranstaltung.value.teilnahmegebuehr + '' },
32+
{ title: 'Teilnahmebeitrag', value: formatCurrency(unterveranstaltung.value.teilnahmegebuehr) },
3233
{ title: 'Zielgruppe', value: unterveranstaltung.value.veranstaltung.zielgruppe ?? '' },
3334
]
3435
})

apps/frontend/src/views/Unterveranstaltung/UnterveranstaltungDetail.vue

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,13 @@ import InfoList from '@/components/UIComponents/InfoList.vue'
3333
import Tabs from '@/components/UIComponents/Tabs.vue'
3434
import { loggedInAccount } from '@/composables/useAuthentication'
3535
import { useRouteTitle } from '@/composables/useRouteTitle'
36-
import { formatDateWith } from '@codeanker/helpers'
36+
import { formatCurrency, formatDateWith } from '@codeanker/helpers'
3737
import FAQList from '../FAQs/FAQList.vue'
3838
3939
const route = useRoute()
4040
const { setTitle } = useRouteTitle()
4141
42-
const {
43-
state: unterveranstaltung,
44-
execute: refreshUnterveranstaltung,
45-
} = useAsyncState(async () => {
42+
const { state: unterveranstaltung, execute: refreshUnterveranstaltung } = useAsyncState(async () => {
4643
let result
4744
if (loggedInAccount.value?.role === 'ADMIN') {
4845
result = await apiClient.unterveranstaltung.verwaltungGet.query({
@@ -94,7 +91,7 @@ const keyInfos = computed<KeyInfo[]>(() => {
9491
value: `${formatDateWith(unterveranstaltung.value.meldebeginn, keyInfoDateFormat)} - ${formatDateWith(unterveranstaltung.value.meldeschluss, keyInfoDateFormat)}`,
9592
},
9693
{ title: 'Veranstaltungsort', value: unterveranstaltung.value.veranstaltung.ort?.name ?? '' },
97-
{ title: 'Teilnahmebeitrag', value: unterveranstaltung.value.teilnahmegebuehr + '' },
94+
{ title: 'Teilnahmebeitrag', value: formatCurrency(unterveranstaltung.value.teilnahmegebuehr) },
9895
{ title: 'max. Teilnahmezahl', value: unterveranstaltung.value.maxTeilnehmende + '' },
9996
{ title: 'Zielgruppe', value: unterveranstaltung.value.veranstaltung.zielgruppe ?? '' },
10097
]

apps/frontend/src/views/Unterveranstaltung/UnterveranstaltungEdit.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import FormUnterveranstaltungGeneral from '@/components/forms/unterveranstaltung
77
import { loggedInAccount } from '@/composables/useAuthentication'
88
99
const route = useRoute()
10+
1011
const { state: unterveranstaltung, execute: fetchUnterveranstaltung } = useAsyncState(async () => {
1112
const unterveranstaltungId = route.params.unterveranstaltungId as string
1213
if (loggedInAccount.value?.role === 'ADMIN') {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import Tabs from '@/components/UIComponents/Tabs.vue'
2525
import VeranstaltungCard from '@/components/UIComponents/VeranstaltungCard.vue'
2626
import UnterveranstaltungenTable from '@/components/data/UnterveranstaltungenTable.vue'
2727
import { useRouteTitle } from '@/composables/useRouteTitle'
28-
import { formatDateWith } from '@codeanker/helpers'
28+
import { formatCurrency, formatDateWith } from '@codeanker/helpers'
2929
import { PlusIcon } from '@heroicons/vue/24/solid'
3030
import ProgramList from '../Program/ProgramList.vue'
3131
import AnmeldeLinkTable from '@/components/data/AnmeldeLinkTable.vue'
@@ -66,7 +66,7 @@ const keyInfos = computed<KeyInfo[]>(() => {
6666
value: `${formatDateWith(veranstaltung.value.meldebeginn, keyInfoDateFormat)} - ${formatDateWith(veranstaltung.value.meldeschluss, keyInfoDateFormat)}`,
6767
},
6868
{ title: 'Veranstaltungsort', value: veranstaltung.value.ort?.name ?? '' },
69-
{ title: 'Teilnahmebeitrag', value: veranstaltung.value.teilnahmegebuehr + '' },
69+
{ title: 'Teilnahmebeitrag', value: formatCurrency(veranstaltung.value.teilnahmegebuehr) },
7070
{ title: 'Zielgruppe', value: veranstaltung.value.zielgruppe ?? '' },
7171
]
7272
} else {
@@ -301,7 +301,7 @@ function copyProgramLink() {
301301
</div>
302302
<RouterLink
303303
class="text-primary-500 flex items-center"
304-
:to="{ name: 'UnterveranstaltungCreate' }"
304+
:to="{ name: 'UnterveranstaltungCreate', params: { veranstaltungId: veranstaltung?.id?.toString() } }"
305305
>
306306
<PlusIcon class="h-5 w-5 mr-1" />
307307
<span>Ausschreibung erstellen</span>

0 commit comments

Comments
 (0)