Skip to content

Commit 8f93773

Browse files
authored
Merge pull request #660 from enonic/issue-648
Show component description in Page Components view #648
2 parents b4e1b59 + b35a9be commit 8f93773

File tree

3 files changed

+84
-10
lines changed

3 files changed

+84
-10
lines changed

src/main/resources/assets/js/app/page/region/DescriptorBasedComponent.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ export class DescriptorBasedComponent
2020

2121
private descriptor: DescriptorKey;
2222

23+
private description: string;
24+
2325
private config: PropertyTree;
2426

2527
private configChangedHandler: (event: PropertyEvent) => void;
@@ -61,6 +63,7 @@ export class DescriptorBasedComponent
6163
this.descriptor = descriptorKey;
6264

6365
this.setName(descriptor ? new ComponentName(descriptor.getDisplayName()) : this.getType().getDefaultName());
66+
this.description = descriptor ? descriptor.getDescription() : null;
6467

6568
if (!api.ObjectHelper.equals(oldValue, descriptorKey)) {
6669
this.notifyPropertyChanged(DescriptorBasedComponent.PROPERTY_DESCRIPTOR);
@@ -86,6 +89,10 @@ export class DescriptorBasedComponent
8689
return this.config;
8790
}
8891

92+
getDescription(): string {
93+
return this.description;
94+
}
95+
8996
doReset() {
9097
this.setDescriptor(null, null);
9198
}

src/main/resources/assets/js/app/wizard/PageComponentsItemViewer.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ import {FragmentComponentView} from '../../page-editor/fragment/FragmentComponen
77
import {PageItemType} from '../../page-editor/PageItemType';
88
import {Content} from '../content/Content';
99
import {TextComponent} from '../page/region/TextComponent';
10+
import {LayoutItemType} from '../../page-editor/layout/LayoutItemType';
11+
import {PartItemType} from '../../page-editor/part/PartItemType';
12+
import {PartComponentView} from '../../page-editor/part/PartComponentView';
13+
import {LayoutComponentView} from '../../page-editor/layout/LayoutComponentView';
14+
import {PageView} from '../../page-editor/PageView';
15+
import i18n = api.util.i18n;
1016

1117
export class PageComponentsItemViewer
1218
extends api.ui.NamesAndIconViewer<ItemView> {
@@ -52,9 +58,36 @@ export class PageComponentsItemViewer
5258
}
5359
}
5460

61+
if (PageItemType.get().equals(object.getType()) ||
62+
PartItemType.get().equals(object.getType()) ||
63+
LayoutItemType.get().equals(object.getType())) {
64+
65+
return this.resolveComponentDescription(object) || '<' + i18n('text.noDescription') + '>';
66+
}
67+
5568
return object.getType() ? object.getType().getShortName() : '';
5669
}
5770

