solving problem with apply button
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -46,6 +46,7 @@ class StaffShiftsModule extends Module {
|
||||
return ShiftsPage(
|
||||
initialTab: queryParams['tab'] ?? args?['initialTab'],
|
||||
selectedDate: args?['selectedDate'],
|
||||
refreshAvailable: args?['refreshAvailable'] == true,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user