Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
6b32b52
feat(Frontend): implement app tour
FelixTeutsch Jun 11, 2025
e6a5b4d
feat(Frontend): fix minor styling mistakes. App tour is now working!!!
FelixTeutsch Jun 12, 2025
73d29f5
feat(Frontend): change button name, and make container flex
FelixTeutsch Jun 12, 2025
e5c0df4
feat(Frontend): fix size
FelixTeutsch Jun 12, 2025
a73bc79
feat(Frontend): final fixes. App tour is ready to be tested on studen…
FelixTeutsch Jun 12, 2025
3b94589
feat(Frontend): update app tour for students with video content and n…
FelixTeutsch Jun 17, 2025
3f0510f
refactor(Frontend): clean up AppTour.vue template formatting and impr…
FelixTeutsch Jun 17, 2025
9a22eb3
feat(Frontend): update German translations for various app components…
FelixTeutsch Jun 17, 2025
dc20d5e
feat(Frontend): enhance supervisor app tour with new video content an…
FelixTeutsch Jun 17, 2025
3188c2b
feat(Frontend): update German translations for admin, app tour, and d…
FelixTeutsch Jun 17, 2025
41eb0aa
feat(Frontend): add comprehensive app tour for admin, student, and su…
FelixTeutsch Jun 17, 2025
8e15354
feat(Frontend): reorganize app tour translations for student and supe…
FelixTeutsch Jun 17, 2025
0a1de85
feat(Frontend): update German translations for admin, app tour, and d…
FelixTeutsch Jun 17, 2025
465886a
add translations
FelixTeutsch Jun 17, 2025
41bcbc6
feat(Frontend): implement i18n for button labels and currently superv…
FelixTeutsch Jun 17, 2025
200653d
style(Frontend): add padding to currently supervising title for impro…
FelixTeutsch Jun 17, 2025
1760f75
feat(Frontend): update navigation and button labels in onboarding pro…
FelixTeutsch Jun 17, 2025
bd13329
feat(Frontend): final fixes. App tour is ready to be tested on studen…
FelixTeutsch Jun 17, 2025
dce35e0
feat(frontend): Add app tour to admin, fix admin register (SCRUM-290)
jb-cc Jun 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions Frontend/components/AppTour/AppTour.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
<script lang="ts" setup>
import { useI18n } from 'vue-i18n';

interface AppTourProps {
steps: Array<{
source: string;
alt: string;
title: string;
description: string;
}>;
currentStep: number;
}

const props = defineProps<AppTourProps>();

const currentStepRef = computed(() => {
return props.steps[props.currentStep];
});

const { t } = useI18n();
</script>

<template>
<div
class="flex-1 min-h-0 size-full p-8 flex flex-col gap-8 overflow-y-auto"
>
<ProgressBars
:current-step="props.currentStep"
:total-steps="props.steps.length"
/>

<div
class="flex-1 min-h-0 w-fit flex self-center border-4 border-base-300 rounded-3xl shadow-inner overflow-clip"
>
<img
v-if="currentStepRef.source.endsWith('jpeg')"
:alt="currentStepRef.alt"
:src="currentStepRef.source"
class="max-h-full w-auto object-cover"
>
<video
v-else
:key="currentStepRef.source"
:aria-label="currentStepRef.alt"
autoplay
class="max-h-full w-auto object-cover"
loop
>
<source
:src="currentStepRef.source"
type="video/mp4"
>
{{ t('generic.noVideoSupport') }}
</video>
</div>

<div class="flex flex-col gap-2 w-full h-fit">
<h2 class="text-large">
{{ currentStepRef.title }}
</h2>
<p class="text-body">
{{ currentStepRef.description }}
</p>
</div>
</div>
</template>

