More work on inbox, refactorings (bloc separation of concerns), fixed saved views wrong sort order

This commit is contained in:
Anton Stubenbord
2022-11-29 01:09:36 +01:00
parent 5edbdabf26
commit 50190f035e
43 changed files with 605 additions and 463 deletions

View File

@@ -2,12 +2,15 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';
import 'package:paperless_mobile/core/bloc/connectivity_cubit.dart';
import 'package:paperless_mobile/core/bloc/paperless_statistics_cubit.dart';
import 'package:paperless_mobile/core/model/error_message.dart';
import 'package:paperless_mobile/di_initializer.dart';
import 'package:paperless_mobile/features/document_details/bloc/document_details_cubit.dart';
import 'package:paperless_mobile/features/document_details/view/pages/document_details_page.dart';
import 'package:paperless_mobile/features/documents/bloc/documents_cubit.dart';
import 'package:paperless_mobile/features/documents/bloc/documents_state.dart';
import 'package:paperless_mobile/features/documents/model/document.model.dart';
import 'package:paperless_mobile/features/documents/view/pages/document_details_page.dart';
import 'package:paperless_mobile/features/documents/model/query_parameters/tags_query.dart';
import 'package:paperless_mobile/features/documents/repository/document_repository.dart';
import 'package:paperless_mobile/features/documents/view/widgets/documents_empty_state.dart';
import 'package:paperless_mobile/features/documents/view/widgets/grid/document_grid.dart';
import 'package:paperless_mobile/features/documents/view/widgets/list/document_list.dart';
@@ -160,22 +163,25 @@ class _DocumentsPageState extends State<DocumentsPage> {
switch (settings.preferredViewType) {
case ViewType.list:
child = DocumentListView(
onTap: _openDocumentDetails,
onTap: _openDetails,
state: state,
onSelected: _onSelected,
pagingController: _pagingController,
hasInternetConnection:
connectivityState == ConnectivityState.connected,
onTagSelected: _addTagToFilter,
);
break;
case ViewType.grid:
child = DocumentGridView(
onTap: _openDocumentDetails,
state: state,
onSelected: _onSelected,
pagingController: _pagingController,
hasInternetConnection:
connectivityState == ConnectivityState.connected);
onTap: _openDetails,
state: state,
onSelected: _onSelected,
pagingController: _pagingController,
hasInternetConnection:
connectivityState == ConnectivityState.connected,
onTagSelected: (int tagId) => _addTagToFilter,
);
break;
}
@@ -222,26 +228,63 @@ class _DocumentsPageState extends State<DocumentsPage> {
);
}
void _openDocumentDetails(DocumentModel model) {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => MultiBlocProvider(
providers: [
BlocProvider.value(value: BlocProvider.of<DocumentsCubit>(context)),
BlocProvider.value(
value: BlocProvider.of<CorrespondentCubit>(context)),
BlocProvider.value(
value: BlocProvider.of<DocumentTypeCubit>(context)),
BlocProvider.value(value: BlocProvider.of<TagCubit>(context)),
BlocProvider.value(
value: BlocProvider.of<StoragePathCubit>(context)),
BlocProvider.value(
value: BlocProvider.of<PaperlessStatisticsCubit>(context)),
],
child: DocumentDetailsPage(documentId: model.id),
),
Future<void> _openDetails(DocumentModel document) async {
await Navigator.of(context).push<DocumentModel?>(
_buildDetailsPageRoute(document),
);
BlocProvider.of<DocumentsCubit>(context).reload();
}
MaterialPageRoute<DocumentModel?> _buildDetailsPageRoute(
DocumentModel document) {
return MaterialPageRoute(
builder: (_) => MultiBlocProvider(
providers: [
BlocProvider.value(
value: BlocProvider.of<DocumentsCubit>(context),
),
BlocProvider.value(
value: BlocProvider.of<CorrespondentCubit>(context),
),
BlocProvider.value(
value: BlocProvider.of<DocumentTypeCubit>(context),
),
BlocProvider.value(
value: BlocProvider.of<TagCubit>(context),
),
BlocProvider.value(
value: BlocProvider.of<StoragePathCubit>(context),
),
BlocProvider.value(
value: DocumentDetailsCubit(getIt<DocumentRepository>(), document),
),
],
child: const DocumentDetailsPage(),
),
);
}
void _addTagToFilter(int tagId) {
final cubit = BlocProvider.of<DocumentsCubit>(context);
try {
final tagsQuery = cubit.state.filter.tags is IdsTagsQuery
? cubit.state.filter.tags as IdsTagsQuery
: const IdsTagsQuery();
if (tagsQuery.includedIds.contains(tagId)) {
cubit.updateCurrentFilter(
(filter) => filter.copyWith(
tags: tagsQuery.withIdsRemoved([tagId]),
),
);
} else {
cubit.updateCurrentFilter(
(filter) => filter.copyWith(
tags: tagsQuery.withIdQueriesAdded([IncludeTagIdQuery(tagId)]),
),
);
}
} on ErrorMessage catch (error, stackTrace) {
showErrorMessage(context, error, stackTrace);
}
}
}