From 008a146ace515bc36f9aad1ce18d63d6e54b785f Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Sun, 27 Oct 2019 21:29:33 +0200 Subject: [PATCH] Settings --- lib/ui/settings/custom_fields.dart | 137 +------------ lib/ui/settings/generated_numbers.dart | 259 +------------------------ lib/utils/i18n.dart | 3 + 3 files changed, 6 insertions(+), 393 deletions(-) diff --git a/lib/ui/settings/custom_fields.dart b/lib/ui/settings/custom_fields.dart index 9f51206e4..de110e773 100644 --- a/lib/ui/settings/custom_fields.dart +++ b/lib/ui/settings/custom_fields.dart @@ -1,10 +1,8 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:invoiceninja_flutter/constants.dart'; -import 'package:invoiceninja_flutter/redux/static/static_selectors.dart'; import 'package:invoiceninja_flutter/ui/app/form_card.dart'; import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart'; -import 'package:invoiceninja_flutter/ui/app/forms/date_picker.dart'; import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart'; import 'package:invoiceninja_flutter/ui/settings/custom_fields_vm.dart'; import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart'; @@ -84,7 +82,6 @@ class _CustomFieldsState extends State Widget build(BuildContext context) { final localization = AppLocalization.of(context); final viewModel = widget.viewModel; - final settings = viewModel.settings; final state = viewModel.state; return SettingsScaffold( @@ -96,7 +93,7 @@ class _CustomFieldsState extends State isScrollable: true, tabs: [ Tab( - text: localization.general, + text: localization.company, ), Tab( text: localization.clients, @@ -119,64 +116,6 @@ class _CustomFieldsState extends State children: [ ListView( children: [ - FormCard( - children: [ - InputDecorator( - decoration: InputDecoration( - labelText: localization.numberPadding, - ), - child: DropdownButtonHideUnderline( - child: DropdownButton( - value: settings.counterPadding, - isExpanded: true, - isDense: true, - onChanged: (value) => viewModel.onSettingsChanged( - settings.rebuild((b) => b..counterPadding = value)), - items: List.generate(10, (i) => i + 1) - .map((value) => DropdownMenuItem( - child: Text('${'0' * (value - 1)}1'), - value: value, - )) - .toList(), - ), - ), - ), - DecoratedFormField( - label: localization.recurringPrefix, - controller: _recurringPrefixController, - ), - InputDecorator( - decoration: InputDecoration( - labelText: localization.resetCounter, - ), - child: DropdownButtonHideUnderline( - child: DropdownButton( - value: settings.resetCounterFrequencyId, - isExpanded: true, - isDense: true, - onChanged: (value) => viewModel.onSettingsChanged( - settings.rebuild( - (b) => b..resetCounterFrequencyId = value)), - items: memoizedFrequencyList( - state.staticState.frequencyMap) - .map((frequencyId) => DropdownMenuItem( - child: Text(state.staticState - .frequencyMap[frequencyId].name), - value: frequencyId, - )) - .toList(), - ), - ), - ), - if ((settings.resetCounterFrequencyId ?? '').isNotEmpty) - DatePicker( - labelText: localization.nextReset, - selectedDate: settings.resetCounterDate, - onSelected: (value) => viewModel.onSettingsChanged( - settings.rebuild((b) => b..resetCounterDate = value)), - ), - ], - ), CustomFieldsSettings( viewModel: viewModel, fieldLabel: localization.customCompanyField, @@ -186,7 +125,6 @@ class _CustomFieldsState extends State ], ), ListView(children: [ - EntityNumberSettings(), CustomFieldsSettings( viewModel: viewModel, fieldLabel: localization.customClientField, @@ -197,7 +135,6 @@ class _CustomFieldsState extends State ), ]), ListView(children: [ - EntityNumberSettings(), CustomFieldsSettings( viewModel: viewModel, fieldLabel: localization.customInvoiceField, @@ -209,14 +146,12 @@ class _CustomFieldsState extends State ), ]), ListView(children: [ - EntityNumberSettings(), CustomFieldsSettings( viewModel: viewModel, fieldLabel: localization.customCreditField, ), ]), ListView(children: [ - EntityNumberSettings(), CustomFieldsSettings( viewModel: viewModel, fieldLabel: localization.customPaymentField, @@ -228,76 +163,6 @@ class _CustomFieldsState extends State } } -class EntityNumberSettings extends StatefulWidget { - @override - _EntityNumberSettingsState createState() => _EntityNumberSettingsState(); -} - -class _EntityNumberSettingsState extends State { - final _counterController = TextEditingController(); - final _patternController = TextEditingController(); - - List _controllers = []; - - @override - void dispose() { - _controllers.forEach((dynamic controller) { - controller.removeListener(_onChanged); - controller.dispose(); - }); - super.dispose(); - } - - @override - void didChangeDependencies() { - _controllers = [ - _counterController, - _patternController, - ]; - - _controllers - .forEach((dynamic controller) => controller.removeListener(_onChanged)); - - /* - final product = widget.viewModel.product; - _productKeyController.text = product.productKey; - */ - - _controllers - .forEach((dynamic controller) => controller.addListener(_onChanged)); - - super.didChangeDependencies(); - } - - void _onChanged() { - /* - final product = widget.viewModel.product.rebuild((b) => b - ..customValue2 = _custom2Controller.text.trim()); - if (product != widget.viewModel.product) { - widget.viewModel.onChanged(product); - } - */ - } - - @override - Widget build(BuildContext context) { - final localization = AppLocalization.of(context); - - return FormCard( - children: [ - DecoratedFormField( - label: localization.numberPattern, - controller: _patternController, - ), - DecoratedFormField( - label: localization.numberCounter, - controller: _counterController, - ), - ], - ); - } -} - class CustomFieldsSettings extends StatefulWidget { const CustomFieldsSettings( {@required this.fieldLabel, diff --git a/lib/ui/settings/generated_numbers.dart b/lib/ui/settings/generated_numbers.dart index b05ae0c3c..9c844c8c5 100644 --- a/lib/ui/settings/generated_numbers.dart +++ b/lib/ui/settings/generated_numbers.dart @@ -1,6 +1,5 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/redux/static/static_selectors.dart'; import 'package:invoiceninja_flutter/ui/app/form_card.dart'; import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart'; @@ -88,7 +87,7 @@ class _GeneratedNumbersState extends State final state = viewModel.state; return SettingsScaffold( - title: localization.customFields, + title: localization.generatedNumbers, onSavePressed: viewModel.onSavePressed, appBarBottom: TabBar( key: ValueKey(state.settingsUIState.updatedAt), @@ -96,7 +95,7 @@ class _GeneratedNumbersState extends State isScrollable: true, tabs: [ Tab( - text: localization.general, + text: localization.settings, ), Tab( text: localization.clients, @@ -177,50 +176,19 @@ class _GeneratedNumbersState extends State ), ], ), - GeneratedNumbersSettings( - viewModel: viewModel, - fieldLabel: localization.customCompanyField, - valueLabel: localization.customCompanyValue, - showValues: true, - ), ], ), ListView(children: [ EntityNumberSettings(), - GeneratedNumbersSettings( - viewModel: viewModel, - fieldLabel: localization.customClientField, - ), - GeneratedNumbersSettings( - viewModel: viewModel, - fieldLabel: localization.customContactField, - ), ]), ListView(children: [ EntityNumberSettings(), - GeneratedNumbersSettings( - viewModel: viewModel, - fieldLabel: localization.customInvoiceField, - ), - GeneratedNumbersSettings( - viewModel: viewModel, - fieldLabel: localization.customInvoiceSurcharge, - showChargeTaxes: true, - ), ]), ListView(children: [ EntityNumberSettings(), - GeneratedNumbersSettings( - viewModel: viewModel, - fieldLabel: localization.customCreditField, - ), ]), ListView(children: [ EntityNumberSettings(), - GeneratedNumbersSettings( - viewModel: viewModel, - fieldLabel: localization.customPaymentField, - ), ]), ], ), @@ -298,226 +266,3 @@ class _EntityNumberSettingsState extends State { } } -class GeneratedNumbersSettings extends StatefulWidget { - const GeneratedNumbersSettings( - {@required this.fieldLabel, - @required this.viewModel, - this.showChargeTaxes = false, - this.showValues = false, - this.valueLabel}); - - final GeneratedNumbersVM viewModel; - final String fieldLabel; - final String valueLabel; - final bool showChargeTaxes; - final bool showValues; - - @override - _GeneratedNumbersSettingsState createState() => _GeneratedNumbersSettingsState(); -} - -class _GeneratedNumbersSettingsState extends State { - final _customField1Controller = TextEditingController(); - final _customField2Controller = TextEditingController(); - final _customField3Controller = TextEditingController(); - final _customField4Controller = TextEditingController(); - - final _customValue1Controller = TextEditingController(); - final _customValue2Controller = TextEditingController(); - final _customValue3Controller = TextEditingController(); - final _customValue4Controller = TextEditingController(); - - List _controllers = []; - - @override - void dispose() { - _controllers.forEach((dynamic controller) { - controller.removeListener(_onChanged); - controller.dispose(); - }); - super.dispose(); - } - - @override - void didChangeDependencies() { - _controllers = [ - _customField1Controller, - _customField2Controller, - _customField3Controller, - _customField4Controller, - _customValue1Controller, - _customValue2Controller, - _customValue3Controller, - _customValue4Controller, - ]; - - _controllers - .forEach((dynamic controller) => controller.removeListener(_onChanged)); - - /* - final product = widget.viewModel.product; - _productKeyController.text = product.productKey; - */ - - _controllers - .forEach((dynamic controller) => controller.addListener(_onChanged)); - - super.didChangeDependencies(); - } - - void _onChanged() { - /* - final product = widget.viewModel.product.rebuild((b) => b - ..customValue2 = _custom2Controller.text.trim()); - if (product != widget.viewModel.product) { - widget.viewModel.onChanged(product); - } - */ - } - - @override - Widget build(BuildContext context) { - final viewModel = widget.viewModel; - final company = viewModel.company; - - return FormCard( - children: [ - Row( - children: [ - Expanded( - child: CustomFormField( - label: widget.fieldLabel, - controller: _customField1Controller, - showTaxes: widget.showChargeTaxes, - taxesEnabled: company.enableCustomSurchargeTaxes1, - onTaxesChanged: (value) => viewModel.onCompanyChanged(company - .rebuild((b) => b..enableCustomSurchargeTaxes1 = value)), - ), - ), - if (widget.showValues) ...[ - SizedBox(width: kGutterWidth), - Expanded( - child: CustomFormField( - label: widget.valueLabel, - controller: _customValue1Controller, - ), - ), - ] - ], - ), - Row( - children: [ - Expanded( - child: CustomFormField( - label: widget.fieldLabel, - controller: _customField2Controller, - showTaxes: widget.showChargeTaxes, - taxesEnabled: company.enableCustomSurchargeTaxes2, - onTaxesChanged: (value) => viewModel.onCompanyChanged(company - .rebuild((b) => b..enableCustomSurchargeTaxes2 = value)), - ), - ), - if (widget.showValues) ...[ - SizedBox(width: kGutterWidth), - Expanded( - child: CustomFormField( - label: widget.valueLabel, - controller: _customValue2Controller, - ), - ), - ] - ], - ), - Row( - children: [ - Expanded( - child: CustomFormField( - label: widget.fieldLabel, - controller: _customField3Controller, - showTaxes: widget.showChargeTaxes, - taxesEnabled: company.enableCustomSurchargeTaxes3, - onTaxesChanged: (value) => viewModel.onCompanyChanged(company - .rebuild((b) => b..enableCustomSurchargeTaxes3 = value)), - ), - ), - if (widget.showValues) ...[ - SizedBox(width: kGutterWidth), - Expanded( - child: CustomFormField( - label: widget.valueLabel, - controller: _customValue3Controller, - ), - ), - ] - ], - ), - Row( - children: [ - Expanded( - child: CustomFormField( - label: widget.fieldLabel, - controller: _customField4Controller, - showTaxes: widget.showChargeTaxes, - taxesEnabled: company.enableCustomSurchargeTaxes4, - onTaxesChanged: (value) => viewModel.onCompanyChanged(company - .rebuild((b) => b..enableCustomSurchargeTaxes4 = value)), - ), - ), - if (widget.showValues) ...[ - SizedBox(width: kGutterWidth), - Expanded( - child: CustomFormField( - label: widget.valueLabel, - controller: _customValue4Controller, - ), - ), - ] - ], - ), - ], - ); - } -} - -class CustomFormField extends StatelessWidget { - const CustomFormField({ - @required this.label, - @required this.controller, - this.showTaxes = false, - this.taxesEnabled, - this.onTaxesChanged, - }); - - final String label; - final TextEditingController controller; - final bool showTaxes; - final bool taxesEnabled; - final Function(bool) onTaxesChanged; - - @override - Widget build(BuildContext context) { - final localization = AppLocalization.of(context); - - return Row( - children: [ - Expanded( - child: DecoratedFormField( - label: label, - controller: controller, - ), - ), - if (showTaxes) ...[ - Checkbox( - activeColor: Theme.of(context).accentColor, - value: taxesEnabled ?? false, - onChanged: onTaxesChanged, - ), - GestureDetector( - child: Text(localization.chargeTaxes), - onTap: () => onTaxesChanged(!taxesEnabled), - ), - ] - ], - ); - } -} diff --git a/lib/utils/i18n.dart b/lib/utils/i18n.dart index 54b5b4d1d..11ebb3cd2 100644 --- a/lib/utils/i18n.dart +++ b/lib/utils/i18n.dart @@ -14,6 +14,7 @@ abstract class LocaleCodeAware { mixin LocalizationsProvider on LocaleCodeAware { static final Map> _localizedValues = { 'en': { + 'company': 'Company', 'generated_numbers': 'Generated Numbers', 'charge_taxes': 'Charge Taxes', 'credit': 'Credit', @@ -15207,6 +15208,8 @@ mixin LocalizationsProvider on LocaleCodeAware { String get generatedNumbers => _localizedValues[localeCode]['generated_numbers']; + String get company => _localizedValues[localeCode]['company']; + String lookup(String key) { final lookupKey = toSnakeCase(key); return _localizedValues[localeCode][lookupKey] ??