<style scoped></style>
5 changes: 4 additions & 1 deletion Frontend/components/CustomButton/CustomButton.vue
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,10 @@ const buttonClasses = computed(() => {
</script>

<template>
<div class="flex flex-col items-center max-w-full">
<div
:class="{'w-full': props.block}"
class="flex flex-col items-center max-w-full"
>
<div v-if="props.topText" class="mb-2">
<span class="text-sm text-base-content/60 block text-center">{{ props.topText }}</span>
</div>
Expand Down
25 changes: 25 additions & 0 deletions Frontend/components/Progress/ProgressBars.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<script lang="ts" setup>

interface ProgressBarProps {
totalSteps: number;
currentStep: number;
}

const props = defineProps<ProgressBarProps>();

</script>

<template>
<div class="w-full h-fit gap-3 flex flex-row">
<div
v-for="i in props.totalSteps"
:key="i"
:class="{'bg-primary opacity-75': props.currentStep >= i-1, 'bg-base-300': props.currentStep < i-1}"
class="h-3 w-full rounded-full"
/>
</div>
</template>

<style scoped>

</style>
64 changes: 33 additions & 31 deletions Frontend/components/SideDrawer/SideDrawer.vue
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
<script setup>
import { useRouter } from "vue-router";
import { useColorMode } from "#imports";
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
import {useRouter} from "vue-router";
import {useColorMode} from "#imports";
import {FontAwesomeIcon} from "@fortawesome/vue-fontawesome";

const colorMode = useColorMode();
const router = useRouter();

const { t } = useI18n();
const {t} = useI18n();

const props = defineProps({
image: {
Expand All @@ -23,26 +23,26 @@ const props = defineProps({
},
role: {
type: String,
default: "student",
default: "student",
},
});
</script>

<template>
<div class="drawer">
<input id="my-drawer" type="checkbox" class="drawer-toggle" >
<input id="my-drawer" class="drawer-toggle" type="checkbox">
<div class="drawer-content">
<label class="drawer-button" for="my-drawer">
<div class="avatar">
<div class="mask mask-squircle w-8 rounded-full">
<img
:alt="
:alt="
t('generic.profilePictureAlt', {
firstName: props.firstName,
lastName: props.lastName,
})
"
:src="
:src="
props.image ||
getPlaceholderImage(props.firstName, props.lastName)
"
Expand All @@ -54,56 +54,58 @@ const props = defineProps({

<div class="drawer-side z-40">
<label
aria-label="close sidebar"
class="drawer-overlay"
for="my-drawer"
aria-label="close sidebar"
class="drawer-overlay"
for="my-drawer"
/>
<div
class="menu py-16 px-8 bg-base-200 text-base-content min-h-full w-80 flex flex-col"
class="menu py-16 px-8 bg-base-200 text-base-content min-h-full w-80 flex flex-col"
>
<img
:alt="t('generic.logoAlt')"
:src="
:alt="t('generic.logoAlt')"
:src="
colorMode?.value === 'dark'
? '../images/appHeader_logo_dark.svg'
: '../images/appHeader_logo_light.svg'
"
class="h-6 mb-8 cursor-pointer"
@click="router.push('/')"
class="h-6 mb-8 cursor-pointer"
@click="router.push('/')"
>

<ul class="space-y-3 flex-grow">
<li>
<NuxtLink
:to="props.role ? `/${props.role.toLowerCase()}/profile` : `/`"
>
<FontAwesomeIcon class="text-xl mr-3" icon="user" />
<NuxtLink
:to="props.role ? `/${props.role.toLowerCase()}/profile` : `/`"
>
<FontAwesomeIcon class="text-xl mr-3" icon="user"/>
{{ t("nav.profile") }}
</NuxtLink>
</li>
<li>
<NuxtLink
:to="props.role ? `/${props.role.toLowerCase()}/settings` : `/`"
:to="props.role ? `/${props.role.toLowerCase()}/settings` : `/`"
>
<FontAwesomeIcon icon="gear" class="text-xl mr-3" />
<FontAwesomeIcon class="text-xl mr-3" icon="gear"/>
{{ t("nav.settings") }}
</NuxtLink>
</li>
<!-- <li>-->
<!-- <NuxtLink to="/tour">-->
<!-- <FontAwesomeIcon class="text-xl mr-3" icon="map" />-->
<!-- {{ t("nav.appTour") }}-->
<!-- </NuxtLink>-->
<!-- </li>-->
<li>
<NuxtLink
:to="
:to="props.role ? `/${props.role.toLowerCase()}/app-tour` : `/`"
>
<FontAwesomeIcon class="text-xl mr-3" icon="map"/>
{{ t("nav.appTour") }}
</NuxtLink>
</li>
<li>
<NuxtLink
:to="
props.role
? `/${props.role.toLowerCase()}/data-protection`
: `/`
"
>
<FontAwesomeIcon class="text-xl mr-3" icon="user-shield" />
<FontAwesomeIcon class="text-xl mr-3" icon="user-shield"/>
{{ t("nav.dataProtection") }}
</NuxtLink>
</li>
Expand All @@ -113,7 +115,7 @@ const props = defineProps({
<SignOutButton>
<a href="/">
<span>
<FontAwesomeIcon class="text-xl" icon="fa-right-from-bracket" />
<FontAwesomeIcon class="text-xl" icon="fa-right-from-bracket"/>
{{ t("nav.logout") }}
</span>
</a>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,12 +83,18 @@ const emailAddress = ref("");
const clearInput = ref(false);
const emailDomain = "fhstp.ac.at";


const updateMail = (value: string) => {
emailAddress.value = value;
};

const editButtonLabel = computed(() => (isEditing.value ? "Done" : "Edit"));
const editButtonIcon = computed(() => (isEditing.value ? "check" : "edit"));
const editButtonLabel = computed(() => {
return isEditing.value ? t('generic.done') : t('generic.edit');
});

const editButtonIcon = computed(() => {
return isEditing.value ? "check" : "edit";
});

const confirm = async () => {
if (!emailAddress.value) return;
Expand Down
Loading