@@ -2,6 +2,7 @@ import { getAllEnvVars } from '@clevercloud/client/esm/api/v2/addon.js';
22import { sendToApi } from '../../lib/send-to-api.js' ;
33import { defineSmartComponent } from '../../lib/smart/define-smart-component.js' ;
44import { BucketsListController } from '../cc-cellar-bucket-list/cc-cellar-bucket-list.ctrl.js' ;
5+ import { ObjectListController } from '../cc-cellar-object-list/cc-cellar-object-list.ctrl.js' ;
56import { CellarExplorerClient } from './cc-cellar-explorer.client.js' ;
67import './cc-cellar-explorer.js' ;
78
@@ -10,7 +11,9 @@ import './cc-cellar-explorer.js';
1011 * @import { CellarExplorerStateLoaded } from './cc-cellar-explorer.types.js'
1112 * @import { CellarEndpoint } from './cc-cellar-explorer.client.types.js'
1213 * @import { CcCellarBucketList } from '../cc-cellar-bucket-list/cc-cellar-bucket-list.js'
14+ * @import { CcCellarObjectList } from '../cc-cellar-object-list/cc-cellar-object-list.js'
1315 * @import { CellarBucketListState } from '../cc-cellar-bucket-list/cc-cellar-bucket-list.types.js'
16+ * @import { CellarObjectListState } from '../cc-cellar-object-list/cc-cellar-object-list.types.js'
1417 * @import { EnvVar } from '../common.types.js'
1518 * @import { UpdateCallback } from '../common.types.js'
1619 * @import { ApiConfig } from '../../lib/send-to-api.js'
@@ -42,7 +45,7 @@ defineSmartComponent({
4245 const cellarClient = new CellarExplorerClient ( cellarProxyUrl , cellarEndpoint ) ;
4346
4447 /** @type {() => CcCellarBucketList } */
45- const getComponent = ( ) => component . shadowRoot . querySelector ( 'cc-cellar-bucket-list-beta' ) ;
48+ const getBucketListComponent = ( ) => component . shadowRoot . querySelector ( 'cc-cellar-bucket-list-beta' ) ;
4649 /** @type {UpdateCallback<CellarBucketListState> } */
4750 const updateBucketComponent = ( newState ) => {
4851 updateComponent (
@@ -62,16 +65,62 @@ defineSmartComponent({
6265 ) ;
6366 } ;
6467
65- const bucketsListController = new BucketsListController ( cellarClient , getComponent , updateBucketComponent ) ;
68+ const bucketsListController = new BucketsListController (
69+ cellarClient ,
70+ getBucketListComponent ,
71+ updateBucketComponent ,
72+ ) ;
6673 bucketsListController . init ( onEvent ) ;
6774
75+ /** @type {UpdateCallback<CellarObjectListState> } */
76+ const updateObjectListComponent = ( newState ) => {
77+ updateComponent (
78+ 'state' ,
79+ /** @param {CellarExplorerStateLoaded } state*/ ( state ) => {
80+ if ( state . level . type === 'objects' ) {
81+ if ( typeof newState === 'function' ) {
82+ const result = newState ( /** @type {any } */ ( state . level . state ) ) ;
83+ if ( result != null && typeof result === 'object' ) {
84+ state . level . state = result ;
85+ }
86+ } else {
87+ state . level . state = newState ;
88+ }
89+ }
90+ } ,
91+ ) ;
92+ } ;
93+
94+ /** @type {() => CcCellarObjectList } */
95+ const getObjectListComponent = ( ) => component . shadowRoot . querySelector ( 'cc-cellar-object-list-beta' ) ;
96+ const objectListController = new ObjectListController (
97+ cellarClient ,
98+ getObjectListComponent ,
99+ updateObjectListComponent ,
100+ ) ;
101+ objectListController . init ( onEvent ) ;
102+
68103 onEvent ( 'cc-cellar-bucket-created' , ( bucketName ) => {
69104 component . scrollToBucket ( bucketName ) ;
70105 } ) ;
71106
107+ onEvent ( 'cc-cellar-navigate-to-home' , ( ) => {
108+ updateComponent ( 'state' , { type : 'loaded' , level : { type : 'buckets' , state : { type : 'loading' } } } ) ;
109+ bucketsListController . initialFetch ( ) ;
110+ } ) ;
111+
112+ onEvent ( 'cc-cellar-navigate-to-bucket' , ( bucketName ) => {
113+ updateComponent ( 'state' , {
114+ type : 'loaded' ,
115+ level : { type : 'objects' , state : { type : 'loading' , bucketName, path : [ ] } } ,
116+ } ) ;
117+ objectListController . changeBucket ( bucketName ) ;
118+ } ) ;
119+
72120 signal . onabort = ( ) => {
73121 cellarClient . close ( ) ;
74122 bucketsListController . abort ( ) ;
123+ objectListController . abort ( ) ;
75124 } ;
76125 } )
77126 . catch ( ( error ) => {
0 commit comments