From 13960f0045dcd0b7691c2f9a3a7f52c5238c5d07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Glasn=C3=A1k?= Date: Wed, 2 Jul 2025 19:02:17 +0200 Subject: [PATCH] fix(): fixed refresh in ongoing subtasks table after task edit, fixed expanding of focused task in safari --- app/dist/js/index.js | 2 +- ...tm_dashboard_tasks__utils_timeli-4305f7.js | 2 +- app/src/plugins/tm@_store/store/index.ts | 43 ++++++++++++++++--- .../tm@dashboard/_components/z-timeline.vue | 3 +- 4 files changed, 42 insertions(+), 8 deletions(-) diff --git a/app/dist/js/index.js b/app/dist/js/index.js index b51bee9..f28caa8 100644 --- a/app/dist/js/index.js +++ b/app/dist/js/index.js @@ -136,7 +136,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _sto /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _plugins_w_custom_axios_models_axios__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/plugins/w@custom/axios/models/axios */ \"./src/plugins/w@custom/axios/models/axios.ts\");\n/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/store */ \"./src/store.ts\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n namespaced: true,\n state: {\n mastertasks: null,\n employees: null,\n teams: null,\n projects: null,\n unscheduledSubtasks: null,\n ongoingSubtasks: null,\n initialized: false\n },\n mutations: {\n set_mastertasks(state, mastertasks) {\n state.mastertasks = mastertasks;\n },\n set_employees(state, employees) {\n state.employees = employees;\n // TODO: Remove\n // const employee = employees.find(employee => employee.email == 'zachariah.vonrueden@jandl.sk')\n // store.commit('auth/auth_success', {\n // \tuser: employee\n // })\n },\n\n set_teams(state, teams) {\n state.teams = teams;\n },\n set_projects(state, projects) {\n state.projects = projects;\n },\n set_unscheduled_subtasks(state, subtasks) {\n state.unscheduledSubtasks = subtasks;\n },\n set_ongoing_subtasks(state, subtasks) {\n state.ongoingSubtasks = subtasks;\n },\n remove_ongoing_subtask(state, subtaskId) {\n state.ongoingSubtasks = state.ongoingSubtasks.filter(st => st.id != subtaskId);\n },\n update_team(state, team) {\n state.teams = state.teams.map(t => {\n if (t.id == team.id) return team;\n return t;\n });\n },\n save_team(state, team) {\n state.teams.push(team);\n },\n delete_team(state, team) {\n state.teams = state.teams.filter(t => t.id != team.id);\n },\n update_subtask(state, subtask) {\n state.unscheduledSubtasks = state.unscheduledSubtasks.map(st => st.id == subtask.id ? subtask : st);\n state.ongoingSubtasks = state.ongoingSubtasks.map(st => st.id == subtask.id ? subtask : st);\n // state.mastertasks \t\t\t= state.mastertasks.map(mastertask \t\t=> {\n // \tmastertask.subtasks \t= mastertask.subtasks.map(st => st.id == subtask.id ? subtask : st)\n // \treturn mastertask\n // })\n },\n\n delete_subtask(state, subtask) {\n state.unscheduledSubtasks = state.unscheduledSubtasks.filter(st => st.id != subtask.id);\n state.ongoingSubtasks = state.ongoingSubtasks.filter(st => st.id != subtask.id);\n // state.mastertasks \t\t\t= state.mastertasks.map(mastertask \t\t=> {\n // \tmastertask.subtasks = mastertask.subtasks.filter(st => st.id != subtask.id)\n // \treturn mastertask\n // })\n },\n\n initialized(state) {\n state.initialized = true;\n }\n },\n actions: {\n initialize({\n dispatch,\n commit\n }) {\n return Promise.all([dispatch('loadMastertasks'), dispatch('loadEmployees'), dispatch('loadTeams'), dispatch('loadProjects'), dispatch('loadUnscheduledSubtasks'), dispatch('loadOngoingSubtasks')]).then(() => commit('initialized'));\n },\n reloadSubtasks({\n dispatch\n }) {\n return Promise.all([dispatch('loadMastertasks'), dispatch('loadProjects'), dispatch('loadUnscheduledSubtasks'), dispatch('loadOngoingSubtasks')]);\n },\n reloadMastertasks({\n dispatch\n }) {\n return Promise.all([dispatch('loadMastertasks')]);\n },\n loadMastertasks({\n commit\n }) {\n return new Promise((resolve, reject) => {\n // axios.get_auth('v1/mastertasks')\n _plugins_w_custom_axios_models_axios__WEBPACK_IMPORTED_MODULE_1__[\"default\"].get_auth('v1/mastertasks/?simple=true').then(({\n mastertasks\n }) => {\n commit('set_mastertasks', mastertasks);\n resolve(mastertasks);\n }).catch(error => {\n commit('set_mastertasks', {\n error: error\n });\n reject(error);\n });\n });\n },\n loadEmployees({\n commit\n }) {\n return new Promise((resolve, reject) => {\n _plugins_w_custom_axios_models_axios__WEBPACK_IMPORTED_MODULE_1__[\"default\"].get_auth_data('v1/employees').then(employees => {\n commit('set_employees', employees);\n resolve(employees);\n }).catch(error => {\n commit('set_employees', {\n error: error\n });\n reject(error);\n });\n });\n },\n loadTeams({\n commit\n }) {\n return new Promise((resolve, reject) => {\n _plugins_w_custom_axios_models_axios__WEBPACK_IMPORTED_MODULE_1__[\"default\"].get_auth_data('v1/teams').then(teams => {\n commit('set_teams', teams);\n resolve(teams);\n }).catch(error => {\n commit('set_teams', {\n error: error\n });\n reject(error);\n });\n });\n },\n loadProjects({\n commit\n }) {\n return new Promise((resolve, reject) => {\n _plugins_w_custom_axios_models_axios__WEBPACK_IMPORTED_MODULE_1__[\"default\"].get_auth_data('v1/projects').then(project => {\n commit('set_projects', project);\n resolve(project);\n }).catch(error => {\n commit('set_projects', {\n error: error\n });\n reject(error);\n });\n });\n },\n loadUnscheduledSubtasks({\n commit\n }, employeeId = _store__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getters[\"auth/user\"]?.id) {\n return new Promise((resolve, reject) => {\n _plugins_w_custom_axios_models_axios__WEBPACK_IMPORTED_MODULE_1__[\"default\"].get_auth(`v1/subtasks?type=unscheduled&employee_id=${employeeId}`).then(({\n subtasks\n }) => {\n commit('set_unscheduled_subtasks', subtasks);\n resolve(subtasks);\n }).catch(error => {\n commit('set_unscheduled_subtasks', {\n error: error\n });\n reject(error);\n });\n });\n },\n loadOngoingSubtasks({\n commit\n }, employeeId = _store__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getters[\"auth/user\"]?.id) {\n return new Promise((resolve, reject) => {\n _plugins_w_custom_axios_models_axios__WEBPACK_IMPORTED_MODULE_1__[\"default\"].get_auth(`v1/subtasks?type=ongoing&employee_id=${employeeId}`).then(({\n subtasks\n }) => {\n commit('set_ongoing_subtasks', subtasks);\n resolve(subtasks);\n }).catch(error => {\n commit('set_ongoing_subtasks', {\n error: error\n });\n reject(error);\n });\n });\n },\n removeOngoingSubtask({\n commit\n }, subtaskId) {\n commit('remove_ongoing_subtask', subtaskId);\n }\n },\n getters: {\n mastertasks: state => {\n return state.mastertasks;\n },\n employees: state => {\n return state.employees;\n },\n enrichedEmployees: state => {\n if (!state.employees) return [];\n return state.employees.map(employee => ({\n ...employee,\n _fullName: `${employee.name} ${employee.surname}`,\n _initials: employee.name.charAt(0) + employee.surname.charAt(0)\n })).sort((a, b) => a.name < b.name ? -1 : 1);\n },\n teams: state => {\n return state.teams;\n },\n projects: state => {\n return state.projects;\n },\n unscheduledSubtasks: state => {\n return state.unscheduledSubtasks;\n },\n ongoingSubtasks: state => {\n return state.ongoingSubtasks;\n },\n isInitialized: state => {\n return state.initialized;\n }\n }\n});\n\n//# sourceURL=webpack://jandl/./src/plugins/tm@_store/store/index.ts?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _plugins_w_custom_axios_models_axios__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/plugins/w@custom/axios/models/axios */ \"./src/plugins/w@custom/axios/models/axios.ts\");\n/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/store */ \"./src/store.ts\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n namespaced: true,\n state: {\n mastertasks: null,\n employees: null,\n teams: null,\n projects: null,\n unscheduledSubtasks: null,\n ongoingSubtasks: null,\n initialized: false,\n ongoingSubtasksEmployeeId: null,\n unscheduledSubtasksEmployeeId: null\n },\n mutations: {\n set_mastertasks(state, mastertasks) {\n state.mastertasks = mastertasks;\n },\n set_employees(state, employees) {\n state.employees = employees;\n // TODO: Remove\n // const employee = employees.find(employee => employee.email == 'zachariah.vonrueden@jandl.sk')\n // store.commit('auth/auth_success', {\n // \tuser: employee\n // })\n },\n\n set_teams(state, teams) {\n state.teams = teams;\n },\n set_projects(state, projects) {\n state.projects = projects;\n },\n set_unscheduled_subtasks(state, subtasks) {\n state.unscheduledSubtasks = subtasks;\n },\n set_ongoing_subtasks(state, subtasks) {\n state.ongoingSubtasks = subtasks;\n },\n remove_ongoing_subtask(state, subtaskId) {\n state.ongoingSubtasks = state.ongoingSubtasks.filter(st => st.id != subtaskId);\n },\n update_team(state, team) {\n state.teams = state.teams.map(t => {\n if (t.id == team.id) return team;\n return t;\n });\n },\n save_team(state, team) {\n state.teams.push(team);\n },\n delete_team(state, team) {\n state.teams = state.teams.filter(t => t.id != team.id);\n },\n update_subtask(state, subtask) {\n state.unscheduledSubtasks = state.unscheduledSubtasks.map(st => st.id == subtask.id ? subtask : st);\n state.ongoingSubtasks = state.ongoingSubtasks.map(st => st.id == subtask.id ? subtask : st);\n // state.mastertasks \t\t\t= state.mastertasks.map(mastertask \t\t=> {\n // \tmastertask.subtasks \t= mastertask.subtasks.map(st => st.id == subtask.id ? subtask : st)\n // \treturn mastertask\n // })\n },\n\n delete_subtask(state, subtask) {\n state.unscheduledSubtasks = state.unscheduledSubtasks.filter(st => st.id != subtask.id);\n state.ongoingSubtasks = state.ongoingSubtasks.filter(st => st.id != subtask.id);\n // state.mastertasks \t\t\t= state.mastertasks.map(mastertask \t\t=> {\n // \tmastertask.subtasks = mastertask.subtasks.filter(st => st.id != subtask.id)\n // \treturn mastertask\n // })\n },\n\n set_ongoing_subtasks_employee_id(state, employeeId) {\n state.ongoingSubtasksEmployeeId = employeeId;\n },\n set_unscheduled_subtasks_employee_id(state, employeeId) {\n state.unscheduledSubtasksEmployeeId = employeeId;\n },\n initialized(state) {\n state.initialized = true;\n }\n },\n actions: {\n initialize({\n dispatch,\n commit\n }) {\n return Promise.all([dispatch('loadMastertasks'), dispatch('loadEmployees'), dispatch('loadTeams'), dispatch('loadProjects'), dispatch('loadUnscheduledSubtasks'), dispatch('loadOngoingSubtasks')]).then(() => commit('initialized'));\n },\n reloadSubtasks({\n dispatch\n }) {\n return Promise.all([dispatch('loadMastertasks'), dispatch('loadProjects'), dispatch('loadUnscheduledSubtasks'), dispatch('loadOngoingSubtasks')]);\n },\n reloadMastertasks({\n dispatch\n }) {\n return Promise.all([dispatch('loadMastertasks')]);\n },\n loadMastertasks({\n commit\n }) {\n return new Promise((resolve, reject) => {\n // axios.get_auth('v1/mastertasks')\n _plugins_w_custom_axios_models_axios__WEBPACK_IMPORTED_MODULE_1__[\"default\"].get_auth('v1/mastertasks/?simple=true').then(({\n mastertasks\n }) => {\n commit('set_mastertasks', mastertasks);\n resolve(mastertasks);\n }).catch(error => {\n commit('set_mastertasks', {\n error: error\n });\n reject(error);\n });\n });\n },\n loadEmployees({\n commit\n }) {\n return new Promise((resolve, reject) => {\n _plugins_w_custom_axios_models_axios__WEBPACK_IMPORTED_MODULE_1__[\"default\"].get_auth_data('v1/employees').then(employees => {\n commit('set_employees', employees);\n resolve(employees);\n }).catch(error => {\n commit('set_employees', {\n error: error\n });\n reject(error);\n });\n });\n },\n loadTeams({\n commit\n }) {\n return new Promise((resolve, reject) => {\n _plugins_w_custom_axios_models_axios__WEBPACK_IMPORTED_MODULE_1__[\"default\"].get_auth_data('v1/teams').then(teams => {\n commit('set_teams', teams);\n resolve(teams);\n }).catch(error => {\n commit('set_teams', {\n error: error\n });\n reject(error);\n });\n });\n },\n loadProjects({\n commit\n }) {\n return new Promise((resolve, reject) => {\n _plugins_w_custom_axios_models_axios__WEBPACK_IMPORTED_MODULE_1__[\"default\"].get_auth_data('v1/projects').then(project => {\n commit('set_projects', project);\n resolve(project);\n }).catch(error => {\n commit('set_projects', {\n error: error\n });\n reject(error);\n });\n });\n },\n loadUnscheduledSubtasks({\n commit,\n state\n }, employeeId = undefined) {\n let employeeIdToUse = undefined;\n if (employeeId) {\n employeeIdToUse = employeeId;\n commit('set_unscheduled_subtasks_employee_id', employeeId);\n } else if (state.unscheduledSubtasksEmployeeId) {\n employeeIdToUse = state.unscheduledSubtasksEmployeeId;\n } else {\n employeeIdToUse = _store__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getters[\"auth/user\"]?.id;\n }\n return new Promise((resolve, reject) => {\n _plugins_w_custom_axios_models_axios__WEBPACK_IMPORTED_MODULE_1__[\"default\"].get_auth(`v1/subtasks?type=unscheduled&employee_id=${employeeIdToUse}`).then(({\n subtasks\n }) => {\n commit('set_unscheduled_subtasks', subtasks);\n resolve(subtasks);\n }).catch(error => {\n commit('set_unscheduled_subtasks', {\n error: error\n });\n reject(error);\n });\n });\n },\n loadOngoingSubtasks({\n commit,\n state\n }, employeeId = undefined) {\n let employeeIdToUse = undefined;\n if (employeeId) {\n employeeIdToUse = employeeId;\n commit('set_ongoing_subtasks_employee_id', employeeId);\n } else if (state.ongoingSubtasksEmployeeId) {\n employeeIdToUse = state.ongoingSubtasksEmployeeId;\n } else {\n employeeIdToUse = _store__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getters[\"auth/user\"]?.id;\n commit('set_ongoing_subtasks_employee_id', employeeIdToUse);\n }\n return new Promise((resolve, reject) => {\n _plugins_w_custom_axios_models_axios__WEBPACK_IMPORTED_MODULE_1__[\"default\"].get_auth(`v1/subtasks?type=ongoing&employee_id=${employeeIdToUse}`).then(({\n subtasks\n }) => {\n commit('set_ongoing_subtasks', subtasks);\n resolve(subtasks);\n }).catch(error => {\n commit('set_ongoing_subtasks', {\n error: error\n });\n reject(error);\n });\n });\n },\n removeOngoingSubtask({\n commit\n }, subtaskId) {\n commit('remove_ongoing_subtask', subtaskId);\n }\n },\n getters: {\n mastertasks: state => {\n return state.mastertasks;\n },\n employees: state => {\n return state.employees;\n },\n enrichedEmployees: state => {\n if (!state.employees) return [];\n return state.employees.map(employee => ({\n ...employee,\n _fullName: `${employee.name} ${employee.surname}`,\n _initials: employee.name.charAt(0) + employee.surname.charAt(0)\n })).sort((a, b) => a.name < b.name ? -1 : 1);\n },\n teams: state => {\n return state.teams;\n },\n projects: state => {\n return state.projects;\n },\n unscheduledSubtasks: state => {\n return state.unscheduledSubtasks;\n },\n ongoingSubtasks: state => {\n return state.ongoingSubtasks;\n },\n isInitialized: state => {\n return state.initialized;\n }\n }\n});\n\n//# sourceURL=webpack://jandl/./src/plugins/tm@_store/store/index.ts?"); /***/ }), diff --git a/app/dist/js/src_plugins_tm_dashboard__mixins_Filter_mixin_ts-src_plugins_tm_dashboard_tasks__utils_timeli-4305f7.js b/app/dist/js/src_plugins_tm_dashboard__mixins_Filter_mixin_ts-src_plugins_tm_dashboard_tasks__utils_timeli-4305f7.js index 45e1ffc..3379559 100644 --- a/app/dist/js/src_plugins_tm_dashboard__mixins_Filter_mixin_ts-src_plugins_tm_dashboard_tasks__utils_timeli-4305f7.js +++ b/app/dist/js/src_plugins_tm_dashboard__mixins_Filter_mixin_ts-src_plugins_tm_dashboard_tasks__utils_timeli-4305f7.js @@ -59,7 +59,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nod /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vuecal[data-v-367dbc50] {\\n box-shadow: none !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] {\\n width: 100%;\\n height: 100%;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__cells {\\n -ms-overflow-style: none;\\n scrollbar-width: none;\\n border-left: 1px solid rgba(0, 0, 0, 0.1);\\n padding-left: 20px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__cells::-webkit-scrollbar {\\n display: none;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__flex {\\n flex-wrap: nowrap !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__time-column {\\n width: 80px;\\n box-shadow: none !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__time-column .time-column-line {\\n width: 20px;\\n height: 0;\\n border: 1px solid rgba(33, 33, 33, 0.08);\\n margin-left: 10px;\\n}\\n@media (max-width: 450px) {\\n.calendar-wrapper[data-v-367dbc50] .vuecal__time-column {\\n width: 70px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__time-column .time-column-line {\\n width: 10px;\\n}\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__cell:before {\\n border: none;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__scrollable-body {\\n position: relative;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__split-days-headers {\\n position: absolute;\\n top: 0;\\n left: 20px;\\n z-index: 999;\\n background: white;\\n padding-bottom: 15px;\\n width: calc(100% - 20px);\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__cell-split {\\n margin-right: 10px;\\n margin-left: 10px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .day-split-header {\\n height: -moz-fit-content;\\n height: fit-content;\\n min-height: 100%;\\n}\\n.calendar-wrapper[data-v-367dbc50] .day-split-header .weekday-label {\\n justify-content: start !important;\\n font-size: 18px;\\n font-weight: 700;\\n}\\n.calendar-wrapper[data-v-367dbc50] .day-split-header .day-name {\\n text-align: left;\\n font-size: 17px;\\n font-weight: 500;\\n text-transform: capitalize;\\n}\\n.calendar-wrapper[data-v-367dbc50] .day-split-header .unscheduled-time {\\n background: rgba(0, 0, 0, 0.04);\\n border-radius: 24px;\\n padding: 10px 10px;\\n margin-top: 10px;\\n container-type: inline-size;\\n width: 100%;\\n}\\n@container (max-width: 120px) {\\n.calendar-wrapper[data-v-367dbc50] .day-split-header .unscheduled-time .unscheduled-time-name {\\n width: 60px;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n}\\n.calendar-wrapper[data-v-367dbc50] .day-split-header .unscheduled-time .text-wrap {\\n width: -moz-min-content;\\n width: min-content;\\n margin-left: 12px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .day-split-header .unscheduled-time .text-wrap h1 {\\n font-size: 14px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .day-split-header .unscheduled-time .text-wrap p {\\n font-weight: 400;\\n font-size: 15px;\\n line-height: normal;\\n}\\n.calendar-wrapper[data-v-367dbc50] .day-split-header .unscheduled-time .unscheduled-time-initials {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 30px !important;\\n height: 30px !important;\\n background: #6200EE;\\n border-radius: 50%;\\n flex-shrink: 0;\\n}\\n.calendar-wrapper[data-v-367dbc50] .day-split-header .unscheduled-time .unscheduled-time-initials p {\\n font-weight: 400;\\n font-size: 15px;\\n color: white;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body {\\n -ms-overflow-style: none;\\n scrollbar-width: none;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body::-webkit-scrollbar {\\n display: none;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__now-line {\\n display: none !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal:not(.vuecal--day-view) .vuecal__cell--selected:not(.vuecal__cell--today),\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__cell--current:not(.vuecal__cell--today),\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__cell--today,\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__cell--highlighted,\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__cell--selected {\\n border-radius: 16px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__cell-split--weekend {\\n background-color: rgba(255, 124, 124, 0.3) !important;\\n border-radius: 16px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event {\\n border-radius: 16px;\\n min-height: 70px !important;\\n text-align: left;\\n background: rgb(248, 248, 248);\\n transition: min-height 0.4s, height 0.4s, box-shadow 0.4s, width 0.4s, left 0.4s;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:has(.completed) {\\n background: rgb(251, 251, 251) !important;\\n border: 1px solid #cccccc !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:has(.event__body--non-working-hours) {\\n background: repeating-linear-gradient(135deg, rgb(215, 215, 215), rgb(215, 215, 215) 1px, rgb(224, 224, 224) 1px, rgb(224, 224, 224) 20px);\\n border: 1px solid rgb(215, 215, 215);\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event.vuecal__event--focus {\\n z-index: 100 !important;\\n height: -moz-fit-content !important;\\n height: fit-content !important;\\n width: 100% !important;\\n left: 0 !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:not(.vuecal__event--focus):has(.micro-event) .event__body {\\n padding: 5px !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:not(.vuecal__event--focus):has(.short-event) .event__body:not(.micro-event) {\\n padding: 10px 5px !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:not(.vuecal__event--focus) .short-event .project-code {\\n display: none !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:not(.vuecal__event--focus) .short-event h3 {\\n font-size: 16px !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:not(.vuecal__event--focus) .mini-event .event-content {\\n width: 100%;\\n padding: 5px 10px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:not(.vuecal__event--focus) .mini-event .event-initials-wrapper .event-initials {\\n margin-right: 0;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:not(.vuecal__event--focus) .mini-event h3 {\\n font-size: 14px !important;\\n text-overflow: ellipsis;\\n width: calc(100% - 35px);\\n white-space: nowrap;\\n overflow: hidden;\\n margin: 0;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:not(.vuecal__event--focus) .mini-event .event-initials-date {\\n display: none !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:not(.vuecal__event--focus) .micro-event .event__footer-wrapper {\\n display: none !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event .project-code {\\n margin: 0 0 20px;\\n display: block;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event h3 {\\n font-size: 15px;\\n font-weight: 400;\\n color: Black;\\n margin: 0 0 10px;\\n max-height: 100%;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event small {\\n color: black;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event .event-initials-wrapper {\\n margin-bottom: 20px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event .event-initials {\\n height: 30px;\\n width: 30px;\\n border: 1px solid black;\\n border-radius: 50%;\\n padding: 5px;\\n margin-right: 7px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event .event-initials small {\\n font-size: 11px;\\n}\\n.not-approved[data-v-367dbc50] {\\n background: repeating-linear-gradient(135deg, rgb(215, 215, 215), rgb(215, 215, 215) 1px, rgb(224, 224, 224) 1px, rgb(224, 224, 224) 20px) !important;\\n}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://jandl/./src/plugins/tm@dashboard/_components/z-timeline.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-27.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-27.use%5B2%5D!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-27.use%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vuecal[data-v-367dbc50] {\\n box-shadow: none !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] {\\n width: 100%;\\n height: 100%;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__cells {\\n -ms-overflow-style: none;\\n scrollbar-width: none;\\n border-left: 1px solid rgba(0, 0, 0, 0.1);\\n padding-left: 20px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__cells::-webkit-scrollbar {\\n display: none;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__flex {\\n flex-wrap: nowrap !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__time-column {\\n width: 80px;\\n box-shadow: none !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__time-column .time-column-line {\\n width: 20px;\\n height: 0;\\n border: 1px solid rgba(33, 33, 33, 0.08);\\n margin-left: 10px;\\n}\\n@media (max-width: 450px) {\\n.calendar-wrapper[data-v-367dbc50] .vuecal__time-column {\\n width: 70px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__time-column .time-column-line {\\n width: 10px;\\n}\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__cell:before {\\n border: none;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__scrollable-body {\\n position: relative;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__split-days-headers {\\n position: absolute;\\n top: 0;\\n left: 20px;\\n z-index: 999;\\n background: white;\\n padding-bottom: 15px;\\n width: calc(100% - 20px);\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__cell-split {\\n margin-right: 10px;\\n margin-left: 10px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .day-split-header {\\n height: -moz-fit-content;\\n height: fit-content;\\n min-height: 100%;\\n}\\n.calendar-wrapper[data-v-367dbc50] .day-split-header .weekday-label {\\n justify-content: start !important;\\n font-size: 18px;\\n font-weight: 700;\\n}\\n.calendar-wrapper[data-v-367dbc50] .day-split-header .day-name {\\n text-align: left;\\n font-size: 17px;\\n font-weight: 500;\\n text-transform: capitalize;\\n}\\n.calendar-wrapper[data-v-367dbc50] .day-split-header .unscheduled-time {\\n background: rgba(0, 0, 0, 0.04);\\n border-radius: 24px;\\n padding: 10px 10px;\\n margin-top: 10px;\\n container-type: inline-size;\\n width: 100%;\\n}\\n@container (max-width: 120px) {\\n.calendar-wrapper[data-v-367dbc50] .day-split-header .unscheduled-time .unscheduled-time-name {\\n width: 60px;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n}\\n.calendar-wrapper[data-v-367dbc50] .day-split-header .unscheduled-time .text-wrap {\\n width: -moz-min-content;\\n width: min-content;\\n margin-left: 12px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .day-split-header .unscheduled-time .text-wrap h1 {\\n font-size: 14px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .day-split-header .unscheduled-time .text-wrap p {\\n font-weight: 400;\\n font-size: 15px;\\n line-height: normal;\\n}\\n.calendar-wrapper[data-v-367dbc50] .day-split-header .unscheduled-time .unscheduled-time-initials {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 30px !important;\\n height: 30px !important;\\n background: #6200EE;\\n border-radius: 50%;\\n flex-shrink: 0;\\n}\\n.calendar-wrapper[data-v-367dbc50] .day-split-header .unscheduled-time .unscheduled-time-initials p {\\n font-weight: 400;\\n font-size: 15px;\\n color: white;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body {\\n -ms-overflow-style: none;\\n scrollbar-width: none;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body::-webkit-scrollbar {\\n display: none;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__now-line {\\n display: none !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal:not(.vuecal--day-view) .vuecal__cell--selected:not(.vuecal__cell--today),\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__cell--current:not(.vuecal__cell--today),\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__cell--today,\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__cell--highlighted,\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__cell--selected {\\n border-radius: 16px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__cell-split--weekend {\\n background-color: rgba(255, 124, 124, 0.3) !important;\\n border-radius: 16px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event {\\n border-radius: 16px;\\n min-height: 70px !important;\\n text-align: left;\\n background: rgb(248, 248, 248);\\n transition: min-height 0.4s, height 0.4s, box-shadow 0.4s, width 0.4s, left 0.4s;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:has(.completed) {\\n background: rgb(251, 251, 251) !important;\\n border: 1px solid #cccccc !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:has(.event__body--non-working-hours) {\\n background: repeating-linear-gradient(135deg, rgb(215, 215, 215), rgb(215, 215, 215) 1px, rgb(224, 224, 224) 1px, rgb(224, 224, 224) 20px);\\n border: 1px solid rgb(215, 215, 215);\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event.vuecal__event--focus {\\n z-index: 100 !important;\\n height: auto !important;\\n max-height: -moz-fit-content !important;\\n max-height: fit-content !important;\\n width: 100% !important;\\n left: 0 !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:not(.vuecal__event--focus):has(.micro-event) .event__body {\\n padding: 5px !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:not(.vuecal__event--focus):has(.short-event) .event__body:not(.micro-event) {\\n padding: 10px 5px !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:not(.vuecal__event--focus) .short-event .project-code {\\n display: none !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:not(.vuecal__event--focus) .short-event h3 {\\n font-size: 16px !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:not(.vuecal__event--focus) .mini-event .event-content {\\n width: 100%;\\n padding: 5px 10px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:not(.vuecal__event--focus) .mini-event .event-initials-wrapper .event-initials {\\n margin-right: 0;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:not(.vuecal__event--focus) .mini-event h3 {\\n font-size: 14px !important;\\n text-overflow: ellipsis;\\n width: calc(100% - 35px);\\n white-space: nowrap;\\n overflow: hidden;\\n margin: 0;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:not(.vuecal__event--focus) .mini-event .event-initials-date {\\n display: none !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event:not(.vuecal__event--focus) .micro-event .event__footer-wrapper {\\n display: none !important;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event .project-code {\\n margin: 0 0 20px;\\n display: block;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event h3 {\\n font-size: 15px;\\n font-weight: 400;\\n color: Black;\\n margin: 0 0 10px;\\n max-height: 100%;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event small {\\n color: black;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event .event-initials-wrapper {\\n margin-bottom: 20px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event .event-initials {\\n height: 30px;\\n width: 30px;\\n border: 1px solid black;\\n border-radius: 50%;\\n padding: 5px;\\n margin-right: 7px;\\n}\\n.calendar-wrapper[data-v-367dbc50] .vuecal__body .vuecal__event .event-initials small {\\n font-size: 11px;\\n}\\n.not-approved[data-v-367dbc50] {\\n background: repeating-linear-gradient(135deg, rgb(215, 215, 215), rgb(215, 215, 215) 1px, rgb(224, 224, 224) 1px, rgb(224, 224, 224) 20px) !important;\\n}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://jandl/./src/plugins/tm@dashboard/_components/z-timeline.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-27.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-27.use%5B2%5D!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-27.use%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), diff --git a/app/src/plugins/tm@_store/store/index.ts b/app/src/plugins/tm@_store/store/index.ts index 00fd31c..c93f04a 100644 --- a/app/src/plugins/tm@_store/store/index.ts +++ b/app/src/plugins/tm@_store/store/index.ts @@ -11,7 +11,9 @@ export default { projects: null, unscheduledSubtasks: null, ongoingSubtasks: null, - initialized: false + initialized: false, + ongoingSubtasksEmployeeId: null, + unscheduledSubtasksEmployeeId: null }, mutations: { @@ -86,6 +88,14 @@ export default { // }) }, + set_ongoing_subtasks_employee_id(state: any, employeeId: any) { + state.ongoingSubtasksEmployeeId = employeeId + }, + + set_unscheduled_subtasks_employee_id(state: any, employeeId: any) { + state.unscheduledSubtasksEmployeeId = employeeId + }, + initialized(state: any) { state.initialized = true } @@ -177,9 +187,20 @@ export default { }, - loadUnscheduledSubtasks({commit}: {commit: any}, employeeId = store.getters['auth/user']?.id) { + loadUnscheduledSubtasks({commit, state}: {commit: any, state: any}, employeeId = undefined) { + let employeeIdToUse = undefined + + 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 + } + return new Promise((resolve, reject) => { - axios.get_auth(`v1/subtasks?type=unscheduled&employee_id=${employeeId}`) + axios.get_auth(`v1/subtasks?type=unscheduled&employee_id=${employeeIdToUse}`) .then(({subtasks}) => { commit('set_unscheduled_subtasks', subtasks) resolve(subtasks) @@ -191,9 +212,21 @@ export default { }) }, - loadOngoingSubtasks({commit}: {commit: any}, employeeId = store.getters['auth/user']?.id) { + loadOngoingSubtasks({commit, state}: {commit: any, state: any}, employeeId = undefined) { + let employeeIdToUse = undefined + + 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) + } + return new Promise((resolve, reject) => { - axios.get_auth(`v1/subtasks?type=ongoing&employee_id=${employeeId}`) + axios.get_auth(`v1/subtasks?type=ongoing&employee_id=${employeeIdToUse}`) .then(({subtasks}) => { commit('set_ongoing_subtasks', subtasks) resolve(subtasks) diff --git a/app/src/plugins/tm@dashboard/_components/z-timeline.vue b/app/src/plugins/tm@dashboard/_components/z-timeline.vue index 062648e..798ef08 100644 --- a/app/src/plugins/tm@dashboard/_components/z-timeline.vue +++ b/app/src/plugins/tm@dashboard/_components/z-timeline.vue @@ -566,7 +566,8 @@ export default { &.vuecal__event--focus z-index: 100 !important - height: fit-content !important + height: auto !important // Fix to work with safari as well + max-height: fit-content !important // Fix to work with safari as well width: 100% !important left: 0 !important