diff --git a/lib/data/models/widget_model.dart b/lib/data/models/widget_model.dart new file mode 100644 index 000000000..33df35c38 --- /dev/null +++ b/lib/data/models/widget_model.dart @@ -0,0 +1,144 @@ +import 'package:invoiceninja_flutter/constants.dart'; +import 'package:invoiceninja_flutter/data/models/dashboard_model.dart'; +import 'package:invoiceninja_flutter/data/models/static/currency_model.dart'; +import 'package:invoiceninja_flutter/redux/app/app_state.dart'; +import 'package:invoiceninja_flutter/redux/company/company_selectors.dart'; +import 'package:invoiceninja_flutter/redux/company/company_state.dart'; +import 'package:invoiceninja_flutter/redux/static/static_state.dart'; +import 'package:invoiceninja_flutter/utils/formatting.dart'; +import 'package:invoiceninja_flutter/utils/localization.dart'; +import 'package:invoiceninja_flutter/utils/strings.dart'; + +class WidgetData { + WidgetData({ + this.url, + this.companies, + this.companyId, + this.dateRanges, + }); + + WidgetData.fromState(AppState state, AppLocalization localization) + : url = formatApiUrl(state.authState.url), + companyId = state.account.defaultCompanyId, + companies = { + for (var userCompany in state.userCompanyStates + .where((state) => state.company.hasName)) + userCompany.company.id: WidgetCompany.fromUserCompany( + userCompanyState: userCompany, + staticState: state.staticState, + ) + }, + dateRanges = Map.fromIterable( + DateRange.values.where((value) => value != DateRange.custom), + key: (dynamic item) => toSnakeCase('$item'), + value: (dynamic item) => localization.lookup('$item')); + + WidgetData.fromJson(Map json) + : url = json['url'], + companyId = json['company_id'], + companies = json['companies'], + dateRanges = json['date_ranges']; + + Map toJson() => { + 'companies': companies, + 'company_id': companyId, + 'url': url, + 'date_ranges': dateRanges, + }; + + final String url; + final String companyId; + final Map companies; + final Map dateRanges; +} + +class WidgetCompany { + WidgetCompany( + {this.id, + this.name, + this.token, + this.accentColor, + this.firstMonthOfYear, + this.currencyId, + this.currencies}); + + WidgetCompany.fromUserCompany( + {UserCompanyState userCompanyState, StaticState staticState}) + : id = userCompanyState.userCompany.company.id, + name = userCompanyState.userCompany.company.displayName, + token = userCompanyState.userCompany.token.token, + accentColor = userCompanyState.userCompany.settings.validatedAccentColor, + firstMonthOfYear = + parseInt(userCompanyState.userCompany.company.firstMonthOfYear), + currencyId = userCompanyState.userCompany.company.currencyId, + currencies = { + for (var currencyId in getCurrencyIds( + userCompanyState.userCompany.company, + userCompanyState.clientState.map, + userCompanyState.groupState.map, + ).where((currencyId) => currencyId != kCurrencyAll)) + currencyId: WidgetCurrency.fromCurrency( + staticState.currencyMap[currencyId], + ) + }; + + WidgetCompany.fromJson(Map json) + : id = json['id'], + name = json['name'], + token = json['token'], + accentColor = json['accent_color'], + currencies = json['currencies'], + currencyId = json['currency_id'], + firstMonthOfYear = json['first_month_of_year']; + + Map toJson() => { + 'id': id, + 'name': name, + 'token': token, + 'accent_color': accentColor, + 'currencies': currencies, + 'currency_id': currencyId, + 'first_month_of_year': firstMonthOfYear, + }; + + final String id; + final String name; + final String token; + final String accentColor; + final String currencyId; + final int firstMonthOfYear; + final Map currencies; +} + +class WidgetCurrency { + WidgetCurrency({ + this.id, + this.name, + this.code, + this.exchangeRate, + }); + + WidgetCurrency.fromCurrency(CurrencyEntity currency) + : id = currency.id, + name = currency.name, + code = currency.code, + exchangeRate = currency.exchangeRate; + + WidgetCurrency.fromJson(Map json) + : id = json['id'], + name = json['name'], + code = json['code'], + exchangeRate = json['exchange_rate']; + + Map toJson() => { + 'id': id, + 'name': name, + 'code': code, + 'exchange_rate': exchangeRate, + }; + + final String id; + final String name; + final String code; + final double exchangeRate; +} diff --git a/lib/ui/app/menu_drawer.dart b/lib/ui/app/menu_drawer.dart index 4a9d75a15..864eb90d5 100644 --- a/lib/ui/app/menu_drawer.dart +++ b/lib/ui/app/menu_drawer.dart @@ -10,6 +10,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_styled_toast/flutter_styled_toast.dart'; import 'package:invoiceninja_flutter/data/models/dashboard_model.dart'; +import 'package:invoiceninja_flutter/data/models/widget_model.dart'; import 'package:invoiceninja_flutter/redux/auth/auth_actions.dart'; import 'package:invoiceninja_flutter/redux/reports/reports_actions.dart'; import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart'; @@ -1407,7 +1408,6 @@ void _showAbout(BuildContext context) async { ]); } else { final json = jsonEncode(WidgetData.fromState(state, localization)); - print('## Set Widget Data: $json'); await UserDefaults.setString( 'widget_data', json, 'group.com.invoiceninja.app'); await WidgetKit.reloadAllTimelines(); diff --git a/lib/ui/app/window_manager.dart b/lib/ui/app/window_manager.dart index ca7e1968a..0946245ec 100644 --- a/lib/ui/app/window_manager.dart +++ b/lib/ui/app/window_manager.dart @@ -1,24 +1,11 @@ -import 'dart:convert'; - import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/constants.dart'; -import 'package:invoiceninja_flutter/data/models/company_model.dart'; -import 'package:invoiceninja_flutter/data/models/dashboard_model.dart'; -import 'package:invoiceninja_flutter/data/models/static/currency_model.dart'; import 'package:invoiceninja_flutter/main_app.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; -import 'package:invoiceninja_flutter/redux/company/company_selectors.dart'; -import 'package:invoiceninja_flutter/redux/company/company_state.dart'; -import 'package:invoiceninja_flutter/redux/static/static_state.dart'; -import 'package:invoiceninja_flutter/utils/formatting.dart'; -import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart'; -import 'package:invoiceninja_flutter/utils/strings.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import 'package:widget_kit_plugin/user_defaults/user_defaults.dart'; -import 'package:widget_kit_plugin/widget_kit/widget_kit.dart'; import 'package:window_manager/window_manager.dart'; class WindowManager extends StatefulWidget { @@ -95,140 +82,11 @@ class _WindowManagerState extends State with WindowListener { super.dispose(); } + void updateWidgetData() { + + } + @override Widget build(BuildContext context) => widget.child; } -class WidgetData { - WidgetData({ - this.url, - this.companies, - this.companyId, - this.dateRanges, - }); - - WidgetData.fromState(AppState state, AppLocalization localization) - : url = formatApiUrl(state.authState.url), - companyId = state.account.defaultCompanyId, - companies = { - for (var userCompany in state.userCompanyStates - .where((state) => state.company.hasName)) - userCompany.company.id: WidgetCompany.fromUserCompany( - userCompanyState: userCompany, - staticState: state.staticState, - ) - }, - dateRanges = Map.fromIterable( - DateRange.values.where((value) => value != DateRange.custom), - key: (dynamic item) => toSnakeCase('$item'), - value: (dynamic item) => localization.lookup('$item')); - - WidgetData.fromJson(Map json) - : url = json['url'], - companyId = json['company_id'], - companies = json['companies'], - dateRanges = json['date_ranges']; - - Map toJson() => { - 'companies': companies, - 'company_id': companyId, - 'url': url, - 'date_ranges': dateRanges, - }; - - final String url; - final String companyId; - final Map companies; - final Map dateRanges; -} - -class WidgetCompany { - WidgetCompany( - {this.id, - this.name, - this.token, - this.accentColor, - this.firstMonthOfYear, - this.currencyId, - this.currencies}); - - WidgetCompany.fromUserCompany( - {UserCompanyState userCompanyState, StaticState staticState}) - : id = userCompanyState.userCompany.company.id, - name = userCompanyState.userCompany.company.displayName, - token = userCompanyState.userCompany.token.token, - accentColor = userCompanyState.userCompany.settings.validatedAccentColor, - firstMonthOfYear = - parseInt(userCompanyState.userCompany.company.firstMonthOfYear), - currencyId = userCompanyState.userCompany.company.currencyId, - currencies = { - for (var currencyId in getCurrencyIds( - userCompanyState.userCompany.company, - userCompanyState.clientState.map, - userCompanyState.groupState.map, - ).where((currencyId) => currencyId != kCurrencyAll)) - currencyId: WidgetCurrency.fromCurrency( - staticState.currencyMap[currencyId], - ) - }; - - WidgetCompany.fromJson(Map json) - : id = json['id'], - name = json['name'], - token = json['token'], - accentColor = json['accent_color'], - currencies = json['currencies'], - currencyId = json['currency_id'], - firstMonthOfYear = json['first_month_of_year']; - - Map toJson() => { - 'id': id, - 'name': name, - 'token': token, - 'accent_color': accentColor, - 'currencies': currencies, - 'currency_id': currencyId, - 'first_month_of_year': firstMonthOfYear, - }; - - final String id; - final String name; - final String token; - final String accentColor; - final String currencyId; - final int firstMonthOfYear; - final Map currencies; -} - -class WidgetCurrency { - WidgetCurrency({ - this.id, - this.name, - this.code, - this.exchangeRate, - }); - - WidgetCurrency.fromCurrency(CurrencyEntity currency) - : id = currency.id, - name = currency.name, - code = currency.code, - exchangeRate = currency.exchangeRate; - - WidgetCurrency.fromJson(Map json) - : id = json['id'], - name = json['name'], - code = json['code'], - exchangeRate = json['exchange_rate']; - - Map toJson() => { - 'id': id, - 'name': name, - 'code': code, - 'exchange_rate': exchangeRate, - }; - - final String id; - final String name; - final String code; - final double exchangeRate; -}