From 1b2bf92cfd9e546c070598e87f49b53f3f19cdea Mon Sep 17 00:00:00 2001 From: "konrad.lys@eu.equinix.com" Date: Tue, 30 May 2023 08:04:27 +0200 Subject: [PATCH] BUGFIX conditional none matching algorithm based on API version --- lib/features/edit_label/view/label_form.dart | 26 ++++++- .../labels/view/pages/labels_page.dart | 74 ++++++------------- packages/mock_server/lib/mock_server.dart | 4 +- .../lib/src/models/labels/label_model.dart | 2 +- 4 files changed, 49 insertions(+), 57 deletions(-) diff --git a/lib/features/edit_label/view/label_form.dart b/lib/features/edit_label/view/label_form.dart index b77c532..00b33c3 100644 --- a/lib/features/edit_label/view/label_form.dart +++ b/lib/features/edit_label/view/label_form.dart @@ -1,10 +1,12 @@ import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_form_builder/flutter_form_builder.dart'; import 'package:paperless_api/paperless_api.dart'; import 'package:paperless_mobile/core/translation/matching_algorithm_localization_mapper.dart'; import 'package:paperless_mobile/core/type/types.dart'; import 'package:paperless_mobile/extensions/flutter_extensions.dart'; +import 'package:paperless_mobile/features/home/view/model/api_version.dart'; import 'package:paperless_mobile/generated/l10n/app_localizations.dart'; import 'package:paperless_mobile/helpers/message_helpers.dart'; @@ -57,13 +59,17 @@ class _LabelFormState extends State> { @override void initState() { super.initState(); - _enableMatchFormField = (widget.initialValue?.matchingAlgorithm ?? - MatchingAlgorithm.defaultValue) != - MatchingAlgorithm.auto; + var matchingAlgorithm = (widget.initialValue?.matchingAlgorithm ?? + MatchingAlgorithm.defaultValue); + _enableMatchFormField = matchingAlgorithm != MatchingAlgorithm.auto && + matchingAlgorithm != MatchingAlgorithm.none; } @override Widget build(BuildContext context) { + List selectableMatchingAlgorithmValues = + getSelectableMatchingAlgorithmValues( + context.watch().hasMultiUserSupport); return Scaffold( resizeToAvoidBottomInset: false, floatingActionButton: FloatingActionButton.extended( @@ -107,7 +113,7 @@ class _LabelFormState extends State> { val != MatchingAlgorithm.none.value; }); }, - items: MatchingAlgorithm.values + items: selectableMatchingAlgorithmValues .map( (algo) => DropdownMenuItem( child: Text( @@ -140,6 +146,18 @@ class _LabelFormState extends State> { ); } + List getSelectableMatchingAlgorithmValues( + bool hasMultiUserSupport) { + var selectableMatchingAlgorithmValues = MatchingAlgorithm.values; + if (!hasMultiUserSupport) { + selectableMatchingAlgorithmValues = selectableMatchingAlgorithmValues + .where((matchingAlgorithm) => + matchingAlgorithm != MatchingAlgorithm.none) + .toList(); + } + return selectableMatchingAlgorithmValues; + } + void _onSubmit() async { if (_formKey.currentState?.saveAndValidate() ?? false) { try { diff --git a/lib/features/labels/view/pages/labels_page.dart b/lib/features/labels/view/pages/labels_page.dart index 3d385cc..5951f92 100644 --- a/lib/features/labels/view/pages/labels_page.dart +++ b/lib/features/labels/view/pages/labels_page.dart @@ -16,9 +16,11 @@ import 'package:paperless_mobile/features/edit_label/view/impl/edit_corresponden import 'package:paperless_mobile/features/edit_label/view/impl/edit_document_type_page.dart'; import 'package:paperless_mobile/features/edit_label/view/impl/edit_storage_path_page.dart'; import 'package:paperless_mobile/features/edit_label/view/impl/edit_tag_page.dart'; +import 'package:paperless_mobile/features/home/view/model/api_version.dart'; import 'package:paperless_mobile/features/labels/cubit/label_cubit.dart'; import 'package:paperless_mobile/features/labels/view/widgets/label_tab_view.dart'; import 'package:paperless_mobile/generated/l10n/app_localizations.dart'; +import 'package:provider/provider.dart'; class LabelsPage extends StatefulWidget { const LabelsPage({Key? key}) : super(key: key); @@ -257,98 +259,70 @@ class _LabelsPageState extends State with SingleTickerProviderStateM void _openEditCorrespondentPage(Correspondent correspondent) { Navigator.push( context, - MaterialPageRoute( - builder: (_) => RepositoryProvider.value( - value: context.read(), - child: EditCorrespondentPage(correspondent: correspondent), - ), - ), + buildLabelPageRoute(EditCorrespondentPage(correspondent: correspondent)), ); } void _openEditDocumentTypePage(DocumentType docType) { Navigator.push( context, - MaterialPageRoute( - builder: (_) => RepositoryProvider.value( - value: context.read(), - child: EditDocumentTypePage(documentType: docType), - ), - ), + buildLabelPageRoute(EditDocumentTypePage(documentType: docType)), ); } void _openEditTagPage(Tag tag) { Navigator.push( context, - MaterialPageRoute( - builder: (_) => RepositoryProvider.value( - value: context.read(), - child: EditTagPage(tag: tag), - ), - ), + buildLabelPageRoute(EditTagPage(tag: tag)), ); } void _openEditStoragePathPage(StoragePath path) { Navigator.push( context, - MaterialPageRoute( - builder: (_) => RepositoryProvider.value( - value: context.read(), - child: EditStoragePathPage( - storagePath: path, - ), - ), - ), + buildLabelPageRoute(EditStoragePathPage( + storagePath: path, + )), ); } void _openAddCorrespondentPage() { Navigator.push( context, - MaterialPageRoute( - builder: (_) => RepositoryProvider.value( - value: context.read(), - child: const AddCorrespondentPage(), - ), - ), + buildLabelPageRoute(const AddCorrespondentPage()), ); } void _openAddDocumentTypePage() { Navigator.push( context, - MaterialPageRoute( - builder: (_) => RepositoryProvider.value( - value: context.read(), - child: const AddDocumentTypePage(), - ), - ), + buildLabelPageRoute(const AddDocumentTypePage()), ); } void _openAddTagPage() { Navigator.push( context, - MaterialPageRoute( - builder: (_) => RepositoryProvider.value( - value: context.read(), - child: const AddTagPage(), - ), - ), + buildLabelPageRoute(const AddTagPage()), ); } void _openAddStoragePathPage() { Navigator.push( context, - MaterialPageRoute( - builder: (_) => RepositoryProvider.value( - value: context.read(), - child: const AddStoragePathPage(), - ), - ), + buildLabelPageRoute(const AddStoragePathPage()), + ); + } + + MaterialPageRoute buildLabelPageRoute(Widget page) { + return MaterialPageRoute( + builder: (_) => MultiBlocProvider( + providers: [ + Provider.value(value: context.read()), + Provider.value(value: context.read()) + ], + child: page + ) ); } } diff --git a/packages/mock_server/lib/mock_server.dart b/packages/mock_server/lib/mock_server.dart index 8675b92..8805d8f 100644 --- a/packages/mock_server/lib/mock_server.dart +++ b/packages/mock_server/lib/mock_server.dart @@ -108,7 +108,7 @@ class LocalMockApiServer { "name": body?['name'], "color": body?['color'], "text_color": "#000000", - "match": "", + "match": body?['match'], "matching_algorithm": body?['matching_algorithm'], "is_insensitive": body?['is_insensitive'], "is_inbox_tag": false, @@ -133,7 +133,7 @@ class LocalMockApiServer { "name": body?['name'], "color": body?['color'], "text_color": "#000000", - "match": "", + "match": body?['match'], "matching_algorithm": body?['matching_algorithm'], "is_insensitive": body?['is_insensitive'], "is_inbox_tag": false, diff --git a/packages/paperless_api/lib/src/models/labels/label_model.dart b/packages/paperless_api/lib/src/models/labels/label_model.dart index 8ba06c4..ee9c2b8 100644 --- a/packages/paperless_api/lib/src/models/labels/label_model.dart +++ b/packages/paperless_api/lib/src/models/labels/label_model.dart @@ -37,7 +37,7 @@ abstract class Label extends Equatable implements Comparable { Label copyWith({ int? id, String? name, - String match, + String? match, MatchingAlgorithm? matchingAlgorithm, bool? isInsensitive, int? documentCount,