feat: Finalize bulk edits and reworked form fields

This commit is contained in:
Anton Stubenbord
2023-04-13 22:43:41 +02:00
parent 83d8abeae2
commit d621a3bbe7
41 changed files with 936 additions and 995 deletions

View File

@@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/widgets/dialog_utils/dialog_cancel_button.dart';
import 'package:paperless_mobile/core/widgets/dialog_utils/dialog_confirm_button.dart';
import 'package:paperless_mobile/generated/l10n/app_localizations.dart';
class DeleteDocumentConfirmationDialog extends StatelessWidget {
@@ -30,19 +32,10 @@ class DeleteDocumentConfirmationDialog extends StatelessWidget {
],
),
actions: [
TextButton(
onPressed: () => Navigator.pop(context, false),
child: Text(S.of(context)!.cancel),
),
TextButton(
style: ButtonStyle(
foregroundColor:
MaterialStateProperty.all(Theme.of(context).colorScheme.error),
),
onPressed: () {
Navigator.pop(context, true);
},
child: Text(S.of(context)!.delete),
const DialogCancelButton(),
DialogConfirmButton(
label: S.of(context)!.delete,
style: DialogConfirmButtonStyle.danger,
),
],
);

View File

@@ -4,7 +4,7 @@ import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/widgets/form_builder_fields/extended_date_range_form_field/form_builder_extended_date_range_picker.dart';
import 'package:paperless_mobile/features/labels/cubit/label_cubit.dart';
import 'package:paperless_mobile/features/labels/tags/view/widgets/tag_query_form_field.dart';
import 'package:paperless_mobile/features/labels/tags/view/widgets/tags_form_field.dart';
import 'package:paperless_mobile/features/labels/tags/view/widgets/tags_form_field.dart';
import 'package:paperless_mobile/features/labels/view/widgets/label_form_field.dart';
import 'package:paperless_mobile/generated/l10n/app_localizations.dart';
@@ -193,19 +193,13 @@ class _DocumentFilterFormState extends State<DocumentFilterForm> {
}
Widget _buildTagsFormField() {
return TagQueryFormField(
allowExclude: false,
options: widget.tags,
return TagsFormField(
name: DocumentModel.tagsKey,
initialValue: widget.initialFilter.tags,
options: widget.tags,
allowExclude: false,
allowOnlySelection: false,
allowCreation: false,
);
return TagFormField(
name: DocumentModel.tagsKey,
initialValue: widget.initialFilter.tags,
allowCreation: false,
selectableOptions: widget.tags,
);
}
}

View File

@@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/widgets/dialog_utils/dialog_cancel_button.dart';
import 'package:paperless_mobile/core/widgets/dialog_utils/dialog_confirm_button.dart';
import 'package:paperless_mobile/features/documents/cubit/documents_cubit.dart';
import 'package:paperless_mobile/generated/l10n/app_localizations.dart';
@@ -29,19 +31,10 @@ class BulkDeleteConfirmationDialog extends StatelessWidget {
],
),
actions: [
TextButton(
onPressed: () => Navigator.pop(context, false),
child: Text(S.of(context)!.cancel),
),
TextButton(
style: ButtonStyle(
foregroundColor:
MaterialStateProperty.all(Theme.of(context).colorScheme.error),
),
onPressed: () {
Navigator.pop(context, true);
},
child: Text(S.of(context)!.delete),
const DialogCancelButton(),
DialogConfirmButton(
label: S.of(context)!.delete,
style: DialogConfirmButtonStyle.danger,
),
],
);

View File

