From a12f1359fa5e2277da5e26923eeec18632f94d2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Glasn=C3=A1k?= Date: Mon, 17 Apr 2023 16:16:48 +0200 Subject: [PATCH 1/6] [WIP] Hide calendar filter on scroll down --- app/src/plugins/tm@dashboard/tasks/tasks.vue | 24 ++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/app/src/plugins/tm@dashboard/tasks/tasks.vue b/app/src/plugins/tm@dashboard/tasks/tasks.vue index c96ec12..c60c9ae 100644 --- a/app/src/plugins/tm@dashboard/tasks/tasks.vue +++ b/app/src/plugins/tm@dashboard/tasks/tasks.vue @@ -1,6 +1,6 @@ @@ -23,6 +23,8 @@ export default { return { filter: null, subtasks: null, + headerMarginTop: '0px', + previousScrollTop: 0, config: { date: subDays(new Date(), 1), scrollHour: 7, @@ -145,6 +147,11 @@ export default { this.$events.on('on-blocker-deleted', () => { this.onFilterChanged(this.filter) }) + + setTimeout(() => { + this.$refs.page?.querySelector('.vuecal__bg')?.addEventListener('scroll', this.handleScroll) + }, 1000) + // window }, unmounted() { @@ -152,6 +159,8 @@ export default { this.$events.off('on-subtask-deleted') this.$events.off('on-blocker-edited') this.$events.off('on-blocker-deleted') + + this.$refs.page?.querySelector('.vuecal__bg')?.removeEventListener('scroll', this.handleScroll) }, methods: { @@ -173,6 +182,17 @@ export default { } catch (error) { this.$toast.error('Nepodarilo sa nacitat data!') } + }, + + handleScroll(e) { + if (this.previousScrollTop > e.target.scrollTop) + this.headerMarginTop = '0px' + else + this.headerMarginTop = `-${this.$refs.filter.$el.offsetHeight}px` + + console.log(this.headerMarginTop) + + this.previousScrollTop = e.target.scrollTop } } } From 43e57b407ec61e92ecc1ad1b911c5caf06f77e2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Glasn=C3=A1k?= Date: Mon, 17 Apr 2023 17:35:36 +0200 Subject: [PATCH 2/6] [Master task modal] Fixed project code --- .../tm@modal/master-task/_mixins/selects.mixin.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/app/src/plugins/tm@modal/master-task/_mixins/selects.mixin.ts b/app/src/plugins/tm@modal/master-task/_mixins/selects.mixin.ts index bfadb0b..decdeaa 100644 --- a/app/src/plugins/tm@modal/master-task/_mixins/selects.mixin.ts +++ b/app/src/plugins/tm@modal/master-task/_mixins/selects.mixin.ts @@ -11,8 +11,16 @@ export default { projectsOptions() { // Added to "paginate" projects, because v-autocomplete was unable to handle so many projects at once - const projects = this.projects.filter(project => project.code.includes(this.projectCodeSearch)) - return projects?.length ? projects.slice(0, 10) : this.projects.slice(0, 10) + const projects = this.projects.filter(project => project.code.includes(this.projectCodeSearch)) + let filteredProjects = projects?.length ? projects.slice(0, 10) : this.projects.slice(0, 10) + + if (!this.mastertask?.project_id) + return filteredProjects + + const selectedProject = this.projects.find(project => project.id == this.mastertask?.project_id) + filteredProjects = filteredProjects.filter(project => project.id != selectedProject.id) + + return [...filteredProjects, selectedProject] } }, From 26be814406594e32b37a6262c19f4974843d0730 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Glasn=C3=A1k?= Date: Tue, 18 Apr 2023 00:58:22 +0200 Subject: [PATCH 3/6] [CHR-7] Added hide on header scroll --- .../tm@dashboard/_mixins/Filter.mixin.ts | 89 +++++++++++++++++++ .../tm@dashboard/projects/projects.vue | 7 +- app/src/plugins/tm@dashboard/tasks/tasks.vue | 37 +++----- app/src/plugins/tm@dashboard/teams/teams.vue | 17 ++-- 4 files changed, 116 insertions(+), 34 deletions(-) create mode 100644 app/src/plugins/tm@dashboard/_mixins/Filter.mixin.ts diff --git a/app/src/plugins/tm@dashboard/_mixins/Filter.mixin.ts b/app/src/plugins/tm@dashboard/_mixins/Filter.mixin.ts new file mode 100644 index 0000000..77468e3 --- /dev/null +++ b/app/src/plugins/tm@dashboard/_mixins/Filter.mixin.ts @@ -0,0 +1,89 @@ +export default { + data() { + return { + header: { + initialized: false, + marginTop: 0, + calendar_previousScrollPosition: 0, + isVisible: true + } + } + }, + + unmounted() { + this.$refs.page?.querySelector('.vuecal__bg')?.removeEventListener('scroll', this.handleScroll) + }, + + methods: { + _initScrollListener(repeat = 0) { + if (this.initialized) return + + const calendar = this.$refs.page?.querySelector('.vuecal__bg') + + if (!calendar) + return setTimeout(() => { + if (repeat < 20) this._initScrollListener(repeat + 1) + }, 200) + + calendar.addEventListener('scroll', this._handleScroll) + this.initialized = true + this.header.calendar_previousScrollPosition = calendar.scrollTop + // if (calendar.scrollTop > 0 && this.header.isVisible) { + // this.hideHeader() + // } + }, + + _handleScroll(e) { + const header = document.querySelector('div.subheader') as HTMLElement + + // Check if the header is initialized + if (!this.initialized) { + this.header.calendar_previousScrollPosition = e.target.scrollTop + return + } + + if (this.header.calendar_previousScrollPosition > e.target.scrollTop) { + // On the way up + if (!this.header.isVisible) { + this.showHeader() + } + } else if (header.offsetHeight > Math.abs(e.target.scrollTop)) { + // On the way down + if (this.header.isVisible) { + this.hideHeader() + } + } else { + // On the way down below filter height + if (this.header.isVisible) { + this.hideHeader() + } + } + + this.header.calendar_previousScrollPosition = e.target.scrollTop + }, + + hideHeader() { + const header = document.querySelector('div.subheader') as HTMLElement + + header.style.transition = 'margin-top 0.5s' + header.style.marginTop = `-${header.offsetHeight}px` + this.header.isVisible = false + + setTimeout(() => { + header.style.transition = '' + }, 500) + }, + + showHeader() { + const header = document.querySelector('div.subheader') as HTMLElement + + header.style.transition = 'margin-top 0.5s' + header.style.marginTop = '0' + this.header.isVisible = true + + setTimeout(() => { + header.style.transition = '' + }, 500) + }, + } +} diff --git a/app/src/plugins/tm@dashboard/projects/projects.vue b/app/src/plugins/tm@dashboard/projects/projects.vue index 400d5af..8ad9add 100644 --- a/app/src/plugins/tm@dashboard/projects/projects.vue +++ b/app/src/plugins/tm@dashboard/projects/projects.vue @@ -1,5 +1,5 @@