Skip to content

Commit cf2d0ca

Browse files
committed
grid.column.Base: renderer => allow string based value to map into a parent view controller #6638
1 parent 315f84e commit cf2d0ca

5 files changed

Lines changed: 33 additions & 20 deletions

File tree

examples/grid/nestedRecordFields/Viewport.mjs

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class Viewport extends BaseViewport {
6060
{dataField: 'user.lastname', text: 'Lastname'},
6161
{dataField: 'githubId', text: 'Github Id'},
6262
{dataField: 'date', text: 'Date'},
63-
{dataField: 'country', text: 'Country', renderer: 'up.countryRenderer'},
63+
{dataField: 'country', text: 'Country', renderer: 'countryRenderer'},
6464
{dataField: 'edit', text: 'Edit Action', component: {
6565
module : Button,
6666
handler: 'editButtonHandler',
@@ -73,19 +73,6 @@ class Viewport extends BaseViewport {
7373
}
7474
}]
7575
}
76-
77-
/**
78-
* @param {Object} data
79-
*/
80-
countryRenderer({gridContainer, record}) {
81-
let countryStore = gridContainer.getStateProvider().getStore('countries');
82-
83-
if (countryStore.getCount() > 0) {
84-
return countryStore.get(record.country).name
85-
}
86-
87-
return ''
88-
}
8976
}
9077

9178
export default Neo.setupClass(Viewport);

examples/grid/nestedRecordFields/ViewportController.mjs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,19 @@ class ViewportController extends Component {
1818
*/
1919
dialog = null
2020

21+
/**
22+
* @param {Object} data
23+
*/
24+
countryRenderer({gridContainer, record}) {
25+
let countryStore = gridContainer.getStateProvider().getStore('countries');
26+
27+
if (countryStore.getCount() > 0) {
28+
return countryStore.get(record.country).name
29+
}
30+
31+
return ''
32+
}
33+
2134
/**
2235
* @param {Object} data
2336
*/

src/controller/Component.mjs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,10 +167,10 @@ class Component extends Base {
167167
*/
168168
parseConfig(component=this.component) {
169169
let me = this,
170-
{handler, listeners, reference, validator} = component,
170+
{handler, listeners, reference, renderer, validator} = component,
171171
eventHandler, handlerScope;
172172

173-
if (handler && typeof handler === 'string') {
173+
if (handler && Neo.isString(handler)) {
174174
handlerScope = me.getHandlerScope(handler, component);
175175

176176
// If the handler name was not resolved in the Component itself, bind it
@@ -192,7 +192,7 @@ class Component extends Base {
192192
listeners[key].fn = handlerScope[eventHandler].bind(handlerScope)
193193
}
194194
} else {
195-
value.forEach(listener => {
195+
value?.forEach?.(listener => {
196196
if (Neo.isObject(listener) && listener.hasOwnProperty('fn') && Neo.isString(listener.fn)) {
197197
eventHandler = listener.fn;
198198
handlerScope = me.getHandlerScope(eventHandler, component);
@@ -208,7 +208,17 @@ class Component extends Base {
208208
}
209209
});
210210

211-
if (Neo.isString(validator)) {
211+
if (renderer && Neo.isString(renderer)) {
212+
handlerScope = me.getHandlerScope(renderer);
213+
214+
if (!handlerScope) {
215+
Logger.logError('Unknown renderer for', component.id, component)
216+
} else {
217+
component.renderer = handlerScope[renderer].bind(handlerScope)
218+
}
219+
}
220+
221+
if (validator && Neo.isString(validator)) {
212222
handlerScope = me.getHandlerScope(validator);
213223

214224
if (!handlerScope) {

src/grid/Container.mjs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,9 @@ class GridContainer extends BaseContainer {
459459
parent : me,
460460
windowId: me.windowId,
461461
...column
462-
})
462+
});
463+
464+
me.getController()?.parseConfig(columns[index])
463465
});
464466

465467
me.items[0].items = headerButtons;

src/grid/column/Base.mjs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ class Column extends Base {
5959
* @protected
6060
*/
6161
beforeSetRenderer(value, oldValue) {
62-
return resolveCallback(value, this).fn
62+
// If no fn is found inside the parent tree, return the plain value for view controllers to match
63+
return resolveCallback(value, this).fn || value
6364
}
6465

6566
/**

0 commit comments

Comments
 (0)