diff --git a/resources/vue/components/courseware/layouts/CoursewareDateInput.vue b/resources/vue/components/courseware/layouts/CoursewareDateInput.vue index 57a5619fbee207cf40021b276591a274d0a80bc4..773aa62fa1ed1e31c2bdb063674abae867de4f01 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 e17d18e60a4701d77f26ac69c0072fb5ee7e40e3..c75ab4b87f33a349d4c91702dbd2a969f8c4fc5a 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 f08719e22d2d13d17f059a13298545e0052334f5..671f1b9c96919eb719fc745f1331c8430a021333 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(); }