diff --git a/frontend/src/components/QuestionBox.vue b/frontend/src/components/QuestionBox.vue
new file mode 100644
index 00000000..7c927015
--- /dev/null
+++ b/frontend/src/components/QuestionBox.vue
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+
+
diff --git a/frontend/src/views/discussions/SingleDiscussion.vue b/frontend/src/views/discussions/SingleDiscussion.vue
index 4a442e1a..44e1db72 100644
--- a/frontend/src/views/discussions/SingleDiscussion.vue
+++ b/frontend/src/views/discussions/SingleDiscussion.vue
@@ -7,17 +7,14 @@ import { useRoute } from 'vue-router';
import { useGetAllLearningPaths, useGetLearningPathQuery } from '@/queries/learning-paths.ts';
import { useLearningObjectListForPathQuery } from '@/queries/learning-objects.ts';
import UsingQueryResult from '@/components/UsingQueryResult.vue';
-import authService from '@/services/auth/auth-service.ts';
import { LearningPathNode } from '@/data-objects/learning-paths/learning-path-node.ts';
-import { useCreateQuestionMutation, useQuestionsQuery } from '@/queries/questions';
+import { useQuestionsQuery } from '@/queries/questions';
import type { QuestionsResponse } from '@/controllers/questions';
import type { LearningObjectIdentifierDTO } from '@dwengo-1/common/interfaces/learning-content';
import QandA from '@/components/QandA.vue';
-import type { QuestionData, QuestionDTO } from '@dwengo-1/common/interfaces/question';
-import { useStudentAssignmentsQuery, useStudentGroupsQuery } from '@/queries/students';
-import type { AssignmentDTO } from '@dwengo-1/common/interfaces/assignment';
-import type { GroupDTO } from '@dwengo-1/common/interfaces/group';
+import type { QuestionDTO } from '@dwengo-1/common/interfaces/question';
import DiscussionsSideBar from '@/components/DiscussionsSideBar.vue';
+import QuestionBox from '@/components/QuestionBox.vue';
const route = useRoute();
@@ -88,8 +85,6 @@ watch(
const learningPathQueryResult = useGetLearningPathQuery(props.hruid, props.language, forGroup);
-const learningObjectListQueryResult = useLearningObjectListForPathQuery(learningPathQueryResult.data);
-
const nodesList: ComputedRef = computed(
() => learningPathQueryResult.data.value?.nodesAsList ?? null,
);
@@ -110,23 +105,6 @@ const getQuestionsQuery = useQuestionsQuery(
),
);
-const studentAssignmentsQueryResult = useStudentAssignmentsQuery(
- authService.authState.user?.profile.preferred_username,
-);
-const pathIsAssignment = computed(() => {
- const assignments = (studentAssignmentsQueryResult.data.value?.assignments as AssignmentDTO[]) || [];
- return assignments.some(
- (assignment) => assignment.learningPath === props.hruid && assignment.language === props.language,
- );
-});
-const loID: ComputedRef = computed(() => ({
- hruid: props.learningObjectHruid as string,
- language: props.language,
- version: currentNode.value?.version,
-}));
-
-const createQuestionMutation = useCreateQuestionMutation(loID.value);
-
watch(
() => [route.params.hruid, route.params.language, route.params.learningObjectHruid],
() => {
@@ -135,61 +113,16 @@ watch(
},
);
-const groupsQueryResult = useStudentGroupsQuery(authService.authState.user?.profile.preferred_username);
-
-const questionInput = ref('');
-
-function submitQuestion(): void {
- const assignments = studentAssignmentsQueryResult.data.value?.assignments as AssignmentDTO[];
- const assignment = assignments.find(
- (assignment) => assignment.learningPath === props.hruid && assignment.language === props.language,
- );
- const groups = groupsQueryResult.data.value?.groups as GroupDTO[];
- const group = groups?.find((group) => group.assignment === assignment?.id) as GroupDTO;
- const questionData: QuestionData = {
- author: authService.authState.user?.profile.preferred_username,
- content: questionInput.value,
- inGroup: group,
- };
- if (questionInput.value !== '') {
- createQuestionMutation.mutate(questionData, {
- onSuccess: async () => {
- questionInput.value = ''; // Clear the input field after submission
- await getQuestionsQuery.refetch(); // Reload the questions
- },
- onError: (_) => {
- // TODO Handle error
- // - console.error(e);
- },
- });
- }
-}
-
-
-
-
+
- import { Language } from "@/data-objects/language.ts";
- import type { LearningPath } from "@/data-objects/learning-paths/learning-path.ts";
- import { computed, type ComputedRef, ref } from "vue";
- import type { LearningObject } from "@/data-objects/learning-objects/learning-object.ts";
- import { useRoute, useRouter } from "vue-router";
- import LearningObjectView from "@/views/learning-paths/learning-object/LearningObjectView.vue";
- import { useI18n } from "vue-i18n";
- import LearningPathSearchField from "@/components/LearningPathSearchField.vue";
- import { useGetLearningPathQuery } from "@/queries/learning-paths.ts";
- import { useLearningObjectListForPathQuery } from "@/queries/learning-objects.ts";
- import UsingQueryResult from "@/components/UsingQueryResult.vue";
- import authService from "@/services/auth/auth-service.ts";
- import { LearningPathNode } from "@/data-objects/learning-paths/learning-path-node.ts";
- import LearningPathGroupSelector from "@/views/learning-paths/LearningPathGroupSelector.vue";
- import { useCreateQuestionMutation, useQuestionsQuery } from "@/queries/questions";
- import type { QuestionsResponse } from "@/controllers/questions";
- import type { LearningObjectIdentifierDTO } from "@dwengo-1/common/interfaces/learning-content";
- import QandA from "@/components/QandA.vue";
- import type { QuestionData, QuestionDTO } from "@dwengo-1/common/interfaces/question";
- import { useStudentAssignmentsQuery, useStudentGroupsQuery } from "@/queries/students";
- import type { AssignmentDTO } from "@dwengo-1/common/interfaces/assignment";
- import type { GroupDTO } from "@dwengo-1/common/interfaces/group";
- import QuestionNotification from "@/components/QuestionNotification.vue";
+import { Language } from '@/data-objects/language.ts';
+import type { LearningPath } from '@/data-objects/learning-paths/learning-path.ts';
+import { computed, type ComputedRef, ref } from 'vue';
+import type { LearningObject } from '@/data-objects/learning-objects/learning-object.ts';
+import { useRoute, useRouter } from 'vue-router';
+import LearningObjectView from '@/views/learning-paths/learning-object/LearningObjectView.vue';
+import { useI18n } from 'vue-i18n';
+import LearningPathSearchField from '@/components/LearningPathSearchField.vue';
+import { useGetLearningPathQuery } from '@/queries/learning-paths.ts';
+import { useLearningObjectListForPathQuery } from '@/queries/learning-objects.ts';
+import UsingQueryResult from '@/components/UsingQueryResult.vue';
+import authService from '@/services/auth/auth-service.ts';
+import { LearningPathNode } from '@/data-objects/learning-paths/learning-path-node.ts';
+import LearningPathGroupSelector from '@/views/learning-paths/LearningPathGroupSelector.vue';
+import { useQuestionsQuery } from '@/queries/questions';
+import type { QuestionsResponse } from '@/controllers/questions';
+import type { LearningObjectIdentifierDTO } from '@dwengo-1/common/interfaces/learning-content';
+import QandA from '@/components/QandA.vue';
+import type { QuestionDTO } from '@dwengo-1/common/interfaces/question';
+import { useStudentAssignmentsQuery } from '@/queries/students';
+import type { AssignmentDTO } from '@dwengo-1/common/interfaces/assignment';
+import QuestionNotification from '@/components/QuestionNotification.vue';
+import QuestionBox from '@/components/QuestionBox.vue';
- const router = useRouter();
+const router = useRouter();
const route = useRoute();
const { t } = useI18n();
@@ -156,45 +156,10 @@
);
});
- const loID: LearningObjectIdentifierDTO = {
- hruid: props.learningObjectHruid as string,
- language: props.language,
- };
- const createQuestionMutation = useCreateQuestionMutation(loID);
- const groupsQueryResult = useStudentGroupsQuery(authService.authState.user?.profile.preferred_username);
-
- const questionInput = ref("");
-
- function submitQuestion(): void {
- const assignments = studentAssignmentsQueryResult.data.value?.assignments as AssignmentDTO[];
- const assignment = assignments.find(
- (assignment) => assignment.learningPath === props.hruid && assignment.language === props.language,
- );
- const groups = groupsQueryResult.data.value?.groups as GroupDTO[];
- const group = groups?.find((group) => group.assignment === assignment?.id) as GroupDTO;
- const questionData: QuestionData = {
- author: authService.authState.user?.profile.preferred_username,
- content: questionInput.value,
- inGroup: group, //TODO: POST response zegt dat dit null is???
- };
- if (questionInput.value !== "") {
- createQuestionMutation.mutate(questionData, {
- onSuccess: async () => {
- questionInput.value = ""; // Clear the input field after submission
- await getQuestionsQuery.refetch(); // Reload the questions
- },
- onError: (_) => {
- // TODO Handle error
- // - console.error(e);
- },
- });
- }
- }
-
- const discussionLink = computed(() =>
- "/discussion"
+ const discussionLink = computed(() =>
+ "/discussion"
+ "/" + props.hruid
- + "/" + currentNode.value?.language
+ + "/" + currentNode.value?.language
+ "/" + currentNode.value?.learningobjectHruid);
@@ -329,25 +294,12 @@
v-if="currentNode"
>
-
+
-
+
@@ -441,45 +393,6 @@
text-transform: uppercase;
z-index: 2; /* Less than modals/popups */
}
- .question-box {
- width: 100%;
- max-width: 400px;
- margin: 20px auto;
- font-family: sans-serif;
- }
- .input-wrapper {
- display: flex;
- align-items: center;
- border: 1px solid #ccc;
- border-radius: 999px;
- padding: 8px 12px;
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
- }
-
- .question-input {
- flex: 1;
- border: none;
- outline: none;
- font-size: 14px;
- background-color: transparent;
- }
-
- .question-input::placeholder {
- color: #999;
- }
-
- .send-button {
- background: none;
- border: none;
- cursor: pointer;
- font-size: 16px;
- color: #555;
- transition: color 0.2s ease;
- }
-
- .send-button:hover {
- color: #000;
- }
.discussion-link {
margin-top: 8px;