Skip to content

Commit 930502c

Browse files
authored
Merge pull request #2572 from nextcloud/feature/add-is-not-empty-filter
feat: add is not empty filter support
2 parents e36d365 + ae39ba8 commit 930502c

21 files changed

Lines changed: 72 additions & 17 deletions

lib/Constants/FilterOperator.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ enum FilterOperator: string {
2020
case IS_LESS_THAN = 'is-lower-than';
2121
case IS_LESS_THAN_OR_EQUAL = 'is-lower-than-or-equal';
2222
case IS_EMPTY = 'is-empty';
23+
case IS_NOT_EMPTY = 'is-not-empty';
2324
}

lib/Db/Row2Mapper.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -564,10 +564,31 @@ private function getFilterExpression(IQueryBuilder $qb, Column $column, string $
564564
$qb->expr()->isNull('value'),
565565
$qb->expr()->eq('value', $qb->createNamedParameter('', $paramType))
566566
);
567+
} elseif ($column->getType() === 'selection' && $column->getSubtype() === 'multi') {
568+
$filterExpression = $qb2->expr()->orX(
569+
$qb->expr()->isNull('value'),
570+
$qb->expr()->eq('value', $qb->createNamedParameter('[]', $paramType))
571+
);
567572
} else {
568573
$filterExpression = $qb->expr()->isNull('value');
569574
}
570575
break;
576+
case 'is-not-empty':
577+
$includeDefault = !empty($defaultValue);
578+
if ($column->getType() === Column::TYPE_TEXT) {
579+
$filterExpression = $qb2->expr()->andX(
580+
$qb->expr()->isNotNull('value'),
581+
$qb->expr()->neq('value', $qb->createNamedParameter('', $paramType))
582+
);
583+
} elseif ($column->getType() === 'selection' && $column->getSubtype() === 'multi') {
584+
$filterExpression = $qb2->expr()->andX(
585+
$qb->expr()->isNotNull('value'),
586+
$qb->expr()->neq('value', $qb->createNamedParameter('[]', $paramType))
587+
);
588+
} else {
589+
$filterExpression = $qb->expr()->isNotNull('value');
590+
}
591+
break;
571592
default:
572593
throw new InternalError('Operator ' . $operator . ' is not supported.');
573594
}
@@ -636,6 +657,7 @@ private function getSqlOperator(string $operator, IQueryBuilder $qb, string $col
636657
'is-lower-than' => $qb->expr()->lt($columnName, $qb->createNamedParameter($value, $paramType)),
637658
'is-lower-than-or-equal' => $qb->expr()->lte($columnName, $qb->createNamedParameter($value, $paramType)),
638659
'is-empty' => $qb->expr()->isNull($columnName),
660+
'is-not-empty' => $qb->expr()->isNotNull($columnName),
639661
default => throw new InternalError('Operator ' . $operator . ' is not supported.'),
640662
};
641663
}

src/shared/components/ncTable/mixins/columnsTypes/datetime.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ export default class DatetimeColumn extends AbstractDatetimeColumn {
7070
[FilterIds.IsLowerThan]() { return filterDate.isAfter(valueDate) },
7171
[FilterIds.IsLowerThanOrEqual]() { return filterDate.isSameOrAfter(valueDate) },
7272
[FilterIds.IsEmpty]() { return !cell.value },
73+
[FilterIds.IsNotEmpty]() { return !!cell.value },
7374
}[filter.operator.id]
7475
return super.isFilterFound(filterMethod, cell)
7576
}

src/shared/components/ncTable/mixins/columnsTypes/datetimeDate.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ export default class DatetimeDateColumn extends AbstractDatetimeColumn {
5656
[FilterIds.IsLowerThan]() { return filterDate.isAfter(valueDate) },
5757
[FilterIds.IsLowerThanOrEqual]() { return filterDate.isSameOrAfter(valueDate) },
5858
[FilterIds.IsEmpty]() { return !cell.value },
59+
[FilterIds.IsNotEmpty]() { return !!cell.value },
5960
}[filter.operator.id]
6061
return super.isFilterFound(filterMethod, cell)
6162
}

