@@ -1455,8 +1455,8 @@ describe('cascader', () => {
14551455 cascader . nativeElement . click ( ) ;
14561456 fixture . detectChanges ( ) ;
14571457 expect ( spy ) . toHaveBeenCalled ( ) ;
1458- testComponent . cascader . inputValue = 'o' ;
14591458 testComponent . cascader . setMenuVisible ( true ) ;
1459+ testComponent . cascader . inputValue = 'o' ;
14601460 fixture . detectChanges ( ) ;
14611461 const itemEl1 = getItemAtColumnAndRow ( 1 , 1 ) ! ;
14621462 expect ( testComponent . cascader . inSearchingMode ) . toBe ( true ) ;
@@ -1524,8 +1524,8 @@ describe('cascader', () => {
15241524 fixture . detectChanges ( ) ;
15251525 cascader . nativeElement . click ( ) ;
15261526 fixture . detectChanges ( ) ;
1527- testComponent . cascader . inputValue = 'o' ;
15281527 testComponent . cascader . setMenuVisible ( true ) ;
1528+ testComponent . cascader . inputValue = 'o' ;
15291529 fixture . detectChanges ( ) ;
15301530 const itemEl1 = getItemAtColumnAndRow ( 1 , 1 ) ! ;
15311531 expect ( testComponent . cascader . inSearchingMode ) . toBe ( true ) ;
@@ -1547,8 +1547,8 @@ describe('cascader', () => {
15471547 fixture . detectChanges ( ) ;
15481548 cascader . nativeElement . click ( ) ;
15491549 fixture . detectChanges ( ) ;
1550- testComponent . cascader . inputValue = 'o' ;
15511550 testComponent . cascader . setMenuVisible ( true ) ;
1551+ testComponent . cascader . inputValue = 'o' ;
15521552 fixture . detectChanges ( ) ;
15531553 const itemEl1 = getItemAtColumnAndRow ( 1 , 1 ) ! ;
15541554 expect ( testComponent . cascader . inSearchingMode ) . toBe ( true ) ;
@@ -1571,8 +1571,8 @@ describe('cascader', () => {
15711571 }
15721572 } as NzShowSearchOptions ;
15731573 fixture . detectChanges ( ) ;
1574- testComponent . cascader . inputValue = 'o' ;
15751574 testComponent . cascader . setMenuVisible ( true ) ;
1575+ testComponent . cascader . inputValue = 'o' ;
15761576 fixture . detectChanges ( ) ;
15771577 const itemEl1 = getItemAtColumnAndRow ( 1 , 1 ) ! ;
15781578 expect ( testComponent . cascader . inSearchingMode ) . toBe ( true ) ;
@@ -1597,8 +1597,8 @@ describe('cascader', () => {
15971597 }
15981598 } as NzShowSearchOptions ;
15991599 fixture . detectChanges ( ) ;
1600- testComponent . cascader . inputValue = 'o' ;
16011600 testComponent . cascader . setMenuVisible ( true ) ;
1601+ testComponent . cascader . inputValue = 'o' ;
16021602 fixture . detectChanges ( ) ;
16031603 const itemEl1 = getItemAtColumnAndRow ( 1 , 1 ) ! ;
16041604 expect ( testComponent . cascader . inSearchingMode ) . toBe ( true ) ;
@@ -1617,8 +1617,8 @@ describe('cascader', () => {
16171617 it ( 'should forbid disabled search options to be clicked' , fakeAsync ( ( ) => {
16181618 testComponent . nzOptions = options4 ;
16191619 fixture . detectChanges ( ) ;
1620- testComponent . cascader . inputValue = 'o' ;
16211620 testComponent . cascader . setMenuVisible ( true ) ;
1621+ testComponent . cascader . inputValue = 'o' ;
16221622 fixture . detectChanges ( ) ;
16231623 const itemEl1 = getItemAtColumnAndRow ( 1 , 1 ) ! ;
16241624 expect ( itemEl1 . innerText ) . toBe ( 'Zhejiang / Hangzhou / West Lake' ) ;
@@ -1636,8 +1636,8 @@ describe('cascader', () => {
16361636 it ( 'should pass disabled property to children when searching' , ( ) => {
16371637 testComponent . nzOptions = options4 ;
16381638 fixture . detectChanges ( ) ;
1639- testComponent . cascader . inputValue = 'o' ;
16401639 testComponent . cascader . setMenuVisible ( true ) ;
1640+ testComponent . cascader . inputValue = 'o' ;
16411641 fixture . detectChanges ( ) ;
16421642 expect ( testComponent . cascader . cascaderService . columns [ 0 ] [ 0 ] . isDisabled ) . toBe ( true ) ;
16431643 expect ( testComponent . cascader . cascaderService . columns [ 0 ] [ 1 ] . isDisabled ) . toBe ( false ) ;
@@ -1647,8 +1647,8 @@ describe('cascader', () => {
16471647 it ( 'should support arrow in search mode' , done => {
16481648 testComponent . nzOptions = options2 ;
16491649 fixture . detectChanges ( ) ;
1650- testComponent . cascader . inputValue = 'o' ;
16511650 testComponent . cascader . setMenuVisible ( true ) ;
1651+ testComponent . cascader . inputValue = 'o' ;
16521652 fixture . detectChanges ( ) ;
16531653 const itemEl2 = getItemAtColumnAndRow ( 1 , 2 ) ! ;
16541654 const itemEl4 = getItemAtColumnAndRow ( 1 , 4 ) ! ;
@@ -1717,8 +1717,8 @@ describe('cascader', () => {
17171717 fixture . detectChanges ( ) ;
17181718 testComponent . nzShowSearch = true ;
17191719 cascader . nativeElement . click ( ) ;
1720- testComponent . cascader . inputValue = 'o' ;
17211720 testComponent . cascader . setMenuVisible ( true ) ;
1721+ testComponent . cascader . inputValue = 'o' ;
17221722 fixture . detectChanges ( ) ;
17231723 let itemEl1 = getItemAtColumnAndRow ( 1 , 1 ) ! ;
17241724 expect ( testComponent . cascader . inSearchingMode ) . toBe ( true ) ;
@@ -1803,6 +1803,57 @@ describe('cascader', () => {
18031803 expect ( testComponent . values ) . toEqual ( [ 'zhejiang' , 'hangzhou' , 'xihu' ] ) ;
18041804 } ) ) ;
18051805
1806+ it ( 'should display activated column correctly after clicking outside and reopen' , fakeAsync ( ( ) => {
1807+ fixture . detectChanges ( ) ;
1808+ testComponent . values = [ 'zhejiang' , 'hangzhou' , 'xihu' ] ;
1809+ // First open - should display activated columns correctly
1810+ testComponent . cascader . setMenuVisible ( true ) ;
1811+ fixture . detectChanges ( ) ;
1812+ flush ( ) ;
1813+ fixture . detectChanges ( ) ;
1814+ expect ( getAllColumns ( ) . length ) . toBe ( 3 ) ;
1815+ let itemEl1 = getItemAtColumnAndRow ( 1 , 1 ) ! ;
1816+ let itemEl2 = getItemAtColumnAndRow ( 2 , 1 ) ! ;
1817+ let itemEl3 = getItemAtColumnAndRow ( 3 , 1 ) ! ;
1818+ expect ( itemEl1 . classList ) . toContain ( 'ant-cascader-menu-item-active' ) ;
1819+ expect ( itemEl2 . classList ) . toContain ( 'ant-cascader-menu-item-active' ) ;
1820+ expect ( itemEl3 . classList ) . toContain ( 'ant-cascader-menu-item-active' ) ;
1821+
1822+ // Click first column option (zhejiang) - should fold the third column
1823+ itemEl1 . click ( ) ;
1824+ fixture . detectChanges ( ) ;
1825+ flush ( ) ;
1826+ fixture . detectChanges ( ) ;
1827+ expect ( getAllColumns ( ) . length ) . toBe ( 2 ) ;
1828+ itemEl1 = getItemAtColumnAndRow ( 1 , 1 ) ! ;
1829+ itemEl2 = getItemAtColumnAndRow ( 2 , 1 ) ! ;
1830+ itemEl3 = getItemAtColumnAndRow ( 3 , 1 ) ! ;
1831+ expect ( itemEl1 . classList ) . toContain ( 'ant-cascader-menu-item-active' ) ;
1832+ expect ( itemEl2 . classList ) . not . toContain ( 'ant-cascader-menu-item-active' ) ;
1833+ expect ( itemEl3 ) . toBeNull ( ) ;
1834+
1835+ // Click outside to close menu - value should remain unchanged
1836+ dispatchFakeEvent ( document . body , 'click' ) ;
1837+ fixture . detectChanges ( ) ;
1838+ flush ( ) ;
1839+ fixture . detectChanges ( ) ;
1840+ expect ( testComponent . cascader . menuVisible ) . toBe ( false ) ;
1841+ expect ( testComponent . values ) . toEqual ( [ 'zhejiang' , 'hangzhou' , 'xihu' ] ) ;
1842+
1843+ // Reopen menu - should display activated columns correctly based on current value
1844+ testComponent . cascader . setMenuVisible ( true ) ;
1845+ fixture . detectChanges ( ) ;
1846+ flush ( ) ;
1847+ fixture . detectChanges ( ) ;
1848+ expect ( getAllColumns ( ) . length ) . toBe ( 3 ) ;
1849+ itemEl1 = getItemAtColumnAndRow ( 1 , 1 ) ! ;
1850+ itemEl2 = getItemAtColumnAndRow ( 2 , 1 ) ! ;
1851+ itemEl3 = getItemAtColumnAndRow ( 3 , 1 ) ! ;
1852+ expect ( itemEl1 . classList ) . toContain ( 'ant-cascader-menu-item-active' ) ;
1853+ expect ( itemEl2 . classList ) . toContain ( 'ant-cascader-menu-item-active' ) ;
1854+ expect ( itemEl3 . classList ) . toContain ( 'ant-cascader-menu-item-active' ) ;
1855+ } ) ) ;
1856+
18061857 describe ( 'should nzOpen works' , ( ) => {
18071858 beforeEach ( fakeAsync ( ( ) => {
18081859 testComponent . nzOpen = true ;
0 commit comments