invoice/stubs/redux/stub/stub_actions

315 lines
7.0 KiB
Plaintext

import 'dart:async';
import 'package:flutter/widgets.dart';
import 'package:built_collection/built_collection.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/data/models/stub_model.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
class ViewStubList implements PersistUI {
ViewStubList({@required this.context, this.force = false});
final BuildContext context;
final bool force;
}
class ViewStub implements PersistUI {
ViewStub({
@required this.stubId,
@required this.context,
this.force = false,
});
final String stubId;
final BuildContext context;
final bool force;
}
class EditStub implements PersistUI {
EditStub(
{@required this.stub,
@required this.context,
this.completer,
this.force = false});
final StubEntity stub;
final BuildContext context;
final Completer completer;
final bool force;
}
class UpdateStub implements PersistUI {
UpdateStub(this.stub);
final StubEntity stub;
}
class LoadStub {
LoadStub({this.completer, this.stubId, this.loadActivities = false});
final Completer completer;
final String stubId;
final bool loadActivities;
}
class LoadStubActivity {
LoadStubActivity({this.completer, this.stubId});
final Completer completer;
final String stubId;
}
class LoadStubs {
LoadStubs({this.completer, this.force = false});
final Completer completer;
final bool force;
}
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, PersistData {
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 ArchiveStubRequest implements StartSaving {
ArchiveStubRequest(this.completer, this.stubId);
final Completer completer;
final String stubId;
}
class ArchiveStubSuccess implements StopSaving, PersistData {
ArchiveStubSuccess(this.stub);
final StubEntity stub;
}
class ArchiveStubFailure implements StopSaving {
ArchiveStubFailure(this.stub);
final StubEntity stub;
}
class DeleteStubRequest implements StartSaving {
DeleteStubRequest(this.completer, this.stubId);
final Completer completer;
final String stubId;
}
class DeleteStubSuccess implements StopSaving, PersistData {
DeleteStubSuccess(this.stub);
final StubEntity stub;
}
class DeleteStubFailure implements StopSaving {
DeleteStubFailure(this.stub);
final StubEntity stub;
}
class RestoreStubRequest implements StartSaving {
RestoreStubRequest(this.completer, this.stubId);
final Completer completer;
final String stubId;
}
class RestoreStubSuccess implements StopSaving, PersistData {
RestoreStubSuccess(this.stub);
final StubEntity stub;
}
class RestoreStubFailure implements StopSaving {
RestoreStubFailure(this.stub);
final StubEntity stub;
}
class FilterStubs {
FilterStubs(this.filter);
final String filter;
}
class SortStubs implements PersistUI {
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 FilterStubsByEntity implements PersistUI {
FilterStubsByEntity({this.entityId, this.entityType});
final String entityId;
final EntityType entityType;
}
void handleStubAction(
BuildContext context, List<BaseEntity> stubs, EntityAction action) {
final store = StoreProvider.of<AppState>(context);
final state = store.state;
final CompanyEntity company = state.selectedCompany;
final localization = AppLocalization.of(context);
final stub = stubs.first as StubEntity;
switch (action) {
case EntityAction.edit:
store.dispatch(EditStub(context: context, stub: stub));
break;
case EntityAction.restore:
store.dispatch(RestoreStubRequest(
snackBarCompleter<Null>(context, localization.restoredStub), stub.id));
break;
case EntityAction.archive:
store.dispatch(ArchiveStubRequest(
snackBarCompleter<Null>(context, localization.archivedStub), stub.id));
break;
case EntityAction.delete:
store.dispatch(DeleteStubRequest(
snackBarCompleter<Null>(context, localization.deletedStub), stub.id));
break;
case EntityAction.toggleMultiselect:
if (!store.state.stubListState.isInMultiselect()) {
store.dispatch(StartStubMultiselect(context: context));
}
if (stubs.isEmpty) {
break;
}
for (final stub in stubs) {
if (!store.state.stubListState.isSelected(stub.id)) {
store.dispatch(
AddToStubMultiselect(context: context, entity: stub));
} else {
store.dispatch(
RemoveFromStubMultiselect(context: context, entity: stub));
}
}
break;
}
}
class StartStubMultiselect {
StartStubMultiselect({@required this.context});
final BuildContext context;
}
class AddToStubMultiselect {
AddToStubMultiselect({@required this.context, @required this.entity});
final BuildContext context;
final BaseEntity entity;
}
class RemoveFromStubMultiselect {
RemoveFromStubMultiselect({@required this.context, @required this.entity});
final BuildContext context;
final BaseEntity entity;
}
class ClearStubMultiselect {
ClearStubMultiselect({@required this.context});
final BuildContext context;
}