1
0
mirror of https://github.com/go-vikunja/app synced 2024-06-06 12:39:51 +00:00

extended functionality of TaskServiceOptions

now supports different sortings, list and more
This commit is contained in:
benimautner 2022-04-15 21:41:21 +02:00
parent a94c96ebe1
commit 644ebbd13f

View File

@ -1,5 +1,5 @@
import 'dart:async';
import 'dart:developer';
import 'package:vikunja_app/models/list.dart';
import 'package:vikunja_app/models/namespace.dart';
import 'package:vikunja_app/models/task.dart';
@ -7,31 +7,41 @@ import 'package:vikunja_app/models/user.dart';
enum TaskServiceOptionSortBy {id, title, description, done, done_at, due_date, created_by_id, list_id, repeat_after, priority, start_date, end_date, hex_color, percent_done, uid, created, updated}
enum TaskServiceOptionOrderBy {asc,desc}
enum TaskServiceOptionFilterBy {done}
enum TaskServiceOptionFilterBy {done, due_date}
enum TaskServiceOptionFilterValue {enum_true,enum_false}
enum TaskServiceOptionFilterComparator {equals, greater, greater_equals, less, less_equals, like, enum_in}
enum TaskServiceOptionFilterConcat {and, or}
class TaskServiceOption<T> {
String name;
List<T> possibleValues;
dynamic value;
dynamic defValue;
TaskServiceOption(
this.name,
this.possibleValues,
this.value
);
String getValue() {
return value.toString().split('.').last.replaceAll('enum_', '');
String handleValue(dynamic input) {
if(input is String)
return input;
return input.toString().split('.').last.replaceAll('enum_', '');
}
dynamic getValue() {
if(value is List)
return value.map((elem) => handleValue(elem)).toList();
else
return handleValue(value);
}
}
class TaskServiceOptions {
List<TaskServiceOption> options = [
TaskServiceOption<TaskServiceOptionSortBy>("sort_by",TaskServiceOptionSortBy.values, TaskServiceOptionSortBy.due_date),
TaskServiceOption<TaskServiceOptionOrderBy>("order_by",TaskServiceOptionOrderBy.values, TaskServiceOptionOrderBy.desc),
TaskServiceOption<TaskServiceOptionFilterBy>("filter_by",TaskServiceOptionFilterBy.values, TaskServiceOptionFilterBy.done),
TaskServiceOption<TaskServiceOptionFilterValue>("filter_value",TaskServiceOptionFilterValue.values, TaskServiceOptionFilterValue.enum_false),
TaskServiceOption<TaskServiceOptionSortBy>("sort_by",[TaskServiceOptionSortBy.due_date, TaskServiceOptionSortBy.id]),
TaskServiceOption<TaskServiceOptionOrderBy>("order_by", TaskServiceOptionOrderBy.asc),
TaskServiceOption<TaskServiceOptionFilterBy>("filter_by", [TaskServiceOptionFilterBy.done, TaskServiceOptionFilterBy.due_date]),
TaskServiceOption<TaskServiceOptionFilterValue>("filter_value", [TaskServiceOptionFilterValue.enum_false, '0001-01-02T00:00:00.000Z']),
TaskServiceOption<TaskServiceOptionFilterComparator>("filter_comparator", [TaskServiceOptionFilterComparator.equals,TaskServiceOptionFilterComparator.greater]),
TaskServiceOption<TaskServiceOptionFilterConcat>("filter_concat", TaskServiceOptionFilterConcat.and),
];
void setOption(TaskServiceOption option, dynamic value) {
options.firstWhere((element) => element.name == option.name).value = value;
@ -41,14 +51,18 @@ class TaskServiceOptions {
String result = '';
for(TaskServiceOption option in options) {
dynamic value = option.getValue();
if(result.isNotEmpty)
result += '&';
/*if(option.value is List) {
for(dynamic value in option.value) {
result += option.name+'[]='+value.g;
}*/
result += option.name+'=' + value;
if (value is List) {
for (dynamic value_entry in value) {
result += '&' + option.name + '[]=' + value_entry;
}
} else {
result += '&' + option.name + '=' + value;
}
}
if(result.startsWith('&'))
result.substring(1);
log(result);
return result;
}
}