invoice/lib/ui/app/entities/multiple_entity_actions_dia...

75 lines
2.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/company_model.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/utils/icons.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
Future<void> showMultipleEntitiesActionsDialog({
@required List<BaseEntity> entities,
@required UserCompanyEntity userCompany,
@required BuildContext context,
@required
Function(BuildContext, ClientEntity, EntityAction,
{bool multiselect, bool isMultiselectLast})
onEntityAction,
ClientEntity client,
}) async {
if (entities == null || entities.isEmpty) {
return;
}
final mainContext = context;
await showDialog<String>(
context: mainContext,
builder: (BuildContext dialogContext) {
final actions = <Widget>[];
actions.addAll(entities[0] // Suppose they are all the same type
.getActions(userCompany: userCompany, client: client, multiselect: true)
.map((entityAction) {
if (entityAction == null) {
return Divider();
} else {
return EntityActionListTile(
entities: entities,
entityAction: entityAction,
mainContext: mainContext,
onEntityAction: onEntityAction,
);
}
}).toList());
return SimpleDialog(children: actions);
});
}
class EntityActionListTile extends StatelessWidget {
const EntityActionListTile(
{this.entities,
this.entityAction,
this.onEntityAction,
this.mainContext});
final List<BaseEntity> entities;
final EntityAction entityAction;
final BuildContext mainContext;
final Function(BuildContext, BaseEntity, EntityAction,
{bool multiselect, bool isMultiselectLast}) onEntityAction;
@override
Widget build(BuildContext context) {
final localization = AppLocalization.of(context);
return ListTile(
leading: Icon(getEntityActionIcon(entityAction)),
title: Text(localization.lookup(entityAction.toString())),
onTap: () {
Navigator.of(context).pop();
for (int i = 0; i < entities.length; i++) {
final BaseEntity entity = entities[i];
onEntityAction(context, entity, entityAction,
multiselect: true, isMultiselectLast: i == entities.length - 1);
}
},
);
}
}