Sieve filters (interface)

This commit is contained in:
RainLoop Team 2015-01-22 00:15:40 +04:00
parent 68cc322bd5
commit 02ba68868f
12 changed files with 129 additions and 30 deletions

View file

@ -146,6 +146,16 @@
return false;
}
if (0 < this.conditions().length)
{
if (_.find(this.conditions(), function (oCond) {
return oCond && !oCond.verify();
}))
{
return false;
}
}
if ('' === this.actionValue())
{
if (-1 < Utils.inArray(this.actionType(), [
@ -211,6 +221,29 @@
{
this.id = Utils.pString(oItem['ID']);
this.name(Utils.pString(oItem['Name']));
this.enabled(!!oItem['Enabled']);
this.conditionsType(Utils.pString(oItem['ConditionsType']));
this.conditions([]);
if (Utils.isNonEmptyArray(oItem['Conditions']))
{
this.conditions(_.compact(_.map(oItem['Conditions'], function (aData) {
var oFilterCondition = new FilterConditionModel();
return oFilterCondition && oFilterCondition.parse(aData) ?
oFilterCondition : null;
})));
}
this.actionType(Utils.pString(oItem['ActionType']));
this.actionValue(Utils.pString(oItem['ActionValue']));
this.actionValueSecond(Utils.pString(oItem['ActionValueSecond']));
this.actionMarkAsRead(!!oItem['MarkAsRead']);
this.keepForward(!!oItem['KeepForward']);
this.actionSkipOthers(!!oItem['SkipOthers']);
bResult = true;
}

View file

@ -8,6 +8,7 @@
ko = require('ko'),
Enums = require('Common/Enums'),
Utils = require('Common/Utils'),
AbstractModel = require('Knoin/AbstractModel')
;
@ -20,8 +21,9 @@
AbstractModel.call(this, 'FilterConditionModel');
this.field = ko.observable(Enums.FilterConditionField.From);
this.type = ko.observable(Enums.FilterConditionType.EqualTo);
this.type = ko.observable(Enums.FilterConditionType.Contains);
this.value = ko.observable('');
this.value.error = ko.observable(false);
this.template = ko.computed(function () {
@ -42,6 +44,31 @@
_.extend(FilterConditionModel.prototype, AbstractModel.prototype);
FilterConditionModel.prototype.verify = function ()
{
if ('' === this.value())
{
this.value.error(true);
return false;
}
return true;
};
FilterConditionModel.prototype.parse = function (oItem)
{
if (oItem && oItem['Field'] && oItem['Type'])
{
this.field(Utils.pString(oItem['Field']));
this.type(Utils.pString(oItem['Type']));
this.value(Utils.pString(oItem['Value']));
return true;
}
return false;
};
FilterConditionModel.prototype.toJson = function ()
{
return {

View file

@ -5,6 +5,7 @@
var
ko = require('ko'),
_ = require('_'),
Enums = require('Common/Enums'),
Utils = require('Common/Utils'),
@ -80,11 +81,33 @@
FiltersUserSettings.prototype.updateList = function ()
{
var self = this;
var
self = this,
FilterModel = require('Model/Filter')
;
this.filters.loading(true);
Remote.filtersGet(function (sResult, oData) {
self.filters.loading(false);
if (Enums.StorageResultType.Success === sResult && oData &&
oData.Result && Utils.isArray(oData.Result))
{
var aResult = _.compact(_.map(oData.Result, function (aItem) {
var oNew = new FilterModel();
return (oNew && oNew.parse(aItem)) ? oNew : null;
}));
self.filters(aResult);
}
else
{
self.filters([]);
}
self.haveChanges(false);
});
};
@ -121,16 +144,16 @@
require('View/Popup/Filter'), [oCloned, function () {
var
oFilters = self.filters(),
iIndex = oFilters.indexOf(oEdit)
aFilters = self.filters(),
iIndex = aFilters.indexOf(oEdit)
;
if (-1 < iIndex && oFilters[iIndex])
if (-1 < iIndex && aFilters[iIndex])
{
Utils.delegateRunOnDestroy(oFilters[iIndex]);
oFilters[iIndex] = oCloned;
Utils.delegateRunOnDestroy(aFilters[iIndex]);
aFilters[iIndex] = oCloned;
self.filters(oFilters);
self.filters(aFilters);
self.haveChanges(true);
}

View file

@ -7,8 +7,6 @@
_ = require('_'),
ko = require('ko'),
Utils = require('Common/Utils'),
Settings = require('Storage/Settings'),
Data = require('Storage/Admin/Data'),
Remote = require('Storage/Admin/Remote'),

View file

@ -7,7 +7,6 @@
_ = require('_'),
ko = require('ko'),
Consts = require('Common/Consts'),
Enums = require('Common/Enums'),
Utils = require('Common/Utils'),
@ -119,6 +118,11 @@
this.fTrueCallback = fTrueCallback;
this.filter(oFilter);
if (oFilter)
{
this.selectedFolderValue(oFilter.actionValue());
}
this.isNew(!bEdit);
if (!bEdit && oFilter)