Dashboard overview

This commit is contained in:
Hillel Coren 2022-08-16 11:05:49 +03:00
parent d9246376bd
commit c6b08a6d00
8 changed files with 137 additions and 65 deletions

View File

@ -1011,6 +1011,8 @@ abstract class UserSettingsEntity
period: DashboardUISettings.PERIOD_CURRENT, period: DashboardUISettings.PERIOD_CURRENT,
), ),
]), ]),
dashboardFieldsPerRowMobile: 1,
dashboardFieldsPerRowDesktop: 2,
); );
} }
@ -1039,6 +1041,12 @@ abstract class UserSettingsEntity
@BuiltValueField(wireName: 'dashboard_fields') @BuiltValueField(wireName: 'dashboard_fields')
BuiltList<DashboardField> get dashboardFields; BuiltList<DashboardField> get dashboardFields;
@BuiltValueField(wireName: 'dashboard_fields_per_row_mobile')
int get dashboardFieldsPerRowMobile;
@BuiltValueField(wireName: 'dashboard_fields_per_row_desktop')
int get dashboardFieldsPerRowDesktop;
List<String> getTableColumns(EntityType entityType) { List<String> getTableColumns(EntityType entityType) {
if (tableColumns != null && tableColumns.containsKey('$entityType')) { if (tableColumns != null && tableColumns.containsKey('$entityType')) {
return tableColumns['$entityType'].toList(); return tableColumns['$entityType'].toList();
@ -1063,6 +1071,8 @@ abstract class UserSettingsEntity
period: DashboardUISettings.PERIOD_CURRENT, period: DashboardUISettings.PERIOD_CURRENT,
), ),
])) ]))
..dashboardFieldsPerRowMobile = 1
..dashboardFieldsPerRowDesktop = 2
..includeDeletedClients = false; ..includeDeletedClients = false;
static Serializer<UserSettingsEntity> get serializer => static Serializer<UserSettingsEntity> get serializer =>

View File

