From 3c03701d12663ffbb1c99d5927354df979d3b260 Mon Sep 17 00:00:00 2001 From: haild Date: Wed, 13 Mar 2024 09:42:16 +0700 Subject: [PATCH 1/6] Update: Transition for IndexFilters --- src/components/Filters/Filters.vue | 12 +- src/components/IndexFilters/IndexFilters.vue | 162 ++++++++++++++----- 2 files changed, 126 insertions(+), 48 deletions(-) diff --git a/src/components/Filters/Filters.vue b/src/components/Filters/Filters.vue index 4123725e..f3659bc8 100644 --- a/src/components/Filters/Filters.vue +++ b/src/components/Filters/Filters.vue @@ -1,5 +1,8 @@ + From 6a447640ca416f8f5f43ce228039bac8d3f8d8f6 Mon Sep 17 00:00:00 2001 From: haild Date: Wed, 13 Mar 2024 09:43:32 +0700 Subject: [PATCH 2/6] Update: remove unexpected indent --- src/components/IndexFilters/IndexFilters.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/IndexFilters/IndexFilters.vue b/src/components/IndexFilters/IndexFilters.vue index 820c4c0f..da24496b 100644 --- a/src/components/IndexFilters/IndexFilters.vue +++ b/src/components/IndexFilters/IndexFilters.vue @@ -488,4 +488,3 @@ watch( { flush: 'post' }, ); - From 77cc43f92f7be47ede8e09ecf8e29aaa2cc8d0d2 Mon Sep 17 00:00:00 2001 From: haild Date: Wed, 13 Mar 2024 10:11:37 +0700 Subject: [PATCH 3/6] Update: v-show -> v-if --- src/components/IndexFilters/IndexFilters.vue | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/IndexFilters/IndexFilters.vue b/src/components/IndexFilters/IndexFilters.vue index da24496b..6a370339 100644 --- a/src/components/IndexFilters/IndexFilters.vue +++ b/src/components/IndexFilters/IndexFilters.vue @@ -50,8 +50,7 @@ div( @after-leave="onTransitionButtonAfterLeave", ) SearchFilterButton( - v-show="mode === IndexFiltersMode.Default" - v-if="!(hideFilters && hideQueryField)", + v-if="!(hideFilters && hideQueryField) && mode === IndexFiltersMode.Default", :label="searchFilterAriaLabel", :tooltip-content="searchFilterTooltip", :disabled="disabled", @@ -91,7 +90,7 @@ div( @leave="onTransitionFiltersLeave", ) Filters( - v-show="mode === IndexFiltersMode.Filtering", + v-if="mode === IndexFiltersMode.Filtering", borderless-query-field, :close-on-child-overlay-click="closeOnChildOverlayClick", :query-value="queryValue", @@ -432,7 +431,9 @@ function onPressF() { // Filters Mode Transition Action function onTransitionFiltersBeforeEnter() { - transitionFiltersState.value = 'entering'; + setTimeout(() => { + transitionFiltersState.value = 'entering'; + }, 1); } function onTransitionFiltersEnter() { From de1a1f6e9d17fd6c71d5ab9ba4d4d821d8b6df5c Mon Sep 17 00:00:00 2001 From: haild Date: Wed, 13 Mar 2024 11:25:37 +0700 Subject: [PATCH 4/6] Update: v-show -> v-if --- src/components/IndexFilters/IndexFilters.vue | 47 +++++++++++++++----- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/src/components/IndexFilters/IndexFilters.vue b/src/components/IndexFilters/IndexFilters.vue index 6a370339..ccaa6d27 100644 --- a/src/components/IndexFilters/IndexFilters.vue +++ b/src/components/IndexFilters/IndexFilters.vue @@ -88,9 +88,10 @@ div( @after-enter="onTransitionFiltersAfterEnter", @before-leave="onTransitionFiltersBeforeLeave", @leave="onTransitionFiltersLeave", + @after-leave="onTransitionFiltersAfterLeave", ) Filters( - v-if="mode === IndexFiltersMode.Filtering", + v-show="mode === IndexFiltersMode.Filtering", borderless-query-field, :close-on-child-overlay-click="closeOnChildOverlayClick", :query-value="queryValue", @@ -437,48 +438,70 @@ function onTransitionFiltersBeforeEnter() { } function onTransitionFiltersEnter() { - transitionFiltersState.value = 'entered'; + setTimeout(() => { + transitionFiltersState.value = 'entered'; + }, 1); } function onTransitionFiltersAfterEnter() { - transitionFiltersState.value = 'entered'; + setTimeout(() => { + transitionFiltersState.value = 'entered'; + }, 1); } function onTransitionFiltersBeforeLeave() { - transitionFiltersState.value = 'exiting'; + setTimeout(() => { + transitionFiltersState.value = 'exiting'; + }, 1); } function onTransitionFiltersLeave() { - transitionFiltersState.value = 'exited'; + setTimeout(() => { + transitionFiltersState.value = 'exited'; + }, 1); } function onTransitionFiltersAfterLeave() { - transitionFiltersState.value = 'unmounted'; + setTimeout(() => { + transitionFiltersState.value = 'unmounted'; + }, 1); } // - Button Filter Icon Transition Action function onTransitionButtonBeforeEnter() { - transitionButtonState.value = 'entering'; + setTimeout(() => { + transitionButtonState.value = 'entering'; + }, 1); } function onTransitionButtonEnter() { - transitionButtonState.value = 'entered'; + setTimeout(() => { + transitionButtonState.value = 'entered'; + }, 1); } function onTransitionButtonAfterEnter() { - transitionButtonState.value = 'entered'; + setTimeout(() => { + transitionButtonState.value = 'entered'; + }, 1); } function onTransitionButtonBeforeLeave() { - transitionButtonState.value = 'exiting'; + setTimeout(() => { + transitionButtonState.value = 'exiting'; + }, 1); } function onTransitionButtonLeave() { - transitionButtonState.value = 'exited'; + setTimeout(() => { + transitionButtonState.value = 'exited'; + }, 1); } function onTransitionButtonAfterLeave() { - transitionButtonState.value = 'unmounted'; + setTimeout(() => { + transitionButtonState.value = 'umnounted'; + }, 1); } watch( From 37796e1c281d33eb873b8ac4620218f8adf65b3a Mon Sep 17 00:00:00 2001 From: "oe.sonnh" Date: Wed, 13 Mar 2024 14:48:01 +0700 Subject: [PATCH 5/6] Fix: transition for IndexFilter --- src/components/Filters/Filters.vue | 12 +- .../components/FiltersBar/FiltersBar.vue | 16 +- src/components/IndexFilters/IndexFilters.vue | 208 +++++++++--------- src/components/IndexFilters/types.ts | 2 + src/utilities/use-on-value-change.ts | 15 -- 5 files changed, 118 insertions(+), 135 deletions(-) delete mode 100644 src/utilities/use-on-value-change.ts diff --git a/src/components/Filters/Filters.vue b/src/components/Filters/Filters.vue index f3659bc8..9c3b2baa 100644 --- a/src/components/Filters/Filters.vue +++ b/src/components/Filters/Filters.vue @@ -1,5 +1,6 @@ diff --git a/src/components/IndexFilters/IndexFilters.vue b/src/components/IndexFilters/IndexFilters.vue index ccaa6d27..816675df 100644 --- a/src/components/IndexFilters/IndexFilters.vue +++ b/src/components/IndexFilters/IndexFilters.vue @@ -9,46 +9,48 @@ div( :class="indexFiltersClassName", ) div(ref="defaultRef") - Container(v-show="mode !== IndexFiltersMode.Filtering") - InlineStack( - align="start", - block-align="center", - :gap="{ xs: '0', md: '200'}", - :wrap="false", - ) - div(:class="tabsWrapperClassName") - div( - :class="styles.TabsInner", - :style="{...defaultStyle, ...transitionStyles[transitionButtonState]}", - ) - Tabs( - :tabs="tabs", - :selected="selected", - :disabled="Boolean(mode !== IndexFiltersMode.Default || disabled)", - :can-create-new-view="canCreateNewView", - @select="emits('select', $event)", - @create-new-view="emits('create-new-view', $event)", + Transition( + name='custom-index-filters-button-transition', + :css="false", + @before-enter="onTransitionButtonBeforeEnter", + @enter="onTransitionButtonEnter", + @after-enter="onTransitionButtonAfterEnter", + @before-leave="onTransitionButtonBeforeLeave", + @leave="onTransitionButtonLeave", + @after-leave="onTransitionButtonAfterLeave", + ) + Container(v-if="mode !== IndexFiltersMode.Filtering") + InlineStack( + align="start", + block-align="center", + :gap="{ xs: '0', md: '200'}", + :wrap="false", + ) + div(:class="tabsWrapperClassName") + div( + :class="styles.TabsInner", + :style="{...defaultStyle, ...transitionStyles[transitionButtonState]}", ) - div( - v-if="isLoading && breakpoints.mdDown", - :class="styles.TabsLoading", - ) - Spinner(size="small") - div(:class="styles.ActionWrap") - div( - v-if="isLoading && !breakpoints.mdDown", - :class="styles.DesktopLoading", - ) - Spinner(size="small") - Transition( - name='custom-index-filters-button-transition', - @before-enter="onTransitionButtonBeforeEnter", - @enter="onTransitionButtonEnter", - @after-enter="onTransitionButtonAfterEnter", - @before-leave="onTransitionButtonBeforeLeave", - @leave="onTransitionButtonLeave", - @after-leave="onTransitionButtonAfterLeave", - ) + Tabs( + :tabs="tabs", + :selected="selected", + :disabled="Boolean(mode !== IndexFiltersMode.Default || disabled)", + :can-create-new-view="canCreateNewView", + @select="emits('select', $event)", + @create-new-view="emits('create-new-view', $event)", + ) + div( + v-if="isLoading && breakpoints.mdDown", + :class="styles.TabsLoading", + ) + Spinner(size="small") + div(:class="styles.ActionWrap") + div( + v-if="isLoading && !breakpoints.mdDown", + :class="styles.DesktopLoading", + ) + Spinner(size="small") + SearchFilterButton( v-if="!(hideFilters && hideQueryField) && mode === IndexFiltersMode.Default", :label="searchFilterAriaLabel", @@ -56,33 +58,36 @@ div( :disabled="disabled", :hide-query-field="hideQueryField", :hide-filters="hideFilters", - :style="{...defaultStyle, ...transitionStyles[transitionButtonState]}", + :style="mountedStateStyles", @click="handleClickFilterButton", ) - template(v-if="mode === IndexFiltersMode.Default") - EditColumnsButton( - v-if="showEditColumnsButton", - :disabled="disabled", - @click="handleClickEditColumnsButton", - ) - SortButton( - v-if="sortOptions && sortOptions.length", - :choices="sortOptions", - :selected="sortSelected || ['']", - :disabled="disabled", - v-bind="sortButtonEvents", - ) - template(v-if="mode === IndexFiltersMode.EditingColumns") - UpdateButtons( - v-if="enhancedCancelAction || enhancedPrimaryAction", - :primaryAction="enhancedPrimaryAction", - :cancelAction="enhancedCancelAction", - :disabled="disabled", - :view-names="viewNames", - ) + + template(v-if="mode === IndexFiltersMode.Default") + EditColumnsButton( + v-if="showEditColumnsButton", + :disabled="disabled", + @click="handleClickEditColumnsButton", + ) + SortButton( + v-if="sortOptions && sortOptions.length", + :choices="sortOptions", + :selected="sortSelected || ['']", + :disabled="disabled", + v-bind="sortButtonEvents", + ) + template(v-if="mode === IndexFiltersMode.EditingColumns") + UpdateButtons( + v-if="enhancedCancelAction || enhancedPrimaryAction", + :primaryAction="enhancedPrimaryAction", + :cancelAction="enhancedCancelAction", + :disabled="disabled", + :view-names="viewNames", + ) + div(ref="filteringRef") Transition( name='slide-fade', + :css="false", @before-enter="onTransitionFiltersBeforeEnter", @enter="onTransitionFiltersEnter", @after-enter="onTransitionFiltersAfterEnter", @@ -91,7 +96,7 @@ div( @after-leave="onTransitionFiltersAfterLeave", ) Filters( - v-show="mode === IndexFiltersMode.Filtering", + v-if="mode === IndexFiltersMode.Filtering", borderless-query-field, :close-on-child-overlay-click="closeOnChildOverlayClick", :query-value="queryValue", @@ -131,14 +136,13 @@ div(