Skip to content

Commit

Permalink
Merge branch 'pu/cw/fixSitesFiltering' into 'main'
Browse files Browse the repository at this point in the history
fix(Tinebase) filtering for empty foreign records not working

See merge request tine20/tine20!6634
  • Loading branch information
corneliusweiss committed Feb 25, 2025
2 parents 7fbf86b + 22f1902 commit e5e1c1b
Showing 1 changed file with 16 additions and 5 deletions.
21 changes: 16 additions & 5 deletions tine20/Tinebase/js/widgets/grid/ForeignRecordFilter.js
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,7 @@ Tine.widgets.grid.ForeignRecordFilter = Ext.extend(Tine.widgets.grid.FilterModel

var operator = filter.get('operator') || filter.formFields.operator.origGetValue(),
registeredOperator = _.get(_.find(this.operators, function(o) { return _.get(o, 'operator.filterName') == operator;}), 'operator', false);
let [op, options] = me.parseOperator(filter.get('operator'));

if (registeredOperator) {
value.push({
Expand All @@ -318,8 +319,6 @@ Tine.widgets.grid.ForeignRecordFilter = Ext.extend(Tine.widgets.grid.FilterModel
});
} else {
// get value for idField if our own operator is not definedBy

let [op, options] = me.parseOperator(filter.get('operator'));
let opMap = {
not: 'equals', // we auto switch definedBy to notDefinedBy for not filters
notin: 'in', // we auto switch definedBy to notDefinedBy for notin filters
Expand All @@ -344,10 +343,14 @@ Tine.widgets.grid.ForeignRecordFilter = Ext.extend(Tine.widgets.grid.FilterModel
}, this);
}
if (this.crossRecordClass) {
value = [{'field': this.crossRecordForeignField, operator: 'definedBy?condition=and&setOperator=one0f', value: value}]
value = [{'field': this.crossRecordForeignField, operator: 'definedBy?condition=and&setOperator=oneOf', value: value}]
} else if (this.metaDataForField && operator !== 'definedBy') {
value = [{'field': this.metaDataForField, operator: 'definedBy?condition=and&setOperator=one0f', value: value}]
value = [{'field': this.metaDataForField, operator: 'definedBy?condition=and&setOperator=oneOf', value: value}]
}
if ((me.crossRecordClass || me.metaDataForField) && op !== 'definedBy' && !filter.formFields.value.value) {
value = null;
}

}

return value;
Expand All @@ -366,7 +369,11 @@ Tine.widgets.grid.ForeignRecordFilter = Ext.extend(Tine.widgets.grid.FilterModel

if (isRegisteredOperator || ['equals', 'not', 'in', 'notin', 'allOf'].indexOf(operator) >= 0) {
// NOTE: if setValue got called in the valueField internally, value is arguments[1] (createCallback)
return filter.formFields.value.origSetValue(arguments.length ? arguments[1] : value);
value = arguments.length ? arguments[1] : value;
if ((me.crossRecordClass || me.metaDataForField) && _.isArray(value) && ! value.length) {
value = '';
}
return filter.formFields.value.origSetValue(value);
}

// generic: choose right operator : appname -> generic filters have no subfilters an if one day, no left hand once!
Expand Down Expand Up @@ -609,6 +616,10 @@ Tine.widgets.grid.ForeignRecordFilter = Ext.extend(Tine.widgets.grid.FilterModel
allOf: 'definedBy?condition=and&setOperator=allOf'
};

if ((me.crossRecordClass || me.metaDataForField) && op !== 'definedBy' && !filter.formFields.value.value) {
return op;
}

if (_.isFunction(me.getCustomOperators)) {
me.getCustomOperators().map((def) => {
opMap[def.operator] = def.opValue || def.operator;
Expand Down

0 comments on commit e5e1c1b

Please sign in to comment.