diff --git a/application/controllers/api/frontend/v1/lv/Lehreinheit.php b/application/controllers/api/frontend/v1/lv/Lehreinheit.php index 6329d30ac..849dd71ee 100644 --- a/application/controllers/api/frontend/v1/lv/Lehreinheit.php +++ b/application/controllers/api/frontend/v1/lv/Lehreinheit.php @@ -47,14 +47,13 @@ class Lehreinheit extends FHCAPI_Controller private function getLehrfaecher($lehreinheit) { - $lehrfacher_array = array($lehreinheit->lehrfach_id); + $lehrfaecher_array = array($lehreinheit->lehrfach_id); $this->_ci->LehreinheitModel->addSelect('lehrveranstaltung_id_kompatibel'); $this->_ci->LehreinheitModel->addJoin('lehre.tbl_lehrveranstaltung_kompatibel', 'lehrveranstaltung_id'); $lehrfaecher = $this->_ci->LehreinheitModel->loadWhere(array('lehrveranstaltung_id' => $lehreinheit->lehrveranstaltung_id)); - if (hasData($lehrfaecher)) - $lehrfaecher_array = array_merge($lehrfacher_array, array_column(getData($lehrfaecher), 'lehrveranstaltung_id_kompatibel')); + $lehrfaecher_array = array_merge($lehrfaecher_array, array_column(getData($lehrfaecher), 'lehrveranstaltung_id_kompatibel')); $lehrfaecher_array[] = $lehreinheit->lehrveranstaltung_id; diff --git a/public/js/components/LVVerwaltung/LVVerwaltung.js b/public/js/components/LVVerwaltung/LVVerwaltung.js index 6d9331d38..a40dfd9ce 100644 --- a/public/js/components/LVVerwaltung/LVVerwaltung.js +++ b/public/js/components/LVVerwaltung/LVVerwaltung.js @@ -51,6 +51,9 @@ export default { permissionLektorEntfernen: this.permissions['lv-plan/lektorentfernen'], language: Vue.computed(() => this.$p.user_language), isMobile: false, + $reloadList: () => { + this.$refs.lvTable.reload(); + }, } }, data() { diff --git a/public/js/components/LVVerwaltung/Setup/Table.js b/public/js/components/LVVerwaltung/Setup/Table.js index 79a5eec98..367535edb 100644 --- a/public/js/components/LVVerwaltung/Setup/Table.js +++ b/public/js/components/LVVerwaltung/Setup/Table.js @@ -96,6 +96,8 @@ export default { return { expanded: [], selectedColumnValues: [], + selectedRows: [], + lastSelectedData: [], tagEndpoint: ApiTag, tabulatorEvents: [ { @@ -107,7 +109,7 @@ export default { event: 'dataProcessed', handler: (data) => { this.reexpandRows() - this.$emit('update:selected', {}) + this.reselectRows() } }, { @@ -319,10 +321,15 @@ export default { this.$refs.table.reloadTable(); } }, - rowSelectionChanged(data) { + rowSelectionChanged(data, rows, selected, deselected) { this.selectedRows = this.$refs.table.tabulator.getSelectedRows(); this.selectedColumnValues = this.selectedRows.filter(row => row.getData().lehreinheit_id !== undefined && row.getData().lehreinheit_id).map(row => row.getData().lehreinheit_id); + if (selected.length > 0 || deselected.length > 0) + { + this.lastSelectedData = this.selectedRows.map(row => row.getData()); + } + if (data[0]?.lehreinheit_id !== undefined && this.selectedColumnValues.length === 1) { this.lv_info = false @@ -333,6 +340,39 @@ export default { } this.$emit('update:selected', data); }, + reselectRows() + { + if (!Array.isArray(this.lastSelectedData) || !this.lastSelectedData.length) + return; + + let rowToSelect = this.allRows.filter(row => { + const data = row.getData(); + + return this.lastSelectedData.some(selectedRow => { + if (selectedRow.lehreinheit_id !== undefined && selectedRow.lehreinheit_id !== null) + { + return data.lehreinheit_id === selectedRow.lehreinheit_id; + } + + if (selectedRow.lehrveranstaltung_id !== undefined && selectedRow.lehrveranstaltung_id !== null) + { + return data.lehrveranstaltung_id === selectedRow.lehrveranstaltung_id && (data.lehreinheit_id === undefined || data.lehreinheit_id === null); + } + + return false; + }) + }) + + + if (rowToSelect.length) + { + this.$refs.table.tabulator.selectRow(rowToSelect); + } + else + { + this.lastSelectedData = []; + } + }, getLVInfos(data) { this.$api.call(ApiLv.getByLV(data.lehrveranstaltung_id)) diff --git a/public/js/components/LVVerwaltung/Tabs/Details.js b/public/js/components/LVVerwaltung/Tabs/Details.js index cb3275d23..e11a42398 100644 --- a/public/js/components/LVVerwaltung/Tabs/Details.js +++ b/public/js/components/LVVerwaltung/Tabs/Details.js @@ -24,7 +24,11 @@ export default { inject: { dropdowns: { from: 'dropdowns' - } + }, + $reloadList: { + from: '$reloadList', + required: true + }, }, watch: { modelValue(newValue) @@ -92,6 +96,10 @@ export default { return this.$refs.form.call(ApiLehreinheit.update(updatedData)) .then(result => { this.original = {...this.data}; + + if (this.modelValue.lehrveranstaltung_id !== this.changed.lehrveranstaltung_id && this.changed.lehrveranstaltung_id) + this.$reloadList(); + this.changed = {}; this.$refs.form.setFeedback(true, result.data); })