User permissions

This commit is contained in:
Hillel Coren 2018-08-17 10:05:04 -07:00
parent dfc0743349
commit 31d7a3550c
4 changed files with 23 additions and 12 deletions

View File

@ -101,6 +101,10 @@ class ActionMenuButton extends StatelessWidget {
));
}
if (actions.isEmpty) {
return Container();
}
return PopupMenuButton<EntityAction>(
icon: Icon(Icons.more_vert),
itemBuilder: (BuildContext context) => actions,

View File

@ -76,7 +76,7 @@ class InvoiceItemListTile extends StatelessWidget {
],
),
subtitle: Text(subtitle),
trailing: Icon(Icons.navigate_next),
trailing: onTap != null ? Icon(Icons.navigate_next) : null,
),
Divider(height: 1.0,),
],

View File

@ -196,6 +196,7 @@ class _CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
Widget build(BuildContext context) {
final localization = AppLocalization.of(context);
final client = viewModel.client;
final user = viewModel.user;
return AppBar(
title:
@ -218,10 +219,10 @@ class _CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
actions: client.isNew
? []
: [
EditIconButton(
user.canEditEntity(client) ? EditIconButton(
isVisible: !client.isDeleted,
onPressed: () => viewModel.onEditPressed(context),
),
) : Container(),
ActionMenuButton(
user: viewModel.user,
isSaving: viewModel.isSaving,

View File

@ -34,6 +34,7 @@ class _InvoiceViewState extends State<InvoiceView> {
List<Widget> _buildView() {
final invoice = widget.viewModel.invoice;
final user = widget.viewModel.user;
final widgets = <Widget>[
TwoValueHeader(
backgroundColor: (invoice.isPastDue
@ -151,7 +152,9 @@ class _InvoiceViewState extends State<InvoiceView> {
InvoiceItemListTile(
invoice: invoice,
invoiceItem: invoiceItem,
onTap: () => viewModel.onEditPressed(context, invoiceItem),
onTap: user.canEditEntity(invoice)
? viewModel.onEditPressed(context, invoiceItem)
: null,
),
]);
});
@ -261,6 +264,7 @@ class _CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
final localization = AppLocalization.of(context);
final invoice = viewModel.invoice;
final client = viewModel.client;
final user = viewModel.user;
return AppBar(
title: Text((localization.invoice + ' ' + invoice.invoiceNumber) ?? ''),
@ -272,21 +276,23 @@ class _CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
onPressed: () => viewModel.onEditPressed(context),
),
ActionMenuButton(
user: viewModel.user,
user: user,
customActions: [
ActionMenuChoice(
action: EntityAction.clone,
icon: Icons.control_point_duplicate,
label: AppLocalization.of(context).clone,
),
!invoice.isPublic
user.canCreate(EntityType.invoice)
? ActionMenuChoice(
action: EntityAction.clone,
icon: Icons.control_point_duplicate,
label: AppLocalization.of(context).clone,
)
: null,
user.canEditEntity(invoice) && !invoice.isPublic
? ActionMenuChoice(
action: EntityAction.markSent,
icon: Icons.publish,
label: AppLocalization.of(context).markSent,
)
: null,
client.hasEmailAddress
user.canEditEntity(invoice) && client.hasEmailAddress
? ActionMenuChoice(
action: EntityAction.emailInvoice,
icon: Icons.send,