Skip to content

Commit 0fbdc28

Browse files
committed
Allow nested property names
1 parent 6dcfb9c commit 0fbdc28

File tree

3 files changed

+36
-6
lines changed

3 files changed

+36
-6
lines changed

demo/paper-datatable/playground.html

+27-4
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,17 @@
5555
</template>
5656
</paper-datatable-column>
5757
</paper-datatable>
58-
</paper-card>
58+
</paper-card>
59+
60+
<paper-card>
61+
<paper-datatable data="{{data}}" selectable>
62+
<paper-datatable-column header="Dessert (100g serving)" property="title" type="String" tooltip="Some title" sortable> </paper-datatable-column>
63+
<paper-datatable-column header="Object a" property="complexObj.a" tooltip="The total amount of..." sortable>
64+
</paper-datatable-column>
65+
<paper-datatable-column header="Object b" property="complexObj.b" tooltip="The total amount of..." sortable>
66+
</paper-datatable-column>
67+
</paper-datatable>
68+
</paper-card>
5969

6070
<paper-card>
6171
<paper-datatable data="{{data}}" selectable multi-selection>
@@ -81,6 +91,18 @@
8191
</template>
8292
</template>
8393
</paper-datatable-column>
94+
<paper-datatable-column header="Object Single element" property="complexObj.b" tooltip="The total amount of..." sortable>
95+
<template>
96+
<paper-input value="{{value}}"></paper-input>
97+
</template>
98+
</paper-datatable-column>
99+
<paper-datatable-column header="Very Complexe Object" property="veryComplexObj.a.x" tooltip="The total amount of..." sortable>
100+
<template>
101+
<template is="dom-repeat" items="{{value}}" as="valueItem">
102+
<paper-input value="{{valueItem}}"></paper-input>
103+
</template>
104+
</template>
105+
</paper-datatable-column>
84106
</paper-datatable>
85107
</paper-card>
86108

@@ -93,6 +115,7 @@
93115
<paper-datatable-column header="Complex Array" property="complexArr" type="Array" array-display-prop="title"></paper-datatable-column>
94116
<paper-datatable-column id="dateTest" header="Created" property="created" type="Date" sortable format-value="{{formatDate}}"></paper-datatable-column>
95117
<paper-datatable-column id="dateTest" header="Created" property="created" type="Date" sortable></paper-datatable-column>
118+
</paper-datatable-column>
96119
</paper-datatable>
97120
</paper-card>
98121

@@ -109,9 +132,9 @@
109132
return this.get(path);
110133
};
111134
app.data = [
112-
{title: 'Ice cream', yummy: true, calories: 2000, complexObj: {a: 'b', b: 'd'}, arr: [2,3,4], complexArr: [{title:'b'}, {title:'c'}], created: new Date(1447315235838)},
113-
{title: 'Dessert', yummy: true, calories: 3000, complexObj: {a: 'bb', b: 'dd'}, arr: [5,6], complexArr: [{title:'b'}, {title:'c'}], created: new Date(1447155235838)},
114-
{title: 'Cake', yummy: false, calories: 4000, complexObj: {a: 'cc', b: 'gg'}, arr: [7,8], complexArr: [{title:'b'}, {title:'c'}], created: new Date(1447355135838)}
135+
{title: 'Ice cream', yummy: true, calories: 2000, veryComplexObj: {a: {x: ['b', 'c']}}, complexObj: {a: 'b', b: 'd'}, arr: [2,3,4], complexArr: [{title:'b'}, {title:'c'}], created: new Date(1447315235838)},
136+
{title: 'Dessert', yummy: true, calories: 3000, veryComplexObj: {a: {x: ['b', 'c']}}, complexObj: {a: 'bb', b: 'dd'}, arr: [5,6], complexArr: [{title:'b'}, {title:'c'}], created: new Date(1447155235838)},
137+
{title: 'Cake', yummy: false, calories: 4000, veryComplexObj: {a: {x: ['b', 'c']}}, complexObj: {a: 'cc', b: 'gg'}, arr: [7,8], complexArr: [{title:'b'}, {title:'c'}], created: new Date(1447355135838)}
115138
];
116139
app.log = function(ev){
117140
console.info('event', ev.type, 'on', ev.target, 'with detail', ev.detail);

paper-datatable-column.html

+6-2
Original file line numberDiff line numberDiff line change
@@ -286,10 +286,14 @@
286286
},
287287

288288
_createCellInstance: function(model, notificationKey){
289-
if(typeof model[this.property] == 'undefined' && typeof this.default !== 'undefined'){
289+
var modelDefined = model[this.property];
290+
if (!modelDefined && this.property) {
291+
this.property.split('.').forEach(key => modelDefined = modelDefined ? modelDefined[key] : model[key]);
292+
}
293+
if(modelDefined == 'undefined' && typeof this.default !== 'undefined'){
290294
var instance = this.stamp({item: model, column:this, value: this.default, _dataKey: notificationKey});
291295
}else{
292-
var instance = this.stamp({item: model, column:this, value: model[this.property], _dataKey: notificationKey});
296+
var instance = this.stamp({item: model, column:this, value: modelDefined, _dataKey: notificationKey});
293297
}
294298
return instance;
295299
},

paper-datatable.html

+3
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,9 @@
601601
cell.removeAttribute('data-empty');
602602
var prop = cell.dataColumn.property;
603603
var data = rowData[prop];
604+
if (!data && prop) {
605+
prop.split('.').forEach(key => data = data ? data[key] : rowData[key]);
606+
}
604607

605608
cell.setAttribute('data-row-key', row.dataset.key);
606609
cell.dataBoundColumn = cell.dataColumn;

0 commit comments

Comments
 (0)