Don’t allow sliding items in invoice item selector
This commit is contained in:
parent
f5a9cda3d1
commit
f4ece89579
|
|
@ -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,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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),
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue