import ApiDetailHeader from "../../api/factory/detailHeader.js"; import ApiHandleFoto from "../../api/factory/fotoHandling.js"; import ModalUploadFoto from "./Modal/UploadFoto.js"; import PvSkeleton from "../../../../index.ci.php/public/js/components/primevue/skeleton/skeleton.esm.min.js"; export default { name: 'DetailHeader', components: { ModalUploadFoto, PvSkeleton }, props: { headerData: { type: Object, required: false }, person_id: { type: Number, required: false }, mitarbeiter_uid: { type: String, required: false }, fotoEditable: { type: Boolean, required: false, default: false }, domain: { type: String, required: false }, typeHeader: { type: String, default: 'student', validator(value) { return [ 'student', 'mitarbeiter', ].includes(value) } }, currentSemester: { type: String, default: '' }, isLoading: { //if true, then parent isLoading type: Boolean, default: false } }, computed: { appRoot() { return FHC_JS_DATA_STORAGE_OBJECT.app_root; }, validatedHeaderData() { if (this.typeHeader === 'student') return this.headerData; if (this.typeHeader === 'mitarbeiter') return this.person_id; return null; }, hasTileAlphaSlot() { return !!this.$slots.titleAlphaTile }, hasTileBetaSlot() { return !!this.$slots.titleBetaTile }, hasTileGammaSlot() { return !!this.$slots.titleGammaTile }, hasTileUIDSlot() { return !!this.$slots.uid } }, created(){ if (this.typeHeader === 'student') { if (!this.headerData) { throw new Error('[DetailHeader] "headerData" is required.') } } else if (this.typeHeader === 'mitarbeiter') { if (!this.person_id || !this.mitarbeiter_uid || !this.domain) { throw new Error( '[DetailHeader] "person_id", "mitarbeiter_uid", and "domain" are required.' ) } this.loadHeaderData(this.person_id, this.mitarbeiter_uid); } }, watch: { person_id: { handler(newVal) { if (newVal) { this.loadHeaderData(newVal, this.mitarbeiter_uid); } }, deep: true, }, headerData: { handler(newVal) { if (this.typeHeader === 'student' && newVal?.length) { this.getSemesterStati(newVal[0].prestudent_id); } }, immediate: true }, }, data(){ return{ headerDataMa: {}, departmentData: {}, leitungData: {}, isFetchingIssues: false, noCurrentStatus: false, semesterStatiLoading: false, leitungOrgLoading: false, departmentDataLoading: false, headerDataMaLoading: false }; }, methods: { loadHeaderData(person_id, mitarbeiter_uid){ this.getHeader(person_id); this.loadDepartmentData(mitarbeiter_uid) .then(() => { // Call getLeitungOrg only after departmentData is loaded this.getLeitungOrg(this.departmentData.oe_kurzbz); }) .catch((error) => { console.error("Error loading header data: ", error); }); }, getHeader(person_id) { this.headerDataMaLoading = true; return this.$api .call(ApiDetailHeader.getHeader(person_id)) .then(result => { this.headerDataMa = result.data; }) .catch(this.$fhcAlert.handleSystemError) .finally(() => { this.headerDataMaLoading = false; }); }, loadDepartmentData(mitarbeiter_uid) { this.departmentDataLoading = true; return this.$api .call(ApiDetailHeader.getPersonAbteilung(mitarbeiter_uid)) .then(result => { this.departmentData = result.data; }) .catch(this.$fhcAlert.handleSystemError) .finally(() => { this.departmentDataLoading = false; }); }, getLeitungOrg(oekurzbz){ this.leitungOrgLoading = true; return this.$api .call(ApiDetailHeader.getLeitungOrg(oekurzbz)) .then(result => { this.leitungData = result.data; }) .catch(this.$fhcAlert.handleSystemError) .finally(() => { this.leitungOrgLoading = false; }); }, async goToLeitung() { this.loadHeaderData(this.leitungData.person_id, this.leitungData.uid); this.redirectToLeitung(); }, redirectToLeitung() { this.$emit('redirectToLeitung', { person_id: this.leitungData.person_id, uid: this.leitungData.uid }); }, showModal(person_id){ this.$refs.modalFoto.open(person_id); }, showDeleteModal(person_id){ this.$fhcAlert .confirmDelete() .then(result => result ? person_id : Promise.reject({handled: true})) .then(this.deleteFoto) .catch(this.$fhcAlert.handleSystemError); }, deleteFoto(person_id){ return this.$api .call(ApiHandleFoto.deleteFoto(person_id)) .then(result => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete')); }) .catch(this.$fhcAlert.handleSystemError) .finally(()=> { this.reload(); }); }, reload() { if(this.person_id) { this.loadHeaderData(this.person_id, this.mitarbeiter_uid); } else { this.$emit('reload'); } }, getFotoSrc(foto) { if(foto === null) { return FHC_JS_DATA_STORAGE_OBJECT.app_root + 'skin/images/profilbild_dummy.jpg'; } else { return 'data:image/jpeg;base64,' + foto; } }, getSemesterStati(prestudent_id){ this.semesterStatiLoading = true; this.$api .call(ApiDetailHeader.getSemesterStati(prestudent_id)) .then(result => { this.semesterStati = result.data; this.setNoCurrentStatus(); }) .catch(this.$fhcAlert.handleSystemError) .finally(() => { this.semesterStatiLoading = false; }); }, setNoCurrentStatus() { if(!Array.isArray(this.semesterStati)) { this.noCurrentStatus = false; } if(!this.semesterStati.some(item => item.studiensemester_kurzbz === this.currentSemester)) { this.noCurrentStatus = true; } else { this.noCurrentStatus = false; } } }, template: `
` }