diff --git a/api/src/routes/members.ts b/api/src/routes/members.ts index 026424d..ea5f99a 100644 --- a/api/src/routes/members.ts +++ b/api/src/routes/members.ts @@ -5,9 +5,9 @@ import { Request, Response } from 'express'; import pool from '../db'; import { requireLogin, requireMemberState, requireRole } from '../middleware/auth'; import { getUserActiveLOA } from '../services/loaService'; -import { getAllMembersLite, getMemberSettings, getMembersFull, getMembersLite, getUserData, setUserSettings } from '../services/memberService'; +import { getAllMembersLite, getMemberSettings, getMembersFull, getMembersLite, getUserData, getUserState, setUserSettings } from '../services/memberService'; import { getUserRoles } from '../services/rolesService'; -import { memberSettings, MemberState } from '@app/shared/types/member'; +import { memberSettings, MemberState, myData } from '@app/shared/types/member'; //get all users router.get('/', [requireLogin, requireMemberState(MemberState.Member)], async (req, res) => { @@ -37,12 +37,12 @@ router.get('/me', [requireLogin], async (req, res) => { return res.sendStatus(401) try { - const { id, name, state } = await getUserData(req.user.id); + const memData = await getUserData(req.user.id); const LOAData = await getUserActiveLOA(req.user.id); - + const memState = await getUserState(req.user.id); const roleData = await getUserRoles(req.user.id); - const userDataFull = { id, name, state, LOAData, roleData }; + const userDataFull: myData = { member: memData, LOAs: LOAData, roles: roleData, state: memState }; res.status(200).json(userDataFull); } catch (error) { console.error('Error fetching user data:', error); diff --git a/api/src/services/memberService.ts b/api/src/services/memberService.ts index b639b21..8bc1dd9 100644 --- a/api/src/services/memberService.ts +++ b/api/src/services/memberService.ts @@ -1,9 +1,9 @@ import pool from "../db"; import { Member, MemberLight, memberSettings, MemberState } from '@app/shared/types/member' -export async function getUserData(userID: number) { - const sql = `SELECT * FROM members WHERE id = ?`; - const res = await pool.query(sql, [userID]); +export async function getUserData(userID: number): Promise { + const sql = `SELECT * FROM view_member_rank_unit_status_latest WHERE member_id = ?`; + const res: Member = await pool.query(sql, [userID]); return res[0] ?? null; } diff --git a/shared/types/member.ts b/shared/types/member.ts index c0fbf95..7caa9f0 100644 --- a/shared/types/member.ts +++ b/shared/types/member.ts @@ -1,3 +1,6 @@ +import { LOARequest } from "./loa"; +import { Role } from "./roles"; + export interface memberSettings { displayName: string; } @@ -29,4 +32,11 @@ export interface MemberLight { displayName: string username: string color: string +} + +export interface myData { + member: Member; + LOAs: LOARequest[]; + roles: Role[]; + state: MemberState; } \ No newline at end of file diff --git a/ui/src/components/Navigation/Navbar.vue b/ui/src/components/Navigation/Navbar.vue index a13d3f7..b300ce2 100644 --- a/ui/src/components/Navigation/Navbar.vue +++ b/ui/src/components/Navigation/Navbar.vue @@ -179,7 +179,9 @@ function blurAfter() {
-

{{ userStore.user.name }}

+
My Profile diff --git a/ui/src/components/loa/loaForm.vue b/ui/src/components/loa/loaForm.vue index 2bb5d20..44dd7a9 100644 --- a/ui/src/components/loa/loaForm.vue +++ b/ui/src/components/loa/loaForm.vue @@ -105,7 +105,11 @@ onMounted(async () => { console.error(error); } - members.value = await getMembers(); + if (props.adminMode) { + members.value = await getMembers(); + } else { + members.value.push(props.member); + } loaTypes.value = await getLoaTypes(); resetForm({ values: { member_id: currentMember.value?.member_id } }); }); @@ -153,7 +157,7 @@ const maxEndDate = computed(() => { @@ -162,7 +166,7 @@ const maxEndDate = computed(() => { \ No newline at end of file diff --git a/ui/src/stores/user.ts b/ui/src/stores/user.ts index a5e04c9..7c54bdf 100644 --- a/ui/src/stores/user.ts +++ b/ui/src/stores/user.ts @@ -1,15 +1,18 @@ import { ref, computed, watch } from 'vue' import { defineStore } from 'pinia' import { useRoute, useRouter } from 'vue-router' +import { myData } from '@shared/types/member' + const POLL_INTERVAL = 10_000 export const useUserStore = defineStore('user', () => { - const user = ref(null) - const roles = computed(() => new Set(user.value?.roleData?.map(r => r.name) ?? [])); + const user = ref(null) + const roles = computed(() => new Set(user.value?.roles?.map(r => r.name) ?? [])); const loaded = ref(false); const state = computed(() => user.value?.state || undefined); const isLoggedIn = computed(() => user.value !== null) + const displayName = computed(() => user.value?.member.displayName || user.value?.member.member_name) async function loadUser() { //@ts-ignore @@ -19,7 +22,6 @@ export const useUserStore = defineStore('user', () => { if (res.ok) { const data = await res.json(); - console.log(data); user.value = data; } @@ -40,7 +42,6 @@ export const useUserStore = defineStore('user', () => { const router = useRouter(); watch(user, (newUser) => { if (!newUser) return - console.log(newUser); const currentRoute = route.meta @@ -88,5 +89,5 @@ export const useUserStore = defineStore('user', () => { } }) - return { user, isLoggedIn, roles, loadUser, loaded, hasAnyRole, hasRole, state } + return { user, displayName, isLoggedIn, roles, loadUser, loaded, hasAnyRole, hasRole, state } })