Decoupled saved views view from documents cubit

This commit is contained in:
Anton Stubenbord
2022-12-09 01:00:33 +01:00
parent c9694fa8d0
commit e2a20cea75

View File

@@ -34,6 +34,7 @@ class DocumentsPage extends StatefulWidget {
} }
class _DocumentsPageState extends State<DocumentsPage> { class _DocumentsPageState extends State<DocumentsPage> {
late final DocumentsCubit _documentsCubit;
final _pagingController = PagingController<int, DocumentModel>( final _pagingController = PagingController<int, DocumentModel>(
firstPageKey: 1, firstPageKey: 1,
); );
@@ -43,8 +44,9 @@ class _DocumentsPageState extends State<DocumentsPage> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_documentsCubit = BlocProvider.of<DocumentsCubit>(context);
try { try {
BlocProvider.of<DocumentsCubit>(context).load(); _documentsCubit.load();
} on PaperlessServerException catch (error, stackTrace) { } on PaperlessServerException catch (error, stackTrace) {
showErrorMessage(context, error, stackTrace); showErrorMessage(context, error, stackTrace);
} }
@@ -58,26 +60,25 @@ class _DocumentsPageState extends State<DocumentsPage> {
} }
Future<void> _loadNewPage(int pageKey) async { Future<void> _loadNewPage(int pageKey) async {
final documentsCubit = BlocProvider.of<DocumentsCubit>(context); final pageCount = _documentsCubit.state
final pageCount = documentsCubit.state .inferPageCount(pageSize: _documentsCubit.state.filter.pageSize);
.inferPageCount(pageSize: documentsCubit.state.filter.pageSize);
if (pageCount <= pageKey + 1) { if (pageCount <= pageKey + 1) {
_pagingController.nextPageKey = null; _pagingController.nextPageKey = null;
} }
try { try {
await documentsCubit.loadMore(); await _documentsCubit.loadMore();
} on PaperlessServerException catch (error, stackTrace) { } on PaperlessServerException catch (error, stackTrace) {
showErrorMessage(context, error, stackTrace); showErrorMessage(context, error, stackTrace);
} }
} }
void _onSelected(DocumentModel model) { void _onSelected(DocumentModel model) {
BlocProvider.of<DocumentsCubit>(context).toggleDocumentSelection(model); _documentsCubit.toggleDocumentSelection(model);
} }
Future<void> _onRefresh() async { Future<void> _onRefresh() async {
try { try {
await BlocProvider.of<DocumentsCubit>(context).updateCurrentFilter( await _documentsCubit.updateCurrentFilter(
(filter) => filter.copyWith(page: 1), (filter) => filter.copyWith(page: 1),
); );
} on PaperlessServerException catch (error, stackTrace) { } on PaperlessServerException catch (error, stackTrace) {
@@ -94,9 +95,8 @@ class _DocumentsPageState extends State<DocumentsPage> {
_filterPanelController.close(); _filterPanelController.close();
return false; return false;
} }
final documentsCubit = BlocProvider.of<DocumentsCubit>(context); if (_documentsCubit.state.selection.isNotEmpty) {
if (documentsCubit.state.selection.isNotEmpty) { _documentsCubit.resetSelection();
documentsCubit.resetSelection();
return false; return false;
} }
return true; return true;
@@ -106,15 +106,14 @@ class _DocumentsPageState extends State<DocumentsPage> {
previous != ConnectivityState.connected && previous != ConnectivityState.connected &&
current == ConnectivityState.connected, current == ConnectivityState.connected,
listener: (context, state) { listener: (context, state) {
BlocProvider.of<DocumentsCubit>(context).load(); _documentsCubit.load();
}, },
builder: (context, connectivityState) { builder: (context, connectivityState) {
return Scaffold( return Scaffold(
drawer: BlocProvider.value( drawer: BlocProvider.value(
value: BlocProvider.of<AuthenticationCubit>(context), value: BlocProvider.of<AuthenticationCubit>(context),
child: InfoDrawer( child: InfoDrawer(
afterInboxClosed: () => afterInboxClosed: () => _documentsCubit.reload(),
BlocProvider.of<DocumentsCubit>(context).reload(),
), ),
), ),
resizeToAvoidBottomInset: true, resizeToAvoidBottomInset: true,
@@ -141,8 +140,7 @@ class _DocumentsPageState extends State<DocumentsPage> {
scrollController: scrollController, scrollController: scrollController,
initialFilter: state.filter, initialFilter: state.filter,
onFilterChanged: (filter) => onFilterChanged: (filter) =>
BlocProvider.of<DocumentsCubit>(context) _documentsCubit.updateFilter(filter: filter),
.updateFilter(filter: filter),
), ),
); );
}, },
@@ -208,17 +206,15 @@ class _DocumentsPageState extends State<DocumentsPage> {
RepositoryProvider.of<SavedViewRepository>(context)), RepositoryProvider.of<SavedViewRepository>(context)),
child: BlocListener<SavedViewCubit, SavedViewState>( child: BlocListener<SavedViewCubit, SavedViewState>(
listener: (context, state) { listener: (context, state) {
final documentsCubit =
BlocProvider.of<DocumentsCubit>(context);
try { try {
if (state.selectedSavedViewId == null) { if (state.selectedSavedViewId == null) {
documentsCubit.updateFilter(); _documentsCubit.updateFilter();
} else { } else {
final newFilter = state final newFilter = state
.value[state.selectedSavedViewId] .value[state.selectedSavedViewId]
?.toDocumentFilter(); ?.toDocumentFilter();
if (newFilter != null) { if (newFilter != null) {
documentsCubit.updateFilter(filter: newFilter); _documentsCubit.updateFilter(filter: newFilter);
} }
} }
} on PaperlessServerException catch (error, stackTrace) { } on PaperlessServerException catch (error, stackTrace) {
@@ -263,7 +259,7 @@ class _DocumentsPageState extends State<DocumentsPage> {
await Navigator.of(context).push<DocumentModel?>( await Navigator.of(context).push<DocumentModel?>(
_buildDetailsPageRoute(document), _buildDetailsPageRoute(document),
); );
BlocProvider.of<DocumentsCubit>(context).reload(); _documentsCubit.reload();
} }
MaterialPageRoute<DocumentModel?> _buildDetailsPageRoute( MaterialPageRoute<DocumentModel?> _buildDetailsPageRoute(
@@ -279,19 +275,18 @@ class _DocumentsPageState extends State<DocumentsPage> {
} }
void _addTagToFilter(int tagId) { void _addTagToFilter(int tagId) {
final cubit = BlocProvider.of<DocumentsCubit>(context);
try { try {
final tagsQuery = cubit.state.filter.tags is IdsTagsQuery final tagsQuery = _documentsCubit.state.filter.tags is IdsTagsQuery
? cubit.state.filter.tags as IdsTagsQuery ? _documentsCubit.state.filter.tags as IdsTagsQuery
: const IdsTagsQuery(); : const IdsTagsQuery();
if (tagsQuery.includedIds.contains(tagId)) { if (tagsQuery.includedIds.contains(tagId)) {
cubit.updateCurrentFilter( _documentsCubit.updateCurrentFilter(
(filter) => filter.copyWith( (filter) => filter.copyWith(
tags: tagsQuery.withIdsRemoved([tagId]), tags: tagsQuery.withIdsRemoved([tagId]),
), ),
); );
} else { } else {
cubit.updateCurrentFilter( _documentsCubit.updateCurrentFilter(
(filter) => filter.copyWith( (filter) => filter.copyWith(
tags: tagsQuery.withIdQueriesAdded([IncludeTagIdQuery(tagId)]), tags: tagsQuery.withIdQueriesAdded([IncludeTagIdQuery(tagId)]),
), ),