@@ -20,28 +20,32 @@ namespace OrchardCore.Menu.Drivers
20
20
public class MenuPartDisplayDriver : ContentPartDisplayDriver < MenuPart >
21
21
{
22
22
private readonly IContentDefinitionManager _contentDefinitionManager ;
23
- protected readonly IHtmlLocalizer H ;
24
23
private readonly INotifier _notifier ;
25
24
private readonly ILogger _logger ;
26
25
26
+ protected readonly IHtmlLocalizer H ;
27
+
27
28
public MenuPartDisplayDriver (
28
29
IContentDefinitionManager contentDefinitionManager ,
29
- IHtmlLocalizer < MenuPartDisplayDriver > htmlLocalizer ,
30
30
INotifier notifier ,
31
- ILogger < MenuPartDisplayDriver > logger
31
+ ILogger < MenuPartDisplayDriver > logger ,
32
+ IHtmlLocalizer < MenuPartDisplayDriver > htmlLocalizer
32
33
)
33
34
{
34
35
_contentDefinitionManager = contentDefinitionManager ;
35
- H = htmlLocalizer ;
36
36
_notifier = notifier ;
37
37
_logger = logger ;
38
+ H = htmlLocalizer ;
38
39
}
39
40
40
41
public override IDisplayResult Edit ( MenuPart part )
41
42
{
42
43
return Initialize < MenuPartEditViewModel > ( "MenuPart_Edit" , async model =>
43
44
{
44
- var menuItemContentTypes = ( await _contentDefinitionManager . ListTypeDefinitionsAsync ( ) ) . Where ( t => t . StereotypeEquals ( "MenuItem" ) ) ;
45
+ var menuItemContentTypes = ( await _contentDefinitionManager . ListTypeDefinitionsAsync ( ) )
46
+ . Where ( t => t . StereotypeEquals ( "MenuItem" ) )
47
+ . ToArray ( ) ;
48
+
45
49
var notify = false ;
46
50
47
51
foreach ( var menuItem in part . ContentItem . As < MenuItemsListPart > ( ) . MenuItems )
@@ -68,20 +72,27 @@ public override async Task<IDisplayResult> UpdateAsync(MenuPart part, IUpdateMod
68
72
{
69
73
var model = new MenuPartEditViewModel ( ) ;
70
74
71
- if ( await updater . TryUpdateModelAsync ( model , Prefix , t => t . Hierarchy ) && ! string . IsNullOrWhiteSpace ( model . Hierarchy ) )
75
+ if ( await updater . TryUpdateModelAsync ( model , Prefix , t => t . Hierarchy ) &&
76
+ ! string . IsNullOrWhiteSpace ( model . Hierarchy ) )
72
77
{
73
- var originalMenuItems = part . ContentItem . As < MenuItemsListPart > ( ) ;
74
-
75
- var newHierarchy = JArray . Parse ( model . Hierarchy ) ;
76
-
77
78
var menuItems = new JsonArray ( ) ;
78
79
79
- foreach ( var item in newHierarchy )
80
+ var originalMenuItems = part . ContentItem . As < MenuItemsListPart > ( ) ;
81
+
82
+ if ( originalMenuItems is not null )
80
83
{
81
- menuItems . Add ( ProcessItem ( originalMenuItems , item as JsonObject ) ) ;
84
+ var newHierarchy = JArray . Parse ( model . Hierarchy ) ;
85
+
86
+ foreach ( var item in newHierarchy )
87
+ {
88
+ menuItems . Add ( ProcessItem ( originalMenuItems , item as JsonObject ) ) ;
89
+ }
82
90
}
83
91
84
- part . ContentItem . Content [ "MenuItemsListPart" ] = new JsonObject { [ "MenuItems" ] = menuItems } ;
92
+ part . ContentItem . Content [ nameof ( MenuItemsListPart ) ] = new JsonObject
93
+ {
94
+ [ nameof ( MenuItemsListPart . MenuItems ) ] = menuItems ,
95
+ } ;
85
96
}
86
97
87
98
return Edit ( part ) ;
@@ -101,27 +112,38 @@ private static JsonObject GetMenuItemAt(MenuItemsListPart menuItems, int[] index
101
112
}
102
113
103
114
var newObj = JObject . FromObject ( menuItem , JOptions . Default ) ;
104
- if ( newObj [ "MenuItemsListPart" ] != null )
115
+
116
+ if ( newObj [ nameof ( MenuItemsListPart ) ] != null )
105
117
{
106
- newObj [ "MenuItemsListPart" ] = new JsonObject { [ "MenuItems" ] = new JsonArray ( ) } ;
118
+ newObj [ nameof ( MenuItemsListPart ) ] = new JsonObject
119
+ {
120
+ [ nameof ( MenuItemsListPart . MenuItems ) ] = new JsonArray ( )
121
+ } ;
107
122
}
108
123
109
124
return newObj ;
110
125
}
111
126
112
127
private static JsonObject ProcessItem ( MenuItemsListPart originalItems , JsonObject item )
113
128
{
114
- var contentItem = GetMenuItemAt ( originalItems , item [ "index" ] . ToString ( ) . Split ( '-' ) . Select ( x => Convert . ToInt32 ( x ) ) . ToArray ( ) ) ;
129
+ var indexes = item [ "index" ] ? . ToString ( ) . Split ( '-' ) . Select ( x => Convert . ToInt32 ( x ) ) . ToArray ( ) ?? [ ] ;
130
+
131
+ var contentItem = GetMenuItemAt ( originalItems , indexes ) ;
115
132
116
133
var children = item [ "children" ] as JsonArray ;
117
134
118
135
if ( children is not null )
119
136
{
120
137
var menuItems = new JsonArray ( ) ;
138
+
121
139
for ( var i = 0 ; i < children . Count ; i ++ )
122
140
{
123
141
menuItems . Add ( ProcessItem ( originalItems , children [ i ] as JsonObject ) ) ;
124
- contentItem [ "MenuItemsListPart" ] = new JsonObject { [ "MenuItems" ] = menuItems } ;
142
+ }
143
+
144
+ contentItem [ nameof ( MenuItemsListPart ) ] = new JsonObject
145
+ {
146
+ [ nameof ( MenuItemsListPart . MenuItems ) ] = menuItems ,
125
147
} ;
126
148
}
127
149
0 commit comments