1- import React , { useState } from 'react'
1+ import React , { useState , useRef , useEffect } from 'react'
22
33import { findIndex } from 'ramda'
44
@@ -20,11 +20,13 @@ import {
2020} from '../styles/desktop_view/folder'
2121
2222const MAX_DISPLAY_COUNT = 5
23- const TOGGLE_SUB_TOGGLE_THROLD = 5 // TODO: only for test, should be 15
23+ const TOGGLE_SUB_TOGGLE_THROLD = 15
2424
2525const Folder = ( { title, groupTags, allTags, activeTag, onSelect } ) => {
26- // 如果标签总数都没有超过 15 个,那么就不用显示 '展示更多'了,直接全部显示完事儿
27- const needSubToggle = allTags ?. length > TOGGLE_SUB_TOGGLE_THROLD || false
26+ // 决定是否显示 '展示更多' 的时候参考标签总数
27+ const needSubToggle =
28+ allTags ?. length > TOGGLE_SUB_TOGGLE_THROLD &&
29+ groupTags . length > MAX_DISPLAY_COUNT
2830
2931 const initDisplayCount = needSubToggle ? MAX_DISPLAY_COUNT : groupTags . length
3032
@@ -36,9 +38,27 @@ const Folder = ({ title, groupTags, allTags, activeTag, onSelect }) => {
3638 const isActiveTagInFolder =
3739 findIndex ( ( item ) => item . id === activeTag . id , groupTags ) >= 0
3840
41+ const subToggleRef = useRef ( null )
42+ // 当选中的 Tag 被折叠在展示更多里面时,将其展开
43+ useEffect ( ( ) => {
44+ if ( subToggleRef && isActiveTagInFolder ) {
45+ setCurDisplayCount ( groupTags . length )
46+ }
47+ } , [ subToggleRef , isActiveTagInFolder , groupTags ] )
48+
3949 return (
4050 < Wrapper >
41- < Header onClick = { ( ) => toggleFolder ( ! isFolderOpen ) } >
51+ < Header
52+ onClick = { ( ) => {
53+ toggleFolder ( ! isFolderOpen )
54+
55+ // 当关闭 Folder 的时候,如果当前 Folder 没有被激活的 Tag, 那么就回到折叠状态
56+ // 如果有,那么保持原来的状态
57+ if ( isFolderOpen && ! isActiveTagInFolder ) {
58+ setCurDisplayCount ( MAX_DISPLAY_COUNT )
59+ }
60+ } }
61+ >
4262 < ArrowIcon
4363 isOpen = { isFolderOpen }
4464 src = { `${ ICON } /shape/arrow-simple.svg` }
@@ -63,6 +83,7 @@ const Folder = ({ title, groupTags, allTags, activeTag, onSelect }) => {
6383 </ TagsWrapper >
6484 { needSubToggle && (
6585 < SubToggle
86+ ref = { subToggleRef }
6687 onClick = { ( ) => {
6788 setCurDisplayCount (
6889 curDisplayCount === MAX_DISPLAY_COUNT
0 commit comments