Skip to content
Snippets Groups Projects
documentationPartMixin.js 1.92 KiB
/**
 * 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,
    },
    /**
     * The query used by the coursebook. Used to update the store when data changes.
     */
    affectedQuery: {
      type: Object,
      required: true,
    },
    /**
     * Whether the documentation is currently in the compact mode (meaning coursebook row)
     */
    compact: {
      type: Boolean,
      required: false,
      default: false,
    },
    /**
     * Activator attributes and event listeners to open documentation dialog in different places
     */
    dialogActivator: {
      type: Object,
      required: false,
      default: () => ({ attrs: {}, on: {} }),
    },
    /**
     * Once loaded list of all extra marks to avoid excessive network and database queries
     */
    extraMarks: {
      type: Array,
      required: true,
    },
    /**
     * Once loaded list of absence reasons to avoid excessive network and database queries
     */
    absenceReasons: {
      type: Array,
      required: true,
    },
    /**
     * Once loaded list of subjects to avoid excessive network and database queries
     */
    subjects: {
      type: Array,
      required: true,
    },
  },

  computed: {
    /**
     * All necessary props bundled together to easily pass to child components
     * @returns {{compact: Boolean, documentation: Object, dialogActivator: Object<{attrs: Object, on: Object}>}}
     */
    documentationPartProps() {
      return {
        documentation: this.documentation,
        compact: this.compact,
        dialogActivator: this.dialogActivator,
        affectedQuery: this.affectedQuery,
        extraMarks: this.extraMarks,
        absenceReasons: this.absenceReasons,
        subjects: this.subjects,
      };
    },
  },
};