Settings
This commit is contained in:
parent
517f5d9c0b
commit
51e2995850
|
|
@ -242,6 +242,12 @@ Serializers _$serializers = (new Serializers().toBuilder()
|
||||||
..addBuilderFactory(
|
..addBuilderFactory(
|
||||||
const FullType(BuiltList, const [const FullType(String)]),
|
const FullType(BuiltList, const [const FullType(String)]),
|
||||||
() => new ListBuilder<String>())
|
() => new ListBuilder<String>())
|
||||||
|
..addBuilderFactory(
|
||||||
|
const FullType(BuiltList, const [const FullType(String)]),
|
||||||
|
() => new ListBuilder<String>())
|
||||||
|
..addBuilderFactory(
|
||||||
|
const FullType(BuiltList, const [const FullType(String)]),
|
||||||
|
() => new ListBuilder<String>())
|
||||||
..addBuilderFactory(
|
..addBuilderFactory(
|
||||||
const FullType(BuiltList, const [const FullType(ExpenseEntity)]),
|
const FullType(BuiltList, const [const FullType(ExpenseEntity)]),
|
||||||
() => new ListBuilder<ExpenseEntity>())
|
() => new ListBuilder<ExpenseEntity>())
|
||||||
|
|
@ -276,10 +282,8 @@ Serializers _$serializers = (new Serializers().toBuilder()
|
||||||
BuiltList, const [const FullType(ExpenseCategoryEntity)]),
|
BuiltList, const [const FullType(ExpenseCategoryEntity)]),
|
||||||
() => new ListBuilder<ExpenseCategoryEntity>())
|
() => new ListBuilder<ExpenseCategoryEntity>())
|
||||||
..addBuilderFactory(
|
..addBuilderFactory(
|
||||||
const FullType(BuiltMap, const [
|
const FullType(BuiltMap,
|
||||||
const FullType(String),
|
const [const FullType(String), const FullType(ExpenseCategoryEntity)]),
|
||||||
const FullType(ExpenseCategoryEntity)
|
|
||||||
]),
|
|
||||||
() => new MapBuilder<String, ExpenseCategoryEntity>())
|
() => new MapBuilder<String, ExpenseCategoryEntity>())
|
||||||
..addBuilderFactory(
|
..addBuilderFactory(
|
||||||
const FullType(BuiltList, const [const FullType(UserEntity)]),
|
const FullType(BuiltList, const [const FullType(UserEntity)]),
|
||||||
|
|
@ -327,8 +331,7 @@ Serializers _$serializers = (new Serializers().toBuilder()
|
||||||
const FullType(BuiltList, const [const FullType(ProjectEntity)]),
|
const FullType(BuiltList, const [const FullType(ProjectEntity)]),
|
||||||
() => new ListBuilder<ProjectEntity>())
|
() => new ListBuilder<ProjectEntity>())
|
||||||
..addBuilderFactory(
|
..addBuilderFactory(
|
||||||
const FullType(BuiltList, const [const FullType(SizeEntity)]),
|
const FullType(BuiltList, const [const FullType(SizeEntity)]), () => new ListBuilder<SizeEntity>())
|
||||||
() => new ListBuilder<SizeEntity>())
|
|
||||||
..addBuilderFactory(const FullType(BuiltList, const [const FullType(TaskEntity)]), () => new ListBuilder<TaskEntity>())
|
..addBuilderFactory(const FullType(BuiltList, const [const FullType(TaskEntity)]), () => new ListBuilder<TaskEntity>())
|
||||||
..addBuilderFactory(const FullType(BuiltList, const [const FullType(TaxRateEntity)]), () => new ListBuilder<TaxRateEntity>())
|
..addBuilderFactory(const FullType(BuiltList, const [const FullType(TaxRateEntity)]), () => new ListBuilder<TaxRateEntity>())
|
||||||
..addBuilderFactory(const FullType(BuiltList, const [const FullType(TimezoneEntity)]), () => new ListBuilder<TimezoneEntity>())
|
..addBuilderFactory(const FullType(BuiltList, const [const FullType(TimezoneEntity)]), () => new ListBuilder<TimezoneEntity>())
|
||||||
|
|
|
||||||
|
|
@ -268,6 +268,18 @@ class FilterClientsByCustom2 implements PersistUI {
|
||||||
final String value;
|
final String value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class FilterClientsByCustom3 implements PersistUI {
|
||||||
|
FilterClientsByCustom3(this.value);
|
||||||
|
|
||||||
|
final String value;
|
||||||
|
}
|
||||||
|
|
||||||
|
class FilterClientsByCustom4 implements PersistUI {
|
||||||
|
FilterClientsByCustom4(this.value);
|
||||||
|
|
||||||
|
final String value;
|
||||||
|
}
|
||||||
|
|
||||||
void handleClientAction(
|
void handleClientAction(
|
||||||
BuildContext context, List<BaseEntity> clients, EntityAction action) {
|
BuildContext context, List<BaseEntity> clients, EntityAction action) {
|
||||||
assert(
|
assert(
|
||||||
|
|
|
||||||
|
|
@ -106,6 +106,8 @@ final clientListReducer = combineReducers<ListUIState>([
|
||||||
TypedReducer<ListUIState, FilterClientsByEntity>(_filterClientsByEntity),
|
TypedReducer<ListUIState, FilterClientsByEntity>(_filterClientsByEntity),
|
||||||
TypedReducer<ListUIState, FilterClientsByCustom1>(_filterClientsByCustom1),
|
TypedReducer<ListUIState, FilterClientsByCustom1>(_filterClientsByCustom1),
|
||||||
TypedReducer<ListUIState, FilterClientsByCustom2>(_filterClientsByCustom2),
|
TypedReducer<ListUIState, FilterClientsByCustom2>(_filterClientsByCustom2),
|
||||||
|
TypedReducer<ListUIState, FilterClientsByCustom3>(_filterClientsByCustom3),
|
||||||
|
TypedReducer<ListUIState, FilterClientsByCustom4>(_filterClientsByCustom4),
|
||||||
TypedReducer<ListUIState, StartClientMultiselect>(_startListMultiselect),
|
TypedReducer<ListUIState, StartClientMultiselect>(_startListMultiselect),
|
||||||
TypedReducer<ListUIState, AddToClientMultiselect>(_addToListMultiselect),
|
TypedReducer<ListUIState, AddToClientMultiselect>(_addToListMultiselect),
|
||||||
TypedReducer<ListUIState, RemoveFromClientMultiselect>(
|
TypedReducer<ListUIState, RemoveFromClientMultiselect>(
|
||||||
|
|
@ -133,6 +135,26 @@ ListUIState _filterClientsByCustom2(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ListUIState _filterClientsByCustom3(
|
||||||
|
ListUIState clientListState, FilterClientsByCustom3 action) {
|
||||||
|
if (clientListState.custom3Filters.contains(action.value)) {
|
||||||
|
return clientListState
|
||||||
|
.rebuild((b) => b..custom3Filters.remove(action.value));
|
||||||
|
} else {
|
||||||
|
return clientListState.rebuild((b) => b..custom3Filters.add(action.value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ListUIState _filterClientsByCustom4(
|
||||||
|
ListUIState clientListState, FilterClientsByCustom4 action) {
|
||||||
|
if (clientListState.custom4Filters.contains(action.value)) {
|
||||||
|
return clientListState
|
||||||
|
.rebuild((b) => b..custom4Filters.remove(action.value));
|
||||||
|
} else {
|
||||||
|
return clientListState.rebuild((b) => b..custom4Filters.add(action.value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ListUIState _filterClientsByState(
|
ListUIState _filterClientsByState(
|
||||||
ListUIState clientListState, FilterClientsByState action) {
|
ListUIState clientListState, FilterClientsByState action) {
|
||||||
if (clientListState.stateFilters.contains(action.state)) {
|
if (clientListState.stateFilters.contains(action.state)) {
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@ abstract class ListUIState implements Built<ListUIState, ListUIStateBuilder> {
|
||||||
statusFilters: BuiltList<EntityStatus>(),
|
statusFilters: BuiltList<EntityStatus>(),
|
||||||
custom1Filters: BuiltList<String>(),
|
custom1Filters: BuiltList<String>(),
|
||||||
custom2Filters: BuiltList<String>(),
|
custom2Filters: BuiltList<String>(),
|
||||||
|
custom3Filters: BuiltList<String>(),
|
||||||
|
custom4Filters: BuiltList<String>(),
|
||||||
filter: null);
|
filter: null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -49,6 +51,10 @@ abstract class ListUIState implements Built<ListUIState, ListUIStateBuilder> {
|
||||||
|
|
||||||
BuiltList<String> get custom2Filters;
|
BuiltList<String> get custom2Filters;
|
||||||
|
|
||||||
|
BuiltList<String> get custom3Filters;
|
||||||
|
|
||||||
|
BuiltList<String> get custom4Filters;
|
||||||
|
|
||||||
bool get hasStateFilters =>
|
bool get hasStateFilters =>
|
||||||
stateFilters.length != 1 || stateFilters.first != EntityState.active;
|
stateFilters.length != 1 || stateFilters.first != EntityState.active;
|
||||||
|
|
||||||
|
|
@ -58,6 +64,10 @@ abstract class ListUIState implements Built<ListUIState, ListUIStateBuilder> {
|
||||||
|
|
||||||
bool get hasCustom2Filters => custom2Filters.isNotEmpty;
|
bool get hasCustom2Filters => custom2Filters.isNotEmpty;
|
||||||
|
|
||||||
|
bool get hasCustom3Filters => custom3Filters.isNotEmpty;
|
||||||
|
|
||||||
|
bool get hasCustom4Filters => custom4Filters.isNotEmpty;
|
||||||
|
|
||||||
@nullable
|
@nullable
|
||||||
BuiltList<String> get selectedIds;
|
BuiltList<String> get selectedIds;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,14 @@ class _$ListUIStateSerializer implements StructuredSerializer<ListUIState> {
|
||||||
serializers.serialize(object.custom2Filters,
|
serializers.serialize(object.custom2Filters,
|
||||||
specifiedType:
|
specifiedType:
|
||||||
const FullType(BuiltList, const [const FullType(String)])),
|
const FullType(BuiltList, const [const FullType(String)])),
|
||||||
|
'custom3Filters',
|
||||||
|
serializers.serialize(object.custom3Filters,
|
||||||
|
specifiedType:
|
||||||
|
const FullType(BuiltList, const [const FullType(String)])),
|
||||||
|
'custom4Filters',
|
||||||
|
serializers.serialize(object.custom4Filters,
|
||||||
|
specifiedType:
|
||||||
|
const FullType(BuiltList, const [const FullType(String)])),
|
||||||
];
|
];
|
||||||
if (object.filter != null) {
|
if (object.filter != null) {
|
||||||
result
|
result
|
||||||
|
|
@ -131,6 +139,18 @@ class _$ListUIStateSerializer implements StructuredSerializer<ListUIState> {
|
||||||
const FullType(BuiltList, const [const FullType(String)]))
|
const FullType(BuiltList, const [const FullType(String)]))
|
||||||
as BuiltList<dynamic>);
|
as BuiltList<dynamic>);
|
||||||
break;
|
break;
|
||||||
|
case 'custom3Filters':
|
||||||
|
result.custom3Filters.replace(serializers.deserialize(value,
|
||||||
|
specifiedType:
|
||||||
|
const FullType(BuiltList, const [const FullType(String)]))
|
||||||
|
as BuiltList<dynamic>);
|
||||||
|
break;
|
||||||
|
case 'custom4Filters':
|
||||||
|
result.custom4Filters.replace(serializers.deserialize(value,
|
||||||
|
specifiedType:
|
||||||
|
const FullType(BuiltList, const [const FullType(String)]))
|
||||||
|
as BuiltList<dynamic>);
|
||||||
|
break;
|
||||||
case 'selectedIds':
|
case 'selectedIds':
|
||||||
result.selectedIds.replace(serializers.deserialize(value,
|
result.selectedIds.replace(serializers.deserialize(value,
|
||||||
specifiedType:
|
specifiedType:
|
||||||
|
|
@ -166,6 +186,10 @@ class _$ListUIState extends ListUIState {
|
||||||
@override
|
@override
|
||||||
final BuiltList<String> custom2Filters;
|
final BuiltList<String> custom2Filters;
|
||||||
@override
|
@override
|
||||||
|
final BuiltList<String> custom3Filters;
|
||||||
|
@override
|
||||||
|
final BuiltList<String> custom4Filters;
|
||||||
|
@override
|
||||||
final BuiltList<String> selectedIds;
|
final BuiltList<String> selectedIds;
|
||||||
|
|
||||||
factory _$ListUIState([void Function(ListUIStateBuilder) updates]) =>
|
factory _$ListUIState([void Function(ListUIStateBuilder) updates]) =>
|
||||||
|
|
@ -182,6 +206,8 @@ class _$ListUIState extends ListUIState {
|
||||||
this.statusFilters,
|
this.statusFilters,
|
||||||
this.custom1Filters,
|
this.custom1Filters,
|
||||||
this.custom2Filters,
|
this.custom2Filters,
|
||||||
|
this.custom3Filters,
|
||||||
|
this.custom4Filters,
|
||||||
this.selectedIds})
|
this.selectedIds})
|
||||||
: super._() {
|
: super._() {
|
||||||
if (filterClearedAt == null) {
|
if (filterClearedAt == null) {
|
||||||
|
|
@ -205,6 +231,12 @@ class _$ListUIState extends ListUIState {
|
||||||
if (custom2Filters == null) {
|
if (custom2Filters == null) {
|
||||||
throw new BuiltValueNullFieldError('ListUIState', 'custom2Filters');
|
throw new BuiltValueNullFieldError('ListUIState', 'custom2Filters');
|
||||||
}
|
}
|
||||||
|
if (custom3Filters == null) {
|
||||||
|
throw new BuiltValueNullFieldError('ListUIState', 'custom3Filters');
|
||||||
|
}
|
||||||
|
if (custom4Filters == null) {
|
||||||
|
throw new BuiltValueNullFieldError('ListUIState', 'custom4Filters');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
@ -228,6 +260,8 @@ class _$ListUIState extends ListUIState {
|
||||||
statusFilters == other.statusFilters &&
|
statusFilters == other.statusFilters &&
|
||||||
custom1Filters == other.custom1Filters &&
|
custom1Filters == other.custom1Filters &&
|
||||||
custom2Filters == other.custom2Filters &&
|
custom2Filters == other.custom2Filters &&
|
||||||
|
custom3Filters == other.custom3Filters &&
|
||||||
|
custom4Filters == other.custom4Filters &&
|
||||||
selectedIds == other.selectedIds;
|
selectedIds == other.selectedIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -242,16 +276,20 @@ class _$ListUIState extends ListUIState {
|
||||||
$jc(
|
$jc(
|
||||||
$jc(
|
$jc(
|
||||||
$jc(
|
$jc(
|
||||||
$jc($jc(0, filter.hashCode),
|
$jc(
|
||||||
filterClearedAt.hashCode),
|
$jc(
|
||||||
filterEntityId.hashCode),
|
$jc($jc(0, filter.hashCode),
|
||||||
filterEntityType.hashCode),
|
filterClearedAt.hashCode),
|
||||||
sortField.hashCode),
|
filterEntityId.hashCode),
|
||||||
sortAscending.hashCode),
|
filterEntityType.hashCode),
|
||||||
stateFilters.hashCode),
|
sortField.hashCode),
|
||||||
statusFilters.hashCode),
|
sortAscending.hashCode),
|
||||||
custom1Filters.hashCode),
|
stateFilters.hashCode),
|
||||||
custom2Filters.hashCode),
|
statusFilters.hashCode),
|
||||||
|
custom1Filters.hashCode),
|
||||||
|
custom2Filters.hashCode),
|
||||||
|
custom3Filters.hashCode),
|
||||||
|
custom4Filters.hashCode),
|
||||||
selectedIds.hashCode));
|
selectedIds.hashCode));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -268,6 +306,8 @@ class _$ListUIState extends ListUIState {
|
||||||
..add('statusFilters', statusFilters)
|
..add('statusFilters', statusFilters)
|
||||||
..add('custom1Filters', custom1Filters)
|
..add('custom1Filters', custom1Filters)
|
||||||
..add('custom2Filters', custom2Filters)
|
..add('custom2Filters', custom2Filters)
|
||||||
|
..add('custom3Filters', custom3Filters)
|
||||||
|
..add('custom4Filters', custom4Filters)
|
||||||
..add('selectedIds', selectedIds))
|
..add('selectedIds', selectedIds))
|
||||||
.toString();
|
.toString();
|
||||||
}
|
}
|
||||||
|
|
@ -328,6 +368,18 @@ class ListUIStateBuilder implements Builder<ListUIState, ListUIStateBuilder> {
|
||||||
set custom2Filters(ListBuilder<String> custom2Filters) =>
|
set custom2Filters(ListBuilder<String> custom2Filters) =>
|
||||||
_$this._custom2Filters = custom2Filters;
|
_$this._custom2Filters = custom2Filters;
|
||||||
|
|
||||||
|
ListBuilder<String> _custom3Filters;
|
||||||
|
ListBuilder<String> get custom3Filters =>
|
||||||
|
_$this._custom3Filters ??= new ListBuilder<String>();
|
||||||
|
set custom3Filters(ListBuilder<String> custom3Filters) =>
|
||||||
|
_$this._custom3Filters = custom3Filters;
|
||||||
|
|
||||||
|
ListBuilder<String> _custom4Filters;
|
||||||
|
ListBuilder<String> get custom4Filters =>
|
||||||
|
_$this._custom4Filters ??= new ListBuilder<String>();
|
||||||
|
set custom4Filters(ListBuilder<String> custom4Filters) =>
|
||||||
|
_$this._custom4Filters = custom4Filters;
|
||||||
|
|
||||||
ListBuilder<String> _selectedIds;
|
ListBuilder<String> _selectedIds;
|
||||||
ListBuilder<String> get selectedIds =>
|
ListBuilder<String> get selectedIds =>
|
||||||
_$this._selectedIds ??= new ListBuilder<String>();
|
_$this._selectedIds ??= new ListBuilder<String>();
|
||||||
|
|
@ -348,6 +400,8 @@ class ListUIStateBuilder implements Builder<ListUIState, ListUIStateBuilder> {
|
||||||
_statusFilters = _$v.statusFilters?.toBuilder();
|
_statusFilters = _$v.statusFilters?.toBuilder();
|
||||||
_custom1Filters = _$v.custom1Filters?.toBuilder();
|
_custom1Filters = _$v.custom1Filters?.toBuilder();
|
||||||
_custom2Filters = _$v.custom2Filters?.toBuilder();
|
_custom2Filters = _$v.custom2Filters?.toBuilder();
|
||||||
|
_custom3Filters = _$v.custom3Filters?.toBuilder();
|
||||||
|
_custom4Filters = _$v.custom4Filters?.toBuilder();
|
||||||
_selectedIds = _$v.selectedIds?.toBuilder();
|
_selectedIds = _$v.selectedIds?.toBuilder();
|
||||||
_$v = null;
|
_$v = null;
|
||||||
}
|
}
|
||||||
|
|
@ -383,6 +437,8 @@ class ListUIStateBuilder implements Builder<ListUIState, ListUIStateBuilder> {
|
||||||
statusFilters: statusFilters.build(),
|
statusFilters: statusFilters.build(),
|
||||||
custom1Filters: custom1Filters.build(),
|
custom1Filters: custom1Filters.build(),
|
||||||
custom2Filters: custom2Filters.build(),
|
custom2Filters: custom2Filters.build(),
|
||||||
|
custom3Filters: custom3Filters.build(),
|
||||||
|
custom4Filters: custom4Filters.build(),
|
||||||
selectedIds: _selectedIds?.build());
|
selectedIds: _selectedIds?.build());
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
String _$failedField;
|
String _$failedField;
|
||||||
|
|
@ -395,6 +451,10 @@ class ListUIStateBuilder implements Builder<ListUIState, ListUIStateBuilder> {
|
||||||
custom1Filters.build();
|
custom1Filters.build();
|
||||||
_$failedField = 'custom2Filters';
|
_$failedField = 'custom2Filters';
|
||||||
custom2Filters.build();
|
custom2Filters.build();
|
||||||
|
_$failedField = 'custom3Filters';
|
||||||
|
custom3Filters.build();
|
||||||
|
_$failedField = 'custom4Filters';
|
||||||
|
custom4Filters.build();
|
||||||
_$failedField = 'selectedIds';
|
_$failedField = 'selectedIds';
|
||||||
_selectedIds?.build();
|
_selectedIds?.build();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
||||||
|
|
@ -16,11 +16,15 @@ class AppBottomBar extends StatefulWidget {
|
||||||
this.entityType,
|
this.entityType,
|
||||||
this.onSelectedState,
|
this.onSelectedState,
|
||||||
this.onSelectedStatus,
|
this.onSelectedStatus,
|
||||||
this.onSelectedCustom1,
|
@required this.onSelectedCustom1,
|
||||||
this.onSelectedCustom2,
|
@required this.onSelectedCustom2,
|
||||||
|
@required this.onSelectedCustom3,
|
||||||
|
@required this.onSelectedCustom4,
|
||||||
this.statuses = const [],
|
this.statuses = const [],
|
||||||
this.customValues1 = const [],
|
@required this.customValues1 = const [],
|
||||||
this.customValues2 = const [],
|
@required this.customValues2 = const [],
|
||||||
|
@required this.customValues3 = const [],
|
||||||
|
@required this.customValues4 = const [],
|
||||||
});
|
});
|
||||||
|
|
||||||
final EntityType entityType;
|
final EntityType entityType;
|
||||||
|
|
@ -31,8 +35,12 @@ class AppBottomBar extends StatefulWidget {
|
||||||
final Function(EntityStatus, bool) onSelectedStatus;
|
final Function(EntityStatus, bool) onSelectedStatus;
|
||||||
final Function(String) onSelectedCustom1;
|
final Function(String) onSelectedCustom1;
|
||||||
final Function(String) onSelectedCustom2;
|
final Function(String) onSelectedCustom2;
|
||||||
|
final Function(String) onSelectedCustom3;
|
||||||
|
final Function(String) onSelectedCustom4;
|
||||||
final List<String> customValues1;
|
final List<String> customValues1;
|
||||||
final List<String> customValues2;
|
final List<String> customValues2;
|
||||||
|
final List<String> customValues3;
|
||||||
|
final List<String> customValues4;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
_AppBottomBarState createState() => _AppBottomBarState();
|
_AppBottomBarState createState() => _AppBottomBarState();
|
||||||
|
|
@ -44,6 +52,8 @@ class _AppBottomBarState extends State<AppBottomBar> {
|
||||||
PersistentBottomSheetController _filterStatusController;
|
PersistentBottomSheetController _filterStatusController;
|
||||||
PersistentBottomSheetController _filterCustom1Controller;
|
PersistentBottomSheetController _filterCustom1Controller;
|
||||||
PersistentBottomSheetController _filterCustom2Controller;
|
PersistentBottomSheetController _filterCustom2Controller;
|
||||||
|
PersistentBottomSheetController _filterCustom3Controller;
|
||||||
|
PersistentBottomSheetController _filterCustom4Controller;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
|
@ -260,6 +270,88 @@ class _AppBottomBarState extends State<AppBottomBar> {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
final _showFilterCustom3Sheet = () {
|
||||||
|
if (_filterCustom3Controller != null) {
|
||||||
|
_filterCustom3Controller.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_filterCustom3Controller =
|
||||||
|
Scaffold.of(context).showBottomSheet<StoreConnector>((context) {
|
||||||
|
return StoreConnector<AppState, BuiltList<String>>(
|
||||||
|
converter: (Store<AppState> store) =>
|
||||||
|
store.state.getListState(widget.entityType).custom1Filters,
|
||||||
|
builder: (BuildContext context, customFilters) {
|
||||||
|
return Container(
|
||||||
|
color: Theme.of(context).backgroundColor,
|
||||||
|
child: Column(mainAxisSize: MainAxisSize.min, children: <Widget>[
|
||||||
|
Column(
|
||||||
|
children: widget.customValues3.map<Widget>((customField) {
|
||||||
|
return CheckboxListTile(
|
||||||
|
key: Key(customField.toString()),
|
||||||
|
title: Text(customField),
|
||||||
|
controlAffinity: ListTileControlAffinity.leading,
|
||||||
|
value: customFilters.contains(customField),
|
||||||
|
activeColor: Theme.of(context).accentColor,
|
||||||
|
dense: true,
|
||||||
|
onChanged: (value) {
|
||||||
|
widget.onSelectedCustom3(customField);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}).toList(),
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
_filterCustom3Controller.closed.whenComplete(() {
|
||||||
|
_filterCustom3Controller = null;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
final _showFilterCustom4Sheet = () {
|
||||||
|
if (_filterCustom4Controller != null) {
|
||||||
|
_filterCustom4Controller.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_filterCustom4Controller =
|
||||||
|
Scaffold.of(context).showBottomSheet<StoreConnector>((context) {
|
||||||
|
return StoreConnector<AppState, BuiltList<String>>(
|
||||||
|
converter: (Store<AppState> store) =>
|
||||||
|
store.state.getListState(widget.entityType).custom4Filters,
|
||||||
|
builder: (BuildContext context, customFilters) {
|
||||||
|
return Container(
|
||||||
|
color: Theme.of(context).backgroundColor,
|
||||||
|
child: Column(mainAxisSize: MainAxisSize.min, children: <Widget>[
|
||||||
|
Column(
|
||||||
|
children: widget.customValues4.map<Widget>((customField) {
|
||||||
|
return CheckboxListTile(
|
||||||
|
key: Key(customField.toString()),
|
||||||
|
title: Text(customField),
|
||||||
|
controlAffinity: ListTileControlAffinity.leading,
|
||||||
|
value: customFilters.contains(customField),
|
||||||
|
activeColor: Theme.of(context).accentColor,
|
||||||
|
dense: true,
|
||||||
|
onChanged: (value) {
|
||||||
|
widget.onSelectedCustom4(customField);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}).toList(),
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
_filterCustom4Controller.closed.whenComplete(() {
|
||||||
|
_filterCustom4Controller = null;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
return StoreBuilder(builder: (BuildContext context, Store<AppState> store) {
|
return StoreBuilder(builder: (BuildContext context, Store<AppState> store) {
|
||||||
final localization = AppLocalization.of(context);
|
final localization = AppLocalization.of(context);
|
||||||
final prefState = store.state.prefState;
|
final prefState = store.state.prefState;
|
||||||
|
|
@ -318,8 +410,30 @@ class _AppBottomBarState extends State<AppBottomBar> {
|
||||||
icon: Icon(Icons.looks_two),
|
icon: Icon(Icons.looks_two),
|
||||||
onPressed: _showFilterCustom2Sheet,
|
onPressed: _showFilterCustom2Sheet,
|
||||||
color: store.state
|
color: store.state
|
||||||
.getListState(widget.entityType)
|
.getListState(widget.entityType)
|
||||||
.hasCustom2Filters
|
.hasCustom2Filters
|
||||||
|
? Theme.of(context).accentColor
|
||||||
|
: null,
|
||||||
|
),
|
||||||
|
if (widget.customValues3.isNotEmpty)
|
||||||
|
IconButton(
|
||||||
|
tooltip: AppLocalization.of(context).filter,
|
||||||
|
icon: Icon(Icons.looks_two),
|
||||||
|
onPressed: _showFilterCustom3Sheet,
|
||||||
|
color: store.state
|
||||||
|
.getListState(widget.entityType)
|
||||||
|
.hasCustom3Filters
|
||||||
|
? Theme.of(context).accentColor
|
||||||
|
: null,
|
||||||
|
),
|
||||||
|
if (widget.customValues4.isNotEmpty)
|
||||||
|
IconButton(
|
||||||
|
tooltip: AppLocalization.of(context).filter,
|
||||||
|
icon: Icon(Icons.looks_two),
|
||||||
|
onPressed: _showFilterCustom4Sheet,
|
||||||
|
color: store.state
|
||||||
|
.getListState(widget.entityType)
|
||||||
|
.hasCustom4Filters
|
||||||
? Theme.of(context).accentColor
|
? Theme.of(context).accentColor
|
||||||
: null,
|
: null,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -70,16 +70,16 @@ class ClientScreen extends StatelessWidget {
|
||||||
onSavePressed: state.clientListState.selectedIds.isEmpty
|
onSavePressed: state.clientListState.selectedIds.isEmpty
|
||||||
? null
|
? null
|
||||||
: (context) async {
|
: (context) async {
|
||||||
final clients = viewModel.clientList
|
final clients = viewModel.clientList
|
||||||
.map<ClientEntity>(
|
.map<ClientEntity>(
|
||||||
(clientId) => viewModel.clientMap[clientId])
|
(clientId) => viewModel.clientMap[clientId])
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
await showEntityActionsDialog(
|
await showEntityActionsDialog(
|
||||||
entities: clients, context: context, multiselect: true);
|
entities: clients, context: context, multiselect: true);
|
||||||
|
|
||||||
store.dispatch(ClearClientMultiselect());
|
store.dispatch(ClearClientMultiselect());
|
||||||
},
|
},
|
||||||
onCancelPressed: (context) =>
|
onCancelPressed: (context) =>
|
||||||
store.dispatch(ClearClientMultiselect()),
|
store.dispatch(ClearClientMultiselect()),
|
||||||
),
|
),
|
||||||
|
|
@ -102,25 +102,35 @@ class ClientScreen extends StatelessWidget {
|
||||||
excludeBlank: true),
|
excludeBlank: true),
|
||||||
customValues2: company.getCustomFieldValues(CustomFieldType.client2,
|
customValues2: company.getCustomFieldValues(CustomFieldType.client2,
|
||||||
excludeBlank: true),
|
excludeBlank: true),
|
||||||
|
customValues3: company.getCustomFieldValues(CustomFieldType.client3,
|
||||||
|
excludeBlank: true),
|
||||||
|
customValues4: company.getCustomFieldValues(CustomFieldType.client4,
|
||||||
|
excludeBlank: true),
|
||||||
onSelectedCustom1: (value) =>
|
onSelectedCustom1: (value) =>
|
||||||
store.dispatch(FilterClientsByCustom1(value)),
|
store.dispatch(FilterClientsByCustom1(value)),
|
||||||
onSelectedCustom2: (value) =>
|
onSelectedCustom2: (value) =>
|
||||||
store.dispatch(FilterClientsByCustom2(value)),
|
store.dispatch(FilterClientsByCustom2(value)),
|
||||||
|
onSelectedCustom3: (value) =>
|
||||||
|
store.dispatch(FilterClientsByCustom3(value)),
|
||||||
|
onSelectedCustom4: (value) =>
|
||||||
|
store.dispatch(FilterClientsByCustom4(value)),
|
||||||
),
|
),
|
||||||
floatingActionButton: userCompany.canCreate(EntityType.client)
|
floatingActionButton: userCompany.canCreate(EntityType.client)
|
||||||
? FloatingActionButton(
|
? FloatingActionButton(
|
||||||
heroTag: 'client_fab',
|
heroTag: 'client_fab',
|
||||||
backgroundColor: Theme.of(context).primaryColorDark,
|
backgroundColor: Theme
|
||||||
onPressed: () {
|
.of(context)
|
||||||
createEntityByType(
|
.primaryColorDark,
|
||||||
context: context, entityType: EntityType.client);
|
onPressed: () {
|
||||||
},
|
createEntityByType(
|
||||||
child: Icon(
|
context: context, entityType: EntityType.client);
|
||||||
Icons.add,
|
},
|
||||||
color: Colors.white,
|
child: Icon(
|
||||||
),
|
Icons.add,
|
||||||
tooltip: localization.newClient,
|
color: Colors.white,
|
||||||
)
|
),
|
||||||
|
tooltip: localization.newClient,
|
||||||
|
)
|
||||||
: null,
|
: null,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue