* Improved Task and Ticket Detail Screen
* Made Office assignment searchable in Task and Ticket Creation and Edit Screen
This commit is contained in:
@@ -5,6 +5,7 @@ import 'package:tasq/utils/app_time.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
||||
import '../../models/office.dart';
|
||||
import '../../widgets/office_picker.dart';
|
||||
import '../../models/notification_item.dart';
|
||||
import '../../models/profile.dart';
|
||||
import '../../models/ticket.dart';
|
||||
@@ -440,7 +441,7 @@ class _TicketsListScreenState extends ConsumerState<TicketsListScreen> {
|
||||
) async {
|
||||
final subjectController = TextEditingController();
|
||||
final descriptionController = TextEditingController();
|
||||
Office? selectedOffice;
|
||||
String? selectedOfficeId;
|
||||
|
||||
final isMobile = MediaQuery.sizeOf(context).width < AppBreakpoints.tablet;
|
||||
var saving = false;
|
||||
@@ -471,18 +472,10 @@ class _TicketsListScreenState extends ConsumerState<TicketsListScreen> {
|
||||
if (offices.isEmpty) return const Text('No offices assigned.');
|
||||
final officesSorted = List<Office>.from(offices)
|
||||
..sort((a, b) => a.name.toLowerCase().compareTo(b.name.toLowerCase()));
|
||||
if (selectedOffice == null ||
|
||||
!officesSorted.any((o) => o.id == selectedOffice!.id)) {
|
||||
selectedOffice = officesSorted.first;
|
||||
}
|
||||
return DropdownButtonFormField<Office>(
|
||||
key: ValueKey(selectedOffice?.id),
|
||||
initialValue: selectedOffice,
|
||||
items: officesSorted
|
||||
.map((o) => DropdownMenuItem(value: o, child: Text(o.name)))
|
||||
.toList(),
|
||||
onChanged: saving ? null : (v) => setState(() => selectedOffice = v),
|
||||
decoration: const InputDecoration(labelText: 'Office'),
|
||||
return OfficeSelectorField(
|
||||
offices: officesSorted,
|
||||
selectedOfficeId: selectedOfficeId,
|
||||
onChanged: saving ? null : (id) => setState(() => selectedOfficeId = id),
|
||||
);
|
||||
},
|
||||
loading: () => const LinearProgressIndicator(),
|
||||
@@ -506,7 +499,7 @@ class _TicketsListScreenState extends ConsumerState<TicketsListScreen> {
|
||||
: () async {
|
||||
final subject = subjectController.text.trim();
|
||||
final description = descriptionController.text.trim();
|
||||
if (subject.isEmpty || description.isEmpty || selectedOffice == null) {
|
||||
if (subject.isEmpty || description.isEmpty || selectedOfficeId == null) {
|
||||
showWarningSnackBar(closeCtx, 'Fill out all fields.');
|
||||
return;
|
||||
}
|
||||
@@ -517,7 +510,7 @@ class _TicketsListScreenState extends ConsumerState<TicketsListScreen> {
|
||||
.createTicket(
|
||||
subject: subject,
|
||||
description: description,
|
||||
officeId: selectedOffice!.id,
|
||||
officeId: selectedOfficeId!,
|
||||
);
|
||||
if (pendingTicket != null) {
|
||||
final current = ref.read(offlinePendingTicketsProvider);
|
||||
|
||||
Reference in New Issue
Block a user