Comments (6)
My solution to the problem was the following:
add in filter.dart
const Filter.child(String value, Filter filter)
: value = filter,
comparison = value;
and
change toMapEntry method
MapEntry<String, Object?> toMapEntry(String field) {
// If value is a list of non filters
if (value is List<Map<String, Filter>>) {
if (comparison == '_or' || comparison == '_and') {
return MapEntry(
comparison,
convertFilterList(value! as List<Map<String, Filter>>),
);
}
}
if (value != null && value is Filter) {
final filter = value! as Filter;
final childMap = filter.toMapEntry(comparison);
return MapEntry(field, {
childMap.key: childMap.value,
});
}
return MapEntry(field, {comparison: value});
}
from directus-dart.
Вот пример реализации в коде
final f = Filters(
<String, Filter>{
'author': Filter.child(
'name',
Filter.eq('Rijk van Zanten'),
),
},
);
result: f.toMap();
{author: {name: {_eq: Rijk van Zanten}}}
from directus-dart.
Maybe we can change Map<String, Filter> data;
to Map<String, object>
Only problem is that with that way we lose some type safety, but user could then pass simple JSON.
Do you think it's to verbose having to type Filter.xxx
for every comparison?
from directus-dart.
I have used my own class before and I don't think it's very safe.
abstract class ApiFilter {
ApiFilter._();
static Map<String, Object?> filterItem(
String superFiled,
Object items,
) {
return <String, Object?>{
superFiled: items,
};
}
static Map<String, Object?> filterItems(List<Map<String, Object?>> items) {
final map = <String, Object?>{};
for (final item in items) {
map.addAll(item);
}
return map;
}
/// Равно
static const String eq = '_eq';
/// Не равно
static const String neq = '_neq';
/// Меньше
static const String lt = '_lt';
/// Меньше или равно
static const String lte = '_lte';
...
}
I don't see any difficulty in writing Filter.xxx
I am ready to consider different implementations, but I would like to do so that would not spoil the current api
from directus-dart.
Yeah, if you can create PR without breaking change, that would be awesome
from directus-dart.
Closed in #37
from directus-dart.
Related Issues (20)
- while uploadFile(filePath) it gets uploaded but some parsing error HOT 3
- Improve `DirectusFile.downloadUrl` method HOT 2
- Auto detect content type and send the type as a MediaType object. HOT 1
- A fully functional todo example app would be great HOT 1
- Solution: createMany() throws an error "Problem with Directus". HOT 2
- `sdk.fields` doesn't work with new api HOT 2
- How to get custom user fields? HOT 2
- Expose transport like JS SDK HOT 2
- fix items -> updateMany HOT 2
- refresh token interceptor bug fix HOT 2
- Unhandled Exception: type 'String' is not a subtype of type 'int' of 'index' HOT 4
- Auth Refresh fails and soft locks users out of the system HOT 4
- Deep Filter for translations HOT 5
- Making AuthResponse public so as to use this: "directus.auth.storage.storeLoginData(data)" HOT 1
- How do you Sign up a new user from the SDK HOT 1
- Broken link in code documentation HOT 4
- Upgrade the packages to Dart 3.0 HOT 2
- Why there is a Flutter Dependency in Directus Dart Package for shared_preferences? HOT 4
- Create a Flutter Project in example of `directus` package
- SSO support
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from directus-dart.