solving problem with apply button
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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 {}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user