@ -1186,6 +1186,12 @@ class _$UserSettingsEntitySerializer
serializers.serialize(object.dashboardFields, serializers.serialize(object.dashboardFields,
specifiedType: const FullType( specifiedType: const FullType(
BuiltList, const [const FullType(DashboardField)])), BuiltList, const [const FullType(DashboardField)])),
'dashboard_fields_per_row_mobile',
serializers.serialize(object.dashboardFieldsPerRowMobile,
specifiedType: const FullType(int)),
'dashboard_fields_per_row_desktop',
serializers.serialize(object.dashboardFieldsPerRowDesktop,
specifiedType: const FullType(int)),
]; ];
Object value; Object value;
value = object.accentColor; value = object.accentColor;
@ -1242,6 +1248,14 @@ class _$UserSettingsEntitySerializer
BuiltList, const [const FullType(DashboardField)])) BuiltList, const [const FullType(DashboardField)]))
as BuiltList<Object>); as BuiltList<Object>);
break; break;
case 'dashboard_fields_per_row_mobile':
result.dashboardFieldsPerRowMobile = serializers.deserialize(value,
specifiedType: const FullType(int)) as int;
break;
case 'dashboard_fields_per_row_desktop':
result.dashboardFieldsPerRowDesktop = serializers.deserialize(value,
specifiedType: const FullType(int)) as int;
break;
} }
} }
@ -3623,6 +3637,10 @@ class _$UserSettingsEntity extends UserSettingsEntity {
final bool includeDeletedClients; final bool includeDeletedClients;
@override @override
final BuiltList<DashboardField> dashboardFields; final BuiltList<DashboardField> dashboardFields;
@override
final int dashboardFieldsPerRowMobile;
@override
final int dashboardFieldsPerRowDesktop;
factory _$UserSettingsEntity( factory _$UserSettingsEntity(
[void Function(UserSettingsEntityBuilder) updates]) => [void Function(UserSettingsEntityBuilder) updates]) =>
@ -3634,7 +3652,9 @@ class _$UserSettingsEntity extends UserSettingsEntity {
this.reportSettings, this.reportSettings,
this.numberYearsActive, this.numberYearsActive,
this.includeDeletedClients, this.includeDeletedClients,
this.dashboardFields}) this.dashboardFields,
this.dashboardFieldsPerRowMobile,
this.dashboardFieldsPerRowDesktop})
: super._() { : super._() {
BuiltValueNullFieldError.checkNotNull( BuiltValueNullFieldError.checkNotNull(
tableColumns, 'UserSettingsEntity', 'tableColumns'); tableColumns, 'UserSettingsEntity', 'tableColumns');
@ -3646,6 +3666,10 @@ class _$UserSettingsEntity extends UserSettingsEntity {
includeDeletedClients, 'UserSettingsEntity', 'includeDeletedClients'); includeDeletedClients, 'UserSettingsEntity', 'includeDeletedClients');
BuiltValueNullFieldError.checkNotNull( BuiltValueNullFieldError.checkNotNull(
dashboardFields, 'UserSettingsEntity', 'dashboardFields'); dashboardFields, 'UserSettingsEntity', 'dashboardFields');
BuiltValueNullFieldError.checkNotNull(dashboardFieldsPerRowMobile,
'UserSettingsEntity', 'dashboardFieldsPerRowMobile');
BuiltValueNullFieldError.checkNotNull(dashboardFieldsPerRowDesktop,
'UserSettingsEntity', 'dashboardFieldsPerRowDesktop');
} }
@override @override
@ -3666,7 +3690,9 @@ class _$UserSettingsEntity extends UserSettingsEntity {
reportSettings == other.reportSettings && reportSettings == other.reportSettings &&
numberYearsActive == other.numberYearsActive && numberYearsActive == other.numberYearsActive &&
includeDeletedClients == other.includeDeletedClients && includeDeletedClients == other.includeDeletedClients &&
dashboardFields == other.dashboardFields; dashboardFields == other.dashboardFields &&
dashboardFieldsPerRowMobile == other.dashboardFieldsPerRowMobile &&
dashboardFieldsPerRowDesktop == other.dashboardFieldsPerRowDesktop;
} }
int __hashCode; int __hashCode;
@ -3675,11 +3701,17 @@ class _$UserSettingsEntity extends UserSettingsEntity {
return __hashCode ??= $jf($jc( return __hashCode ??= $jf($jc(
$jc( $jc(
$jc( $jc(
$jc($jc($jc(0, accentColor.hashCode), tableColumns.hashCode), $jc(
reportSettings.hashCode), $jc(
numberYearsActive.hashCode), $jc(
includeDeletedClients.hashCode), $jc($jc(0, accentColor.hashCode),
dashboardFields.hashCode)); tableColumns.hashCode),
reportSettings.hashCode),
numberYearsActive.hashCode),
includeDeletedClients.hashCode),
dashboardFields.hashCode),
dashboardFieldsPerRowMobile.hashCode),
dashboardFieldsPerRowDesktop.hashCode));
} }
@override @override
@ -3690,7 +3722,9 @@ class _$UserSettingsEntity extends UserSettingsEntity {
..add('reportSettings', reportSettings) ..add('reportSettings', reportSettings)
..add('numberYearsActive', numberYearsActive) ..add('numberYearsActive', numberYearsActive)
..add('includeDeletedClients', includeDeletedClients) ..add('includeDeletedClients', includeDeletedClients)
..add('dashboardFields', dashboardFields)) ..add('dashboardFields', dashboardFields)
..add('dashboardFieldsPerRowMobile', dashboardFieldsPerRowMobile)
..add('dashboardFieldsPerRowDesktop', dashboardFieldsPerRowDesktop))
.toString(); .toString();
} }
} }
@ -3731,6 +3765,16 @@ class UserSettingsEntityBuilder
set dashboardFields(ListBuilder<DashboardField> dashboardFields) => set dashboardFields(ListBuilder<DashboardField> dashboardFields) =>
_$this._dashboardFields = dashboardFields; _$this._dashboardFields = dashboardFields;
int _dashboardFieldsPerRowMobile;
int get dashboardFieldsPerRowMobile => _$this._dashboardFieldsPerRowMobile;
set dashboardFieldsPerRowMobile(int dashboardFieldsPerRowMobile) =>
_$this._dashboardFieldsPerRowMobile = dashboardFieldsPerRowMobile;
int _dashboardFieldsPerRowDesktop;
int get dashboardFieldsPerRowDesktop => _$this._dashboardFieldsPerRowDesktop;
set dashboardFieldsPerRowDesktop(int dashboardFieldsPerRowDesktop) =>
_$this._dashboardFieldsPerRowDesktop = dashboardFieldsPerRowDesktop;
UserSettingsEntityBuilder() { UserSettingsEntityBuilder() {
UserSettingsEntity._initializeBuilder(this); UserSettingsEntity._initializeBuilder(this);
} }
@ -3744,6 +3788,8 @@ class UserSettingsEntityBuilder
_numberYearsActive = $v.numberYearsActive; _numberYearsActive = $v.numberYearsActive;
_includeDeletedClients = $v.includeDeletedClients; _includeDeletedClients = $v.includeDeletedClients;
_dashboardFields = $v.dashboardFields.toBuilder(); _dashboardFields = $v.dashboardFields.toBuilder();
_dashboardFieldsPerRowMobile = $v.dashboardFieldsPerRowMobile;
_dashboardFieldsPerRowDesktop = $v.dashboardFieldsPerRowDesktop;
_$v = null; _$v = null;
} }
return this; return this;
@ -3775,7 +3821,17 @@ class UserSettingsEntityBuilder
includeDeletedClients, includeDeletedClients,
'UserSettingsEntity', 'UserSettingsEntity',
'includeDeletedClients'), 'includeDeletedClients'),
dashboardFields: dashboardFields.build()); dashboardFields: dashboardFields.build(),
dashboardFieldsPerRowMobile:
BuiltValueNullFieldError.checkNotNull(
dashboardFieldsPerRowMobile,
'UserSettingsEntity',
'dashboardFieldsPerRowMobile'),
dashboardFieldsPerRowDesktop:
BuiltValueNullFieldError.checkNotNull(
dashboardFieldsPerRowDesktop,
'UserSettingsEntity',
'dashboardFieldsPerRowDesktop'));
} catch (_) { } catch (_) {
String _$failedField; String _$failedField;
try { try {

View File

@ -143,6 +143,21 @@ Reducer<UserCompanyEntity> userCompanyEntityReducer = combineReducers([
(userCompany, action) => userCompany.rebuild( (userCompany, action) => userCompany.rebuild(
(b) => b..settings.dashboardFields.replace(action.dashboardFields)), (b) => b..settings.dashboardFields.replace(action.dashboardFields)),
), ),
TypedReducer<UserCompanyEntity, UpdateDashboardFieldSettingss>(
(userCompany, action) {
if (action.numberFieldsPerRowDesktop != null) {
return userCompany.rebuild((b) => b
..settings.dashboardFieldsPerRowDesktop =
action.numberFieldsPerRowDesktop);
} else if (action.numberFieldsPerRowDesktop != null) {
return userCompany.rebuild((b) => b
..settings.dashboardFieldsPerRowMobile =
action.numberFieldsPerRowMobile);
}
return userCompany;
},
),
]); ]);
UserCompanyEntity loadCompanySuccessReducer( UserCompanyEntity loadCompanySuccessReducer(

View File

@ -22,7 +22,6 @@ class UpdateDashboardSettings implements PersistUI {
this.currencyId, this.currencyId,
this.includeTaxes, this.includeTaxes,
this.groupBy, this.groupBy,
this.numberFieldsPerRow,
}); });
DashboardSettings settings; DashboardSettings settings;
@ -30,7 +29,6 @@ class UpdateDashboardSettings implements PersistUI {
String currencyId; String currencyId;
bool includeTaxes; bool includeTaxes;
String groupBy; String groupBy;
final int numberFieldsPerRow;
} }
class UpdateDashboardFields implements PersistUI { class UpdateDashboardFields implements PersistUI {
@ -41,6 +39,16 @@ class UpdateDashboardFields implements PersistUI {
BuiltList<DashboardField> dashboardFields; BuiltList<DashboardField> dashboardFields;
} }
class UpdateDashboardFieldSettingss implements PersistUI {
UpdateDashboardFieldSettingss({
this.numberFieldsPerRowMobile,
this.numberFieldsPerRowDesktop,
});
final int numberFieldsPerRowMobile;
final int numberFieldsPerRowDesktop;
}
class UpdateDashboardSelection implements PersistUI { class UpdateDashboardSelection implements PersistUI {
UpdateDashboardSelection({ UpdateDashboardSelection({
this.entityType, this.entityType,

View File

@ -65,9 +65,6 @@ DashboardUISettings dashboardSettingsReducer(
return state.rebuild((b) => b..currencyId = action.currencyId); return state.rebuild((b) => b..currencyId = action.currencyId);
} else if (action.groupBy != null) { } else if (action.groupBy != null) {
return state.rebuild((b) => b..groupBy = action.groupBy); return state.rebuild((b) => b..groupBy = action.groupBy);
} else if (action.numberFieldsPerRow != null) {
return state
.rebuild((b) => b..numberFieldsPerRow = action.numberFieldsPerRow);
} }
} else if (action is SelectCompany) { } else if (action is SelectCompany) {
//return state.rebuild((b) => b..currencyId = action.company.currencyId); //return state.rebuild((b) => b..currencyId = action.company.currencyId);

View File

@ -56,7 +56,6 @@ abstract class DashboardUISettings
currencyId: kCurrencyAll, currencyId: kCurrencyAll,
includeTaxes: true, includeTaxes: true,
groupBy: kReportGroupDay, groupBy: kReportGroupDay,
numberFieldsPerRow: 2,
); );
} }
@ -108,8 +107,6 @@ abstract class DashboardUISettings
String get groupBy; String get groupBy;
int get numberFieldsPerRow;
bool matchesCurrency(String match) { bool matchesCurrency(String match) {
if (currencyId == null || if (currencyId == null ||
currencyId.isEmpty || currencyId.isEmpty ||
@ -141,9 +138,8 @@ abstract class DashboardUISettings
} }
// ignore: unused_element // ignore: unused_element
static void _initializeBuilder(DashboardUISettingsBuilder builder) => builder static void _initializeBuilder(DashboardUISettingsBuilder builder) =>
..groupBy = kReportGroupDay builder..groupBy = kReportGroupDay;
..numberFieldsPerRow = 2;
static Serializer<DashboardUISettings> get serializer => static Serializer<DashboardUISettings> get serializer =>
_$dashboardUISettingsSerializer; _$dashboardUISettingsSerializer;

View File

@ -128,9 +128,6 @@ class _$DashboardUISettingsSerializer
'groupBy', 'groupBy',
serializers.serialize(object.groupBy, serializers.serialize(object.groupBy,
specifiedType: const FullType(String)), specifiedType: const FullType(String)),
'numberFieldsPerRow',
serializers.serialize(object.numberFieldsPerRow,
specifiedType: const FullType(int)),
]; ];
return result; return result;
@ -193,10 +190,6 @@ class _$DashboardUISettingsSerializer
result.groupBy = serializers.deserialize(value, result.groupBy = serializers.deserialize(value,
specifiedType: const FullType(String)) as String; specifiedType: const FullType(String)) as String;
break; break;
case 'numberFieldsPerRow':
result.numberFieldsPerRow = serializers.deserialize(value,
specifiedType: const FullType(int)) as int;
break;
} }
} }
@ -378,8 +371,6 @@ class _$DashboardUISettings extends DashboardUISettings {
final bool includeTaxes; final bool includeTaxes;
@override @override
final String groupBy; final String groupBy;
@override
final int numberFieldsPerRow;
factory _$DashboardUISettings( factory _$DashboardUISettings(
[void Function(DashboardUISettingsBuilder) updates]) => [void Function(DashboardUISettingsBuilder) updates]) =>
@ -396,8 +387,7 @@ class _$DashboardUISettings extends DashboardUISettings {
this.offset, this.offset,
this.currencyId, this.currencyId,
this.includeTaxes, this.includeTaxes,
this.groupBy, this.groupBy})
this.numberFieldsPerRow})
: super._() { : super._() {
BuiltValueNullFieldError.checkNotNull( BuiltValueNullFieldError.checkNotNull(
dateRange, 'DashboardUISettings', 'dateRange'); dateRange, 'DashboardUISettings', 'dateRange');
@ -421,8 +411,6 @@ class _$DashboardUISettings extends DashboardUISettings {
includeTaxes, 'DashboardUISettings', 'includeTaxes'); includeTaxes, 'DashboardUISettings', 'includeTaxes');
BuiltValueNullFieldError.checkNotNull( BuiltValueNullFieldError.checkNotNull(
groupBy, 'DashboardUISettings', 'groupBy'); groupBy, 'DashboardUISettings', 'groupBy');
BuiltValueNullFieldError.checkNotNull(
numberFieldsPerRow, 'DashboardUISettings', 'numberFieldsPerRow');
} }
@override @override
@ -448,8 +436,7 @@ class _$DashboardUISettings extends DashboardUISettings {
offset == other.offset && offset == other.offset &&
currencyId == other.currencyId && currencyId == other.currencyId &&
includeTaxes == other.includeTaxes && includeTaxes == other.includeTaxes &&
groupBy == other.groupBy && groupBy == other.groupBy;
numberFieldsPerRow == other.numberFieldsPerRow;
} }
int __hashCode; int __hashCode;
@ -464,19 +451,17 @@ class _$DashboardUISettings extends DashboardUISettings {
$jc( $jc(
$jc( $jc(
$jc( $jc(
$jc( $jc($jc(0, dateRange.hashCode),
$jc($jc(0, dateRange.hashCode), customStartDate.hashCode),
customStartDate.hashCode), customEndDate.hashCode),
customEndDate.hashCode), enableComparison.hashCode),
enableComparison.hashCode), compareDateRange.hashCode),
compareDateRange.hashCode), compareCustomStartDate.hashCode),
compareCustomStartDate.hashCode), compareCustomEndDate.hashCode),
compareCustomEndDate.hashCode), offset.hashCode),
offset.hashCode), currencyId.hashCode),
currencyId.hashCode), includeTaxes.hashCode),
includeTaxes.hashCode), groupBy.hashCode));
groupBy.hashCode),
numberFieldsPerRow.hashCode));
} }
@override @override
@ -492,8 +477,7 @@ class _$DashboardUISettings extends DashboardUISettings {
..add('offset', offset) ..add('offset', offset)
..add('currencyId', currencyId) ..add('currencyId', currencyId)
..add('includeTaxes', includeTaxes) ..add('includeTaxes', includeTaxes)
..add('groupBy', groupBy) ..add('groupBy', groupBy))
..add('numberFieldsPerRow', numberFieldsPerRow))
.toString(); .toString();
} }
} }
@ -552,11 +536,6 @@ class DashboardUISettingsBuilder
String get groupBy => _$this._groupBy; String get groupBy => _$this._groupBy;
set groupBy(String groupBy) => _$this._groupBy = groupBy; set groupBy(String groupBy) => _$this._groupBy = groupBy;
int _numberFieldsPerRow;
int get numberFieldsPerRow => _$this._numberFieldsPerRow;
set numberFieldsPerRow(int numberFieldsPerRow) =>
_$this._numberFieldsPerRow = numberFieldsPerRow;
DashboardUISettingsBuilder() { DashboardUISettingsBuilder() {
DashboardUISettings._initializeBuilder(this); DashboardUISettings._initializeBuilder(this);
} }
@ -575,7 +554,6 @@ class DashboardUISettingsBuilder
_currencyId = $v.currencyId; _currencyId = $v.currencyId;
_includeTaxes = $v.includeTaxes; _includeTaxes = $v.includeTaxes;
_groupBy = $v.groupBy; _groupBy = $v.groupBy;
_numberFieldsPerRow = $v.numberFieldsPerRow;
_$v = null; _$v = null;
} }
return this; return this;
@ -615,8 +593,7 @@ class DashboardUISettingsBuilder
offset: BuiltValueNullFieldError.checkNotNull(offset, 'DashboardUISettings', 'offset'), offset: BuiltValueNullFieldError.checkNotNull(offset, 'DashboardUISettings', 'offset'),
currencyId: BuiltValueNullFieldError.checkNotNull(currencyId, 'DashboardUISettings', 'currencyId'), currencyId: BuiltValueNullFieldError.checkNotNull(currencyId, 'DashboardUISettings', 'currencyId'),
includeTaxes: BuiltValueNullFieldError.checkNotNull(includeTaxes, 'DashboardUISettings', 'includeTaxes'), includeTaxes: BuiltValueNullFieldError.checkNotNull(includeTaxes, 'DashboardUISettings', 'includeTaxes'),
groupBy: BuiltValueNullFieldError.checkNotNull(groupBy, 'DashboardUISettings', 'groupBy'), groupBy: BuiltValueNullFieldError.checkNotNull(groupBy, 'DashboardUISettings', 'groupBy'));
numberFieldsPerRow: BuiltValueNullFieldError.checkNotNull(numberFieldsPerRow, 'DashboardUISettings', 'numberFieldsPerRow'));
replace(_$result); replace(_$result);
return _$result; return _$result;
} }

View File

@ -326,6 +326,7 @@ class DashboardPanels extends StatelessWidget {
final company = state.company; final company = state.company;
final localization = AppLocalization.of(context); final localization = AppLocalization.of(context);
final settings = viewModel.dashboardUIState.settings; final settings = viewModel.dashboardUIState.settings;
final userCompanySettings = state.userCompany.settings;
final runningTasks = _runningTasks(context); final runningTasks = _runningTasks(context);
if (!state.staticState.isLoaded) { if (!state.staticState.isLoaded) {
@ -572,7 +573,10 @@ class DashboardPanels extends StatelessWidget {
Padding( Padding(
padding: const EdgeInsets.symmetric(horizontal: 12), padding: const EdgeInsets.symmetric(horizontal: 12),
child: StaggeredGrid.count( child: StaggeredGrid.count(
crossAxisCount: settings.numberFieldsPerRow, crossAxisCount: isMobile(context)
? userCompanySettings.dashboardFieldsPerRowMobile
: userCompanySettings
.dashboardFieldsPerRowDesktop,
crossAxisSpacing: 8, crossAxisSpacing: 8,
mainAxisSpacing: 12, mainAxisSpacing: 12,
children: state.userCompany.settings.dashboardFields children: state.userCompany.settings.dashboardFields
@ -982,7 +986,7 @@ class __DashboardSettingsState extends State<_DashboardSettings> {
final groupMap = state.groupState.map; final groupMap = state.groupState.map;
final company = state.company; final company = state.company;
final settings = state.dashboardUIState.settings; final settings = state.dashboardUIState.settings;
final dashboardFields = state.userCompany.settings.dashboardFields; final userCompanySettings = state.userCompany.settings;
final hasMultipleCurrencies = final hasMultipleCurrencies =
memoizedHasMultipleCurrencies(company, clientMap, groupMap); memoizedHasMultipleCurrencies(company, clientMap, groupMap);
@ -1140,7 +1144,8 @@ class __DashboardSettingsState extends State<_DashboardSettings> {
setState(() {}); setState(() {});
}, },
children: [ children: [
for (var dashboardField in dashboardFields) for (var dashboardField
in userCompanySettings.dashboardFields)
ListTile( ListTile(
key: ValueKey( key: ValueKey(
'__${dashboardField.field}_${dashboardField.period}_'), '__${dashboardField.field}_${dashboardField.period}_'),
@ -1151,7 +1156,8 @@ class __DashboardSettingsState extends State<_DashboardSettings> {
icon: Icon(Icons.close), icon: Icon(Icons.close),
onPressed: () { onPressed: () {
store.dispatch(UpdateDashboardFields( store.dispatch(UpdateDashboardFields(
dashboardFields: dashboardFields dashboardFields: userCompanySettings
.dashboardFields
.rebuild((b) => b..remove(dashboardField)))); .rebuild((b) => b..remove(dashboardField))));
setState(() {}); setState(() {});
}, },
@ -1171,10 +1177,17 @@ class __DashboardSettingsState extends State<_DashboardSettings> {
SizedBox(height: 16), SizedBox(height: 16),
AppDropdownButton<int>( AppDropdownButton<int>(
labelText: localization.fieldsPerRow, labelText: localization.fieldsPerRow,
value: settings.numberFieldsPerRow, value: isMobile(context)
? userCompanySettings.dashboardFieldsPerRowMobile
: userCompanySettings.dashboardFieldsPerRowDesktop,
onChanged: (dynamic value) { onChanged: (dynamic value) {
store.dispatch( if (isMobile(context)) {
UpdateDashboardSettings(numberFieldsPerRow: value)); store.dispatch(UpdateDashboardFieldSettingss(
numberFieldsPerRowMobile: value));
} else {
store.dispatch(UpdateDashboardFieldSettingss(
numberFieldsPerRowDesktop: value));
}
setState(() {}); setState(() {});
}, },
items: List<int>.generate(8, (i) => i + 1) items: List<int>.generate(8, (i) => i + 1)