mirror of
https://github.com/go-vikunja/app
synced 2024-06-06 04:29:47 +00:00
fixed uri escaping [] characters when loading tasks
This commit is contained in:
parent
347bd6cd66
commit
0eb941bfb1
|
@ -81,13 +81,16 @@ class Client {
|
|||
[Map<String, List<String>>? queryParameters]) {
|
||||
Uri uri = Uri.tryParse('${this.base}$url')!;
|
||||
// why are we doing it like this? because Uri doesnt have setters. wtf.
|
||||
print(uri.toString());
|
||||
|
||||
uri = Uri(
|
||||
scheme: uri.scheme,
|
||||
userInfo: uri.userInfo,
|
||||
host: uri.host,
|
||||
port: uri.port,
|
||||
path: uri.path,
|
||||
queryParameters: {...uri.queryParameters, ...?queryParameters},
|
||||
//queryParameters: {...uri.queryParameters, ...?queryParameters},
|
||||
queryParameters: queryParameters,
|
||||
fragment: uri.fragment
|
||||
);
|
||||
|
||||
|
|
|
@ -90,11 +90,23 @@ class TaskAPIService extends APIService implements TaskService {
|
|||
|
||||
@override
|
||||
Future<List<Task>?> getByOptions(TaskServiceOptions options) {
|
||||
String optionString = options.getOptions();
|
||||
Map<String, List<String>> optionsMap = options.getOptions();
|
||||
//optionString = "?sort_by[]=due_date&sort_by[]=id&order_by[]=asc&order_by[]=desc&filter_by[]=done&filter_value[]=false&filter_comparator[]=equals&filter_concat=and&filter_include_nulls=false&page=1";
|
||||
//print(optionString);
|
||||
Map<String, List<String>> queryparams = {
|
||||
"sort_by[]":["due_date", "id"],
|
||||
"order_by[]":["asc", "desc"],
|
||||
"filter_by[]": ["done"],
|
||||
"filter_value[]":["false"],
|
||||
"filter_comparator[]":["equals"],
|
||||
"filter_concat[]":["and"],
|
||||
};
|
||||
return client
|
||||
.get('/tasks/all$optionString')
|
||||
.get('/tasks/all', optionsMap)
|
||||
.then((response) {
|
||||
if (response == null) return null;
|
||||
print(response.body);
|
||||
print(response.headers);
|
||||
return convertList(response.body, (result) => Task.fromJson(result));
|
||||
});
|
||||
}
|
||||
|
|
|
@ -229,20 +229,24 @@ class LandingPageState extends State<LandingPage>
|
|||
.taskService
|
||||
.getByOptions(TaskServiceOptions(
|
||||
newOptions: [
|
||||
TaskServiceOption<TaskServiceOptionSortBy>("sort_by", ["due_date", "id"]),
|
||||
TaskServiceOption<TaskServiceOptionSortBy>("order_by", ["asc", "desc"]),
|
||||
TaskServiceOption<TaskServiceOptionFilterBy>("filter_by", "done"),
|
||||
TaskServiceOption<TaskServiceOptionFilterValue>("filter_value", "false"),
|
||||
TaskServiceOption<TaskServiceOptionFilterComparator>("filter_comparator", "equals"),
|
||||
TaskServiceOption<TaskServiceOptionFilterConcat>("filter_concat", "and"),
|
||||
],
|
||||
clearOther: true
|
||||
))
|
||||
.then<Future<void>?>((taskList) => _handleTaskList(taskList, showOnlyDueDateTasks));
|
||||
|
||||
}).onError((error, stackTrace) {print("error");});
|
||||
});//.onError((error, stackTrace) {print("error");});
|
||||
}
|
||||
|
||||
Future<void> _handleTaskList(List<Task>? taskList, bool showOnlyDueDateTasks) {
|
||||
if(showOnlyDueDateTasks)
|
||||
taskList?.removeWhere((element) => element.dueDate == null || element.dueDate!.year == 0001);
|
||||
taskList?.forEach((element) {print(element.dueDate);});
|
||||
taskList?.forEach((element) {print(element.title);});
|
||||
|
||||
if (taskList != null && taskList.isEmpty) {
|
||||
setState(() {
|
||||
|
|
|
@ -55,10 +55,17 @@ enum TaskServiceOptionFilterConcat { and, or }
|
|||
|
||||
class TaskServiceOption<T> {
|
||||
String name;
|
||||
dynamic value;
|
||||
String? value;
|
||||
List<String>? valueList;
|
||||
dynamic defValue;
|
||||
|
||||
TaskServiceOption(this.name, this.value);
|
||||
TaskServiceOption(this.name, dynamic input_values) {
|
||||
if(input_values is List<String>) {
|
||||
valueList = input_values;
|
||||
} else if(input_values is String) {
|
||||
value = input_values;
|
||||
}
|
||||
}
|
||||
|
||||
String handleValue(dynamic input) {
|
||||
if (input is String) return input;
|
||||
|
@ -66,8 +73,8 @@ class TaskServiceOption<T> {
|
|||
}
|
||||
|
||||
dynamic getValue() {
|
||||
if (value is List)
|
||||
return value.map((elem) => handleValue(elem)).toList();
|
||||
if (valueList != null)
|
||||
return valueList!.map((elem) => handleValue(elem)).toList();
|
||||
else
|
||||
return handleValue(value);
|
||||
}
|
||||
|
@ -116,23 +123,24 @@ class TaskServiceOptions {
|
|||
}
|
||||
|
||||
|
||||
String getOptions() {
|
||||
String result = '';
|
||||
if (options.length == 0) return '';
|
||||
Map<String, List<String>> getOptions() {
|
||||
Map<String, List<String>> queryparams = {};
|
||||
for (TaskServiceOption option in options) {
|
||||
dynamic value = option.getValue();
|
||||
if (value is List) {
|
||||
for (dynamic valueEntry in value) {
|
||||
result += '&' + option.name + '[]=' + valueEntry;
|
||||
}
|
||||
queryparams[option.name+"[]"] = value as List<String>;
|
||||
//for (dynamic valueEntry in value) {
|
||||
// result += '&' + option.name + '[]=' + valueEntry;
|
||||
//}
|
||||
} else {
|
||||
result += '&' + option.name + '=' + value;
|
||||
queryparams[option.name] = [value as String];
|
||||
//result += '&' + option.name + '[]=' + value;
|
||||
}
|
||||
}
|
||||
|
||||
if (result.startsWith('&')) result = result.substring(1);
|
||||
result = "?" + result;
|
||||
return result;
|
||||
//if (result.startsWith('&')) result = result.substring(1);
|
||||
//result = "?" + result;
|
||||
return queryparams;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user