UBER-54: Attempt to Expand/collapse issue fix (#3183)

Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
Andrey Sobolev 2023-05-15 22:17:55 +07:00 committed by GitHub
parent c41cc022c5
commit f136bdff42
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 20 deletions

View File

@ -13,30 +13,16 @@
// limitations under the License. // limitations under the License.
--> -->
<script lang="ts"> <script lang="ts">
import { createEventDispatcher, afterUpdate } from 'svelte' import { afterUpdate, createEventDispatcher } from 'svelte'
import { quintOut } from 'svelte/easing'
import { tweened } from 'svelte/motion'
export let isExpanded = false export let isExpanded = false
export let duration = 150
export let easing: (t: number) => number = quintOut
const dispatch = createEventDispatcher() const dispatch = createEventDispatcher()
afterUpdate(() => dispatch('changeContent')) afterUpdate(() => dispatch('changeContent'))
const tweenedHeight = tweened(0, { duration, easing })
let height = 0
$: tweenedHeight.set(isExpanded ? height : 0, { duration, easing })
</script> </script>
<div <div class="root" hidden={!isExpanded}>
class="root" <div class="flex-no-shrink clear-mins">
style="height: {$tweenedHeight}px;"
style:overflow={$tweenedHeight < height ? 'auto' : $tweenedHeight === 0 ? 'hidden' : 'visible'}
>
<div bind:offsetHeight={height} class="flex-no-shrink clear-mins">
<slot /> <slot />
</div> </div>
</div> </div>

View File

@ -72,7 +72,12 @@
$: initialLimit = !lastLevel ? undefined : singleCat ? singleCategoryLimit : defaultLimit $: initialLimit = !lastLevel ? undefined : singleCat ? singleCategoryLimit : defaultLimit
$: limit = initialLimit $: limit = initialLimit
let collapsed = true $: categoryCollapseKey = `list_collapsing_${location.pathname}_${
typeof category === 'object' ? category.name : category
}`
$: storedCollapseState = localStorage.getItem(categoryCollapseKey)
$: collapsed = storedCollapseState === 'true' || storedCollapseState === null
let wasLoaded = false let wasLoaded = false
const dispatch = createEventDispatcher() const dispatch = createEventDispatcher()
@ -83,8 +88,10 @@
} }
function initCollapsed (singleCat: boolean, lastLevel: boolean): void { function initCollapsed (singleCat: boolean, lastLevel: boolean): void {
if (localStorage.getItem(categoryCollapseKey) === null) {
collapsed = !disableHeader && !singleCat && items.length > (lastLevel ? autoFoldLimit : singleCategoryLimit) collapsed = !disableHeader && !singleCat && items.length > (lastLevel ? autoFoldLimit : singleCategoryLimit)
} }
}
$: initCollapsed(singleCat, lastLevel) $: initCollapsed(singleCat, lastLevel)
@ -319,12 +326,14 @@
} }
export function expand (): void { export function expand (): void {
collapsed = false collapsed = false
localStorage.setItem(categoryCollapseKey, 'false')
} }
export function scroll (item: Doc): void { export function scroll (item: Doc): void {
const pos = limited.findIndex((it) => it._id === item._id) const pos = limited.findIndex((it) => it._id === item._id)
if (pos >= 0) { if (pos >= 0) {
if (collapsed) { if (collapsed) {
collapsed = false collapsed = false
localStorage.setItem(categoryCollapseKey, 'false')
setTimeout(() => scroll(item), 50) setTimeout(() => scroll(item), 50)
} else { } else {
listItems[pos]?.scroll() listItems[pos]?.scroll()
@ -371,10 +380,11 @@
}} }}
on:collapse={() => { on:collapse={() => {
collapsed = !collapsed collapsed = !collapsed
localStorage.setItem(categoryCollapseKey, collapsed ? 'true' : 'false')
}} }}
/> />
{/if} {/if}
<ExpandCollapse isExpanded={!collapsed || dragItemIndex !== undefined} duration={0}> <ExpandCollapse isExpanded={!collapsed || dragItemIndex !== undefined}>
{#if !lastLevel} {#if !lastLevel}
<slot <slot
name="category" name="category"