Add preview stack
This commit is contained in:
parent
307f1c2369
commit
d5adb825e3
|
|
@ -309,6 +309,9 @@ Serializers _$serializers = (new Serializers().toBuilder()
|
||||||
..addBuilderFactory(
|
..addBuilderFactory(
|
||||||
const FullType(BuiltList, const [const FullType(String)]),
|
const FullType(BuiltList, const [const FullType(String)]),
|
||||||
() => new ListBuilder<String>())
|
() => new ListBuilder<String>())
|
||||||
|
..addBuilderFactory(
|
||||||
|
const FullType(BuiltList, const [const FullType(EntityType)]),
|
||||||
|
() => new ListBuilder<EntityType>())
|
||||||
..addBuilderFactory(
|
..addBuilderFactory(
|
||||||
const FullType(
|
const FullType(
|
||||||
BuiltList, const [const FullType(ExpenseCategoryEntity)]),
|
BuiltList, const [const FullType(ExpenseCategoryEntity)]),
|
||||||
|
|
@ -428,8 +431,7 @@ Serializers _$serializers = (new Serializers().toBuilder()
|
||||||
BuiltList, const [const FullType(InvoiceHistoryEntity)]),
|
BuiltList, const [const FullType(InvoiceHistoryEntity)]),
|
||||||
() => new ListBuilder<InvoiceHistoryEntity>())
|
() => new ListBuilder<InvoiceHistoryEntity>())
|
||||||
..addBuilderFactory(
|
..addBuilderFactory(
|
||||||
const FullType(BuiltList, const [const FullType(LanguageEntity)]),
|
const FullType(BuiltList, const [const FullType(LanguageEntity)]), () => new ListBuilder<LanguageEntity>())
|
||||||
() => new ListBuilder<LanguageEntity>())
|
|
||||||
..addBuilderFactory(const FullType(BuiltList, const [const FullType(PaymentEntity)]), () => new ListBuilder<PaymentEntity>())
|
..addBuilderFactory(const FullType(BuiltList, const [const FullType(PaymentEntity)]), () => new ListBuilder<PaymentEntity>())
|
||||||
..addBuilderFactory(const FullType(BuiltList, const [const FullType(PaymentTermEntity)]), () => new ListBuilder<PaymentTermEntity>())
|
..addBuilderFactory(const FullType(BuiltList, const [const FullType(PaymentTermEntity)]), () => new ListBuilder<PaymentTermEntity>())
|
||||||
..addBuilderFactory(const FullType(BuiltList, const [const FullType(PaymentTypeEntity)]), () => new ListBuilder<PaymentTypeEntity>())
|
..addBuilderFactory(const FullType(BuiltList, const [const FullType(PaymentTypeEntity)]), () => new ListBuilder<PaymentTypeEntity>())
|
||||||
|
|
|
||||||
|
|
@ -159,6 +159,16 @@ class RefreshData implements StartLoading {
|
||||||
final bool includeStatic;
|
final bool includeStatic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class PreviewEntity {
|
||||||
|
const PreviewEntity({
|
||||||
|
this.entityType,
|
||||||
|
this.entityId,
|
||||||
|
});
|
||||||
|
|
||||||
|
final String entityId;
|
||||||
|
final EntityType entityType;
|
||||||
|
}
|
||||||
|
|
||||||
class ClearData {}
|
class ClearData {}
|
||||||
|
|
||||||
class RefreshDataFailure implements StopLoading {
|
class RefreshDataFailure implements StopLoading {
|
||||||
|
|
@ -332,12 +342,28 @@ void viewEntitiesByType({
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void viewEntity(
|
||||||
|
{BuildContext context,
|
||||||
|
BaseEntity entity,
|
||||||
|
bool force = false,
|
||||||
|
bool addToStack = false,
|
||||||
|
BaseEntity filterEntity}) =>
|
||||||
|
viewEntityById(
|
||||||
|
context: context,
|
||||||
|
entityId: entity.id,
|
||||||
|
entityType: entity.entityType,
|
||||||
|
force: force,
|
||||||
|
addToStack: addToStack,
|
||||||
|
filterEntity: filterEntity,
|
||||||
|
);
|
||||||
|
|
||||||
void viewEntityById({
|
void viewEntityById({
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
String entityId,
|
String entityId,
|
||||||
EntityType entityType,
|
EntityType entityType,
|
||||||
bool force = false,
|
bool force = false,
|
||||||
bool showError = true,
|
bool showError = true,
|
||||||
|
bool addToStack = false,
|
||||||
BaseEntity filterEntity,
|
BaseEntity filterEntity,
|
||||||
}) {
|
}) {
|
||||||
final store = StoreProvider.of<AppState>(context);
|
final store = StoreProvider.of<AppState>(context);
|
||||||
|
|
@ -350,6 +376,14 @@ void viewEntityById({
|
||||||
context: context,
|
context: context,
|
||||||
force: force,
|
force: force,
|
||||||
callback: () {
|
callback: () {
|
||||||
|
if (addToStack) {
|
||||||
|
store.dispatch(PreviewEntity(
|
||||||
|
entityId: entityId,
|
||||||
|
entityType: entityType,
|
||||||
|
));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (filterEntity != null &&
|
if (filterEntity != null &&
|
||||||
(uiState.filterEntityType != filterEntity.entityType ||
|
(uiState.filterEntityType != filterEntity.entityType ||
|
||||||
uiState.filterEntityId != filterEntity.id)) {
|
uiState.filterEntityId != filterEntity.id)) {
|
||||||
|
|
@ -549,19 +583,6 @@ void viewEntityById({
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void viewEntity(
|
|
||||||
{BuildContext context,
|
|
||||||
BaseEntity entity,
|
|
||||||
bool force = false,
|
|
||||||
BaseEntity filterEntity}) =>
|
|
||||||
viewEntityById(
|
|
||||||
context: context,
|
|
||||||
entityId: entity.id,
|
|
||||||
entityType: entity.entityType,
|
|
||||||
force: force,
|
|
||||||
filterEntity: filterEntity,
|
|
||||||
);
|
|
||||||
|
|
||||||
void createEntityByType(
|
void createEntityByType(
|
||||||
{BuildContext context, EntityType entityType, bool force = false}) {
|
{BuildContext context, EntityType entityType, bool force = false}) {
|
||||||
final store = StoreProvider.of<AppState>(context);
|
final store = StoreProvider.of<AppState>(context);
|
||||||
|
|
|
||||||
|
|
@ -714,7 +714,8 @@ abstract class AppState implements Built<AppState, AppStateBuilder> {
|
||||||
|
|
||||||
return '\n\nURL: ${authState.url}'
|
return '\n\nURL: ${authState.url}'
|
||||||
'\nRoute: ${uiState.currentRoute}'
|
'\nRoute: ${uiState.currentRoute}'
|
||||||
'\nPrev: ${uiState.previousRoute}'
|
'\nPrevious: ${uiState.previousRoute}'
|
||||||
|
'\nPreview: ${uiState.previewStack}'
|
||||||
'\nIs Loaded: ${isLoaded ? 'Yes' : 'No'}'
|
'\nIs Loaded: ${isLoaded ? 'Yes' : 'No'}'
|
||||||
'\nis Large: ${(company?.isLarge ?? false) ? 'Yes' : 'No'}'
|
'\nis Large: ${(company?.isLarge ?? false) ? 'Yes' : 'No'}'
|
||||||
'\nCompany: $companyUpdated${userCompanyState.isStale ? ' [S]' : ''}'
|
'\nCompany: $companyUpdated${userCompanyState.isStale ? ' [S]' : ''}'
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,9 @@ final editingContactReducer = combineReducers<ContactEntity>([
|
||||||
]);
|
]);
|
||||||
|
|
||||||
final selectedIdReducer = combineReducers<String>([
|
final selectedIdReducer = combineReducers<String>([
|
||||||
|
TypedReducer<String, PreviewEntity>((selectedId, action) {
|
||||||
|
return action.entityId;
|
||||||
|
}),
|
||||||
TypedReducer<String, ViewClient>((selectedId, action) {
|
TypedReducer<String, ViewClient>((selectedId, action) {
|
||||||
return action.clientId;
|
return action.clientId;
|
||||||
}),
|
}),
|
||||||
|
|
|
||||||
|
|
@ -137,6 +137,9 @@ List<String> filteredTasksSelector(
|
||||||
} else if (filterEntityType == EntityType.invoice &&
|
} else if (filterEntityType == EntityType.invoice &&
|
||||||
task.invoiceId != filterEntityId) {
|
task.invoiceId != filterEntityId) {
|
||||||
return false;
|
return false;
|
||||||
|
} else if (filterEntityType == EntityType.user &&
|
||||||
|
task.assignedUserId != filterEntityId) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
} else if (task.clientId != null && !client.isActive) {
|
} else if (task.clientId != null && !client.isActive) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'package:built_collection/built_collection.dart';
|
||||||
import 'package:invoiceninja_flutter/data/models/entities.dart';
|
import 'package:invoiceninja_flutter/data/models/entities.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
|
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/client/client_actions.dart';
|
import 'package:invoiceninja_flutter/redux/client/client_actions.dart';
|
||||||
|
|
@ -77,6 +78,7 @@ UIState uiReducer(UIState state, dynamic action) {
|
||||||
? state.previousRoute
|
? state.previousRoute
|
||||||
: state.currentRoute
|
: state.currentRoute
|
||||||
..currentRoute = currentRoute
|
..currentRoute = currentRoute
|
||||||
|
..previewStack.replace(previewStackReducer(state.previewStack, action))
|
||||||
..productUIState.replace(productUIReducer(state.productUIState, action))
|
..productUIState.replace(productUIReducer(state.productUIState, action))
|
||||||
..clientUIState.replace(clientUIReducer(state.clientUIState, action))
|
..clientUIState.replace(clientUIReducer(state.clientUIState, action))
|
||||||
..invoiceUIState.replace(invoiceUIReducer(state.invoiceUIState, action))
|
..invoiceUIState.replace(invoiceUIReducer(state.invoiceUIState, action))
|
||||||
|
|
@ -284,3 +286,12 @@ Reducer<SettingsUIState> settingsUIReducer = combineReducers([
|
||||||
return state.rebuild((b) => b..tabIndex = action.tabIndex);
|
return state.rebuild((b) => b..tabIndex = action.tabIndex);
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
Reducer<BuiltList<EntityType>> previewStackReducer = combineReducers([
|
||||||
|
TypedReducer<BuiltList<EntityType>, PreviewEntity>((previewStack, action) {
|
||||||
|
return BuiltList(<EntityType>[
|
||||||
|
...previewStack.where((entityType) => entityType != action.entityType),
|
||||||
|
action.entityType
|
||||||
|
]);
|
||||||
|
}),
|
||||||
|
]);
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'package:built_collection/built_collection.dart';
|
||||||
import 'package:built_value/built_value.dart';
|
import 'package:built_value/built_value.dart';
|
||||||
import 'package:built_value/serializer.dart';
|
import 'package:built_value/serializer.dart';
|
||||||
import 'package:invoiceninja_flutter/data/models/entities.dart';
|
import 'package:invoiceninja_flutter/data/models/entities.dart';
|
||||||
|
|
@ -43,15 +44,14 @@ abstract class UIState implements Built<UIState, UIStateBuilder> {
|
||||||
filterClearedAt: 0,
|
filterClearedAt: 0,
|
||||||
currentRoute: currentRoute ?? LoginScreen.route,
|
currentRoute: currentRoute ?? LoginScreen.route,
|
||||||
previousRoute: '',
|
previousRoute: '',
|
||||||
|
previewStack: BuiltList<EntityType>(),
|
||||||
dashboardUIState: DashboardUIState(),
|
dashboardUIState: DashboardUIState(),
|
||||||
productUIState: ProductUIState(),
|
productUIState: ProductUIState(),
|
||||||
clientUIState: ClientUIState(),
|
clientUIState: ClientUIState(),
|
||||||
invoiceUIState: InvoiceUIState(),
|
invoiceUIState: InvoiceUIState(),
|
||||||
// STARTER: constructor - do not remove comment
|
// STARTER: constructor - do not remove comment
|
||||||
taskStatusUIState: TaskStatusUIState(),
|
taskStatusUIState: TaskStatusUIState(),
|
||||||
|
|
||||||
expenseCategoryUIState: ExpenseCategoryUIState(),
|
expenseCategoryUIState: ExpenseCategoryUIState(),
|
||||||
|
|
||||||
recurringInvoiceUIState: RecurringInvoiceUIState(),
|
recurringInvoiceUIState: RecurringInvoiceUIState(),
|
||||||
webhookUIState: WebhookUIState(),
|
webhookUIState: WebhookUIState(),
|
||||||
tokenUIState: TokenUIState(),
|
tokenUIState: TokenUIState(),
|
||||||
|
|
@ -86,6 +86,8 @@ abstract class UIState implements Built<UIState, UIStateBuilder> {
|
||||||
|
|
||||||
String get previousRoute;
|
String get previousRoute;
|
||||||
|
|
||||||
|
BuiltList<EntityType> get previewStack;
|
||||||
|
|
||||||
@nullable
|
@nullable
|
||||||
String get filterEntityId;
|
String get filterEntityId;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,10 @@ class _$UIStateSerializer implements StructuredSerializer<UIState> {
|
||||||
'previousRoute',
|
'previousRoute',
|
||||||
serializers.serialize(object.previousRoute,
|
serializers.serialize(object.previousRoute,
|
||||||
specifiedType: const FullType(String)),
|
specifiedType: const FullType(String)),
|
||||||
|
'previewStack',
|
||||||
|
serializers.serialize(object.previewStack,
|
||||||
|
specifiedType:
|
||||||
|
const FullType(BuiltList, const [const FullType(EntityType)])),
|
||||||
'filterClearedAt',
|
'filterClearedAt',
|
||||||
serializers.serialize(object.filterClearedAt,
|
serializers.serialize(object.filterClearedAt,
|
||||||
specifiedType: const FullType(int)),
|
specifiedType: const FullType(int)),
|
||||||
|
|
@ -150,6 +154,12 @@ class _$UIStateSerializer implements StructuredSerializer<UIState> {
|
||||||
result.previousRoute = serializers.deserialize(value,
|
result.previousRoute = serializers.deserialize(value,
|
||||||
specifiedType: const FullType(String)) as String;
|
specifiedType: const FullType(String)) as String;
|
||||||
break;
|
break;
|
||||||
|
case 'previewStack':
|
||||||
|
result.previewStack.replace(serializers.deserialize(value,
|
||||||
|
specifiedType: const FullType(
|
||||||
|
BuiltList, const [const FullType(EntityType)]))
|
||||||
|
as BuiltList<Object>);
|
||||||
|
break;
|
||||||
case 'filterEntityId':
|
case 'filterEntityId':
|
||||||
result.filterEntityId = serializers.deserialize(value,
|
result.filterEntityId = serializers.deserialize(value,
|
||||||
specifiedType: const FullType(String)) as String;
|
specifiedType: const FullType(String)) as String;
|
||||||
|
|
@ -289,6 +299,8 @@ class _$UIState extends UIState {
|
||||||
@override
|
@override
|
||||||
final String previousRoute;
|
final String previousRoute;
|
||||||
@override
|
@override
|
||||||
|
final BuiltList<EntityType> previewStack;
|
||||||
|
@override
|
||||||
final String filterEntityId;
|
final String filterEntityId;
|
||||||
@override
|
@override
|
||||||
final EntityType filterEntityType;
|
final EntityType filterEntityType;
|
||||||
|
|
@ -354,6 +366,7 @@ class _$UIState extends UIState {
|
||||||
{this.selectedCompanyIndex,
|
{this.selectedCompanyIndex,
|
||||||
this.currentRoute,
|
this.currentRoute,
|
||||||
this.previousRoute,
|
this.previousRoute,
|
||||||
|
this.previewStack,
|
||||||
this.filterEntityId,
|
this.filterEntityId,
|
||||||
this.filterEntityType,
|
this.filterEntityType,
|
||||||
this.filter,
|
this.filter,
|
||||||
|
|
@ -393,6 +406,9 @@ class _$UIState extends UIState {
|
||||||
if (previousRoute == null) {
|
if (previousRoute == null) {
|
||||||
throw new BuiltValueNullFieldError('UIState', 'previousRoute');
|
throw new BuiltValueNullFieldError('UIState', 'previousRoute');
|
||||||
}
|
}
|
||||||
|
if (previewStack == null) {
|
||||||
|
throw new BuiltValueNullFieldError('UIState', 'previewStack');
|
||||||
|
}
|
||||||
if (filterClearedAt == null) {
|
if (filterClearedAt == null) {
|
||||||
throw new BuiltValueNullFieldError('UIState', 'filterClearedAt');
|
throw new BuiltValueNullFieldError('UIState', 'filterClearedAt');
|
||||||
}
|
}
|
||||||
|
|
@ -487,6 +503,7 @@ class _$UIState extends UIState {
|
||||||
selectedCompanyIndex == other.selectedCompanyIndex &&
|
selectedCompanyIndex == other.selectedCompanyIndex &&
|
||||||
currentRoute == other.currentRoute &&
|
currentRoute == other.currentRoute &&
|
||||||
previousRoute == other.previousRoute &&
|
previousRoute == other.previousRoute &&
|
||||||
|
previewStack == other.previewStack &&
|
||||||
filterEntityId == other.filterEntityId &&
|
filterEntityId == other.filterEntityId &&
|
||||||
filterEntityType == other.filterEntityType &&
|
filterEntityType == other.filterEntityType &&
|
||||||
filter == other.filter &&
|
filter == other.filter &&
|
||||||
|
|
@ -539,7 +556,7 @@ class _$UIState extends UIState {
|
||||||
$jc(
|
$jc(
|
||||||
$jc(
|
$jc(
|
||||||
$jc(
|
$jc(
|
||||||
$jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc(0, selectedCompanyIndex.hashCode), currentRoute.hashCode), previousRoute.hashCode), filterEntityId.hashCode), filterEntityType.hashCode), filter.hashCode), filterClearedAt.hashCode), dashboardUIState.hashCode), productUIState.hashCode), clientUIState.hashCode), invoiceUIState.hashCode), taskStatusUIState.hashCode), expenseCategoryUIState.hashCode),
|
$jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc(0, selectedCompanyIndex.hashCode), currentRoute.hashCode), previousRoute.hashCode), previewStack.hashCode), filterEntityId.hashCode), filterEntityType.hashCode), filter.hashCode), filterClearedAt.hashCode), dashboardUIState.hashCode), productUIState.hashCode), clientUIState.hashCode), invoiceUIState.hashCode), taskStatusUIState.hashCode), expenseCategoryUIState.hashCode),
|
||||||
recurringInvoiceUIState.hashCode),
|
recurringInvoiceUIState.hashCode),
|
||||||
webhookUIState.hashCode),
|
webhookUIState.hashCode),
|
||||||
tokenUIState.hashCode),
|
tokenUIState.hashCode),
|
||||||
|
|
@ -567,6 +584,7 @@ class _$UIState extends UIState {
|
||||||
..add('selectedCompanyIndex', selectedCompanyIndex)
|
..add('selectedCompanyIndex', selectedCompanyIndex)
|
||||||
..add('currentRoute', currentRoute)
|
..add('currentRoute', currentRoute)
|
||||||
..add('previousRoute', previousRoute)
|
..add('previousRoute', previousRoute)
|
||||||
|
..add('previewStack', previewStack)
|
||||||
..add('filterEntityId', filterEntityId)
|
..add('filterEntityId', filterEntityId)
|
||||||
..add('filterEntityType', filterEntityType)
|
..add('filterEntityType', filterEntityType)
|
||||||
..add('filter', filter)
|
..add('filter', filter)
|
||||||
|
|
@ -617,6 +635,12 @@ class UIStateBuilder implements Builder<UIState, UIStateBuilder> {
|
||||||
set previousRoute(String previousRoute) =>
|
set previousRoute(String previousRoute) =>
|
||||||
_$this._previousRoute = previousRoute;
|
_$this._previousRoute = previousRoute;
|
||||||
|
|
||||||
|
ListBuilder<EntityType> _previewStack;
|
||||||
|
ListBuilder<EntityType> get previewStack =>
|
||||||
|
_$this._previewStack ??= new ListBuilder<EntityType>();
|
||||||
|
set previewStack(ListBuilder<EntityType> previewStack) =>
|
||||||
|
_$this._previewStack = previewStack;
|
||||||
|
|
||||||
String _filterEntityId;
|
String _filterEntityId;
|
||||||
String get filterEntityId => _$this._filterEntityId;
|
String get filterEntityId => _$this._filterEntityId;
|
||||||
set filterEntityId(String filterEntityId) =>
|
set filterEntityId(String filterEntityId) =>
|
||||||
|
|
@ -796,6 +820,7 @@ class UIStateBuilder implements Builder<UIState, UIStateBuilder> {
|
||||||
_selectedCompanyIndex = _$v.selectedCompanyIndex;
|
_selectedCompanyIndex = _$v.selectedCompanyIndex;
|
||||||
_currentRoute = _$v.currentRoute;
|
_currentRoute = _$v.currentRoute;
|
||||||
_previousRoute = _$v.previousRoute;
|
_previousRoute = _$v.previousRoute;
|
||||||
|
_previewStack = _$v.previewStack?.toBuilder();
|
||||||
_filterEntityId = _$v.filterEntityId;
|
_filterEntityId = _$v.filterEntityId;
|
||||||
_filterEntityType = _$v.filterEntityType;
|
_filterEntityType = _$v.filterEntityType;
|
||||||
_filter = _$v.filter;
|
_filter = _$v.filter;
|
||||||
|
|
@ -852,6 +877,7 @@ class UIStateBuilder implements Builder<UIState, UIStateBuilder> {
|
||||||
selectedCompanyIndex: selectedCompanyIndex,
|
selectedCompanyIndex: selectedCompanyIndex,
|
||||||
currentRoute: currentRoute,
|
currentRoute: currentRoute,
|
||||||
previousRoute: previousRoute,
|
previousRoute: previousRoute,
|
||||||
|
previewStack: previewStack.build(),
|
||||||
filterEntityId: filterEntityId,
|
filterEntityId: filterEntityId,
|
||||||
filterEntityType: filterEntityType,
|
filterEntityType: filterEntityType,
|
||||||
filter: filter,
|
filter: filter,
|
||||||
|
|
@ -884,6 +910,9 @@ class UIStateBuilder implements Builder<UIState, UIStateBuilder> {
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
String _$failedField;
|
String _$failedField;
|
||||||
try {
|
try {
|
||||||
|
_$failedField = 'previewStack';
|
||||||
|
previewStack.build();
|
||||||
|
|
||||||
_$failedField = 'dashboardUIState';
|
_$failedField = 'dashboardUIState';
|
||||||
dashboardUIState.build();
|
dashboardUIState.build();
|
||||||
_$failedField = 'productUIState';
|
_$failedField = 'productUIState';
|
||||||
|
|
|
||||||
|
|
@ -83,9 +83,11 @@ class _EntityListTileState extends State<EntityListTile> {
|
||||||
icon: Icon(isHovered || isMobile(context)
|
icon: Icon(isHovered || isMobile(context)
|
||||||
? Icons.chevron_right
|
? Icons.chevron_right
|
||||||
: Icons.filter_list),
|
: Icons.filter_list),
|
||||||
onPressed: isHovered
|
onPressed: () => viewEntity(
|
||||||
? () => viewEntity(entity: widget.entity, context: context)
|
entity: widget.entity,
|
||||||
: () => null,
|
context: context,
|
||||||
|
addToStack: isDesktop(context),
|
||||||
|
),
|
||||||
color: isFilteredBy
|
color: isFilteredBy
|
||||||
? (state.prefState.enableDarkMode
|
? (state.prefState.enableDarkMode
|
||||||
? Colors.white
|
? Colors.white
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,7 @@ class _TaskOverviewState extends State<TaskOverview> {
|
||||||
final client = viewModel.client;
|
final client = viewModel.client;
|
||||||
final company = viewModel.company;
|
final company = viewModel.company;
|
||||||
final invoice = viewModel.state.invoiceState.map[task.invoiceId];
|
final invoice = viewModel.state.invoiceState.map[task.invoiceId];
|
||||||
|
final user = viewModel.state.userState.map[task.assignedUserId];
|
||||||
|
|
||||||
final Map<String, String> fields = {
|
final Map<String, String> fields = {
|
||||||
TaskFields.rate: formatNumber(task.rate, context, zeroIsNull: true),
|
TaskFields.rate: formatNumber(task.rate, context, zeroIsNull: true),
|
||||||
|
|
@ -126,6 +127,15 @@ class _TaskOverviewState extends State<TaskOverview> {
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (user != null) {
|
||||||
|
widgets.addAll([
|
||||||
|
EntityListTile(
|
||||||
|
entity: user,
|
||||||
|
isFilter: widget.isFilter,
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
if (invoice != null) {
|
if (invoice != null) {
|
||||||
widgets.addAll([
|
widgets.addAll([
|
||||||
EntityListTile(
|
EntityListTile(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue