Don’t allow sliding items in invoice item selector

This commit is contained in:
Hillel Coren 2020-12-03 22:44:17 +02:00
parent f5a9cda3d1
commit f4ece89579
5 changed files with 49 additions and 26 deletions

View File

@ -15,6 +15,7 @@ class DismissibleEntity extends StatelessWidget {
@required this.child, @required this.child,
@required this.isSelected, @required this.isSelected,
this.showCheckbox = true, this.showCheckbox = true,
this.isDismissible = true,
}); });
final UserCompanyEntity userCompany; final UserCompanyEntity userCompany;
@ -22,6 +23,7 @@ class DismissibleEntity extends StatelessWidget {
final Widget child; final Widget child;
final bool isSelected; final bool isSelected;
final bool showCheckbox; final bool showCheckbox;
final bool isDismissible;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -34,6 +36,23 @@ class DismissibleEntity extends StatelessWidget {
final isMultiselect = final isMultiselect =
store.state.getListState(entity.entityType).isInMultiselect(); store.state.getListState(entity.entityType).isInMultiselect();
final widget = SelectedIndicator(
isSelected: isSelected &&
showCheckbox &&
!isMultiselect &&
!entity.entityType.isSetting,
child: ConstrainedBox(
constraints: BoxConstraints(
minHeight: 60,
),
child: child,
),
);
if (!isDismissible) {
return widget;
}
return Slidable( return Slidable(
actionPane: SlidableDrawerActionPane(), actionPane: SlidableDrawerActionPane(),
key: Key('__${entity.entityKey}_${entity.entityState}__'), key: Key('__${entity.entityKey}_${entity.entityState}__'),
@ -91,18 +110,7 @@ class DismissibleEntity extends StatelessWidget {
handleEntityAction(context, entity, EntityAction.delete), handleEntityAction(context, entity, EntityAction.delete),
), ),
], ],
child: SelectedIndicator( child: widget,
isSelected: isSelected &&
showCheckbox &&
!isMultiselect &&
!entity.entityType.isSetting,
child: ConstrainedBox(
constraints: BoxConstraints(
minHeight: 60,
),
child: child,
),
),
); );
} }
} }

View File