71+
resolveComponentDescription(object: ItemView): string {
72+
if (PartItemType.get().equals(object.getType())) {
73+
const partComponent = (<PartComponentView>object).getComponent();
74+
return partComponent.getDescription();
75+
}
76+
77+
if (LayoutItemType.get().equals(object.getType())) {
78+
const layoutComponent = (<LayoutComponentView>object).getComponent();
79+
return layoutComponent.getDescription();
80+
}
81+
82+
if (PageItemType.get().equals(object.getType())) {
83+
const pageController = (<PageView>object).getModel().getController();
84+
if (pageController) {
85+
return pageController.getDescription();
86+
}
87+
}
88+
return null;
89+
}
90+
5891
resolveIconUrl(object: ItemView): string {
5992
if (PageItemType.get().equals(object.getType())) {
6093
return object.getIconUrl(this.content);

src/main/resources/assets/js/app/wizard/PageComponentsTreeGrid.ts

Lines changed: 44 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,18 @@ import {LayoutItemType} from '../../page-editor/layout/LayoutItemType';
1010
import {LayoutComponentView} from '../../page-editor/layout/LayoutComponentView';
1111
import {Content} from '../content/Content';
1212
import {ContentSummaryAndCompareStatus} from '../content/ContentSummaryAndCompareStatus';
13+
import {PartItemType} from '../../page-editor/part/PartItemType';
14+
import {PartComponentView} from '../../page-editor/part/PartComponentView';
15+
import {ComponentView} from '../../page-editor/ComponentView';
16+
import {GetPartDescriptorByKeyRequest} from './page/contextwindow/inspect/region/GetPartDescriptorByKeyRequest';
17+
import {GetLayoutDescriptorByKeyRequest} from './page/contextwindow/inspect/region/GetLayoutDescriptorByKeyRequest';
1318
import GridColumnBuilder = api.ui.grid.GridColumnBuilder;
1419
import GridOptionsBuilder = api.ui.grid.GridOptionsBuilder;
1520
import TreeGrid = api.ui.treegrid.TreeGrid;
1621
import TreeNode = api.ui.treegrid.TreeNode;
1722
import TreeGridBuilder = api.ui.treegrid.TreeGridBuilder;
1823
import i18n = api.util.i18n;
24+
import Descriptor = api.content.page.Descriptor;
1925

2026
export class PageComponentsTreeGrid
2127
extends TreeGrid<ItemView> {
@@ -124,26 +130,54 @@ export class PageComponentsTreeGrid
124130
}
125131

126132
fetch(node: TreeNode<ItemView>, dataId?: string): Q.Promise<ItemView> {
127-
let deferred = wemQ.defer<ItemView>();
128133
let itemViewId = dataId ? new ItemViewId(parseInt(dataId, 10)) : node.getData().getItemId();
129-
deferred.resolve(this.pageView.getItemViewById(itemViewId));
130-
return deferred.promise;
134+
return wemQ(this.pageView.getItemViewById(itemViewId));
131135
}
132136

133137
fetchRoot(): wemQ.Promise<ItemView[]> {
134-
let deferred = wemQ.defer<ItemView[]>();
135138
if (this.pageView.getFragmentView()) {
136-
deferred.resolve([this.pageView.getFragmentView()]);
139+
return wemQ([this.pageView.getFragmentView()]);
137140
} else {
138-
deferred.resolve([this.pageView]);
141+
return wemQ([this.pageView]);
139142
}
140-
return deferred.promise;
141143
}
142144

143145
fetchChildren(parentNode: TreeNode<ItemView>): Q.Promise<ItemView[]> {
144-
let deferred = wemQ.defer<ItemView[]>();
145-
deferred.resolve(this.getDataChildren(parentNode.getData()));
146-
return deferred.promise;
146+
return wemQ.all(this.getDataChildren(parentNode.getData()).map(this.initDescriptor)).then(allItems => {
147+
return allItems;
148+
});
149+
}
150+
151+
initDescriptor(itemView: ItemView): wemQ.Promise<ItemView> {
152+
153+
let request;
154+
155+
if (PartItemType.get().equals(itemView.getType())) {
156+
const component = (<PartComponentView> itemView).getComponent();
157+
if (component) {
158+
request = new GetPartDescriptorByKeyRequest((<PartComponentView> itemView).getComponent().getDescriptor());
159+
}
160+
}
161+
if (LayoutItemType.get().equals(itemView.getType())) {
162+
const component = (<LayoutComponentView> itemView).getComponent();
163+
if (component) {
164+
request = new GetLayoutDescriptorByKeyRequest((<LayoutComponentView> itemView).getComponent().getDescriptor());
165+
}
166+
}
167+
168+
if (request) {
169+
let component = (<ComponentView<any>> itemView).getComponent();
170+
if (!component.getDescription() || component.hasDescriptor()) {
171+
request.sendAndParse().then(
172+
(receivedDescriptor: Descriptor) => {
173+
component.setDescriptor(receivedDescriptor.getKey(), receivedDescriptor);
174+
175+
return itemView;
176+
});
177+
}
178+
}
179+
180+
return wemQ(itemView);
147181
}
148182

149183
private getDataChildren(data: ItemView): ItemView[] {

0 commit comments

Comments
 (0)