diff --git a/lib/data/models/company_model.dart b/lib/data/models/company_model.dart index 27b32270d..8c6d2c6dd 100644 --- a/lib/data/models/company_model.dart +++ b/lib/data/models/company_model.dart @@ -486,6 +486,9 @@ abstract class CompanyEntity extends Object String get displayName => settings.name ?? ''; + @override + bool get isActive => true; + @override bool matchesFilter(String filter) { for (final user in users) { @@ -753,6 +756,7 @@ abstract class CompanyEntity extends Object // ignore: unused_element static void _initializeBuilder(CompanyEntityBuilder builder) => builder + ..entityType = EntityType.company ..calculateExpenseTaxByAmount = false ..enableProductDiscount = false ..defaultTaskIsDateBased = false diff --git a/lib/data/models/entities.dart b/lib/data/models/entities.dart index 25d207acb..b74f4229b 100644 --- a/lib/data/models/entities.dart +++ b/lib/data/models/entities.dart @@ -483,7 +483,7 @@ abstract class BaseEntity implements SelectableEntity { ClientEntity client, bool includeEdit = false, bool multiselect = false}) { - if (isNew) { + if (isNew || entityType == EntityType.company) { return []; } diff --git a/lib/ui/app/entities/entity_list_tile.dart b/lib/ui/app/entities/entity_list_tile.dart index d033984d4..7bf0d979a 100644 --- a/lib/ui/app/entities/entity_list_tile.dart +++ b/lib/ui/app/entities/entity_list_tile.dart @@ -83,12 +83,15 @@ class _EntityListTileState extends State { final trailing = widget.entity.createdAt == 0 ? null : IgnorePointer( - ignoring: !isHovered || widget.isFilter, + ignoring: !isHovered || + widget.isFilter || + widget.entity.entityType == EntityType.company, child: IconButton( - icon: Icon(isHovered || - widget.isFilter || - isMobile(context) || - state.uiState.previewStack.isNotEmpty + icon: Icon(widget.entity.entityType != EntityType.company && + (isHovered || + widget.isFilter || + isMobile(context) || + state.uiState.previewStack.isNotEmpty) ? Icons.chevron_right : Icons.filter_list), onPressed: () => viewEntity( diff --git a/lib/ui/app/presenters/entity_presenter.dart b/lib/ui/app/presenters/entity_presenter.dart index 26e00837b..9defcb671 100644 --- a/lib/ui/app/presenters/entity_presenter.dart +++ b/lib/ui/app/presenters/entity_presenter.dart @@ -33,6 +33,7 @@ class EntityPresenter { } if ([ + EntityType.company, EntityType.client, EntityType.vendor, EntityType.project, diff --git a/lib/ui/document/view/document_view.dart b/lib/ui/document/view/document_view.dart index 0c8cc67dc..4fb7c011c 100644 --- a/lib/ui/document/view/document_view.dart +++ b/lib/ui/document/view/document_view.dart @@ -1,5 +1,7 @@ // Flutter imports: import 'package:flutter/material.dart'; +import 'package:invoiceninja_flutter/ui/app/entities/entity_list_tile.dart'; +import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; // Project imports: import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart'; @@ -26,17 +28,25 @@ class _DocumentViewState extends State { @override Widget build(BuildContext context) { final viewModel = widget.viewModel; + final state = viewModel.state; final document = viewModel.document; + final entity = state.getEntity(document.parentType, document.parentId); return ViewScaffold( isFilter: widget.isFilter, entity: document, - body: Column(children: [ - document.data == null - ? LoadingIndicator() - : SizedBox( - height: 600, - child: document.isImage + body: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + ListDivider(), + EntityListTile( + isFilter: widget.isFilter, + entity: entity, + ), + Expanded( + child: document.data == null + ? LoadingIndicator() + : document.isImage ? PinchZoom( child: Image.memory(document.data), ) @@ -48,8 +58,9 @@ class _DocumentViewState extends State { allowSharing: false, canDebug: false, ), - ) - ]), + ), + ], + ), ); } } diff --git a/lib/utils/icons.dart b/lib/utils/icons.dart index 0ab3c1ecb..23d87c8d9 100644 --- a/lib/utils/icons.dart +++ b/lib/utils/icons.dart @@ -195,6 +195,8 @@ IconData getEntityIcon(EntityType entityType) { return Icons.schedule; case EntityType.document: return Icons.photo; + case EntityType.company: + return Icons.business; default: return MdiIcons.crosshairsQuestion; }