From 226ce75259541dc2e62823a037699d057a090297 Mon Sep 17 00:00:00 2001
From: Viktoria Wiebe <vwiebe@uni-osnabrueck.de>
Date: Wed, 4 Sep 2024 08:59:03 +0000
Subject: [PATCH] =?UTF-8?q?Courseware:=20Datum=20bei=20Verl=C3=A4ngerung?=
 =?UTF-8?q?=20von=20Aufgaben?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #2553

Merge request studip/studip!3335
---
 .../courseware/layouts/CoursewareDateInput.vue        | 11 +++++++++--
 .../courseware/tasks/PagesTaskGroupsShow.vue          |  2 +-
 .../vue/components/courseware/tasks/RenewalDialog.vue |  8 ++++----
 3 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/resources/vue/components/courseware/layouts/CoursewareDateInput.vue b/resources/vue/components/courseware/layouts/CoursewareDateInput.vue
index 57a5619fbee..773aa62fa1e 100644
--- a/resources/vue/components/courseware/layouts/CoursewareDateInput.vue
+++ b/resources/vue/components/courseware/layouts/CoursewareDateInput.vue
@@ -1,5 +1,5 @@
 <template>
-    <input :value="formattedDate" @input="onInput" type="date" />
+    <input :value="formattedDate" @input="onInput" type="date" :min="formattedMinDate" />
 </template>
 
 <script>
@@ -8,14 +8,18 @@ const toISO8601 = (date) => date.toISOString();
 const pad = (what, length = 2) => `00000000${what}`.substr(-length);
 
 export default {
-    props: ['value'],
+    props: ['value', 'min'],
     data: () => ({
         date: new Date(),
+        submissionDate: new Date()
     }),
     computed: {
         formattedDate() {
             return `${this.date.getFullYear()}-${pad(this.date.getMonth() + 1)}-${pad(this.date.getDate())}`;
         },
+        formattedMinDate() {
+            return `${this.submissionDate.getFullYear()}-${pad(this.submissionDate.getMonth() + 1)}-${pad(this.submissionDate.getDate())}`;
+        }
     },
     methods: {
         onInput({ target }) {
@@ -29,6 +33,9 @@ export default {
         if (this.value) {
             this.date = fromISO8601(this.value);
         }
+        if (this.min) {
+            this.submissionDate = fromISO8601(this.min);
+        }
     },
 };
 </script>
diff --git a/resources/vue/components/courseware/tasks/PagesTaskGroupsShow.vue b/resources/vue/components/courseware/tasks/PagesTaskGroupsShow.vue
index e17d18e60a4..c75ab4b87f3 100644
--- a/resources/vue/components/courseware/tasks/PagesTaskGroupsShow.vue
+++ b/resources/vue/components/courseware/tasks/PagesTaskGroupsShow.vue
@@ -50,8 +50,8 @@
 
         <RenewalDialog
             v-if="renewalTask"
-            :renewalDate="renewalDate"
             :renewalState="renewalTask.attributes.renewal"
+            :submissionDate="renewalTask.attributes['submission-date']"
             @update="updateRenewal"
             @close="closeDialogs"
         />
diff --git a/resources/vue/components/courseware/tasks/RenewalDialog.vue b/resources/vue/components/courseware/tasks/RenewalDialog.vue
index f08719e22d2..671f1b9c969 100644
--- a/resources/vue/components/courseware/tasks/RenewalDialog.vue
+++ b/resources/vue/components/courseware/tasks/RenewalDialog.vue
@@ -24,7 +24,7 @@
                 </label>
                 <label v-if="state === 'granted'">
                     {{ $gettext('neue Frist') }}
-                    <DateInput v-model="date" class="size-l" />
+                    <DateInput v-model="date" class="size-l" :min="submissionDate" />
                 </label>
             </form>
         </template>
@@ -34,7 +34,7 @@
 <script>
 import DateInput from '../layouts/CoursewareDateInput.vue';
 export default {
-    props: ['renewalDate', 'renewalState'],
+    props: ['renewalState', 'submissionDate'],
     components: {
         DateInput,
     },
@@ -44,7 +44,7 @@ export default {
     }),
     methods: {
         resetLocalVars() {
-            this.date = this.renewalDate ?? null;
+            this.date = this.submissionDate ?? null;
             this.state = this.renewalState;
         },
         updateRenewal() {
@@ -64,7 +64,7 @@ export default {
         this.resetLocalVars();
     },
     watch: {
-        renewalDate(newValue) {
+        submissionDate(newValue) {
             if (newValue !== this.date) {
                 this.resetLocalVars();
             }
-- 
GitLab