solving problem with apply button

This commit is contained in:
José Salazar
2026-02-19 11:00:55 -05:00
parent fe28396a58
commit ed854cb958
6 changed files with 53 additions and 8 deletions

View File

@@ -98,7 +98,11 @@ extension StaffNavigator on IModularNavigator {
/// Parameters:
/// * [selectedDate] - Optional date to pre-select in the shifts view
/// * [initialTab] - Optional initial tab (via query parameter)
void toShifts({DateTime? selectedDate, String? initialTab}) {
void toShifts({
DateTime? selectedDate,
String? initialTab,
bool? refreshAvailable,
}) {
final Map<String, dynamic> args = <String, dynamic>{};
if (selectedDate != null) {
args['selectedDate'] = selectedDate;
@@ -106,6 +110,9 @@ extension StaffNavigator on IModularNavigator {
if (initialTab != null) {
args['initialTab'] = initialTab;
}
if (refreshAvailable == true) {
args['refreshAvailable'] = true;
}
navigate(
StaffPaths.shifts,
arguments: args.isEmpty ? null : args,

View File

@@ -108,9 +108,15 @@ class ShiftsBloc extends Bloc<ShiftsEvent, ShiftsState>
) async {
final currentState = state;
if (currentState is! ShiftsLoaded) return;
if (currentState.availableLoading || currentState.availableLoaded) return;
if (!event.force &&
(currentState.availableLoading || currentState.availableLoaded)) {
return;
}
emit(currentState.copyWith(availableLoading: true));
emit(currentState.copyWith(
availableLoading: true,
availableLoaded: false,
));
await handleError(
emit: emit,
action: () async {

View File

@@ -12,7 +12,13 @@ class LoadShiftsEvent extends ShiftsEvent {}
class LoadHistoryShiftsEvent extends ShiftsEvent {}
class LoadAvailableShiftsEvent extends ShiftsEvent {}
class LoadAvailableShiftsEvent extends ShiftsEvent {
final bool force;
const LoadAvailableShiftsEvent({this.force = false});
@override
List<Object?> get props => [force];
}
class LoadFindFirstEvent extends ShiftsEvent {}

View File

@@ -93,7 +93,11 @@ class _ShiftDetailsPageState extends State<ShiftDetailsPage> {
message: state.message,
type: UiSnackbarType.success,
);
Modular.to.toShifts(selectedDate: state.shiftDate);
Modular.to.toShifts(
selectedDate: state.shiftDate,
initialTab: 'find',
refreshAvailable: true,
);
} else if (state is ShiftDetailsError) {
if (_isApplying) {
UiSnackbar.show(
@@ -112,7 +116,8 @@ class _ShiftDetailsPageState extends State<ShiftDetailsPage> {
);
}
Shift displayShift = widget.shift;
final Shift displayShift =
state is ShiftDetailsLoaded ? state.shift : widget.shift;
final i18n = Translations.of(context).staff_shifts.shift_details;
final duration = _calculateDuration(displayShift);

View File

@@ -12,7 +12,13 @@ import '../widgets/tabs/history_shifts_tab.dart';
class ShiftsPage extends StatefulWidget {
final String? initialTab;
final DateTime? selectedDate;
const ShiftsPage({super.key, this.initialTab, this.selectedDate});
final bool refreshAvailable;
const ShiftsPage({
super.key,
this.initialTab,
this.selectedDate,
this.refreshAvailable = false,
});
@override
State<ShiftsPage> createState() => _ShiftsPageState();
@@ -22,6 +28,8 @@ class _ShiftsPageState extends State<ShiftsPage> {
late String _activeTab;
DateTime? _selectedDate;
bool _prioritizeFind = false;
bool _refreshAvailable = false;
bool _pendingAvailableRefresh = false;
final ShiftsBloc _bloc = Modular.get<ShiftsBloc>();
@override
@@ -30,6 +38,8 @@ class _ShiftsPageState extends State<ShiftsPage> {
_activeTab = widget.initialTab ?? 'myshifts';
_selectedDate = widget.selectedDate;
_prioritizeFind = widget.initialTab == 'find';
_refreshAvailable = widget.refreshAvailable;
_pendingAvailableRefresh = widget.refreshAvailable;
if (_prioritizeFind) {
_bloc.add(LoadFindFirstEvent());
} else {
@@ -40,7 +50,9 @@ class _ShiftsPageState extends State<ShiftsPage> {
}
if (_activeTab == 'find') {
if (!_prioritizeFind) {
_bloc.add(LoadAvailableShiftsEvent());
_bloc.add(
LoadAvailableShiftsEvent(force: _refreshAvailable),
);
}
}
}
@@ -59,6 +71,10 @@ class _ShiftsPageState extends State<ShiftsPage> {
_selectedDate = widget.selectedDate;
});
}
if (widget.refreshAvailable) {
_refreshAvailable = true;
_pendingAvailableRefresh = true;
}
}
@override
@@ -77,6 +93,10 @@ class _ShiftsPageState extends State<ShiftsPage> {
}
},
builder: (context, state) {
if (_pendingAvailableRefresh && state is ShiftsLoaded) {
_pendingAvailableRefresh = false;
_bloc.add(const LoadAvailableShiftsEvent(force: true));
}
final bool baseLoaded = state is ShiftsLoaded;
final List<Shift> myShifts = (state is ShiftsLoaded)
? state.myShifts

View File

@@ -46,6 +46,7 @@ class StaffShiftsModule extends Module {
return ShiftsPage(
initialTab: queryParams['tab'] ?? args?['initialTab'],
selectedDate: args?['selectedDate'],
refreshAvailable: args?['refreshAvailable'] == true,
);
},
);