import { ref } from 'vue' import { defineStore } from 'pinia' import type { KeycloakPosition } from '@/interface/keycloak-position' export const usePositionKeycloakStore = defineStore( 'positionKeycloak', () => { const menuData = ref([ 'ลงเวลาปฏิบัติงาน', 'ประวัติการลงเวลา', 'รายการลงเวลากรณีพิเศษ', ]) const dataPositionKeycloak = ref(null) const profileImg = ref('') function setPositionKeycloak(data: KeycloakPosition) { dataPositionKeycloak.value = data } /** * ตั้งค่ารูปโปรไฟล์ผู้ใช้งาน * @param url URL ของรูปโปรไฟล์ */ function setProfileImg(url: string) { profileImg.value = url } /** * ล้างข้อมูล Keycloak position (ใช้เมื่อ logout) */ function clearPositionKeycloak() { dataPositionKeycloak.value = null profileImg.value = '' // ลบ localStorage ด้วยเพื่อให้แน่ใจว่าข้อมูลหายจริง localStorage.removeItem('positionKeycloak') } /** * สร้างชื่อหน่วยงานจากข้อมูลลำดับชั้นองค์กร * @param obj ข้อมูลองค์กรที่มีโครงสร้าง child4 -> child3 -> child2 -> child1 -> root * @returns ชื่อหน่วยงานในรูปแบบ string เชื่อมด้วย / */ function findOrgName(obj: KeycloakPosition | null): string { if (!obj?.organization) { return '' } const org = obj.organization const levels = ['child4', 'child3', 'child2', 'child1', 'root'] as const const parts: string[] = [] for (const level of levels) { const value = org[level] if (value) { parts.push(value) } } return parts.length > 0 ? parts.join('/') : '-' } return { setPositionKeycloak, clearPositionKeycloak, setProfileImg, dataPositionKeycloak, profileImg, findOrgName, menuData, } }, { persist: { key: 'positionKeycloak', storage: localStorage, // ใช้ localStorage เพื่อให้ข้อมูลอยู่ถาวร }, } )