invoice/lib/redux/webhook/webhook_actions.dart

341 lines
8.2 KiB
Dart

// Dart imports:
import 'dart:async';
// Flutter imports:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
// Package imports:
import 'package:built_collection/built_collection.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
// Project imports:
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/ui/app/entities/entity_actions_dialog.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
class ViewWebhookList implements PersistUI {
ViewWebhookList({
this.force = false,
});
final bool force;
}
class ViewWebhook implements PersistUI, PersistPrefs {
ViewWebhook({
@required this.webhookId,
this.force = false,
});
final String webhookId;
final bool force;
}
class EditWebhook implements PersistUI, PersistPrefs {
EditWebhook(
{@required this.webhook,
this.completer,
this.cancelCompleter,
this.force = false});
final WebhookEntity webhook;
final Completer completer;
final Completer cancelCompleter;
final bool force;
}
class UpdateWebhook implements PersistUI {
UpdateWebhook(this.webhook);
final WebhookEntity webhook;
}
class LoadWebhook {
LoadWebhook({this.completer, this.webhookId});
final Completer completer;
final String webhookId;
}
class LoadWebhookActivity {
LoadWebhookActivity({this.completer, this.webhookId});
final Completer completer;
final String webhookId;
}
class LoadWebhooks {
LoadWebhooks({this.completer});
final Completer completer;
}
class LoadWebhookRequest implements StartLoading {}
class LoadWebhookFailure implements StopLoading {
LoadWebhookFailure(this.error);
final dynamic error;
@override
String toString() {
return 'LoadWebhookFailure{error: $error}';
}
}
class LoadWebhookSuccess implements StopLoading, PersistData {
LoadWebhookSuccess(this.webhook);
final WebhookEntity webhook;
@override
String toString() {
return 'LoadWebhookSuccess{webhook: $webhook}';
}
}
class LoadWebhooksRequest implements StartLoading {}
class LoadWebhooksFailure implements StopLoading {
LoadWebhooksFailure(this.error);
final dynamic error;
@override
String toString() {
return 'LoadWebhooksFailure{error: $error}';
}
}
class LoadWebhooksSuccess implements StopLoading {
LoadWebhooksSuccess(this.webhooks);
final BuiltList<WebhookEntity> webhooks;
@override
String toString() {
return 'LoadWebhooksSuccess{webhooks: $webhooks}';
}
}
class SaveWebhookRequest implements StartSaving {
SaveWebhookRequest({this.completer, this.webhook});
final Completer completer;
final WebhookEntity webhook;
}
class SaveWebhookSuccess implements StopSaving, PersistData, PersistUI {
SaveWebhookSuccess(this.webhook);
final WebhookEntity webhook;
}
class AddWebhookSuccess implements StopSaving, PersistData, PersistUI {
AddWebhookSuccess(this.webhook);
final WebhookEntity webhook;
}
class SaveWebhookFailure implements StopSaving {
SaveWebhookFailure(this.error);
final Object error;
}
class ArchiveWebhooksRequest implements StartSaving {
ArchiveWebhooksRequest(this.completer, this.webhookIds);
final Completer completer;
final List<String> webhookIds;
}
class ArchiveWebhooksSuccess implements StopSaving, PersistData {
ArchiveWebhooksSuccess(this.webhooks);
final List<WebhookEntity> webhooks;
}
class ArchiveWebhooksFailure implements StopSaving {
ArchiveWebhooksFailure(this.webhooks);
final List<WebhookEntity> webhooks;
}
class DeleteWebhooksRequest implements StartSaving {
DeleteWebhooksRequest(this.completer, this.webhookIds);
final Completer completer;
final List<String> webhookIds;
}
class DeleteWebhooksSuccess implements StopSaving, PersistData {
DeleteWebhooksSuccess(this.webhooks);
final List<WebhookEntity> webhooks;
}
class DeleteWebhooksFailure implements StopSaving {
DeleteWebhooksFailure(this.webhooks);
final List<WebhookEntity> webhooks;
}
class RestoreWebhooksRequest implements StartSaving {
RestoreWebhooksRequest(this.completer, this.webhookIds);
final Completer completer;
final List<String> webhookIds;
}
class RestoreWebhooksSuccess implements StopSaving, PersistData {
RestoreWebhooksSuccess(this.webhooks);
final List<WebhookEntity> webhooks;
}
class RestoreWebhooksFailure implements StopSaving {
RestoreWebhooksFailure(this.webhooks);
final List<WebhookEntity> webhooks;
}
class FilterWebhooks implements PersistUI {
FilterWebhooks(this.filter);
final String filter;
}
class SortWebhooks implements PersistUI, PersistPrefs {
SortWebhooks(this.field);
final String field;
}
class FilterWebhooksByState implements PersistUI {
FilterWebhooksByState(this.state);
final EntityState state;
}
class FilterWebhooksByCustom1 implements PersistUI {
FilterWebhooksByCustom1(this.value);
final String value;
}
class FilterWebhooksByCustom2 implements PersistUI {
FilterWebhooksByCustom2(this.value);
final String value;
}
class FilterWebhooksByCustom3 implements PersistUI {
FilterWebhooksByCustom3(this.value);
final String value;
}
class FilterWebhooksByCustom4 implements PersistUI {
FilterWebhooksByCustom4(this.value);
final String value;
}
void handleWebhookAction(
BuildContext context, List<BaseEntity> webhooks, EntityAction action) {
if (webhooks.isEmpty) {
return;
}
final store = StoreProvider.of<AppState>(context);
final localization = AppLocalization.of(context);
final webhook = webhooks.first as WebhookEntity;
final webhookIds = webhooks.map((webhook) => webhook.id).toList();
switch (action) {
case EntityAction.copy:
Clipboard.setData(ClipboardData(text: webhook.targetUrl));
showToast(localization.copiedToClipboard.replaceFirst(':value ', ''));
break;
case EntityAction.edit:
editEntity(entity: webhook);
break;
case EntityAction.restore:
final message = webhookIds.length > 1
? localization.restoredWebhooks
.replaceFirst(':value', ':count')
.replaceFirst(':count', webhookIds.length.toString())
: localization.restoredWebhook;
store.dispatch(RestoreWebhooksRequest(
snackBarCompleter<Null>(context, message), webhookIds));
break;
case EntityAction.archive:
final message = webhookIds.length > 1
? localization.archivedWebhooks
.replaceFirst(':value', ':count')
.replaceFirst(':count', webhookIds.length.toString())
: localization.archivedWebhook;
store.dispatch(ArchiveWebhooksRequest(
snackBarCompleter<Null>(context, message), webhookIds));
break;
case EntityAction.delete:
final message = webhookIds.length > 1
? localization.deletedWebhooks
.replaceFirst(':value', ':count')
.replaceFirst(':count', webhookIds.length.toString())
: localization.deletedWebhook;
store.dispatch(DeleteWebhooksRequest(
snackBarCompleter<Null>(context, message), webhookIds));
break;
case EntityAction.toggleMultiselect:
if (!store.state.webhookListState.isInMultiselect()) {
store.dispatch(StartWebhookMultiselect());
}
if (webhooks.isEmpty) {
break;
}
for (final webhook in webhooks) {
if (!store.state.webhookListState.isSelected(webhook.id)) {
store.dispatch(AddToWebhookMultiselect(entity: webhook));
} else {
store.dispatch(RemoveFromWebhookMultiselect(entity: webhook));
}
}
break;
case EntityAction.more:
showEntityActionsDialog(
entities: [webhook],
);
break;
}
}
class StartWebhookMultiselect {
StartWebhookMultiselect();
}
class AddToWebhookMultiselect {
AddToWebhookMultiselect({@required this.entity});
final BaseEntity entity;
}
class RemoveFromWebhookMultiselect {
RemoveFromWebhookMultiselect({@required this.entity});
final BaseEntity entity;
}
class ClearWebhookMultiselect {
ClearWebhookMultiselect();
}