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] [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 @@