@@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/widgets/dialog_utils/dialog_cancel_button.dart';
import 'package:paperless_mobile/core/widgets/dialog_utils/dialog_confirm_button.dart';
import 'package:paperless_mobile/generated/l10n/app_localizations.dart';
class ConfirmDeleteSavedViewDialog extends StatelessWidget {
@@ -19,16 +21,10 @@ class ConfirmDeleteSavedViewDialog extends StatelessWidget {
),
content: Text(S.of(context)!.doYouReallyWantToDeleteThisView),
actions: [
TextButton(
child: Text(S.of(context)!.cancel),
onPressed: () => Navigator.pop(context, false),
),
TextButton(
child: Text(
S.of(context)!.delete,
style: TextStyle(color: Theme.of(context).colorScheme.error),
),
onPressed: () => Navigator.pop(context, true),
const DialogCancelButton(),
DialogConfirmButton(
label: S.of(context)!.delete,
style: DialogConfirmButtonStyle.danger,
),
],
);

View File

@@ -1,13 +1,10 @@
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/widgets/dialog_utils/dialog_cancel_button.dart';
import 'package:paperless_mobile/extensions/flutter_extensions.dart';
import 'package:paperless_mobile/features/document_bulk_action/cubit/document_bulk_action_cubit.dart';
import 'package:paperless_mobile/features/document_bulk_action/view/widgets/bulk_edit_label_bottom_sheet.dart';
import 'package:paperless_mobile/features/document_bulk_action/view/widgets/bulk_edit_tags_bottom_sheet.dart';
import 'package:paperless_mobile/features/document_bulk_action/view/widgets/fullscreen_bulk_edit_label_form_field.dart';
import 'package:paperless_mobile/features/document_bulk_action/view/widgets/fullscreen_bulk_edit_label_page.dart';
import 'package:paperless_mobile/features/document_bulk_action/view/widgets/fullscreen_bulk_edit_tags_widget.dart';
import 'package:paperless_mobile/features/documents/cubit/documents_cubit.dart';
import 'package:paperless_mobile/features/documents/view/widgets/selection/bulk_delete_confirmation_dialog.dart';
import 'package:paperless_mobile/generated/l10n/app_localizations.dart';
@@ -82,7 +79,7 @@ class DocumentSelectionSliverAppBar extends StatelessWidget {
child: BlocBuilder<DocumentBulkActionCubit,
DocumentBulkActionState>(
builder: (context, state) {
return FullscreenBulkEditLabelFormField(
return FullscreenBulkEditLabelPage(
options: state.correspondents,
selection: state.selection,
labelMapper: (document) => document.correspondent,
@@ -91,6 +88,22 @@ class DocumentSelectionSliverAppBar extends StatelessWidget {
onSubmit: context
.read<DocumentBulkActionCubit>()
.bulkModifyCorrespondent,
assignStringFnBuilder: (int count) {
return (String name) => S
.of(context)!
.bulkEditCorrespondentAssignMessage(
name,
count,
);
},
removeStringFnBuilder: (int count) {
return (String name) => S
.of(context)!
.bulkEditCorrespondentRemoveMessage(
name,
count,
);
},
);
},
),
@@ -115,7 +128,7 @@ class DocumentSelectionSliverAppBar extends StatelessWidget {
child: BlocBuilder<DocumentBulkActionCubit,
DocumentBulkActionState>(
builder: (context, state) {
return FullscreenBulkEditLabelFormField(
return FullscreenBulkEditLabelPage(
options: state.documentTypes,
selection: state.selection,
labelMapper: (document) => document.documentType,
@@ -125,6 +138,22 @@ class DocumentSelectionSliverAppBar extends StatelessWidget {
onSubmit: context
.read<DocumentBulkActionCubit>()
.bulkModifyDocumentType,
assignStringFnBuilder: (int count) {
return (String name) => S
.of(context)!
.bulkEditDocumentTypeAssignMessage(
count,
name,
);
},
removeStringFnBuilder: (int count) {
return (String name) => S
.of(context)!
.bulkEditDocumentTypeRemoveMessage(
count,
name,
);
},
);
},
),
@@ -149,7 +178,7 @@ class DocumentSelectionSliverAppBar extends StatelessWidget {
child: BlocBuilder<DocumentBulkActionCubit,
DocumentBulkActionState>(
builder: (context, state) {
return FullscreenBulkEditLabelFormField(
return FullscreenBulkEditLabelPage(
options: state.storagePaths,
selection: state.selection,
labelMapper: (document) => document.storagePath,
@@ -158,6 +187,22 @@ class DocumentSelectionSliverAppBar extends StatelessWidget {
onSubmit: context
.read<DocumentBulkActionCubit>()
.bulkModifyStoragePath,
assignStringFnBuilder: (int count) {
return (String name) => S
.of(context)!
.bulkEditStoragePathAssignMessage(
count,
name,
);
},
removeStringFnBuilder: (int count) {
return (String name) => S
.of(context)!
.bulkEditStoragePathRemoveMessage(
count,
name,
);
},
);
},
),
@@ -179,17 +224,9 @@ class DocumentSelectionSliverAppBar extends StatelessWidget {
label: Text(S.of(context)!.tags),
avatar: const Icon(Icons.edit),
onPressed: () {
showModalBottomSheet(
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(16),
topRight: Radius.circular(16),
),
),
isScrollControlled: true,
context: context,
builder: (_) {
return BlocProvider(
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => BlocProvider(
create: (context) => DocumentBulkActionCubit(
context.read(),
context.read(),
@@ -197,10 +234,10 @@ class DocumentSelectionSliverAppBar extends StatelessWidget {
selection: state.selection,
),
child: Builder(builder: (context) {
return const BulkEditTagsBottomSheet();
return const FullscreenBulkEditTagsWidget();
}),
);
},
),
),
);
},
);