From ccd576dabfa79ffbeb2b39390a94d5e0ab954251 Mon Sep 17 00:00:00 2001 From: Julian Leucker <leuckerj@gmail.com> Date: Fri, 15 Mar 2024 18:32:06 +0100 Subject: [PATCH] Move `compact` and `documentation` props into separate mixin --- .../documentation/Documentation.vue | 18 +++++----- .../documentation/LessonInformation.vue | 8 ++--- .../coursebook/documentation/LessonNotes.vue | 9 ++--- .../documentation/LessonSummary.vue | 14 ++------ .../documentation/documentationPartMixin.js | 35 +++++++++++++++++++ 5 files changed, 50 insertions(+), 34 deletions(-) create mode 100644 aleksis/apps/alsijil/frontend/components/coursebook/documentation/documentationPartMixin.js diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/Documentation.vue b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/Documentation.vue index 07918bc16..c1044137a 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/Documentation.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/Documentation.vue @@ -4,24 +4,25 @@ <!-- align-stretch - stretch full-width --> <div class="full-width d-flex flex-column align-stretch" - :class="{ 'flex-md-row': 'compact' in $attrs }" + :class="{ 'flex-md-row': compact }" > - <lesson-information class="flex-grow-1" :documentation="documentation" /> + <lesson-information class="flex-grow-1" v-bind="documentationPartProps" /> <lesson-summary class="flex-grow-1" ref="summary" v-bind="$attrs" :documentation="documentation" + :compact="compact" :is-create="false" :gql-patch-mutation="documentationsMutation" @open="$emit('open')" @loading="loading = $event" @save="$emit('close')" /> - <lesson-notes class="flex-grow-1" :documentation="documentation" /> + <lesson-notes class="flex-grow-1" v-bind="documentationPartProps" /> </div> <v-divider /> - <v-card-actions v-if="!('compact' in $attrs)"> + <v-card-actions v-if="!compact"> <v-spacer /> <cancel-button @click="$emit('close')" :disabled="loading" /> <save-button @click="save" :loading="loading" /> @@ -39,6 +40,8 @@ import CancelButton from "aleksis.core/components/generic/buttons/CancelButton.v import { createOrUpdateDocumentations } from "../coursebook.graphql"; +import documentationPartMixin from "./documentationPartMixin"; + export default { name: "Documentation", components: { @@ -49,18 +52,13 @@ export default { CancelButton, }, emits: ["open", "close"], + mixins: [documentationPartMixin], data() { return { loading: false, documentationsMutation: createOrUpdateDocumentations, }; }, - props: { - documentation: { - type: Object, - required: true, - }, - }, methods: { save() { this.$refs.summary.save(); diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonInformation.vue b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonInformation.vue index c438a5575..aae88b5dd 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonInformation.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonInformation.vue @@ -15,18 +15,14 @@ <script> import SubjectChip from "aleksis.apps.cursus/components/SubjectChip.vue"; import { DateTime } from "luxon"; +import documentationPartMixin from "./documentationPartMixin"; export default { name: "LessonInformation", + mixins: [documentationPartMixin], components: { SubjectChip, }, - props: { - documentation: { - type: Object, - required: true, - }, - }, methods: { toDateTime(dateString) { return DateTime.fromISO(dateString); diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonNotes.vue b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonNotes.vue index f5cb72e1b..24bc9b8ff 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonNotes.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonNotes.vue @@ -30,14 +30,11 @@ </template> <script> +import documentationPartMixin from "./documentationPartMixin"; + export default { name: "LessonNotes", - props: { - documentation: { - type: Object, - required: true, - }, - }, + mixins: [documentationPartMixin], }; </script> diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonSummary.vue b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonSummary.vue index 6bc2b1127..1eea012f5 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonSummary.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonSummary.vue @@ -82,21 +82,11 @@ <script> import createOrPatchMixin from "aleksis.core/mixins/createOrPatchMixin.js"; +import documentationPartMixin from "./documentationPartMixin"; export default { name: "LessonSummary", - mixins: [createOrPatchMixin], - props: { - documentation: { - type: Object, - required: true, - }, - compact: { - type: Boolean, - required: false, - default: false, - }, - }, + mixins: [createOrPatchMixin, documentationPartMixin], emits: ["open"], data() { return { diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/documentationPartMixin.js b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/documentationPartMixin.js new file mode 100644 index 000000000..9624d4cdb --- /dev/null +++ b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/documentationPartMixin.js @@ -0,0 +1,35 @@ +/** + * Mixin to provide common fields for all components specific to a singular documentation inside the coursebook + */ +export default { + props: { + /** + * The documentation in question + */ + documentation: { + type: Object, + required: true, + }, + /** + * Whether the documentation is currently in the compact mode (meaning coursebook row) + */ + compact: { + type: Boolean, + required: false, + default: false, + } + }, + + computed: { + /** + * All necessary props bundled together to easily pass to child components + * @returns {{compact: Boolean, documentation: Object}} + */ + documentationPartProps() { + return { + documentation: this.documentation, + compact: this.compact, + } + } + } +}; -- GitLab