@ -21,6 +21,7 @@ class ExpenseListItem extends StatelessWidget {
this.onLongPress, this.onLongPress,
this.onCheckboxChanged, this.onCheckboxChanged,
this.isChecked = false, this.isChecked = false,
this.isDismissible = true,
}); });
final UserEntity user; final UserEntity user;
@ -30,6 +31,7 @@ class ExpenseListItem extends StatelessWidget {
final String filter; final String filter;
final Function(bool) onCheckboxChanged; final Function(bool) onCheckboxChanged;
final bool isChecked; final bool isChecked;
final bool isDismissible;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -74,6 +76,7 @@ class ExpenseListItem extends StatelessWidget {
} }
return DismissibleEntity( return DismissibleEntity(
isDismissible: isDismissible,
isSelected: isDesktop(context) && isSelected: isDesktop(context) &&
expense.id == expense.id ==
(uiState.isEditing (uiState.isEditing

View File

@ -204,6 +204,7 @@ class _InvoiceItemSelectorState extends State<InvoiceItemSelector>
final String entityId = matches[index]; final String entityId = matches[index];
final product = state.productState.map[entityId]; final product = state.productState.map[entityId];
return ProductListItem( return ProductListItem(
isDismissible: false,
onCheckboxChanged: (checked) => _toggleEntity(product), onCheckboxChanged: (checked) => _toggleEntity(product),
isChecked: _selected.contains(product), isChecked: _selected.contains(product),
product: product, product: product,
@ -244,6 +245,7 @@ class _InvoiceItemSelectorState extends State<InvoiceItemSelector>
final String entityId = matches[index]; final String entityId = matches[index];
final task = state.taskState.map[entityId]; final task = state.taskState.map[entityId];
return TaskListItem( return TaskListItem(
isDismissible: false,
user: state.user, user: state.user,
onCheckboxChanged: (checked) => _toggleEntity(task), onCheckboxChanged: (checked) => _toggleEntity(task),
isChecked: _selected.contains(task), isChecked: _selected.contains(task),
@ -280,6 +282,7 @@ class _InvoiceItemSelectorState extends State<InvoiceItemSelector>
final String entityId = matches[index]; final String entityId = matches[index];
final expense = state.expenseState.map[entityId] ?? ExpenseEntity(); final expense = state.expenseState.map[entityId] ?? ExpenseEntity();
return ExpenseListItem( return ExpenseListItem(
isDismissible: false,
user: state.user, user: state.user,
onCheckboxChanged: (checked) => _toggleEntity(expense), onCheckboxChanged: (checked) => _toggleEntity(expense),
isChecked: _selected.contains(expense), isChecked: _selected.contains(expense),

View File

@ -20,6 +20,7 @@ class ProductListItem extends StatelessWidget {
this.onLongPress, this.onLongPress,
this.onCheckboxChanged, this.onCheckboxChanged,
this.isChecked = false, this.isChecked = false,
this.isDismissible = true,
}); });
final UserCompanyEntity userCompany; final UserCompanyEntity userCompany;
@ -27,6 +28,7 @@ class ProductListItem extends StatelessWidget {
final GestureTapCallback onLongPress; final GestureTapCallback onLongPress;
final Function(bool) onCheckboxChanged; final Function(bool) onCheckboxChanged;
final bool isChecked; final bool isChecked;
final bool isDismissible;
//final ValueChanged<bool> onCheckboxChanged; //final ValueChanged<bool> onCheckboxChanged;
final ProductEntity product; final ProductEntity product;
@ -48,6 +50,7 @@ class ProductListItem extends StatelessWidget {
final textStyle = TextStyle(fontSize: 16); final textStyle = TextStyle(fontSize: 16);
return DismissibleEntity( return DismissibleEntity(
isDismissible: isDismissible,
isSelected: isDesktop(context) && isSelected: isDesktop(context) &&
product.id == product.id ==
(uiState.isEditing (uiState.isEditing

View File

@ -24,6 +24,7 @@ class TaskListItem extends StatelessWidget {
this.onLongPress, this.onLongPress,
this.onCheckboxChanged, this.onCheckboxChanged,
this.isChecked = false, this.isChecked = false,
this.isDismissible = true,
}); });
final UserEntity user; final UserEntity user;
@ -33,6 +34,7 @@ class TaskListItem extends StatelessWidget {
final String filter; final String filter;
final Function(bool) onCheckboxChanged; final Function(bool) onCheckboxChanged;
final bool isChecked; final bool isChecked;
final bool isDismissible;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -57,12 +59,15 @@ class TaskListItem extends StatelessWidget {
formatNumberType: FormatNumberType.duration); formatNumberType: FormatNumberType.duration);
}, style: textStyle); }, style: textStyle);
final startStopButton = IconButton( final startStopButton = !isDismissible
? SizedBox()
: IconButton(
icon: task.isInvoiced icon: task.isInvoiced
? SizedBox() ? SizedBox()
: Icon( : Icon(
getEntityActionIcon( getEntityActionIcon(task.isRunning
task.isRunning ? EntityAction.stop : EntityAction.start), ? EntityAction.stop
: EntityAction.start),
color: task.isRunning ? state.accentColor : null, color: task.isRunning ? state.accentColor : null,
), ),
onPressed: task.isInvoiced onPressed: task.isInvoiced
@ -73,6 +78,7 @@ class TaskListItem extends StatelessWidget {
); );
return DismissibleEntity( return DismissibleEntity(
isDismissible: isDismissible,
isSelected: isDesktop(context) && isSelected: isDesktop(context) &&
task.id == task.id ==
(uiState.isEditing (uiState.isEditing