@@ -43,17 +43,34 @@ export class CubeToMetaTransformer {
43
43
44
44
const isCubeVisible = this . isVisible ( cube , true ) ;
45
45
46
- const processFolderMember = ( member ) => {
47
- if ( member . type === 'folder' ) {
48
- return {
49
- name : member . name ,
50
- members : member . includes . map ( processFolderMember ) ,
51
- } ;
52
- }
53
-
54
- return `${ cube . name } .${ member . name } ` ;
46
+ const flatFolderSeparator = '/' ;
47
+ const flatFolders = [ ] ;
48
+
49
+ const processFolder = ( folder , path = [ ] ) => {
50
+ const flatMembers = [ ] ;
51
+ const nestedMembers = folder . includes . map ( member => {
52
+ if ( member . type === 'folder' ) {
53
+ return processFolder ( member , [ ...path , folder . name ] ) ;
54
+ }
55
+ const memberName = `${ cube . name } .${ member . name } ` ;
56
+ flatMembers . push ( memberName ) ;
57
+
58
+ return `${ cube . name } .${ member . name } ` ;
59
+ } ) ;
60
+
61
+ flatFolders . push ( {
62
+ name : [ ...path , folder . name ] . join ( flatFolderSeparator ) ,
63
+ members : flatMembers ,
64
+ } ) ;
65
+
66
+ return {
67
+ name : folder . name ,
68
+ members : nestedMembers ,
69
+ } ;
55
70
} ;
56
71
72
+ const nestedFolders = ( cube . folders || [ ] ) . map ( f => processFolder ( f ) ) ;
73
+
57
74
return {
58
75
config : {
59
76
name : cube . name ,
@@ -124,10 +141,8 @@ export class CubeToMetaTransformer {
124
141
public : it . public ?? true ,
125
142
name : `${ cube . name } .${ it . name } ` ,
126
143
} ) ) ,
127
- folders : ( cube . folders || [ ] ) . map ( ( it ) => ( {
128
- name : it . name ,
129
- members : it . includes . map ( processFolderMember ) ,
130
- } ) ) ,
144
+ folders : flatFolders ,
145
+ nestedFolders,
131
146
} ,
132
147
} ;
133
148
}
0 commit comments