mirror of
https://github.com/directus/directus.git
synced 2026-04-25 03:00:53 -04:00
Don't allow empty filter for non-string types. Add null filter. (#7501)
This commit is contained in:
@@ -300,15 +300,13 @@ export function applyFilter(
|
||||
|
||||
if (operator === '_empty' || (operator === '_nempty' && compareValue === false)) {
|
||||
dbQuery[logical].andWhere((query) => {
|
||||
query.whereNull(key);
|
||||
query.orWhere(key, '=', '');
|
||||
query.where(key, '=', '');
|
||||
});
|
||||
}
|
||||
|
||||
if (operator === '_nempty' || (operator === '_empty' && compareValue === false)) {
|
||||
dbQuery[logical].andWhere((query) => {
|
||||
query.whereNotNull(key);
|
||||
query.orWhere(key, '!=', '');
|
||||
query.where(key, '!=', '');
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ export default function getAvailableOperatorsForType(type: Type): OperatorType {
|
||||
switch (type) {
|
||||
// Text
|
||||
case 'binary':
|
||||
case 'json':
|
||||
case 'hash':
|
||||
case 'string':
|
||||
return {
|
||||
@@ -27,27 +26,36 @@ export default function getAvailableOperatorsForType(type: Type): OperatorType {
|
||||
'neq',
|
||||
'empty',
|
||||
'nempty',
|
||||
'null',
|
||||
'nnull',
|
||||
'in',
|
||||
'nin',
|
||||
],
|
||||
};
|
||||
// JSON
|
||||
case 'json':
|
||||
return {
|
||||
type,
|
||||
operators: ['eq', 'neq', 'null', 'nnull', 'in', 'nin'],
|
||||
};
|
||||
// UUID
|
||||
case 'uuid':
|
||||
return {
|
||||
type,
|
||||
operators: ['eq', 'neq', 'empty', 'nempty', 'in', 'nin'],
|
||||
operators: ['eq', 'neq', 'null', 'nnull', 'in', 'nin'],
|
||||
};
|
||||
// Boolean
|
||||
case 'boolean':
|
||||
return {
|
||||
type,
|
||||
operators: ['eq', 'neq', 'empty', 'nempty'],
|
||||
operators: ['eq', 'neq', 'null', 'nnull'],
|
||||
};
|
||||
// Numbers
|
||||
case 'integer':
|
||||
case 'decimal':
|
||||
return {
|
||||
type,
|
||||
operators: ['eq', 'neq', 'lt', 'lte', 'gt', 'gte', 'between', 'nbetween', 'empty', 'nempty', 'in', 'nin'],
|
||||
operators: ['eq', 'neq', 'lt', 'lte', 'gt', 'gte', 'between', 'nbetween', 'null', 'nnull', 'in', 'nin'],
|
||||
};
|
||||
// Datetime
|
||||
case 'dateTime':
|
||||
@@ -55,13 +63,13 @@ export default function getAvailableOperatorsForType(type: Type): OperatorType {
|
||||
case 'time':
|
||||
return {
|
||||
type,
|
||||
operators: ['eq', 'neq', 'lt', 'lte', 'gt', 'gte', 'between', 'nbetween', 'empty', 'nempty', 'in', 'nin'],
|
||||
operators: ['eq', 'neq', 'lt', 'lte', 'gt', 'gte', 'between', 'nbetween', 'null', 'nnull', 'in', 'nin'],
|
||||
};
|
||||
// Geometry
|
||||
case 'geometry':
|
||||
return {
|
||||
type,
|
||||
operators: ['eq', 'neq', 'intersects', 'nintersects', 'intersects_bbox', 'nintersects_bbox'],
|
||||
operators: ['eq', 'neq', 'null', 'nnull', 'intersects', 'nintersects', 'intersects_bbox', 'nintersects_bbox'],
|
||||
};
|
||||
default:
|
||||
return {
|
||||
@@ -79,6 +87,8 @@ export default function getAvailableOperatorsForType(type: Type): OperatorType {
|
||||
'nbetween',
|
||||
'empty',
|
||||
'nempty',
|
||||
'null',
|
||||
'nnull',
|
||||
'in',
|
||||
'nin',
|
||||
],
|
||||
|
||||
@@ -4,7 +4,6 @@ export function getFilterOperatorsForType(type: Type): ClientFilterOperator[] {
|
||||
switch (type) {
|
||||
// Text
|
||||
case 'binary':
|
||||
case 'json':
|
||||
case 'hash':
|
||||
case 'string':
|
||||
case 'csv':
|
||||
@@ -22,23 +21,44 @@ export function getFilterOperatorsForType(type: Type): ClientFilterOperator[] {
|
||||
'in',
|
||||
'nin',
|
||||
];
|
||||
|
||||
// JSON
|
||||
case 'json':
|
||||
return ['eq', 'neq', 'null', 'nnull', 'in', 'nin'];
|
||||
|
||||
// UUID
|
||||
case 'uuid':
|
||||
return ['eq', 'neq', 'empty', 'nempty', 'in', 'nin'];
|
||||
return ['eq', 'neq', 'null', 'nnull', 'in', 'nin'];
|
||||
|
||||
// Boolean
|
||||
case 'boolean':
|
||||
return ['eq', 'neq', 'empty', 'nempty'];
|
||||
return ['eq', 'neq', 'null', 'nnull'];
|
||||
|
||||
// Numbers
|
||||
case 'integer':
|
||||
case 'decimal':
|
||||
return ['eq', 'neq', 'lt', 'lte', 'gt', 'gte', 'between', 'nbetween', 'empty', 'nempty', 'in', 'nin'];
|
||||
return ['eq', 'neq', 'lt', 'lte', 'gt', 'gte', 'between', 'nbetween', 'null', 'nnull', 'in', 'nin'];
|
||||
|
||||
// Datetime
|
||||
case 'dateTime':
|
||||
case 'date':
|
||||
case 'time':
|
||||
return ['eq', 'neq', 'lt', 'lte', 'gt', 'gte', 'between', 'nbetween', 'empty', 'nempty', 'in', 'nin'];
|
||||
return [
|
||||
'eq',
|
||||
'neq',
|
||||
'null',
|
||||
'nnull',
|
||||
'lt',
|
||||
'lte',
|
||||
'gt',
|
||||
'gte',
|
||||
'between',
|
||||
'nbetween',
|
||||
'null',
|
||||
'nnull',
|
||||
'in',
|
||||
'nin',
|
||||
];
|
||||
|
||||
case 'geometry':
|
||||
return ['eq', 'neq', 'intersects', 'nintersects', 'intersects_bbox', 'nintersects_bbox'];
|
||||
@@ -57,6 +77,8 @@ export function getFilterOperatorsForType(type: Type): ClientFilterOperator[] {
|
||||
'nbetween',
|
||||
'empty',
|
||||
'nempty',
|
||||
'null',
|
||||
'nnull',
|
||||
'in',
|
||||
'nin',
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user