invoice/stubs/redux/stub/stub_actions

330 lines
7.0 KiB
Plaintext

import 'dart:async';
import 'package:built_collection/built_collection.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart';
class ViewStubList implements PersistUI {
ViewStubList({
this.force = false
});
final bool force;
}
class ViewStub
implements PersistUI, PersistPrefs {
ViewStub({
@required this.stubId,
this.force = false,
});
final String stubId;
final bool force;
}
class EditStub
implements PersistUI, PersistPrefs {
EditStub(
{@required this.stub,
this.completer,
this.cancelCompleter,
this.force = false});
final StubEntity stub;
final Completer completer;
final Completer cancelCompleter;
final bool force;
}
class UpdateStub implements PersistUI {
UpdateStub(this.stub);
final StubEntity stub;
}
class LoadStub {
LoadStub({this.completer, this.stubId});
final Completer completer;
final String stubId;
}
class LoadStubActivity {
LoadStubActivity({this.completer, this.stubId});
final Completer completer;
final String stubId;
}
class LoadStubs {
LoadStubs({this.completer});
final Completer completer;
}
class LoadStubRequest implements StartLoading {}
class LoadStubFailure implements StopLoading {
LoadStubFailure(this.error);
final dynamic error;
@override
String toString() {
return 'LoadStubFailure{error: $error}';
}
}
class LoadStubSuccess implements StopLoading, PersistData {
LoadStubSuccess(this.stub);
final StubEntity stub;
@override
String toString() {
return 'LoadStubSuccess{stub: $stub}';
}
}
class LoadStubsRequest implements StartLoading {}
class LoadStubsFailure implements StopLoading {
LoadStubsFailure(this.error);
final dynamic error;
@override
String toString() {
return 'LoadStubsFailure{error: $error}';
}
}
class LoadStubsSuccess implements StopLoading {
LoadStubsSuccess(this.stubs);
final BuiltList<StubEntity> stubs;
@override
String toString() {
return 'LoadStubsSuccess{stubs: $stubs}';
}
}
class SaveStubRequest implements StartSaving {
SaveStubRequest({this.completer, this.stub});
final Completer completer;
final StubEntity stub;
}
class SaveStubSuccess implements StopSaving, PersistData, PersistUI {
SaveStubSuccess(this.stub);
final StubEntity stub;
}
class AddStubSuccess implements StopSaving, PersistData, PersistUI {
AddStubSuccess(this.stub);
final StubEntity stub;
}
class SaveStubFailure implements StopSaving {
SaveStubFailure (this.error);
final Object error;
}
class ArchiveStubsRequest implements StartSaving {
ArchiveStubsRequest(this.completer, this.stubIds);
final Completer completer;
final List<String> stubIds;
}
class ArchiveStubsSuccess implements StopSaving, PersistData {
ArchiveStubsSuccess(this.stubs);
final List<StubEntity> stubs;
}
class ArchiveStubsFailure implements StopSaving {
ArchiveStubsFailure(this.stubs);
final List<StubEntity> stubs;
}
class DeleteStubsRequest implements StartSaving {
DeleteStubsRequest(this.completer, this.stubIds);
final Completer completer;
final List<String> stubIds;
}
class DeleteStubsSuccess implements StopSaving, PersistData {
DeleteStubsSuccess(this.stubs);
final List<StubEntity> stubs;
}
class DeleteStubsFailure implements StopSaving {
DeleteStubsFailure(this.stubs);
final List<StubEntity> stubs;
}
class RestoreStubsRequest implements StartSaving {
RestoreStubsRequest(this.completer, this.stubIds);
final Completer completer;
final List<String> stubIds;
}
class RestoreStubsSuccess implements StopSaving, PersistData {
RestoreStubsSuccess(this.stubs);
final List<StubEntity> stubs;
}
class RestoreStubsFailure implements StopSaving {
RestoreStubsFailure(this.stubs);
final List<StubEntity> stubs;
}
class FilterStubs implements PersistUI {
FilterStubs(this.filter);
final String filter;
}
class SortStubs implements PersistUI, PersistPrefs {
SortStubs(this.field);
final String field;
}
class FilterStubsByState implements PersistUI {
FilterStubsByState(this.state);
final EntityState state;
}
class FilterStubsByCustom1 implements PersistUI {
FilterStubsByCustom1(this.value);
final String value;
}
class FilterStubsByCustom2 implements PersistUI {
FilterStubsByCustom2(this.value);
final String value;
}
class FilterStubsByCustom3 implements PersistUI {
FilterStubsByCustom3(this.value);
final String value;
}
class FilterStubsByCustom4 implements PersistUI {
FilterStubsByCustom4(this.value);
final String value;
}
class StartStubMultiselect {
StartStubMultiselect();
}
class AddToStubMultiselect {
AddToStubMultiselect({@required this.entity});
final BaseEntity entity;
}
class RemoveFromStubMultiselect {
RemoveFromStubMultiselect({@required this.entity});
final BaseEntity entity;
}
class ClearStubMultiselect {
ClearStubMultiselect();
}
class UpdateStubTab implements PersistUI {
UpdateStubTab({this.tabIndex});
final int tabIndex;
}
void handleStubAction(
BuildContext context, List<BaseEntity> stubs, EntityAction action) {
if (stubs.isEmpty) {
return;
}
final store = StoreProvider.of<AppState>(context);
final state = store.state;
final localization = AppLocalization.of(context);
final stub = stubs.first as StubEntity;
final stubIds = stubs.map((stub) => stub.id).toList();
switch (action) {
case EntityAction.edit:
editEntity(context: context, entity: stub);
break;
case EntityAction.restore:
store.dispatch(RestoreStubsRequest(
snackBarCompleter<Null>(context, localization.restoredStub), stubIds));
break;
case EntityAction.archive:
store.dispatch(ArchiveStubsRequest(
snackBarCompleter<Null>(context, localization.archivedStub), stubIds));
break;
case EntityAction.delete:
store.dispatch(DeleteStubsRequest(
snackBarCompleter<Null>(context, localization.deletedStub), stubIds));
break;
case EntityAction.toggleMultiselect:
if (!store.state.stubListState.isInMultiselect()) {
store.dispatch(StartStubMultiselect());
}
if (stubs.isEmpty) {
break;
}
for (final stub in stubs) {
if (!store.state.stubListState.isSelected(stub.id)) {
store.dispatch(
AddToStubMultiselect(entity: stub));
} else {
store.dispatch(
RemoveFromStubMultiselect(entity: stub));
}
}
break;
case EntityAction.more:
showEntityActionsDialog(
entities: [stub],
);
break;
default:
print('## ERROR: unhandled action $action in stub_actions');
break;
}
}