This commit is contained in:
Hillel Coren 2021-04-16 15:06:07 +03:00
parent 56e83ac6d4
commit 4dfaba4d15
6 changed files with 49 additions and 3 deletions

View File

@ -171,6 +171,7 @@ part 'serializers.g.dart';
ImportRequest,
ImportRequestMapping,
UserTwoFactorResponse,
KanbanResponse,
])
final Serializers serializers =
(_$serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();

View File

@ -58,7 +58,7 @@ abstract class KanbanResponse
@memoized
int get hashCode;
BuiltList<KanbanResponseData> get data;
KanbanResponseData get data;
static Serializer<KanbanResponse> get serializer =>
_$kanbanResponseSerializer;

View File

@ -52,6 +52,19 @@ class TaskRepository {
return taskResponse.data.toList();
}
Future<KanbanResponseData> sortTasks(Credentials credentials,
List<String> statusIds, Map<String, List<String>> taskIds) async {
final url = credentials.url + '/tasks/sort';
final dynamic response = await webClient.post(url, credentials.token,
data: json.encode({'status_ids': statusIds, 'task_ids': taskIds}));
final KanbanResponse taskResponse =
serializers.deserializeWith(KanbanResponse.serializer, response);
return taskResponse.data;
}
Future<TaskEntity> saveData(Credentials credentials, TaskEntity task) async {
final data = serializers.serializeWith(TaskEntity.serializer, task);

View File

@ -229,7 +229,7 @@ class RestoreTaskFailure implements StopSaving {
}
class SortTasksRequest implements StartSaving {
SortTasksRequest(this.completer, this.taskStatusIds, this.taskIds);
SortTasksRequest({this.completer, this.taskStatusIds, this.taskIds});
final Completer completer;
final List<String> taskStatusIds;

View File

@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/vendor/vendor_actions.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
@ -28,6 +27,7 @@ List<Middleware<AppState>> createStoreTasksMiddleware([
final deleteTask = _deleteTask(repository);
final restoreTask = _restoreTask(repository);
final saveDocument = _saveDocument(repository);
final sortTasks = _sortTasks(repository);
return [
TypedMiddleware<AppState, ViewTaskList>(viewTaskList),
@ -40,6 +40,7 @@ List<Middleware<AppState>> createStoreTasksMiddleware([
TypedMiddleware<AppState, DeleteTaskRequest>(deleteTask),
TypedMiddleware<AppState, RestoreTaskRequest>(restoreTask),
TypedMiddleware<AppState, SaveTaskDocumentRequest>(saveDocument),
TypedMiddleware<AppState, SortTasksRequest>(sortTasks),
];
}
@ -263,3 +264,26 @@ Middleware<AppState> _saveDocument(TaskRepository repository) {
next(action);
};
}
Middleware<AppState> _sortTasks(TaskRepository repository) {
return (Store<AppState> store, dynamic dynamicAction, NextDispatcher next) {
final action = dynamicAction as SortTasksRequest;
repository
.sortTasks(store.state.credentials, action.statusIds, action.taskIds)
.then((KanbanResponseData data) {
print('## DONE: $data');
if (action.completer != null) {
action.completer.complete(null);
}
}).catchError((Object error) {
print(error);
store.dispatch(SortTasksFailure(error));
if (action.completer != null) {
action.completer.completeError(error);
}
});
next(action);
};
}

View File

@ -72,6 +72,14 @@ class KanbanVM {
state.taskListState),
onBoardChanged: (context, statusIds, taskIds) {
print('## onBoardChanged...\nstatusIds: $statusIds\ntaskIds: $taskIds');
final localization = AppLocalization.of(context);
final completer = snackBarCompleter<TaskStatusEntity>(
context, localization.updatedTaskStatus);
store.dispatch(SortTasksRequest(
completer: completer,
taskIds: taskIds,
taskStatusIds: statusIds,
));
},
onStatusOrderChanged: (context, statusId, index) {
final localization = AppLocalization.of(context);