mirror of
https://github.com/Xevion/paperless-mobile.git
synced 2025-12-09 10:08:00 -06:00
Further migrations to route based navigation, improved saved view logic
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
import 'package:flutter/material.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 SavedViewChangedDialog extends StatelessWidget {
|
||||
const SavedViewChangedDialog({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AlertDialog(
|
||||
title: Text("Discard changes?"), //TODO: INTL
|
||||
content: Text(
|
||||
"Some filters of the currently active view have changed. By resetting the filter, these changes will be lost. Do you still wish to continue?", //TODO: INTL
|
||||
),
|
||||
actionsOverflowButtonSpacing: 8,
|
||||
actions: [
|
||||
const DialogCancelButton(),
|
||||
TextButton(
|
||||
child: Text(S.of(context)!.saveChanges),
|
||||
onPressed: () {
|
||||
Navigator.pop(context, false);
|
||||
},
|
||||
),
|
||||
DialogConfirmButton(
|
||||
label: S.of(context)!.resetFilter,
|
||||
style: DialogConfirmButtonStyle.danger,
|
||||
returnValue: true,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:paperless_api/paperless_api.dart';
|
||||
|
||||
class SavedViewChip extends StatelessWidget {
|
||||
final SavedView view;
|
||||
final void Function(SavedView view) onViewSelected;
|
||||
final void Function(SavedView vie) onUpdateView;
|
||||
final bool selected;
|
||||
final bool hasChanged;
|
||||
|
||||
const SavedViewChip({
|
||||
super.key,
|
||||
required this.view,
|
||||
required this.onViewSelected,
|
||||
required this.selected,
|
||||
required this.hasChanged,
|
||||
required this.onUpdateView,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Badge(
|
||||
smallSize: 12,
|
||||
alignment: const AlignmentDirectional(1.1, -1.2),
|
||||
backgroundColor: Colors.red,
|
||||
isLabelVisible: hasChanged,
|
||||
child: FilterChip(
|
||||
avatar: Icon(
|
||||
Icons.saved_search,
|
||||
color: Theme.of(context).colorScheme.onSurface,
|
||||
),
|
||||
showCheckmark: false,
|
||||
selectedColor: Theme.of(context).colorScheme.primaryContainer,
|
||||
selected: selected,
|
||||
label: Text(view.name),
|
||||
onSelected: (_) {
|
||||
onViewSelected(view);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:paperless_api/paperless_api.dart';
|
||||
import 'package:paperless_mobile/features/documents/view/widgets/saved_views/saved_view_chip.dart';
|
||||
import 'package:paperless_mobile/features/saved_view/cubit/saved_view_cubit.dart';
|
||||
|
||||
class SavedViewsWidget extends StatelessWidget {
|
||||
final void Function(SavedView view) onViewSelected;
|
||||
final void Function(SavedView view) onUpdateView;
|
||||
final DocumentFilter filter;
|
||||
const SavedViewsWidget({
|
||||
super.key,
|
||||
required this.onViewSelected,
|
||||
required this.filter,
|
||||
required this.onUpdateView,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
padding: const EdgeInsets.only(
|
||||
top: 12,
|
||||
left: 16,
|
||||
right: 16,
|
||||
),
|
||||
height: 50,
|
||||
child: BlocBuilder<SavedViewCubit, SavedViewState>(
|
||||
builder: (context, state) {
|
||||
return state.maybeWhen(
|
||||
loaded: (savedViews) {
|
||||
if (savedViews.isEmpty) {
|
||||
return Text("No saved views");
|
||||
}
|
||||
return ListView.builder(
|
||||
scrollDirection: Axis.horizontal,
|
||||
itemBuilder: (context, index) {
|
||||
final view = savedViews.values.elementAt(index);
|
||||
return SavedViewChip(
|
||||
view: view,
|
||||
onUpdateView: onUpdateView,
|
||||
onViewSelected: onViewSelected,
|
||||
selected: filter.selectedView != null &&
|
||||
view.id == filter.selectedView,
|
||||
hasChanged: filter.selectedView == view.id &&
|
||||
filter != view.toDocumentFilter(),
|
||||
);
|
||||
},
|
||||
itemCount: savedViews.length,
|
||||
);
|
||||
},
|
||||
error: () => Text("Error loading saved views"),
|
||||
orElse: () => Placeholder(),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user