src/shared/components/ncTable/mixins/columnsTypes/datetimeTime.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ export default class DatetimeTimeColumn extends AbstractDatetimeColumn {
5656
[FilterIds.IsLowerThan]() { return filterTime.isAfter(valueTime) },
5757
[FilterIds.IsLowerThanOrEqual]() { return filterTime.isSameOrAfter(valueTime) },
5858
[FilterIds.IsEmpty]() { return !cell.value },
59+
[FilterIds.IsNotEmpty]() { return !!cell.value },
5960
}[filter.operator.id]
6061
return super.isFilterFound(filterMethod, cell)
6162
}

src/shared/components/ncTable/mixins/columnsTypes/number.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ export default class NumberColumn extends AbstractNumberColumn {
5656
[FilterIds.IsLowerThan]() { return parseInt(cell.value) < parseInt(filterValue) },
5757
[FilterIds.IsLowerThanOrEqual]() { return parseInt(cell.value) <= parseInt(filterValue) },
5858
[FilterIds.IsEmpty]() { return !cell.value },
59+
[FilterIds.IsNotEmpty]() { return !!cell.value },
5960
}[filter.operator.id]
6061
return super.isFilterFound(filterMethod, cell)
6162
}

src/shared/components/ncTable/mixins/columnsTypes/numberProgress.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export default class NumberProgressColumn extends AbstractNumberColumn {
3939
[FilterIds.IsLowerThan]() { return parseInt(cell.value) < parseInt(filterValue) },
4040
[FilterIds.IsLowerThanOrEqual]() { return parseInt(cell.value) <= parseInt(filterValue) },
4141
[FilterIds.IsEmpty]() { return !cell.value },
42+
[FilterIds.IsNotEmpty]() { return !!cell.value },
4243
}[filter.operator.id]
4344
return super.isFilterFound(filterMethod, cell)
4445
}

src/shared/components/ncTable/mixins/columnsTypes/numberStars.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export default class NumberStarsColumn extends AbstractNumberColumn {
3939
[FilterIds.IsLowerThan]() { return parseInt(cell.value ? cell.value : 0) < parseInt(filterValue) },
4040
[FilterIds.IsLowerThanOrEqual]() { return parseInt(cell.value ? cell.value : 0) <= parseInt(filterValue) },
4141
[FilterIds.IsEmpty]() { return !cell.value },
42+
[FilterIds.IsNotEmpty]() { return !!cell.value },
4243
}[filter.operator.id]
4344
return super.isFilterFound(filterMethod, cell)
4445
}

src/shared/components/ncTable/mixins/columnsTypes/relation.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ export default class RelationColumn extends AbstractColumn {
8787
[FilterIds.IsEqual]() { return cellLabel === filterValue },
8888
[FilterIds.IsNotEqual]() { return cellLabel !== filterValue },
8989
[FilterIds.IsEmpty]() { return !cellLabel },
90+
[FilterIds.IsNotEmpty]() { return !!cellLabel },
9091
}[filter.operator.id]
9192
return super.isFilterFound(filterMethod, cell)
9293
}

src/shared/components/ncTable/mixins/columnsTypes/selection.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ export default class SelectionColumn extends AbstractSelectionColumn {
6262
[FilterIds.IsEqual]() { return cellLabel === filterValue.toLowerCase() },
6363
[FilterIds.IsNotEqual]() { return cellLabel !== filterValue.toLowerCase() },
6464
[FilterIds.IsEmpty]() { return !cellLabel },
65+
[FilterIds.IsNotEmpty]() { return !!cellLabel },
6566
}[filter.operator.id]
6667
return super.isFilterFound(filterMethod, cell)
6768
}

0 commit comments

Comments
 (0)