list view select only attributes from layout

This commit is contained in:
yuri
2018-06-18 13:23:35 +03:00
parent 7897272f65
commit efd5ccfa96
12 changed files with 209 additions and 85 deletions
@@ -213,6 +213,10 @@ class Record extends Base
if ($request->get('filterList')) {
$params['filterList'] = $request->get('filterList');
}
if ($request->get('select')) {
$params['select'] = explode(',', $request->get('select'));
}
}
public function actionListLinked($params, $data, $request)
+56 -6
View File
@@ -99,6 +99,8 @@ class Record extends \Espo\Core\Services\Base
protected $selectAttributeList = null;
protected $mandatorySelectAttributeList = [];
const MAX_SELECT_TEXT_ATTRIBUTE_LENGTH = 5000;
const FOLLOWERS_LIMIT = 4;
@@ -902,7 +904,7 @@ class Record extends \Espo\Core\Services\Base
$selectParams['maxTextColumnsLength'] = $this->getMaxSelectTextAttributeLength();
$selectAttributeList = $this->getSelectAttributeList();
$selectAttributeList = $this->getSelectAttributeList($params);
if ($selectAttributeList) {
$selectParams['select'] = $selectAttributeList;
} else {
@@ -959,7 +961,7 @@ class Record extends \Espo\Core\Services\Base
$selectParams['maxTextColumnsLength'] = $this->getMaxSelectTextAttributeLength();
$selectAttributeList = $this->getSelectAttributeList();
$selectAttributeList = $this->getSelectAttributeList($params);
if ($selectAttributeList) {
$selectParams['select'] = $selectAttributeList;
} else {
@@ -1110,7 +1112,7 @@ class Record extends \Espo\Core\Services\Base
$selectParams['maxTextColumnsLength'] = $recordService->getMaxSelectTextAttributeLength();
$selectAttributeList = $recordService->getSelectAttributeList();
$selectAttributeList = $recordService->getSelectAttributeList($params);
if ($selectAttributeList) {
$selectParams['select'] = $selectAttributeList;
} else {
@@ -2114,9 +2116,57 @@ class Record extends \Espo\Core\Services\Base
return $this->getFieldManagerUtil()->getFieldByTypeList($this->entityType, $type);
}
public function getSelectAttributeList()
public function getSelectAttributeList($params)
{
return $this->selectAttributeList;
if ($this->selectAttributeList) {
return $this->selectAttributeList;
}
$seed = $this->getEntityManager()->getEntity($this->getEntityType());
if (array_key_exists('select', $params)) {
$passedAttributeList = $params['select'];
} else {
$passedAttributeList = null;
}
if ($passedAttributeList) {
$attributeList = [];
if (!in_array('id', $passedAttributeList)) {
$attributeList[] = 'id';
}
$aclAttributeList = ['assignedUserId', 'createdById'];
foreach ($aclAttributeList as $attribute) {
if (!in_array($attribute, $passedAttributeList) && $seed->hasAttribute($attribute)) {
$attributeList[] = $attribute;
}
}
foreach ($passedAttributeList as $attribute) {
if ($seed->hasAttribute($attribute)) {
$attributeList[] = $attribute;
}
}
if (!empty($params['sortBy'])) {
$sortByField = $params['sortBy'];
$sortByFieldType = $this->getMetadata()->get(['entityDefs', $this->getEntityType(), 'fields', $sortByField, 'type']);
if ($sortByFieldType === 'currency') {
$attributeList[] = $sortByField . 'Converted';
}
}
foreach ($this->mandatorySelectAttributeList as $attribute) {
if ($seed->hasAttribute($attribute)) {
$attributeList[] = $attribute;
}
}
return $attributeList;
}
return null;
}
}
+2 -2
View File
@@ -784,13 +784,13 @@ var Bull = Bull || {};
options.el = this.getSelector() + ' [data-view="'+key+'"]';
}
this._factory.create(viewName, options, function (view) {
if (this._isRendered) {
if (this._isRendered || options.setViewBeforeCallback) {
this.setView(key, view);
}
if (typeof callback === 'function') {
callback.call(context, view);
}
if (!this._isRendered) {
if (!this._isRendered && !options.setViewBeforeCallback) {
this.setView(key, view);
}
}.bind(this));
@@ -148,20 +148,23 @@ Espo.define('crm:views/record/panels/tasks', 'views/record/panels/relationship',
var rowActionsView = 'crm:views/record/row-actions/tasks';
this.listenToOnce(this.collection, 'sync', function () {
this.createView('list', 'views/record/list-expanded', {
el: this.getSelector() + ' > .list-container',
pagination: false,
type: 'listRelationship',
rowActionsView: rowActionsView,
checkboxes: false,
collection: collection,
listLayout: this.listLayout,
}, function (view) {
view.render();
});
}.bind(this));
this.collection.fetch();
this.createView('list', 'views/record/list-expanded', {
el: this.getSelector() + ' > .list-container',
pagination: false,
type: 'listRelationship',
rowActionsView: rowActionsView,
checkboxes: false,
collection: collection,
listLayout: this.listLayout,
skipBuildRows: true
}, function (view) {
view.getSelectAttributeList(function (selectAttributeList) {
if (selectAttributeList) {
this.collection.data.select = selectAttributeList.join(',');
}
this.collection.fetch();
}.bind(this));
});
}, this);
},
@@ -99,22 +99,24 @@ Espo.define('views/dashlets/abstract/record-list', ['views/dashlets/abstract/bas
var viewName = this.listView || ((this.layoutType == 'expanded') ? this.listViewExpanded : this.listViewColumn);
this.listenToOnce(collection, 'sync', function () {
this.createView('list', viewName, {
collection: collection,
el: this.getSelector() + ' .list-container',
pagination: this.getOption('pagination') ? 'bottom' : false,
type: 'listDashlet',
rowActionsView: this.rowActionsView,
checkboxes: false,
showMore: true,
listLayout: this.getOption(this.layoutType + 'Layout')
}, function (view) {
view.render();
});
}, this);
collection.fetch();
this.createView('list', viewName, {
collection: collection,
el: this.getSelector() + ' .list-container',
pagination: this.getOption('pagination') ? 'bottom' : false,
type: 'listDashlet',
rowActionsView: this.rowActionsView,
checkboxes: false,
showMore: true,
listLayout: this.getOption(this.layoutType + 'Layout'),
skipBuildRows: true
}, function (view) {
view.getSelectAttributeList(function (selectAttributeList) {
if (selectAttributeList) {
collection.data.select = selectAttributeList.join(',');
}
collection.fetch();
}.bind(this));
});
}, this);
},
+11 -8
View File
@@ -300,9 +300,7 @@ Espo.define('views/list', ['views/main', 'search-manager'], function (Dep, Searc
this.createListRecordView(false);
} else {
Espo.Ui.notify(this.translate('loading', 'messages'));
this.collection.fetch().then(function () {
this.createListRecordView();
}.bind(this));
this.createListRecordView(true);
}
},
@@ -312,7 +310,8 @@ Espo.define('views/list', ['views/main', 'search-manager'], function (Dep, Searc
var o = {
collection: this.collection,
el: this.options.el + ' .list-container',
scope: this.scope
scope: this.scope,
skipBuildRows: true
};
this.optionsToPass.forEach(function (option) {
o[option] = this.options[option];
@@ -328,8 +327,6 @@ Espo.define('views/list', ['views/main', 'search-manager'], function (Dep, Searc
return;
}
view.render();
this.listenToOnce(view, 'after:render', function () {
if (!this.hasParentView()) {
view.undelegateEvents();
@@ -343,10 +340,16 @@ Espo.define('views/list', ['views/main', 'search-manager'], function (Dep, Searc
this.getStorage().set('listSorting', this.collection.name, obj);
}, this);
}
if (fetch) {
setTimeout(function () {
view.getSelectAttributeList(function (selectAttributeList) {
if (selectAttributeList) {
this.collection.data.select = selectAttributeList.join(',');
}
this.collection.fetch();
}.bind(this), 2000);
}.bind(this));
} else {
view.render();
}
});
},
+23 -18
View File
@@ -180,26 +180,31 @@ Espo.define('views/modals/select-records', ['views/modal', 'search-manager'], fu
this.getMetadata().get('clientDefs.' + this.scope + '.recordViews.list') ||
'views/record/list';
this.listenToOnce(this.collection, 'sync', function () {
this.createView('list', viewName, {
collection: this.collection,
el: this.containerSelector + ' .list-container',
selectable: true,
checkboxes: this.multiple,
massActionsDisabled: true,
rowActionsView: false,
layoutName: 'listSmall',
searchManager: this.searchManager,
checkAllResultDisabled: !this.massRelateEnabled,
buttonsDisabled: true
}, function (view) {
view.once('select', function (model) {
this.trigger('select', model);
this.close();
}.bind(this));
this.createView('list', viewName, {
collection: this.collection,
el: this.containerSelector + ' .list-container',
selectable: true,
checkboxes: this.multiple,
massActionsDisabled: true,
rowActionsView: false,
layoutName: 'listSmall',
searchManager: this.searchManager,
checkAllResultDisabled: !this.massRelateEnabled,
buttonsDisabled: true,
skipBuildRows: true
}, function (view) {
view.once('select', function (model) {
this.trigger('select', model);
this.close();
}.bind(this));
}.bind(this));
view.getSelectAttributeList(function (selectAttributeList) {
if (selectAttributeList) {
this.collection.data.select = selectAttributeList.join(',');
}
this.collection.fetch();
}.bind(this));
});
},
create: function () {
+2 -1
View File
@@ -416,7 +416,8 @@ Espo.define('views/record/kanban', ['views/record/list'], function (Dep) {
el: this.getSelector() + ' .item[data-id="'+model.id+'"]',
itemLayout: this.listLayout,
rowActionsDisabled: this.rowActionsDisabled,
rowActionsView: this.rowActionsView
rowActionsView: this.rowActionsView,
setViewBeforeCallback: this.options.skipBuildRows && !this.isRendered()
}, callback);
},
+18 -2
View File
@@ -153,7 +153,23 @@ Espo.define('views/record/list-expanded', 'views/record/list', function (Dep) {
}
},
fetchAttributeListFromLayout: function () {
var list = [];
if (this.listLayout.rows) {
this.listLayout.rows.forEach(function (row) {
row.forEach(function (item) {
if (!item.name) return;
var field = item.name;
var fieldType = this.getMetadata().get(['entityDefs', this.scope, 'fields', field, 'type']);
if (!fieldType) return;
this.getFieldManager().getAttributeList(fieldType, field).forEach(function (attribute) {
list.push(attribute);
}, this);
}, this);
}, this);
}
return list;
}
});
});
+2 -1
View File
@@ -180,7 +180,8 @@ Espo.define('views/record/list-tree', 'views/record/list', function (Dep) {
level: this.level,
isSelected: model.id == this.selectedData.id,
selectedData: this.selectedData,
selectable: this.selectable
selectable: this.selectable,
setViewBeforeCallback: this.options.skipBuildRows && !this.isRendered()
}, function () {
built++;
if (built == count) {
+39 -3
View File
@@ -805,7 +805,9 @@ Espo.define('views/record/list', 'view', function (Dep) {
}, this);
this.checkedList = [];
this.buildRows();
if (!this.options.skipBuildRows) {
this.buildRows();
}
},
afterRender: function () {
@@ -868,6 +870,40 @@ Espo.define('views/record/list', 'view', function (Dep) {
}.bind(this));
},
getSelectAttributeList: function (callback) {
if (this.scope == null || this.rowHasOwnLayout) {
callback(null);
return;
}
if (this.listLayout) {
var attributeList = this.fetchAttributeListFromLayout();
callback(attributeList);
return;
} else {
this._loadListLayout(function (listLayout) {
this.listLayout = listLayout;
var attributeList = this.fetchAttributeListFromLayout();
callback(attributeList);
}.bind(this));
return;
}
},
fetchAttributeListFromLayout: function () {
var list = [];
this.listLayout.forEach(function (item) {
if (!item.name) return;
var field = item.name;
var fieldType = this.getMetadata().get(['entityDefs', this.scope, 'fields', field, 'type']);
if (!fieldType) return;
this.getFieldManager().getAttributeList(fieldType, field).forEach(function (attribute) {
list.push(attribute);
}, this);
}, this);
return list;
},
_getHeaderDefs: function () {
var defs = [];
@@ -1103,7 +1139,8 @@ Espo.define('views/record/list', 'view', function (Dep) {
type: this._internalLayoutType,
layout: internalLayout
},
name: this.type + '-' + model.name
name: this.type + '-' + model.name,
setViewBeforeCallback: this.options.skipBuildRows && !this.isRendered()
}, callback);
}.bind(this), model);
},
@@ -1424,4 +1461,3 @@ Espo.define('views/record/list', 'view', function (Dep) {
}
});
});
+17 -14
View File
@@ -186,20 +186,23 @@ Espo.define('views/record/panels/relationship', ['views/record/panels/bottom', '
var viewName = this.defs.recordListView || this.getMetadata().get('clientDefs.' + this.scope + '.recordViews.list') || 'Record.List';
this.once('after:render', function () {
collection.once('sync', function () {
this.createView('list', viewName, {
collection: collection,
layoutName: layoutName,
listLayout: listLayout,
checkboxes: false,
rowActionsView: this.defs.readOnly ? false : (this.defs.rowActionsView || this.rowActionsView),
buttonsDisabled: true,
el: this.options.el + ' .list-container',
}, function (view) {
view.render();
});
}, this);
collection.fetch();
this.createView('list', viewName, {
collection: collection,
layoutName: layoutName,
listLayout: listLayout,
checkboxes: false,
rowActionsView: this.defs.readOnly ? false : (this.defs.rowActionsView || this.rowActionsView),
buttonsDisabled: true,
el: this.options.el + ' .list-container',
skipBuildRows: true
}, function (view) {
view.getSelectAttributeList(function (selectAttributeList) {
if (selectAttributeList) {
collection.data.select = selectAttributeList.join(',');
}
collection.fetch();
}.bind(this));
});
}, this);
this.wait(false);