315 lines
7.0 KiB
Plaintext
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;
|
|
}
|