succes message after reorder creation
This commit is contained in:
@@ -34,10 +34,7 @@ class ClientHomeSheets {
|
|||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
return ShiftOrderFormSheet(
|
return ShiftOrderFormSheet(
|
||||||
initialData: initialData,
|
initialData: initialData,
|
||||||
onSubmit: (Map<String, dynamic> data) {
|
onSubmit: onSubmit,
|
||||||
Navigator.pop(context);
|
|
||||||
onSubmit(data);
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:core_localization/core_localization.dart';
|
||||||
import 'package:design_system/design_system.dart';
|
import 'package:design_system/design_system.dart';
|
||||||
import 'package:firebase_data_connect/firebase_data_connect.dart' as fdc;
|
import 'package:firebase_data_connect/firebase_data_connect.dart' as fdc;
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@@ -59,6 +60,8 @@ class _ShiftOrderFormSheetState extends State<ShiftOrderFormSheet> {
|
|||||||
List<_VendorOption> _vendors = const <_VendorOption>[];
|
List<_VendorOption> _vendors = const <_VendorOption>[];
|
||||||
List<_RoleOption> _roles = const <_RoleOption>[];
|
List<_RoleOption> _roles = const <_RoleOption>[];
|
||||||
String? _selectedVendorId;
|
String? _selectedVendorId;
|
||||||
|
bool _showSuccess = false;
|
||||||
|
Map<String, dynamic>? _submitData;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@@ -189,7 +192,8 @@ class _ShiftOrderFormSheetState extends State<ShiftOrderFormSheet> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final DateTime date = DateTime.parse(_dateController.text);
|
final DateTime date = DateTime.parse(_dateController.text);
|
||||||
final fdc.Timestamp orderTimestamp = _toTimestamp(date);
|
final DateTime dateOnly = DateTime.utc(date.year, date.month, date.day);
|
||||||
|
final fdc.Timestamp orderTimestamp = _toTimestamp(dateOnly);
|
||||||
final dc.OrderType orderType =
|
final dc.OrderType orderType =
|
||||||
_orderTypeFromValue(widget.initialData?['type']?.toString());
|
_orderTypeFromValue(widget.initialData?['type']?.toString());
|
||||||
|
|
||||||
@@ -270,8 +274,10 @@ class _ShiftOrderFormSheetState extends State<ShiftOrderFormSheet> {
|
|||||||
.shifts(fdc.AnyValue(<String>[shiftId]))
|
.shifts(fdc.AnyValue(<String>[shiftId]))
|
||||||
.execute();
|
.execute();
|
||||||
|
|
||||||
widget.onSubmit(<String, dynamic>{
|
if (!mounted) return;
|
||||||
'orderId': orderId,
|
setState(() {
|
||||||
|
_submitData = <String, dynamic>{'orderId': orderId};
|
||||||
|
_showSuccess = true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -472,7 +478,17 @@ class _ShiftOrderFormSheetState extends State<ShiftOrderFormSheet> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fdc.Timestamp _toTimestamp(DateTime date) {
|
fdc.Timestamp _toTimestamp(DateTime date) {
|
||||||
final int millis = date.millisecondsSinceEpoch;
|
final DateTime utc = DateTime.utc(
|
||||||
|
date.year,
|
||||||
|
date.month,
|
||||||
|
date.day,
|
||||||
|
date.hour,
|
||||||
|
date.minute,
|
||||||
|
date.second,
|
||||||
|
date.millisecond,
|
||||||
|
date.microsecond,
|
||||||
|
);
|
||||||
|
final int millis = utc.millisecondsSinceEpoch;
|
||||||
final int seconds = millis ~/ 1000;
|
final int seconds = millis ~/ 1000;
|
||||||
final int nanos = (millis % 1000) * 1000000;
|
final int nanos = (millis % 1000) * 1000000;
|
||||||
return fdc.Timestamp(nanos, seconds);
|
return fdc.Timestamp(nanos, seconds);
|
||||||
@@ -480,6 +496,16 @@ class _ShiftOrderFormSheetState extends State<ShiftOrderFormSheet> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
if (_showSuccess) {
|
||||||
|
final TranslationsClientCreateOrderOneTimeEn labels =
|
||||||
|
t.client_create_order.one_time;
|
||||||
|
return _buildSuccessView(
|
||||||
|
title: labels.success_title,
|
||||||
|
message: labels.success_message,
|
||||||
|
buttonLabel: labels.back_to_orders,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return Container(
|
return Container(
|
||||||
height: MediaQuery.of(context).size.height * 0.95,
|
height: MediaQuery.of(context).size.height * 0.95,
|
||||||
decoration: const BoxDecoration(
|
decoration: const BoxDecoration(
|
||||||
@@ -1109,6 +1135,90 @@ class _ShiftOrderFormSheetState extends State<ShiftOrderFormSheet> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _buildSuccessView({
|
||||||
|
required String title,
|
||||||
|
required String message,
|
||||||
|
required String buttonLabel,
|
||||||
|
}) {
|
||||||
|
return Container(
|
||||||
|
width: double.infinity,
|
||||||
|
height: MediaQuery.of(context).size.height * 0.95,
|
||||||
|
decoration: const BoxDecoration(
|
||||||
|
gradient: LinearGradient(
|
||||||
|
begin: Alignment.topCenter,
|
||||||
|
end: Alignment.bottomCenter,
|
||||||
|
colors: <Color>[UiColors.primary, UiColors.buttonPrimaryHover],
|
||||||
|
),
|
||||||
|
borderRadius: BorderRadius.vertical(top: Radius.circular(24)),
|
||||||
|
),
|
||||||
|
child: SafeArea(
|
||||||
|
child: Center(
|
||||||
|
child: Container(
|
||||||
|
margin: const EdgeInsets.symmetric(horizontal: 40),
|
||||||
|
padding: const EdgeInsets.all(UiConstants.space8),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: UiColors.white,
|
||||||
|
borderRadius: UiConstants.radiusLg * 1.5,
|
||||||
|
boxShadow: <BoxShadow>[
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.black.withValues(alpha: 0.2),
|
||||||
|
blurRadius: 20,
|
||||||
|
offset: const Offset(0, 10),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
width: 64,
|
||||||
|
height: 64,
|
||||||
|
decoration: const BoxDecoration(
|
||||||
|
color: UiColors.accent,
|
||||||
|
shape: BoxShape.circle,
|
||||||
|
),
|
||||||
|
child: const Center(
|
||||||
|
child: Icon(
|
||||||
|
UiIcons.check,
|
||||||
|
color: UiColors.black,
|
||||||
|
size: 32,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: UiConstants.space6),
|
||||||
|
Text(
|
||||||
|
title,
|
||||||
|
style: UiTypography.headline2m.textPrimary,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
),
|
||||||
|
const SizedBox(height: UiConstants.space3),
|
||||||
|
Text(
|
||||||
|
message,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: UiTypography.body2r.textSecondary.copyWith(
|
||||||
|
height: 1.5,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: UiConstants.space8),
|
||||||
|
SizedBox(
|
||||||
|
width: double.infinity,
|
||||||
|
child: UiButton.primary(
|
||||||
|
text: buttonLabel,
|
||||||
|
onPressed: () {
|
||||||
|
widget.onSubmit(_submitData ?? <String, dynamic>{});
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
size: UiButtonSize.large,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
Widget _buildInlineTimeInput({
|
Widget _buildInlineTimeInput({
|
||||||
required String label,
|
required String label,
|
||||||
required String value,
|
required String value,
|
||||||
|
|||||||
Reference in New Issue
Block a user