- return new FilterBuilder()
- .addIsA("uuid", [ResourceKind.PROJECT, ResourceKind.COLLECTION, ResourceKind.PROCESS])
- .addILike(filterName, searchValue, GroupContentsResourcePrefix.COLLECTION)
- .addILike(filterName, searchValue, GroupContentsResourcePrefix.PROCESS)
- .addILike(filterName, searchValue, GroupContentsResourcePrefix.PROJECT)
+ const filter = new FilterBuilder();
+ const sq = parseSearchQuery(searchValue);
+
+ const resourceKind = getFirstProp(sq, 'type') as ResourceKind;
+
+ let prefix = '';
+ switch (resourceKind) {
+ case ResourceKind.COLLECTION:
+ prefix = GroupContentsResourcePrefix.COLLECTION;
+ break;
+ case ResourceKind.PROCESS:
+ prefix = GroupContentsResourcePrefix.PROCESS;
+ break;
+ default:
+ prefix = GroupContentsResourcePrefix.PROJECT;
+ break;
+ }
+
+ if (!sq.hasKeywords) {
+ filter
+ .addILike(filterName, searchValue, GroupContentsResourcePrefix.COLLECTION)
+ .addILike(filterName, searchValue, GroupContentsResourcePrefix.PROCESS)
+ .addILike(filterName, searchValue, GroupContentsResourcePrefix.PROJECT);
+ } else {
+ if (prefix) {
+ sq.values.forEach(v =>
+ filter.addILike(filterName, v, prefix)
+ );
+ } else {
+ sq.values.forEach(v => {
+ filter
+ .addILike(filterName, v, GroupContentsResourcePrefix.COLLECTION)
+ .addILike(filterName, v, GroupContentsResourcePrefix.PROCESS)
+ .addILike(filterName, v, GroupContentsResourcePrefix.PROJECT);
+ });
+ }
+
+ if (getPropValue(sq, 'is', 'trashed')) {
+ filter.addEqual("is_trashed", true);
+ }
+
+ const projectUuid = getFirstProp(sq, 'project');
+ if (projectUuid) {
+ filter.addEqual('uuid', projectUuid, prefix);
+ }
+
+ const dateFrom = getFirstProp(sq, 'from');
+ if (dateFrom) {
+ filter.addGte('modified_at', buildDateFilter(dateFrom));
+ }
+
+ const dateTo = getFirstProp(sq, 'to');
+ if (dateTo) {
+ filter.addLte('modified_at', buildDateFilter(dateTo));
+ }
+
+ const props = getProperties(sq);
+ props.forEach(p => {
+ // filter.addILike(`properties.${p.key}`, p.value);
+ filter.addExists(p.key);
+ });
+ }
+
+ return filter