fenix-ui-filter
Version:
454 lines (331 loc) • 12.9 kB
JavaScript
define([
'loglevel',
'jquery',
'underscore',
'../../../src/js/index',
'fenix-ui-filter-utils',
'dev/src/models/model-1',
'dev/src/models/all',
'dev/src/models/adam',
'dev/src/models/semantic',
'dev/src/models/fx-resource',
'dev/src/models/to-sync',
'dev/src/models/tab-table-toolbar-config',
'dev/src/models/fx-process',
'dev/src/models/aggregation',
'dev/src/models/model-2',
'dev/src/models/dependencies',
'dev/src/models/countrystat',
'dev/src/models/setSources',
'dev/src/models/amis',
'dev/src/models/time',
'dev/src/models/uneca',
'dev/src/models/countrystat-1',
'dev/src/models/countrystat-2',
'dev/src/models/countrystat-3',
'dev/src/html/model-1-base.hbs',
'dev/src/nls/labels',
'handlebars',
'bootstrap'
], function (log, $, _, Filter, Utils, Model1, AllModel, AdamModel, SemanticModel, FxResource, ModelToSync, TableTabModel, Process, AggregationModel, Model2, ModelDependencies, CountryStatModel, SetSourcesModel, AmisModel, TimeModel, UnecaModel, Countrystat1model, Countrystat2model, Countrystat3model, model1baseTemplate, i18nLabels, Handlebars) {
'use strict';
var s = {
MODEL_1_BASE: "#model-1-base",
MODEL_1_BASE_SUMMARY: "#model-1-base-summary",
MODEL_1_BTN: "#model-1-btn",
DYNAMIC_MODEL_1_BASE: "#model-1-dynamic",
DYNAMIC_MODEL_1_ADD_BTN: "#model-1-dynamic-add-btn",
DYNAMIC_MODEL_1_VALUES_BTN: "#model-1-dynamic-values-btn",
DYNAMIC_MODEL_1_CLEAR_BTN: "#model-1-dynamic-clear-btn",
DYNAMIC_MODEL_1_SUMMARY: "#model-1-dynamic-summary",
FENIX_RESOURCE: "#fenix-resource",
FENIX_RESOURCE_SUMMARY: "#fenix-resource-summary",
SYNC_SRC: "#sync-src",
SYNC_SRC_SUMMARY: "#sync-src-summary",
SYNC_TARGET: "#sync-target",
SYNC_BTN: "#sync-btn",
TABLE_TAB: "#table-tab",
TABLE_BTN: "#table-btn",
EVENT_COUNTERS: "#event-counters",
EVENT_VALUES_BTN: "#event-values-btn",
EVENT_DISPOSE: "#event-dispose",
MODEL_2: "#model2",
DEPENDENCIES: "#amis",
COUNTRYSTAT: "#countrystat",
SOURCES: "#sources",
SOURCES_BTN: "#sources-btn",
AMIS: "#amis",
AMIS_BTN: "#amis-get-values-btn",
AMIS_REMOVE_BTN: "#amis-remove-btn",
AMIS_ADD_BTN: "#amis-add-btn"
},
empty_model = {data: []},
error_model = {},
valid_model = {},
filters = [],
environment = 'demo'; //'production';
function Dev() {
this._importThirdPartyCss();
console.clear();
//trace, debug, info, warn, error, silent
log.setLevel('silent');
this.start();
}
Dev.prototype.start = function () {
log.trace("Dev started");
this._render();
};
Dev.prototype._render = function () {
//this._createConfiguration();
//this._renderModel2();
//this._renderAmis();
//this._renderDependencies();
this._renderAll();
//this._renderAdam();
return;
this._renderSetSources();
this._renderCountrystat();
this._renderEvents();
this._renderSynch();
this._renderDynamicModel1();
this._renderModel1BaseTemplate();
this._renderSynch();
};
Dev.prototype._renderDependencies = function () {
var filter = this.createFilter({
selectors: ModelDependencies,
el: s.DEPENDENCIES
});
};
Dev.prototype._renderAll = function () {
var filter = this.createFilter({
selectors: AllModel,
el: s.AMIS
});
$(s.AMIS_BTN).on("click", function () {
console.log(filter.getValues())
});
};
Dev.prototype._renderAdam = function () {
var filter = this.createFilter({
selectors: AdamModel,
el: s.AMIS
});
};
Dev.prototype._renderAmis = function () {
var filter = this.createFilter({
selectors: AmisModel,
el: s.AMIS
});
};
Dev.prototype._renderCountrystat = function () {
var filter = this.createFilter({
selectors: CountryStatModel,
el: s.COUNTRYSTAT
});
};
Dev.prototype._renderModel2 = function () {
var filter = this.createFilter({
el: s.AMIS,
lang: "FR",
selectors: Model2
}).on("ready", function (evt) {
console.log("Ready");
}).on("select", function (values) {
console.log("Select event")
//console.log(values)
}).on("change", function (values) {
console.log("Change event")
//console.log(values)
}).on("remove", function (values) {
console.log("remove event")
//console.log(values)
});
$(s.AMIS_BTN).on("click", function () {
console.log(filter.getValues())
});
$(s.AMIS_REMOVE_BTN).on("click", function () {
console.log(filter.dispose())
});
$(s.AMIS_ADD_BTN).on("click", function () {
console.log(filter.setValues({
values : {
dropdown : ["DZA", "ZAF", "Daniele"]
}
}))
});
};
Dev.prototype._createConfiguration = function () {
var configuration = Utils.createConfiguration({
model: Countrystat3model,
//model: Countrystat2model,
//model: Countrystat1model,
//model: UnecaModel,
}), model = {
selectors: this._createFilterConfiguration(configuration),
el: s.FENIX_RESOURCE,
summaryEl: s.FENIX_RESOURCE_SUMMARY
};
var filter = this.createFilter(model);
};
Dev.prototype._renderSetSources = function () {
var filter = this.createFilter({
selectors: this._createFilterConfiguration(SetSourcesModel),
el: s.SOURCES
});
$(s.SOURCES_BTN).on('click', function () {
filter.setSources({
tree: [{value: "selector_01", label: "Item 1"}, {value: "selector_02", label: "Item 2"}],
dropdown: [{value: "selector_03", label: "Item 3"}, {value: "selector_04", label: "Item 4"}],
range: [{value: "10", label: "10", parent: 'from'}, {value: "99", label: "99", parent: 'to'}],
})
});
};
Dev.prototype._renderEvents = function () {
var filterIsReady = false;
var filter = this.createFilter({
selectors: this._createFilterConfiguration(AggregationModel),
el: s.TABLE_TAB
})
.on("ready", function () {
filterIsReady = true;
incrementCount("ready");
})
.on("change", function (payload) {
if (filterIsReady !== true) {
alert("'change' event should be triggered after 'ready' event!");
}
log.info(payload);
incrementCount("change");
});
$(s.EVENT_VALUES_BTN).on('click', function () {
log.warn(filter.getValues(null, ["tree"]));
});
$(s.EVENT_DISPOSE).on('click', function () {
filter.dispose();
log.warn("Filter disposed successfully")
});
function incrementCount(event) {
var $badge = $(s.EVENT_COUNTERS)
.find("[data-event='" + event + "']").find(".badge"),
current = parseInt($badge.html()) || 0;
$badge.html(current + 1);
}
};
Dev.prototype._renderModel1BaseTemplate = function () {
log.trace("Rendering Model 1 base: start");
var templ = Handlebars.compile(model1baseTemplate);
var filter = this.createFilter({
id: s.MODEL_1_BASE,
selectors: this._createFilterConfiguration(Model1),
el: s.MODEL_1_BASE,
template: templ(i18nLabels),
summaryEl: s.MODEL_1_BASE_SUMMARY
});
$(s.MODEL_1_BTN).on('click', function () {
log.warn(filter.getValues())
});
log.trace("Rendering Model 1 base: end");
};
Dev.prototype._renderDynamicModel1 = function () {
log.trace("Rendering Dynamic Model 1 base: start");
var self = this,
filter = this.createFilter({
id: s.DYNAMIC_MODEL_1_BASE,
el: s.DYNAMIC_MODEL_1_BASE,
summaryEl: s.DYNAMIC_MODEL_1_SUMMARY
});
$(s.DYNAMIC_MODEL_1_ADD_BTN).on("click", function () {
var name = self._pickRandomProperty(Model1),
conf = {};
conf[name] = Model1[name];
filter.add(self._createFilterConfiguration(conf));
});
$(s.DYNAMIC_MODEL_1_VALUES_BTN).on("click", function () {
log.warn(filter.getValues());
});
$(s.DYNAMIC_MODEL_1_CLEAR_BTN).on("click", function () {
filter.clear();
});
log.trace("Rendering Dynamic Model 1 base: end");
};
Dev.prototype._renderSynch = function () {
log.trace("Rendering sync: start");
var Model = ModelToSync,
templ = Handlebars.compile(model1baseTemplate);
var source = this.createFilter({
id: s.SYNC_SRC,
selectors: this._createFilterConfiguration(Model),
el: s.SYNC_SRC,
//template: templ(i18nLabels),
summaryEl: s.SYNC_SRC_SUMMARY
}),
target = this.createFilter({
id: s.SYNC_TARGET,
selectors: this._createFilterConfiguration(Model),
el: s.SYNC_TARGET,
//template: templ(i18nLabels)
});
$(s.SYNC_BTN).on('click', function () {
var v = source.getValues();
log.info(v);
target.setValues(v, true);
});
log.trace("Rendering sync: end");
};
//Utils
Dev.prototype.createFilter = function (params) {
var instance = new Filter(
$.extend(true, params, {
environment: environment,
serviceProvider: "http://mav.dev/"
}));
filters.push(instance);
return instance;
};
Dev.prototype._createFilterConfiguration = function (Base) {
var self = this,
c = $.extend(true, {}, Base);
_.each(c, function (obj, name) {
self._createSelectorConfiguration(name, obj);
});
return c;
};
Dev.prototype._createSelectorConfiguration = function (name, obj) {
if (!obj.template) {
obj.template = {};
}
if (!obj.template.title) {
obj.template.title = i18nLabels["sel_heading_" + name.replace("-", "_")];
}
//Add custom class to each selector
//obj.className = "col-xs-3";
_.each(obj.selectors, function (tab, n) {
tab.label = i18nLabels["sel_tab_" + n.replace("-", "_")];
});
};
Dev.prototype._pickRandomProperty = function (obj) {
var result;
var count = 0;
for (var prop in obj)
if (Math.random() < 1 / ++count)
result = prop;
return result;
};
// utils
Dev.prototype._importThirdPartyCss = function () {
//Bootstrap
require('bootstrap/dist/css/bootstrap.css');
//dropdown selector
require("../../../node_modules/selectize/dist/css/selectize.bootstrap3.css");
//tree selector
require("../../../node_modules/jstree/dist/themes/default/style.min.css");
//range selector
require("../../../node_modules/ion-rangeslider/css/ion.rangeSlider.css");
//require("../../../node_modules/ion-rangeslider/css/ion.rangeSlider.skinHTML5.css");
//time selector
require("../../../node_modules/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css");
};
return new Dev();
})
;