@@ -18,8 +18,8 @@ const meta: Meta = {
18
18
19
19
export const FileTreeWithDirectoryLinks : Story = ( ) => (
20
20
< Box sx = { { p : 3 , maxWidth : 400 } } >
21
- < nav aria-label = "File navigation " >
22
- < TreeView aria-label = "File navigation " >
21
+ < nav aria-label = "Files " >
22
+ < TreeView aria-label = "Files " >
23
23
< TreeView . LinkItem href = "#src" >
24
24
< TreeView . LeadingVisual >
25
25
< TreeView . DirectoryIcon />
@@ -98,8 +98,8 @@ export const FileTreeWithDirectoryLinks: Story = () => (
98
98
export const FileTreeWithoutDirectoryLinks : Story = ( ) => {
99
99
return (
100
100
< Box sx = { { p : 3 , maxWidth : 400 } } >
101
- < nav aria-label = "File navigation " >
102
- < TreeView aria-label = "File navigation " >
101
+ < nav aria-label = "Files " >
102
+ < TreeView aria-label = "Files " >
103
103
< TreeView . Item defaultExpanded >
104
104
< TreeView . LeadingVisual >
105
105
< TreeView . DirectoryIcon />
@@ -343,9 +343,9 @@ export const Controlled: Story = () => {
343
343
</ ActionMenu . Overlay >
344
344
</ ActionMenu >
345
345
</ Box >
346
- < nav aria-label = "File navigation " >
346
+ < nav aria-label = "Files " >
347
347
< CurrentPathContext . Provider value = { { currentPath, setCurrentPath} } >
348
- < TreeView aria-label = "File navigation " >
348
+ < TreeView aria-label = "Files " >
349
349
{ tree . map ( item => (
350
350
< TreeItem
351
351
key = { item . data . name }
@@ -418,8 +418,8 @@ export const AsyncSuccess: Story = args => {
418
418
419
419
return (
420
420
< Box sx = { { p : 3 } } >
421
- < nav aria-label = "File navigation " >
422
- < TreeView aria-label = "File navigation " >
421
+ < nav aria-label = "Files " >
422
+ < TreeView aria-label = "Files " >
423
423
< TreeView . Item >
424
424
< TreeView . LeadingVisual >
425
425
< FileIcon />
@@ -470,6 +470,107 @@ AsyncSuccess.args = {
470
470
responseTime : 2000
471
471
}
472
472
473
+ export const AsyncWithCount : Story = args => {
474
+ const [ isLoading , setIsLoading ] = React . useState ( false )
475
+ const [ asyncItems , setAsyncItems ] = React . useState < string [ ] > ( [ ] )
476
+
477
+ let state : SubTreeState = 'initial'
478
+
479
+ if ( isLoading ) {
480
+ state = 'loading'
481
+ } else if ( asyncItems . length > 0 ) {
482
+ state = 'done'
483
+ }
484
+
485
+ return (
486
+ < Box sx = { { p : 3 } } >
487
+ < nav aria-label = "Files" >
488
+ < TreeView aria-label = "Files" >
489
+ < TreeView . Item
490
+ onExpandedChange = { async isExpanded => {
491
+ if ( asyncItems . length === 0 && isExpanded ) {
492
+ setIsLoading ( true )
493
+
494
+ // Load items
495
+ const items = await loadItems ( args . responseTime )
496
+
497
+ setIsLoading ( false )
498
+ setAsyncItems ( items )
499
+ }
500
+ } }
501
+ >
502
+ < TreeView . LeadingVisual >
503
+ < TreeView . DirectoryIcon />
504
+ </ TreeView . LeadingVisual >
505
+ Directory with async items
506
+ < TreeView . SubTree state = { state } count = { args . count } >
507
+ { asyncItems . map ( item => (
508
+ < TreeView . Item key = { item } >
509
+ < TreeView . LeadingVisual >
510
+ < FileIcon />
511
+ </ TreeView . LeadingVisual >
512
+ { item }
513
+ </ TreeView . Item >
514
+ ) ) }
515
+ </ TreeView . SubTree >
516
+ </ TreeView . Item >
517
+ < TreeView . LinkItem href = "#src" >
518
+ < TreeView . LeadingVisual >
519
+ < TreeView . DirectoryIcon />
520
+ </ TreeView . LeadingVisual >
521
+ src
522
+ < TreeView . SubTree >
523
+ < TreeView . LinkItem href = "#avatar-tsx" >
524
+ < TreeView . LeadingVisual >
525
+ < FileIcon />
526
+ </ TreeView . LeadingVisual >
527
+ Avatar.tsx
528
+ </ TreeView . LinkItem >
529
+ < TreeView . LinkItem href = "#button" current >
530
+ < TreeView . LeadingVisual >
531
+ < TreeView . DirectoryIcon />
532
+ </ TreeView . LeadingVisual >
533
+ Button
534
+ < TreeView . SubTree >
535
+ < TreeView . LinkItem href = "#button-tsx" >
536
+ < TreeView . LeadingVisual >
537
+ < FileIcon />
538
+ </ TreeView . LeadingVisual >
539
+ Button.tsx
540
+ </ TreeView . LinkItem >
541
+ < TreeView . LinkItem href = "#button-test-tsx" >
542
+ < TreeView . LeadingVisual >
543
+ < FileIcon />
544
+ </ TreeView . LeadingVisual >
545
+ Button.test.tsx
546
+ </ TreeView . LinkItem >
547
+ </ TreeView . SubTree >
548
+ </ TreeView . LinkItem >
549
+ < TreeView . Item >
550
+ < TreeView . LeadingVisual >
551
+ < FileIcon />
552
+ </ TreeView . LeadingVisual >
553
+ ReallyLongFileNameThatShouldBeTruncated.tsx
554
+ </ TreeView . Item >
555
+ </ TreeView . SubTree >
556
+ </ TreeView . LinkItem >
557
+ </ TreeView >
558
+ </ nav >
559
+ </ Box >
560
+ )
561
+ }
562
+
563
+ AsyncWithCount . args = {
564
+ responseTime : 2000 ,
565
+ count : 3
566
+ }
567
+
568
+ AsyncWithCount . argTypes = {
569
+ count : {
570
+ type : 'number'
571
+ }
572
+ }
573
+
473
574
async function alwaysFails ( responseTime : number ) {
474
575
await wait ( responseTime )
475
576
throw new Error ( 'Failed to load items' )
@@ -509,8 +610,8 @@ export const AsyncError: Story = args => {
509
610
510
611
return (
511
612
< Box sx = { { p : 3 } } >
512
- < nav aria-label = "File navigation " >
513
- < TreeView aria-label = "File navigation " >
613
+ < nav aria-label = "Files " >
614
+ < TreeView aria-label = "Files " >
514
615
< TreeView . Item >
515
616
< TreeView . LeadingVisual >
516
617
< FileIcon />
0 commit comments