/*
* Copyright 2019 Anyware Services
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* This step of {@link Ametys.plugins.web.page.AddPageWizard} wizard allow to select tags in a simplified way, displaying only a list of combo-box instead of the tree.
*/
Ext.define("Ametys.plugins.web.page.AddPageWizard.TagsCardLite", {
extend: "Ametys.plugins.web.page.AddPageWizard.TagsCard",
resetModel: function (callback)
{
this._model = {};
this._model["tags"] = Ametys.plugins.web.page.AddPageWizard.getInitialConfig('default-tags') || [];
this._tagsNameFilter = Ametys.plugins.web.page.AddPageWizard.getInitialConfig('pagecontent-card-tags-categories-filter') || [];
callback();
},
updateModel: function ()
{
var selectedTags = [];
var currentTreePanel = Ext.getCmp("add-page-tags-card-treepanel");
for (var i = 0; i < currentTreePanel.items.items.length; i++)
{
selectedTags = selectedTags.concat(currentTreePanel.items.items[i].getValue());
}
this._model['tags'] = selectedTags;
},
onEnter: function()
{
this._loading = true;
var fullModel = Ametys.plugins.web.page.AddPageWizard.getModel();
var tagsFilter = this.getTagsFilters(fullModel);
var targetType = this.getTargetType(fullModel);
var hierarchySeparator = Ametys.plugins.web.page.AddPageWizard.getInitialConfig('pagecontent-card-tags-categories-filter-hierarchy-separator');
var showCategories = !Ametys.plugins.web.page.AddPageWizard.getInitialConfig('pagecontent-card-tags-categories-filter-only-subcategories');
Ametys.data.ServerComm.callMethod({
role: "org.ametys.web.repository.page.AddPageWizardHelper",
methodName: "getTags",
parameters: [this._tagsNameFilter, tagsFilter, targetType, showCategories, hierarchySeparator, Ametys.getAppParameters()],
callback: {
handler: this._onLoad,
scope: this
},
waitMessage: false,
errorMessage: true
});
if (!this.shouldDisplayCard())
{
this._cardPanel.hide();
}
},
/**
* Listener on load of record
* @param {Object[]} tags list of tags and sub-tags to display
*/
_onLoad: function (tags)
{
this._loading = false;
this._tagsList = tags;
this.updateUI();
Ametys.plugins.web.page.AddPageWizard._onChange();
},
updateUI: function (callback)
{
var values = this._model['tags']
|| Ametys.plugins.web.page.AddPageWizard.getInitialConfig('default-tags')
|| Ametys.plugins.web.page.AddPageWizard.getInitialConfig('default-selected-tags')
|| [];
var currentTreePanel = Ext.getCmp("add-page-tags-card-treepanel");
var treeOwnerCt = currentTreePanel.ownerCt;
var treePosition = treeOwnerCt.items.indexOf(currentTreePanel);
var childrens = [];
if (this._tagsList != null)
{
for (var i = 0; i < this._tagsList.length; i++)
{
var combo = this.generateAList(this._tagsList[i]);
combo.setValue(values);
childrens.push(combo);
}
}
currentTreePanel.destroy();
var tagsTree = Ext.create('Ext.container.Container', {
flex: 1,
id: "add-page-tags-card-treepanel",
defaults: {
xtype: 'textfield',
cls: 'ametys',
msgTarget: 'side',
labelAlign: 'top',
labelSeparator: '',
labelStyle: 'font-weight: bold',
labelWidth: 130,
maxWidth: 470,
width: '100%'
},
items: childrens
});
treeOwnerCt.insert(treePosition, tagsTree);
if (Ext.isFunction(callback))
{
callback(true);
}
},
isModelOk: function (fullModel)
{
return !this._loading;
},
generateAList: function(tagObject)
{
return Ext.create('Ext.form.field.Tag', {
fieldLabel: tagObject.title,
store: {
fields: [
{name: 'title', type: 'string'},
{name: 'name', type: 'string'}
],
data: tagObject.tags,
sorters: ['title']
},
displayField: 'title',
valueField: 'name',
queryMode: 'local',
filterPickList: false,
listeners: {
'change': Ext.bind(this.updateModel, this),
'keyup': Ext.bind(this.updateModel, this)
}
});
}
});