Skip to content
Snippets Groups Projects
Commit 6578adf5 authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Merge branch '298-dialogs-are-unnecessarily-loading-data-submitting-data' into 'master'

Resolve "Dialogs are unnecessarily loading data/submitting data"

Closes #298

See merge request !383
parents 2fc8c102 b83cead0
No related branches found
No related tags found
1 merge request!383Resolve "Dialogs are unnecessarily loading data/submitting data"
Pipeline #191871 failed
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
<absence-reason-buttons <absence-reason-buttons
allow-empty allow-empty
empty-value="present" empty-value="present"
:custom-absence-reasons="absenceReasons"
@input="handleMultipleAction" @input="handleMultipleAction"
/> />
</v-col> </v-col>
...@@ -51,6 +52,7 @@ ...@@ -51,6 +52,7 @@
<component <component
:is="itemComponent" :is="itemComponent"
:extra-marks="extraMarks" :extra-marks="extraMarks"
:absence-reasons="absenceReasons"
:documentation="item" :documentation="item"
:affected-query="lastQuery" :affected-query="lastQuery"
:value="(selectedParticipations[item.id] ??= [])" :value="(selectedParticipations[item.id] ??= [])"
...@@ -84,6 +86,7 @@ import AbsenceCreationDialog from "./absences/AbsenceCreationDialog.vue"; ...@@ -84,6 +86,7 @@ import AbsenceCreationDialog from "./absences/AbsenceCreationDialog.vue";
import { extraMarks } from "../extra_marks/extra_marks.graphql"; import { extraMarks } from "../extra_marks/extra_marks.graphql";
import DocumentationLoader from "./documentation/DocumentationLoader.vue"; import DocumentationLoader from "./documentation/DocumentationLoader.vue";
import sendToServerMixin from "./absences/sendToServerMixin"; import sendToServerMixin from "./absences/sendToServerMixin";
import { absenceReasons } from "./absences/absenceReasons.graphql";
export default { export default {
name: "Coursebook", name: "Coursebook",
...@@ -153,6 +156,7 @@ export default { ...@@ -153,6 +156,7 @@ export default {
currentDate: "", currentDate: "",
hashUpdater: false, hashUpdater: false,
extraMarks: [], extraMarks: [],
absenceReasons: [],
selectedParticipations: {}, selectedParticipations: {},
}; };
}, },
...@@ -161,6 +165,10 @@ export default { ...@@ -161,6 +165,10 @@ export default {
query: extraMarks, query: extraMarks,
update: (data) => data.items, update: (data) => data.items,
}, },
absenceReasons: {
query: absenceReasons,
update: (data) => data.items,
},
}, },
computed: { computed: {
// Assertion: Should only fire on page load or selection change. // Assertion: Should only fire on page load or selection change.
......
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
<documentation-absences <documentation-absences
compact compact
v-bind="$attrs" v-bind="$attrs"
:extra-marks="extraMarks"
:absence-reasons="absenceReasons"
:dialog-activator="activator" :dialog-activator="activator"
:value="value" :value="value"
@input="$emit('input', $event)" @input="$emit('input', $event)"
...@@ -14,7 +16,12 @@ ...@@ -14,7 +16,12 @@
</template> </template>
<!-- dialog view -> deactivate dialog --> <!-- dialog view -> deactivate dialog -->
<!-- cancel | save (through lesson-summary) --> <!-- cancel | save (through lesson-summary) -->
<documentation v-bind="$attrs" @close="popup = false" /> <documentation
v-bind="$attrs"
:extra-marks="extraMarks"
:absence-reasons="absenceReasons"
@close="popup = false"
/>
</mobile-fullscreen-dialog> </mobile-fullscreen-dialog>
</template> </template>
...@@ -40,6 +47,14 @@ export default { ...@@ -40,6 +47,14 @@ export default {
type: Array, type: Array,
required: true, required: true,
}, },
extraMarks: {
type: Array,
required: true,
},
absenceReasons: {
type: Array,
required: true,
},
}, },
}; };
</script> </script>
...@@ -179,9 +179,9 @@ export default { ...@@ -179,9 +179,9 @@ export default {
<v-card-text> <v-card-text>
<absence-reason-group-select <absence-reason-group-select
allow-empty allow-empty
empty-value="present"
:load-selected-chip="loading" :load-selected-chip="loading"
:value="item.absenceReason?.id || 'present'" :value="item.absenceReason?.id || 'present'"
:custom-absence-reasons="absenceReasons"
@input="sendToServer([item], 'absenceReason', $event)" @input="sendToServer([item], 'absenceReason', $event)"
/> />
<tardiness-field <tardiness-field
...@@ -212,6 +212,7 @@ export default { ...@@ -212,6 +212,7 @@ export default {
<absence-reason-buttons <absence-reason-buttons
allow-empty allow-empty
empty-value="present" empty-value="present"
:custom-absence-reasons="absenceReasons"
@input="handleMultipleAction" @input="handleMultipleAction"
/> />
</div> </div>
......
...@@ -26,8 +26,8 @@ import AbsenceReasonGroupSelect from "aleksis.apps.kolego/components/AbsenceReas ...@@ -26,8 +26,8 @@ import AbsenceReasonGroupSelect from "aleksis.apps.kolego/components/AbsenceReas
v-if="participation.absenceReason && !compact" v-if="participation.absenceReason && !compact"
class="full-width" class="full-width"
allow-empty allow-empty
empty-value="present"
:load-selected-chip="loading" :load-selected-chip="loading"
:custom-absence-reasons="absenceReasons"
:value="participation.absenceReason?.id || 'present'" :value="participation.absenceReason?.id || 'present'"
@input="sendToServer([participation], 'absenceReason', $event)" @input="sendToServer([participation], 'absenceReason', $event)"
/> />
...@@ -35,8 +35,8 @@ import AbsenceReasonGroupSelect from "aleksis.apps.kolego/components/AbsenceReas ...@@ -35,8 +35,8 @@ import AbsenceReasonGroupSelect from "aleksis.apps.kolego/components/AbsenceReas
<v-list-item-action v-if="participation.absenceReason && compact"> <v-list-item-action v-if="participation.absenceReason && compact">
<absence-reason-group-select <absence-reason-group-select
allow-empty allow-empty
empty-value="present"
:load-selected-chip="loading" :load-selected-chip="loading"
:custom-absence-reasons="absenceReasons"
:value="participation.absenceReason?.id || 'present'" :value="participation.absenceReason?.id || 'present'"
@input="sendToServer([participation], 'absenceReason', $event)" @input="sendToServer([participation], 'absenceReason', $event)"
/> />
......
query absenceReasons($orderBy: [String], $filters: JSONString) {
items: absenceReasons(orderBy: $orderBy, filters: $filters) {
id
shortName
name
colour
default
canEdit
canDelete
}
}
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
v-bind="$attrs" v-bind="$attrs"
:dialog-activator="activator" :dialog-activator="activator"
:extra-marks="extraMarks" :extra-marks="extraMarks"
:absence-reasons="absenceReasons"
/> />
</template> </template>
<!-- dialog view -> deactivate dialog --> <!-- dialog view -> deactivate dialog -->
...@@ -16,6 +17,7 @@ ...@@ -16,6 +17,7 @@
<documentation <documentation
v-bind="$attrs" v-bind="$attrs"
:extra-marks="extraMarks" :extra-marks="extraMarks"
:absence-reasons="absenceReasons"
@close="popup = false" @close="popup = false"
/> />
</mobile-fullscreen-dialog> </mobile-fullscreen-dialog>
...@@ -41,6 +43,10 @@ export default { ...@@ -41,6 +43,10 @@ export default {
type: Array, type: Array,
required: true, required: true,
}, },
absenceReasons: {
type: Array,
required: true,
},
}, },
}; };
</script> </script>
...@@ -40,6 +40,13 @@ export default { ...@@ -40,6 +40,13 @@ export default {
type: Array, type: Array,
required: true, required: true,
}, },
/**
* Once loaded list of absence reasons to avoid excessive network and database queries
*/
absenceReasons: {
type: Array,
required: true,
},
}, },
computed: { computed: {
...@@ -54,6 +61,7 @@ export default { ...@@ -54,6 +61,7 @@ export default {
dialogActivator: this.dialogActivator, dialogActivator: this.dialogActivator,
affectedQuery: this.affectedQuery, affectedQuery: this.affectedQuery,
extraMarks: this.extraMarks, extraMarks: this.extraMarks,
absenceReasons: this.absenceReasons,
}; };
}, },
}, },
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment