|
|
|
|
@ -21,8 +21,11 @@ import 'package:invoiceninja_flutter/redux/user/user_actions.dart';
|
|
|
|
|
import 'package:invoiceninja_flutter/redux/vendor/vendor_actions.dart';
|
|
|
|
|
import 'package:redux/redux.dart';
|
|
|
|
|
|
|
|
|
|
PrefState prefReducer(PrefState state, dynamic action) {
|
|
|
|
|
PrefState prefReducer(
|
|
|
|
|
PrefState state, dynamic action, int selectedCompanyIndex) {
|
|
|
|
|
return state.rebuild((b) => b
|
|
|
|
|
..companyPrefs[selectedCompanyIndex] =
|
|
|
|
|
companyPrefReducer(state.companyPrefs[selectedCompanyIndex], action)
|
|
|
|
|
..layout = layoutReducer(state.layout, action)
|
|
|
|
|
..menuSidebarMode = manuSidebarReducer(state.menuSidebarMode, action)
|
|
|
|
|
..historySidebarMode =
|
|
|
|
|
@ -30,8 +33,6 @@ PrefState prefReducer(PrefState state, dynamic action) {
|
|
|
|
|
..isMenuVisible = menuVisibleReducer(state.isMenuVisible, action)
|
|
|
|
|
..isHistoryVisible = historyVisibleReducer(state.isHistoryVisible, action)
|
|
|
|
|
..enableDarkMode = darkModeReducer(state.enableDarkMode, action)
|
|
|
|
|
//..accentColor = accentColorReducer(state.accentColor, action)
|
|
|
|
|
//..historyList.replace(historyReducer(state.historyList, action))
|
|
|
|
|
..longPressSelectionIsDefault =
|
|
|
|
|
longPressReducer(state.longPressSelectionIsDefault, action)
|
|
|
|
|
..autoStartTasks = autoStartTasksReducer(state.autoStartTasks, action)
|
|
|
|
|
@ -42,118 +43,6 @@ PrefState prefReducer(PrefState state, dynamic action) {
|
|
|
|
|
addDocumentsToInvoiceReducer(state.addDocumentsToInvoice, action));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Reducer<BuiltList<HistoryRecord>> historyReducer = combineReducers([
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewClient>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.clientId, entityType: EntityType.client))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditClient>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.client.id, entityType: EntityType.client))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewProduct>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.productId, entityType: EntityType.product))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditProduct>((historyList, action) =>
|
|
|
|
|
_addToHistory(
|
|
|
|
|
historyList,
|
|
|
|
|
HistoryRecord(
|
|
|
|
|
id: action.product.id, entityType: EntityType.product))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewInvoice>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.invoiceId, entityType: EntityType.invoice))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditInvoice>((historyList, action) =>
|
|
|
|
|
_addToHistory(
|
|
|
|
|
historyList,
|
|
|
|
|
HistoryRecord(
|
|
|
|
|
id: action.invoice.id, entityType: EntityType.invoice))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewPayment>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.paymentId, entityType: EntityType.payment))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditPayment>((historyList, action) =>
|
|
|
|
|
_addToHistory(
|
|
|
|
|
historyList,
|
|
|
|
|
HistoryRecord(
|
|
|
|
|
id: action.payment.id, entityType: EntityType.payment))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewQuote>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.quoteId, entityType: EntityType.quote))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditQuote>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.quote.id, entityType: EntityType.quote))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewTask>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.taskId, entityType: EntityType.task))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditTask>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.task.id, entityType: EntityType.task))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewProject>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.projectId, entityType: EntityType.project))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditProject>((historyList, action) =>
|
|
|
|
|
_addToHistory(
|
|
|
|
|
historyList,
|
|
|
|
|
HistoryRecord(
|
|
|
|
|
id: action.project.id, entityType: EntityType.project))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewVendor>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.vendorId, entityType: EntityType.vendor))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditVendor>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.vendor.id, entityType: EntityType.vendor))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewExpense>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.expenseId, entityType: EntityType.expense))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditExpense>((historyList, action) =>
|
|
|
|
|
_addToHistory(
|
|
|
|
|
historyList,
|
|
|
|
|
HistoryRecord(
|
|
|
|
|
id: action.expense.id, entityType: EntityType.expense))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewCompanyGateway>(
|
|
|
|
|
(historyList, action) => _addToHistory(
|
|
|
|
|
historyList,
|
|
|
|
|
HistoryRecord(
|
|
|
|
|
id: action.companyGatewayId,
|
|
|
|
|
entityType: EntityType.companyGateway))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditCompanyGateway>(
|
|
|
|
|
(historyList, action) => _addToHistory(
|
|
|
|
|
historyList,
|
|
|
|
|
HistoryRecord(
|
|
|
|
|
id: action.companyGateway.id,
|
|
|
|
|
entityType: EntityType.companyGateway))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewUser>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.userId, entityType: EntityType.user))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditUser>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.user.id, entityType: EntityType.user))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewGroup>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.groupId, entityType: EntityType.group))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditGroup>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.group.id, entityType: EntityType.group))),
|
|
|
|
|
// TODO add to starter.sh
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
BuiltList<HistoryRecord> _addToHistory(
|
|
|
|
|
BuiltList<HistoryRecord> list, HistoryRecord record) {
|
|
|
|
|
// don't track new records
|
|
|
|
|
if (record.id.startsWith('-')) {
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
final old =
|
|
|
|
|
list.firstWhere((item) => item.matchesRecord(record), orElse: () => null);
|
|
|
|
|
if (old != null) {
|
|
|
|
|
return list.rebuild((b) => b
|
|
|
|
|
..remove(old)
|
|
|
|
|
..insert(0, record));
|
|
|
|
|
} else {
|
|
|
|
|
return list.rebuild((b) => b
|
|
|
|
|
..insert(0, record)
|
|
|
|
|
..sublist(0, min(200, list.length + 1)));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Reducer<bool> menuVisibleReducer = combineReducers([
|
|
|
|
|
TypedReducer<bool, UserSettingsChanged>((value, action) {
|
|
|
|
|
return action.sidebar == AppSidebar.menu ? !value : value;
|
|
|
|
|
@ -220,12 +109,6 @@ Reducer<bool> darkModeReducer = combineReducers([
|
|
|
|
|
}),
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
Reducer<String> accentColorReducer = combineReducers([
|
|
|
|
|
TypedReducer<String, UserSettingsChanged>((accentColor, action) {
|
|
|
|
|
return action.accentColor ?? accentColor;
|
|
|
|
|
}),
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
Reducer<bool> longPressReducer = combineReducers([
|
|
|
|
|
TypedReducer<bool, UserSettingsChanged>(
|
|
|
|
|
(longPressSelectionIsDefault, action) {
|
|
|
|
|
@ -349,3 +232,127 @@ Reducer<SettingsUIState> settingsUIReducer = combineReducers([
|
|
|
|
|
: state.filterClearedAt);
|
|
|
|
|
}),
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
CompanyPrefState companyPrefReducer(CompanyPrefState state, dynamic action) {
|
|
|
|
|
return state.rebuild((b) => b
|
|
|
|
|
..accentColor = accentColorReducer(state.accentColor, action)
|
|
|
|
|
..historyList.replace(historyReducer(state.historyList, action)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Reducer<String> accentColorReducer = combineReducers([
|
|
|
|
|
TypedReducer<String, UserSettingsChanged>((accentColor, action) {
|
|
|
|
|
return action.accentColor ?? accentColor;
|
|
|
|
|
}),
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
Reducer<BuiltList<HistoryRecord>> historyReducer = combineReducers([
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewClient>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.clientId, entityType: EntityType.client))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditClient>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.client.id, entityType: EntityType.client))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewProduct>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.productId, entityType: EntityType.product))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditProduct>((historyList, action) =>
|
|
|
|
|
_addToHistory(
|
|
|
|
|
historyList,
|
|
|
|
|
HistoryRecord(
|
|
|
|
|
id: action.product.id, entityType: EntityType.product))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewInvoice>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.invoiceId, entityType: EntityType.invoice))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditInvoice>((historyList, action) =>
|
|
|
|
|
_addToHistory(
|
|
|
|
|
historyList,
|
|
|
|
|
HistoryRecord(
|
|
|
|
|
id: action.invoice.id, entityType: EntityType.invoice))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewPayment>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.paymentId, entityType: EntityType.payment))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditPayment>((historyList, action) =>
|
|
|
|
|
_addToHistory(
|
|
|
|
|
historyList,
|
|
|
|
|
HistoryRecord(
|
|
|
|
|
id: action.payment.id, entityType: EntityType.payment))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewQuote>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.quoteId, entityType: EntityType.quote))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditQuote>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.quote.id, entityType: EntityType.quote))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewTask>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.taskId, entityType: EntityType.task))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditTask>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.task.id, entityType: EntityType.task))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewProject>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.projectId, entityType: EntityType.project))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditProject>((historyList, action) =>
|
|
|
|
|
_addToHistory(
|
|
|
|
|
historyList,
|
|
|
|
|
HistoryRecord(
|
|
|
|
|
id: action.project.id, entityType: EntityType.project))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewVendor>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.vendorId, entityType: EntityType.vendor))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditVendor>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.vendor.id, entityType: EntityType.vendor))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewExpense>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.expenseId, entityType: EntityType.expense))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditExpense>((historyList, action) =>
|
|
|
|
|
_addToHistory(
|
|
|
|
|
historyList,
|
|
|
|
|
HistoryRecord(
|
|
|
|
|
id: action.expense.id, entityType: EntityType.expense))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewCompanyGateway>(
|
|
|
|
|
(historyList, action) => _addToHistory(
|
|
|
|
|
historyList,
|
|
|
|
|
HistoryRecord(
|
|
|
|
|
id: action.companyGatewayId,
|
|
|
|
|
entityType: EntityType.companyGateway))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditCompanyGateway>(
|
|
|
|
|
(historyList, action) => _addToHistory(
|
|
|
|
|
historyList,
|
|
|
|
|
HistoryRecord(
|
|
|
|
|
id: action.companyGateway.id,
|
|
|
|
|
entityType: EntityType.companyGateway))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewUser>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.userId, entityType: EntityType.user))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditUser>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.user.id, entityType: EntityType.user))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, ViewGroup>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.groupId, entityType: EntityType.group))),
|
|
|
|
|
TypedReducer<BuiltList<HistoryRecord>, EditGroup>((historyList, action) =>
|
|
|
|
|
_addToHistory(historyList,
|
|
|
|
|
HistoryRecord(id: action.group.id, entityType: EntityType.group))),
|
|
|
|
|
// TODO add to starter.sh
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
BuiltList<HistoryRecord> _addToHistory(
|
|
|
|
|
BuiltList<HistoryRecord> list, HistoryRecord record) {
|
|
|
|
|
// don't track new records
|
|
|
|
|
if (record.id.startsWith('-')) {
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
final old =
|
|
|
|
|
list.firstWhere((item) => item.matchesRecord(record), orElse: () => null);
|
|
|
|
|
if (old != null) {
|
|
|
|
|
return list.rebuild((b) => b
|
|
|
|
|
..remove(old)
|
|
|
|
|
..insert(0, record));
|
|
|
|
|
} else {
|
|
|
|
|
return list.rebuild((b) => b
|
|
|
|
|
..insert(0, record)
|
|
|
|
|
..sublist(0, min(200, list.length + 1)));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|