User permissions
This commit is contained in:
parent
7cf2278de6
commit
22f52537c5
|
|
@ -1,53 +1,57 @@
|
||||||
|
|
||||||
|
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:invoiceninja_flutter/data/models/models.dart';
|
import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||||
|
|
||||||
class DismissibleEntity extends StatelessWidget {
|
class DismissibleEntity extends StatelessWidget {
|
||||||
|
|
||||||
const DismissibleEntity({
|
const DismissibleEntity({
|
||||||
this.entity,
|
@required this.user,
|
||||||
this.child,
|
@required this.entity,
|
||||||
this.onDismissed,
|
@required this.child,
|
||||||
this.onTap,
|
@required this.onDismissed,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
final UserEntity user;
|
||||||
final BaseEntity entity;
|
final BaseEntity entity;
|
||||||
final Widget child;
|
final Widget child;
|
||||||
final Function onDismissed;
|
final Function onDismissed;
|
||||||
final Function onTap;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
if (!user.canEditEntity(entity)) {
|
||||||
|
return child;
|
||||||
|
}
|
||||||
|
|
||||||
return Dismissible(
|
return Dismissible(
|
||||||
// TODO fix this properly https://github.com/flutter/flutter/issues/11825
|
// TODO fix this properly https://github.com/flutter/flutter/issues/11825
|
||||||
//key: Key(entity.entityKey),
|
//key: Key(entity.entityKey),
|
||||||
key: Key(entity.entityKey + Random().nextInt(100000).toString()),
|
key: Key(entity.entityKey + Random().nextInt(100000).toString()),
|
||||||
onDismissed: onDismissed,
|
onDismissed: onDismissed,
|
||||||
child: child,
|
child: child,
|
||||||
background: entity.isDeleted ? Container(
|
background: entity.isDeleted
|
||||||
color: Colors.blue,
|
? Container(
|
||||||
child: const ListTile(
|
color: Colors.blue,
|
||||||
leading:
|
child: const ListTile(
|
||||||
const Icon(Icons.restore, color: Colors.white, size: 36.0)),
|
leading: const Icon(Icons.restore,
|
||||||
) : Container(
|
color: Colors.white, size: 36.0)),
|
||||||
color: Colors.red,
|
)
|
||||||
child: const ListTile(
|
: Container(
|
||||||
leading:
|
color: Colors.red,
|
||||||
const Icon(Icons.delete, color: Colors.white, size: 36.0))),
|
child: const ListTile(
|
||||||
secondaryBackground: entity.isArchived || entity.isDeleted ? Container(
|
leading: const Icon(Icons.delete,
|
||||||
color: Colors.blue,
|
color: Colors.white, size: 36.0))),
|
||||||
child: const ListTile(
|
secondaryBackground: entity.isArchived || entity.isDeleted
|
||||||
trailing:
|
? Container(
|
||||||
const Icon(Icons.restore, color: Colors.white, size: 36.0)),
|
color: Colors.blue,
|
||||||
) : Container(
|
child: const ListTile(
|
||||||
color: Colors.orange,
|
trailing: const Icon(Icons.restore,
|
||||||
child: const ListTile(
|
color: Colors.white, size: 36.0)),
|
||||||
trailing:
|
)
|
||||||
const Icon(Icons.archive, color: Colors.white, size: 36.0))),
|
: Container(
|
||||||
|
color: Colors.orange,
|
||||||
|
child: const ListTile(
|
||||||
|
trailing: const Icon(Icons.archive,
|
||||||
|
color: Colors.white, size: 36.0))),
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,7 @@ class ClientList extends StatelessWidget {
|
||||||
final client = viewModel.clientMap[clientId];
|
final client = viewModel.clientMap[clientId];
|
||||||
return Column(children: <Widget>[
|
return Column(children: <Widget>[
|
||||||
ClientListItem(
|
ClientListItem(
|
||||||
|
user: viewModel.user,
|
||||||
filter: viewModel.filter,
|
filter: viewModel.filter,
|
||||||
client: client,
|
client: client,
|
||||||
onDismissed: (DismissDirection direction) =>
|
onDismissed: (DismissDirection direction) =>
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/dismissible_entity.dart';
|
import 'package:invoiceninja_flutter/ui/app/dismissible_entity.dart';
|
||||||
|
|
||||||
class ClientListItem extends StatelessWidget {
|
class ClientListItem extends StatelessWidget {
|
||||||
|
final UserEntity user;
|
||||||
final DismissDirectionCallback onDismissed;
|
final DismissDirectionCallback onDismissed;
|
||||||
final GestureTapCallback onTap;
|
final GestureTapCallback onTap;
|
||||||
final GestureTapCallback onLongPress;
|
final GestureTapCallback onLongPress;
|
||||||
|
|
@ -16,6 +17,7 @@ class ClientListItem extends StatelessWidget {
|
||||||
static final clientItemKey = (int id) => Key('__client_item_${id}__');
|
static final clientItemKey = (int id) => Key('__client_item_${id}__');
|
||||||
|
|
||||||
const ClientListItem({
|
const ClientListItem({
|
||||||
|
@required this.user,
|
||||||
@required this.onDismissed,
|
@required this.onDismissed,
|
||||||
@required this.onTap,
|
@required this.onTap,
|
||||||
@required this.onLongPress,
|
@required this.onLongPress,
|
||||||
|
|
@ -32,6 +34,7 @@ class ClientListItem extends StatelessWidget {
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
return DismissibleEntity(
|
return DismissibleEntity(
|
||||||
|
user: user,
|
||||||
onDismissed: onDismissed,
|
onDismissed: onDismissed,
|
||||||
entity: client,
|
entity: client,
|
||||||
//entityKey: clientItemKey,
|
//entityKey: clientItemKey,
|
||||||
|
|
|
||||||
|
|
@ -155,6 +155,7 @@ class InvoiceList extends StatelessWidget {
|
||||||
return Column(
|
return Column(
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
InvoiceListItem(
|
InvoiceListItem(
|
||||||
|
user: viewModel.user,
|
||||||
filter: viewModel.filter,
|
filter: viewModel.filter,
|
||||||
invoice: invoice,
|
invoice: invoice,
|
||||||
client: viewModel.clientMap[invoice.clientId],
|
client: viewModel.clientMap[invoice.clientId],
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import 'package:invoiceninja_flutter/ui/app/dismissible_entity.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||||
|
|
||||||
class InvoiceListItem extends StatelessWidget {
|
class InvoiceListItem extends StatelessWidget {
|
||||||
|
final UserEntity user;
|
||||||
final DismissDirectionCallback onDismissed;
|
final DismissDirectionCallback onDismissed;
|
||||||
final GestureTapCallback onTap;
|
final GestureTapCallback onTap;
|
||||||
final GestureTapCallback onLongPress;
|
final GestureTapCallback onLongPress;
|
||||||
|
|
@ -16,6 +17,7 @@ class InvoiceListItem extends StatelessWidget {
|
||||||
final String filter;
|
final String filter;
|
||||||
|
|
||||||
const InvoiceListItem({
|
const InvoiceListItem({
|
||||||
|
@required this.user,
|
||||||
@required this.onDismissed,
|
@required this.onDismissed,
|
||||||
@required this.onTap,
|
@required this.onTap,
|
||||||
@required this.onLongPress,
|
@required this.onLongPress,
|
||||||
|
|
@ -32,6 +34,7 @@ class InvoiceListItem extends StatelessWidget {
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
return DismissibleEntity(
|
return DismissibleEntity(
|
||||||
|
user: user,
|
||||||
entity: invoice,
|
entity: invoice,
|
||||||
onDismissed: onDismissed,
|
onDismissed: onDismissed,
|
||||||
child: ListTile(
|
child: ListTile(
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,7 @@ class ProductList extends StatelessWidget {
|
||||||
final product = viewModel.productMap[productId];
|
final product = viewModel.productMap[productId];
|
||||||
return Column(children: <Widget>[
|
return Column(children: <Widget>[
|
||||||
ProductListItem(
|
ProductListItem(
|
||||||
|
user: viewModel.user,
|
||||||
filter: viewModel.filter,
|
filter: viewModel.filter,
|
||||||
product: product,
|
product: product,
|
||||||
onDismissed: (DismissDirection direction) =>
|
onDismissed: (DismissDirection direction) =>
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/dismissible_entity.dart';
|
import 'package:invoiceninja_flutter/ui/app/dismissible_entity.dart';
|
||||||
|
|
||||||
class ProductListItem extends StatelessWidget {
|
class ProductListItem extends StatelessWidget {
|
||||||
|
final UserEntity user;
|
||||||
final DismissDirectionCallback onDismissed;
|
final DismissDirectionCallback onDismissed;
|
||||||
final GestureTapCallback onTap;
|
final GestureTapCallback onTap;
|
||||||
final GestureTapCallback onLongPress;
|
final GestureTapCallback onLongPress;
|
||||||
|
|
@ -16,6 +17,7 @@ class ProductListItem extends StatelessWidget {
|
||||||
static final productItemKey = (int id) => Key('__product_item_${id}__');
|
static final productItemKey = (int id) => Key('__product_item_${id}__');
|
||||||
|
|
||||||
const ProductListItem({
|
const ProductListItem({
|
||||||
|
@required this.user,
|
||||||
@required this.onDismissed,
|
@required this.onDismissed,
|
||||||
@required this.onTap,
|
@required this.onTap,
|
||||||
@required this.onLongPress,
|
@required this.onLongPress,
|
||||||
|
|
@ -32,9 +34,9 @@ class ProductListItem extends StatelessWidget {
|
||||||
final subtitle = filterMatch ?? product.notes;
|
final subtitle = filterMatch ?? product.notes;
|
||||||
|
|
||||||
return DismissibleEntity(
|
return DismissibleEntity(
|
||||||
|
user: user,
|
||||||
entity: product,
|
entity: product,
|
||||||
onDismissed: onDismissed,
|
onDismissed: onDismissed,
|
||||||
onTap: onTap,
|
|
||||||
child: ListTile(
|
child: ListTile(
|
||||||
onTap: onTap,
|
onTap: onTap,
|
||||||
onLongPress: onLongPress,
|
onLongPress: onLongPress,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue