Add more actions to the edit screen
This commit is contained in:
parent
b0c91caa8e
commit
4f05863570
|
|
@ -260,6 +260,7 @@ void handleExpenseAction(
|
|||
case EntityAction.edit:
|
||||
editEntity(context: context, entity: expense);
|
||||
break;
|
||||
case EntityAction.clone:
|
||||
case EntityAction.cloneToExpense:
|
||||
createEntity(
|
||||
context: context,
|
||||
|
|
|
|||
|
|
@ -96,12 +96,12 @@ class _ExpenseEditState extends State<ExpenseEdit>
|
|||
: localization.editExpense),
|
||||
onCancelPressed: (context) => viewModel.onCancelPressed(context),
|
||||
onSavePressed: (context) => _onSavePressed(context),
|
||||
/*
|
||||
actions: [
|
||||
if (expense.isRecurring)
|
||||
if (expense.isRunning) EntityAction.stop else EntityAction.start,
|
||||
EntityAction.clone,
|
||||
if (!expense.isRecurring) EntityAction.invoiceExpense,
|
||||
],
|
||||
*/
|
||||
onActionPressed: (context, action) => _onSavePressed(context, action),
|
||||
appBarBottom: TabBar(
|
||||
controller: _controller,
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
|
|||
// Package imports:
|
||||
import 'package:flutter_redux/flutter_redux.dart';
|
||||
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
|
||||
import 'package:invoiceninja_flutter/redux/expense/expense_selectors.dart';
|
||||
import 'package:redux/redux.dart';
|
||||
|
||||
// Project imports:
|
||||
|
|
@ -140,6 +141,15 @@ class ExpenseEditVM extends AbstractExpenseEditVM {
|
|||
final expense = store.state.expenseUIState.editing;
|
||||
final localization = navigatorKey.localization;
|
||||
final navigator = navigatorKey.currentState;
|
||||
|
||||
if (expense.isOld &&
|
||||
!hasExpenseChanges(expense, state.expenseState.map) &&
|
||||
[
|
||||
EntityAction.invoiceExpense,
|
||||
EntityAction.clone,
|
||||
].contains(action)) {
|
||||
handleEntityAction(expense, action);
|
||||
} else {
|
||||
final Completer<ExpenseEntity> completer =
|
||||
new Completer<ExpenseEntity>();
|
||||
store.dispatch(
|
||||
|
|
@ -161,9 +171,17 @@ class ExpenseEditVM extends AbstractExpenseEditVM {
|
|||
|
||||
if (state.prefState.isEditorFullScreen(EntityType.expense)) {
|
||||
editEntity(
|
||||
context: navigatorKey.currentContext, entity: savedExpense);
|
||||
context: navigatorKey.currentContext,
|
||||
entity: savedExpense);
|
||||
}
|
||||
}
|
||||
|
||||
if ([
|
||||
EntityAction.invoiceExpense,
|
||||
EntityAction.clone,
|
||||
].contains(action)) {
|
||||
handleEntityAction(savedExpense, action);
|
||||
}
|
||||
}).catchError((Object error) {
|
||||
showDialog<ErrorDialog>(
|
||||
context: navigatorKey.currentContext,
|
||||
|
|
@ -171,6 +189,7 @@ class ExpenseEditVM extends AbstractExpenseEditVM {
|
|||
return ErrorDialog(error);
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
);
|
||||
|
|
|
|||
|
|
@ -130,7 +130,11 @@ class RecurringExpenseEditVM extends AbstractExpenseEditVM {
|
|||
if (recurringExpense.isOld &&
|
||||
!hasRecurringExpenseChanges(
|
||||
recurringExpense, state.recurringExpenseState.map) &&
|
||||
action != null) {
|
||||
[
|
||||
EntityAction.start,
|
||||
EntityAction.stop,
|
||||
EntityAction.clone,
|
||||
].contains(action)) {
|
||||
handleEntityAction(recurringExpense, action);
|
||||
} else {
|
||||
final Completer<ExpenseEntity> completer =
|
||||
|
|
@ -159,6 +163,14 @@ class RecurringExpenseEditVM extends AbstractExpenseEditVM {
|
|||
entity: savedRecurringExpense);
|
||||
}
|
||||
}
|
||||
|
||||
if ([
|
||||
EntityAction.start,
|
||||
EntityAction.stop,
|
||||
EntityAction.clone,
|
||||
].contains(action)) {
|
||||
handleEntityAction(savedRecurringExpense, action);
|
||||
}
|
||||
}).catchError((Object error) {
|
||||
showDialog<ErrorDialog>(
|
||||
context: context,
|
||||
|
|
|
|||
|
|
@ -9,8 +9,7 @@ import 'package:flutter_redux/flutter_redux.dart';
|
|||
|
||||
// Project imports:
|
||||
import 'package:invoiceninja_flutter/constants.dart';
|
||||
import 'package:invoiceninja_flutter/data/models/entities.dart';
|
||||
import 'package:invoiceninja_flutter/data/models/task_model.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/ui/app/app_border.dart';
|
||||
|
|
@ -71,6 +70,23 @@ class _TaskEditState extends State<TaskEdit>
|
|||
super.dispose();
|
||||
}
|
||||
|
||||
void _onSavePressed(BuildContext context, [EntityAction action]) {
|
||||
final bool isValid = _formKey.currentState.validate();
|
||||
|
||||
/*
|
||||
setState(() {
|
||||
autoValidate = !isValid ?? false;
|
||||
});
|
||||
*/
|
||||
|
||||
if (!isValid) {
|
||||
return;
|
||||
}
|
||||
|
||||
final viewModel = widget.viewModel;
|
||||
viewModel.onSavePressed(context, action);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final localization = AppLocalization.of(context);
|
||||
|
|
@ -84,21 +100,13 @@ class _TaskEditState extends State<TaskEdit>
|
|||
entity: task,
|
||||
title: task.isNew ? localization.newTask : localization.editTask,
|
||||
onCancelPressed: (context) => viewModel.onCancelPressed(context),
|
||||
onSavePressed: (context) {
|
||||
final bool isValid = _formKey.currentState.validate();
|
||||
|
||||
/*
|
||||
setState(() {
|
||||
autoValidate = !isValid ?? false;
|
||||
});
|
||||
*/
|
||||
|
||||
if (!isValid) {
|
||||
return;
|
||||
}
|
||||
|
||||
viewModel.onSavePressed(context);
|
||||
},
|
||||
onSavePressed: (context, [EntityAction action]) =>
|
||||
_onSavePressed(context, action),
|
||||
actions: [
|
||||
EntityAction.invoiceTask,
|
||||
EntityAction.clone,
|
||||
],
|
||||
onActionPressed: (context, action) => _onSavePressed(context, action),
|
||||
appBarBottom: TabBar(
|
||||
controller: _controller,
|
||||
//isScrollable: true,
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
|
|||
// Package imports:
|
||||
import 'package:flutter_redux/flutter_redux.dart';
|
||||
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
|
||||
import 'package:invoiceninja_flutter/redux/task/task_selectors.dart';
|
||||
import 'package:redux/redux.dart';
|
||||
|
||||
// Project imports:
|
||||
|
|
@ -81,7 +82,7 @@ class TaskEditVM {
|
|||
store.dispatch(AddTaskTime(TaskTime(), showAsRunning: true));
|
||||
}
|
||||
},
|
||||
onSavePressed: (BuildContext context) {
|
||||
onSavePressed: (BuildContext context, [EntityAction action]) {
|
||||
Debouncer.runOnComplete(() {
|
||||
final task = store.state.taskUIState.editing;
|
||||
final localization = navigatorKey.localization;
|
||||
|
|
@ -94,6 +95,15 @@ class TaskEditVM {
|
|||
});
|
||||
return null;
|
||||
}
|
||||
|
||||
if (task.isOld &&
|
||||
!hasTaskChanges(task, state.taskState.map) &&
|
||||
[
|
||||
EntityAction.invoiceTask,
|
||||
EntityAction.clone,
|
||||
].contains(action)) {
|
||||
handleEntityAction(task, action);
|
||||
} else {
|
||||
final Completer<TaskEntity> completer = new Completer<TaskEntity>();
|
||||
store.dispatch(SaveTaskRequest(completer: completer, task: task));
|
||||
return completer.future.then((savedTask) {
|
||||
|
|
@ -116,6 +126,13 @@ class TaskEditVM {
|
|||
context: navigatorKey.currentContext, entity: savedTask);
|
||||
}
|
||||
}
|
||||
|
||||
if ([
|
||||
EntityAction.invoiceTask,
|
||||
EntityAction.clone,
|
||||
].contains(action)) {
|
||||
handleEntityAction(savedTask, action);
|
||||
}
|
||||
}).catchError((Object error) {
|
||||
showDialog<ErrorDialog>(
|
||||
context: navigatorKey.currentContext,
|
||||
|
|
@ -123,6 +140,7 @@ class TaskEditVM {
|
|||
return ErrorDialog(error);
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
);
|
||||
|
|
@ -131,7 +149,7 @@ class TaskEditVM {
|
|||
final TaskEntity task;
|
||||
final int taskTimeIndex;
|
||||
final CompanyEntity company;
|
||||
final Function(BuildContext) onSavePressed;
|
||||
final Function(BuildContext, [EntityAction]) onSavePressed;
|
||||
final Function(BuildContext) onCancelPressed;
|
||||
final Function onFabPressed;
|
||||
final bool isLoading;
|
||||
|
|
|
|||
Loading…
Reference in New Issue