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

View File

@@ -108,9 +108,15 @@ class ShiftsBloc extends Bloc<ShiftsEvent, ShiftsState>
) async { ) async {
final currentState = state; final currentState = state;
if (currentState is! ShiftsLoaded) return; 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( await handleError(
emit: emit, emit: emit,
action: () async { action: () async {

View File

@@ -12,7 +12,13 @@ class LoadShiftsEvent extends ShiftsEvent {}
class LoadHistoryShiftsEvent 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 {} class LoadFindFirstEvent extends ShiftsEvent {}

View File

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

View File

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

View File

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