From 8e9e586276c831298f886381117d1d81e5fe81b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Glasn=C3=A1k?= Date: Mon, 15 Dec 2025 22:01:29 +0100 Subject: [PATCH] refactor(task-modal): enhance employee timeblock management with custom filtering and improved rendering logic --- app/src/plugins/tm@_store/store/index.ts | 508 +++++++++--------- .../employees/a-employee-select.vue | 72 ++- .../a-employee-timeblock-timeline.vue | 464 +++++++++++++++- .../employees/a-employee-timeblock.vue | 40 +- .../plugins/tm@modal/task/z-task-modal.vue | 43 +- 5 files changed, 858 insertions(+), 269 deletions(-) diff --git a/app/src/plugins/tm@_store/store/index.ts b/app/src/plugins/tm@_store/store/index.ts index c93f04a..93a6389 100644 --- a/app/src/plugins/tm@_store/store/index.ts +++ b/app/src/plugins/tm@_store/store/index.ts @@ -1,286 +1,310 @@ -import axios from '@/plugins/w@custom/axios/models/axios' -import store from '@/store' +import axios from '@/plugins/w@custom/axios/models/axios'; +import store from '@/store'; export default { - namespaced: true, + namespaced: true, - state: { - mastertasks: null, - employees: null, - teams: null, - projects: null, - unscheduledSubtasks: null, - ongoingSubtasks: null, - initialized: false, - ongoingSubtasksEmployeeId: null, - unscheduledSubtasksEmployeeId: null - }, + state: { + mastertasks: null, + employees: null, + teams: null, + projects: null, + unscheduledSubtasks: null, + ongoingSubtasks: null, + initialized: false, + ongoingSubtasksEmployeeId: null, + unscheduledSubtasksEmployeeId: null, + }, - mutations: { - set_mastertasks(state: any, mastertasks: any) { - state.mastertasks = mastertasks - }, + mutations: { + set_mastertasks(state: any, mastertasks: any) { + state.mastertasks = mastertasks; + }, - set_employees(state: any, employees: any) { - state.employees = employees + set_employees(state: any, employees: any) { + state.employees = employees; - // TODO: Remove - // const employee = employees.find(employee => employee.email == 'zachariah.vonrueden@jandl.sk') - // store.commit('auth/auth_success', { - // user: employee - // }) - }, + // TODO: Remove + // const employee = employees.find(employee => employee.email == 'zachariah.vonrueden@jandl.sk') + // store.commit('auth/auth_success', { + // user: employee + // }) + }, - set_teams(state: any, teams: any) { - state.teams = teams - }, + set_teams(state: any, teams: any) { + state.teams = teams; + }, - set_projects(state: any, projects: any) { - state.projects = projects - }, + set_projects(state: any, projects: any) { + state.projects = projects; + }, - set_unscheduled_subtasks(state: any, subtasks: any) { - state.unscheduledSubtasks = subtasks - }, + set_unscheduled_subtasks(state: any, subtasks: any) { + state.unscheduledSubtasks = subtasks; + }, - set_ongoing_subtasks(state: any, subtasks: any) { - state.ongoingSubtasks = subtasks - }, + set_ongoing_subtasks(state: any, subtasks: any) { + state.ongoingSubtasks = subtasks; + }, - remove_ongoing_subtask(state: any, subtaskId: any) { - state.ongoingSubtasks = state.ongoingSubtasks.filter(st => st.id != subtaskId) - }, + remove_ongoing_subtask(state: any, subtaskId: any) { + state.ongoingSubtasks = state.ongoingSubtasks.filter( + (st) => st.id != subtaskId, + ); + }, - update_team(state: any, team: any) { - state.teams = state.teams.map(t => { - if (t.id == team.id) - return team + update_team(state: any, team: any) { + state.teams = state.teams.map((t) => { + if (t.id == team.id) return team; - return t - }) - }, + return t; + }); + }, - save_team(state: any, team: any) { - state.teams.push(team) - }, + save_team(state: any, team: any) { + state.teams.push(team); + }, - delete_team(state: any, team: any) { - state.teams = state.teams.filter(t => t.id != team.id) - }, + delete_team(state: any, team: any) { + state.teams = state.teams.filter((t) => t.id != team.id); + }, - update_subtask(state: any, subtask: any) { - state.unscheduledSubtasks = state.unscheduledSubtasks.map(st => st.id == subtask.id ? subtask : st) - state.ongoingSubtasks = state.ongoingSubtasks.map(st => st.id == subtask.id ? subtask : st) - - // state.mastertasks = state.mastertasks.map(mastertask => { - // mastertask.subtasks = mastertask.subtasks.map(st => st.id == subtask.id ? subtask : st) - // return mastertask - // }) - }, + update_subtask(state: any, subtask: any) { + if (state.unscheduledSubtasks) { + state.unscheduledSubtasks = state.unscheduledSubtasks.map((st) => + st.id == subtask.id ? subtask : st, + ); + } + if (state.ongoingSubtasks) { + state.ongoingSubtasks = state.ongoingSubtasks.map((st) => + st.id == subtask.id ? subtask : st, + ); + } - delete_subtask(state: any, subtask: any) { - state.unscheduledSubtasks = state.unscheduledSubtasks.filter(st => st.id != subtask.id) - state.ongoingSubtasks = state.ongoingSubtasks.filter(st => st.id != subtask.id) + // state.mastertasks = state.mastertasks.map(mastertask => { + // mastertask.subtasks = mastertask.subtasks.map(st => st.id == subtask.id ? subtask : st) + // return mastertask + // }) + }, - // state.mastertasks = state.mastertasks.map(mastertask => { - // mastertask.subtasks = mastertask.subtasks.filter(st => st.id != subtask.id) - // return mastertask - // }) - }, + delete_subtask(state: any, subtask: any) { + state.unscheduledSubtasks = state.unscheduledSubtasks.filter( + (st) => st.id != subtask.id, + ); + state.ongoingSubtasks = state.ongoingSubtasks.filter( + (st) => st.id != subtask.id, + ); - set_ongoing_subtasks_employee_id(state: any, employeeId: any) { - state.ongoingSubtasksEmployeeId = employeeId - }, + // state.mastertasks = state.mastertasks.map(mastertask => { + // mastertask.subtasks = mastertask.subtasks.filter(st => st.id != subtask.id) + // return mastertask + // }) + }, - set_unscheduled_subtasks_employee_id(state: any, employeeId: any) { - state.unscheduledSubtasksEmployeeId = employeeId - }, + set_ongoing_subtasks_employee_id(state: any, employeeId: any) { + state.ongoingSubtasksEmployeeId = employeeId; + }, - initialized(state: any) { - state.initialized = true - } - }, + set_unscheduled_subtasks_employee_id(state: any, employeeId: any) { + state.unscheduledSubtasksEmployeeId = employeeId; + }, - actions: { - initialize({dispatch, commit}: {dispatch: any, commit: any}) { - return Promise.all([ - dispatch('loadMastertasks'), - dispatch('loadEmployees'), - dispatch('loadTeams'), - dispatch('loadProjects'), - dispatch('loadUnscheduledSubtasks'), - dispatch('loadOngoingSubtasks') - ]).then(() => commit('initialized')) - }, + initialized(state: any) { + state.initialized = true; + }, + }, - reloadSubtasks({dispatch}: {dispatch: any}) { - return Promise.all([ - dispatch('loadMastertasks'), - dispatch('loadProjects'), - dispatch('loadUnscheduledSubtasks'), - dispatch('loadOngoingSubtasks') - ]) - }, + actions: { + initialize({ dispatch, commit }: { dispatch: any; commit: any }) { + return Promise.all([ + dispatch('loadMastertasks'), + dispatch('loadEmployees'), + dispatch('loadTeams'), + dispatch('loadProjects'), + dispatch('loadUnscheduledSubtasks'), + dispatch('loadOngoingSubtasks'), + ]).then(() => commit('initialized')); + }, - reloadMastertasks({dispatch}: {dispatch: any}) { - return Promise.all([ - dispatch('loadMastertasks') - ]) - }, + reloadSubtasks({ dispatch }: { dispatch: any }) { + return Promise.all([ + dispatch('loadMastertasks'), + dispatch('loadProjects'), + dispatch('loadUnscheduledSubtasks'), + dispatch('loadOngoingSubtasks'), + ]); + }, - loadMastertasks({commit}: {commit: any}) { - return new Promise((resolve, reject) => { - // axios.get_auth('v1/mastertasks') - axios.get_auth('v1/mastertasks/?simple=true') - .then(({ mastertasks }) => { - commit('set_mastertasks', mastertasks) - resolve(mastertasks) - }) - .catch(error => { - commit('set_mastertasks', {error: error}) - reject(error) - }) - }) - }, + reloadMastertasks({ dispatch }: { dispatch: any }) { + return Promise.all([dispatch('loadMastertasks')]); + }, - loadEmployees({commit}: {commit: any}) { - return new Promise((resolve, reject) => { - axios.get_auth_data('v1/employees') - .then(employees => { - commit('set_employees', employees) - resolve(employees) - }) - .catch(error => { - commit('set_employees', {error: error}) - reject(error) - }) - }) - - }, + loadMastertasks({ commit }: { commit: any }) { + return new Promise((resolve, reject) => { + // axios.get_auth('v1/mastertasks') + axios + .get_auth('v1/mastertasks/?simple=true') + .then(({ mastertasks }) => { + commit('set_mastertasks', mastertasks); + resolve(mastertasks); + }) + .catch((error) => { + commit('set_mastertasks', { error: error }); + reject(error); + }); + }); + }, - loadTeams({commit}: {commit: any}) { - return new Promise((resolve, reject) => { - axios.get_auth_data('v1/teams') - .then(teams => { - commit('set_teams', teams) - resolve(teams) - }) - .catch(error => { - commit('set_teams', {error: error}) - reject(error) - }) - }) - }, + loadEmployees({ commit }: { commit: any }) { + return new Promise((resolve, reject) => { + axios + .get_auth_data('v1/employees') + .then((employees) => { + commit('set_employees', employees); + resolve(employees); + }) + .catch((error) => { + commit('set_employees', { error: error }); + reject(error); + }); + }); + }, - loadProjects({commit}: {commit: any}) { - return new Promise((resolve, reject) => { - axios.get_auth_data('v1/projects') - .then(project => { - commit('set_projects', project) - resolve(project) - }) - .catch(error => { - commit('set_projects', {error: error}) - reject(error) - }) - }) - - }, + loadTeams({ commit }: { commit: any }) { + return new Promise((resolve, reject) => { + axios + .get_auth_data('v1/teams') + .then((teams) => { + commit('set_teams', teams); + resolve(teams); + }) + .catch((error) => { + commit('set_teams', { error: error }); + reject(error); + }); + }); + }, - loadUnscheduledSubtasks({commit, state}: {commit: any, state: any}, employeeId = undefined) { - let employeeIdToUse = undefined + loadProjects({ commit }: { commit: any }) { + return new Promise((resolve, reject) => { + axios + .get_auth_data('v1/projects') + .then((project) => { + commit('set_projects', project); + resolve(project); + }) + .catch((error) => { + commit('set_projects', { error: error }); + reject(error); + }); + }); + }, - if (employeeId) { - employeeIdToUse = employeeId - commit('set_unscheduled_subtasks_employee_id', employeeId) - } else if (state.unscheduledSubtasksEmployeeId) { - employeeIdToUse = state.unscheduledSubtasksEmployeeId - } else { - employeeIdToUse = store.getters['auth/user']?.id - } + loadUnscheduledSubtasks( + { commit, state }: { commit: any; state: any }, + employeeId = undefined, + ) { + let employeeIdToUse = undefined; - return new Promise((resolve, reject) => { - axios.get_auth(`v1/subtasks?type=unscheduled&employee_id=${employeeIdToUse}`) - .then(({subtasks}) => { - commit('set_unscheduled_subtasks', subtasks) - resolve(subtasks) - }) - .catch(error => { - commit('set_unscheduled_subtasks', {error: error}) - reject(error) - }) - }) - }, + if (employeeId) { + employeeIdToUse = employeeId; + commit('set_unscheduled_subtasks_employee_id', employeeId); + } else if (state.unscheduledSubtasksEmployeeId) { + employeeIdToUse = state.unscheduledSubtasksEmployeeId; + } else { + employeeIdToUse = store.getters['auth/user']?.id; + } - loadOngoingSubtasks({commit, state}: {commit: any, state: any}, employeeId = undefined) { - let employeeIdToUse = undefined + return new Promise((resolve, reject) => { + axios + .get_auth( + `v1/subtasks?type=unscheduled&employee_id=${employeeIdToUse}`, + ) + .then(({ subtasks }) => { + commit('set_unscheduled_subtasks', subtasks); + resolve(subtasks); + }) + .catch((error) => { + commit('set_unscheduled_subtasks', { error: error }); + reject(error); + }); + }); + }, - if (employeeId) { - employeeIdToUse = employeeId - commit('set_ongoing_subtasks_employee_id', employeeId) - } else if (state.ongoingSubtasksEmployeeId) { - employeeIdToUse = state.ongoingSubtasksEmployeeId - } else { - employeeIdToUse = store.getters['auth/user']?.id - commit('set_ongoing_subtasks_employee_id', employeeIdToUse) - } + loadOngoingSubtasks( + { commit, state }: { commit: any; state: any }, + employeeId = undefined, + ) { + let employeeIdToUse = undefined; - return new Promise((resolve, reject) => { - axios.get_auth(`v1/subtasks?type=ongoing&employee_id=${employeeIdToUse}`) - .then(({subtasks}) => { - commit('set_ongoing_subtasks', subtasks) - resolve(subtasks) - }) - .catch(error => { - commit('set_ongoing_subtasks', {error: error}) - reject(error) - }) - }) - }, + if (employeeId) { + employeeIdToUse = employeeId; + commit('set_ongoing_subtasks_employee_id', employeeId); + } else if (state.ongoingSubtasksEmployeeId) { + employeeIdToUse = state.ongoingSubtasksEmployeeId; + } else { + employeeIdToUse = store.getters['auth/user']?.id; + commit('set_ongoing_subtasks_employee_id', employeeIdToUse); + } - removeOngoingSubtask({commit}: {commit: any}, subtaskId: any) { - commit('remove_ongoing_subtask', subtaskId) - } + return new Promise((resolve, reject) => { + axios + .get_auth(`v1/subtasks?type=ongoing&employee_id=${employeeIdToUse}`) + .then(({ subtasks }) => { + commit('set_ongoing_subtasks', subtasks); + resolve(subtasks); + }) + .catch((error) => { + commit('set_ongoing_subtasks', { error: error }); + reject(error); + }); + }); + }, - }, + removeOngoingSubtask({ commit }: { commit: any }, subtaskId: any) { + commit('remove_ongoing_subtask', subtaskId); + }, + }, - getters: { - mastertasks: (state: any) => { - return state.mastertasks - }, + getters: { + mastertasks: (state: any) => { + return state.mastertasks; + }, - employees: (state: any) => { - return state.employees - }, + employees: (state: any) => { + return state.employees; + }, - enrichedEmployees: (state: any) => { - if (!state.employees) return [] - - return state.employees.map(employee => ({ - ...employee, - _fullName: `${ employee.name } ${ employee.surname }`, - _initials: employee.name.charAt(0) + employee.surname.charAt(0) - })).sort((a, b) => a.name < b.name ? -1 : 1) - }, + enrichedEmployees: (state: any) => { + if (!state.employees) return []; - teams: (state: any) => { - return state.teams - }, + return state.employees + .map((employee) => ({ + ...employee, + _fullName: `${employee.name} ${employee.surname}`, + _initials: employee.name.charAt(0) + employee.surname.charAt(0), + })) + .sort((a, b) => (a.name < b.name ? -1 : 1)); + }, - projects: (state: any) => { - return state.projects - }, + teams: (state: any) => { + return state.teams; + }, - unscheduledSubtasks: (state: any) => { - return state.unscheduledSubtasks - }, + projects: (state: any) => { + return state.projects; + }, - ongoingSubtasks: (state: any) => { - return state.ongoingSubtasks - }, + unscheduledSubtasks: (state: any) => { + return state.unscheduledSubtasks; + }, - isInitialized: (state: any) => { - return state.initialized - } - } -} \ No newline at end of file + ongoingSubtasks: (state: any) => { + return state.ongoingSubtasks; + }, + + isInitialized: (state: any) => { + return state.initialized; + }, + }, +}; diff --git a/app/src/plugins/tm@modal/task/_components/employees/a-employee-select.vue b/app/src/plugins/tm@modal/task/_components/employees/a-employee-select.vue index c85160b..0afdaa0 100644 --- a/app/src/plugins/tm@modal/task/_components/employees/a-employee-select.vue +++ b/app/src/plugins/tm@modal/task/_components/employees/a-employee-select.vue @@ -1,12 +1,14 @@