175 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:datetime_picker_formfield/datetime_picker_formfield.dart';
 | 
						|
import 'package:flutter/material.dart';
 | 
						|
import 'package:go_router/go_router.dart';
 | 
						|
import 'package:oc_front/core/services/specialized_services/booking_service.dart';
 | 
						|
import 'package:oc_front/main.dart';
 | 
						|
import 'package:intl/intl.dart' as intl;
 | 
						|
import 'package:oc_front/models/workflow.dart';
 | 
						|
import 'package:oc_front/pages/abstract_page.dart';
 | 
						|
import 'package:oc_front/widgets/sheduler_items/schedule.dart';
 | 
						|
 | 
						|
class DatacenterFactory implements AbstractFactory {
 | 
						|
  @override GlobalKey getKey() { return key; }
 | 
						|
  static GlobalKey<ComputePageWidgetState> key = GlobalKey<ComputePageWidgetState>();
 | 
						|
  @override bool searchFill() { return false; }
 | 
						|
  @override Widget factory(GoRouterState state, List<String> args) { return ComputePageWidget(); }
 | 
						|
  @override void search(BuildContext context, bool special) { }
 | 
						|
}
 | 
						|
 | 
						|
class ComputePageWidget extends StatefulWidget {
 | 
						|
  bool isList = true;
 | 
						|
  DateTime start = DateTime.now();
 | 
						|
  DateTime end = DateTime.now().add(const Duration(days: 180));
 | 
						|
  final BookingExecutionService _service = BookingExecutionService();
 | 
						|
 | 
						|
  ComputePageWidget () : super(key: DatacenterFactory.key);
 | 
						|
  @override ComputePageWidgetState createState() => ComputePageWidgetState();
 | 
						|
 | 
						|
  static Widget factory() { return ComputePageWidget(); }
 | 
						|
}
 | 
						|
class ComputePageWidgetState extends State<ComputePageWidget> {
 | 
						|
  List<Color> colors = [Colors.blue, Colors.orange, redColor, Colors.green, redColor];
 | 
						|
  List<String> titles = ["SCHEDULED", "RUNNING", "FAILURE", "SUCCESS", "MISSED"];
 | 
						|
  
 | 
						|
  @override Widget build(BuildContext context) {
 | 
						|
        GlobalKey<ScheduleWidgetState> k = GlobalKey<ScheduleWidgetState>();
 | 
						|
        return Column( children: [
 | 
						|
          Container( color: lightColor,
 | 
						|
            height: 50, width: getMainWidth(context),
 | 
						|
            child: Padding(padding: const EdgeInsets.symmetric(horizontal: 50),
 | 
						|
              child: Row( children: [
 | 
						|
                Padding(padding: const EdgeInsets.only(right: 30),
 | 
						|
                  child: Tooltip( message: widget.isList ? "calendar view" : "list view",
 | 
						|
                    child: InkWell( child: Icon( widget.isList ? Icons.calendar_month : Icons.list, color: Colors.white 
 | 
						|
                      , size: 25 ),
 | 
						|
                      onTap: () { 
 | 
						|
                        widget.isList = !widget.isList;
 | 
						|
                        k.currentState?.setState(() { k.currentState?.widget.isList = widget.isList; });
 | 
						|
                      })
 | 
						|
                  ),
 | 
						|
                ), 
 | 
						|
                Container(padding: const EdgeInsets.only(left: 20),
 | 
						|
                  width: getMainWidth(context) / 5,
 | 
						|
                  height: 30,
 | 
						|
                  child: DateTimeField( 
 | 
						|
                                validator: (value) {
 | 
						|
                                  return null;
 | 
						|
                                },
 | 
						|
                                resetIcon: null,
 | 
						|
                                onShowPicker: (context, currentValue) async { 
 | 
						|
                                  var date = await showDatePicker(                                    
 | 
						|
                                    builder: (BuildContext context, Widget? child) {
 | 
						|
                                      Widget w = Theme(
 | 
						|
                                        data: ThemeData(
 | 
						|
                                          cardTheme: CardTheme(elevation: 0, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0))),
 | 
						|
                                          dialogTheme: DialogTheme(elevation: 0, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0))),
 | 
						|
                                          colorScheme: ColorScheme.light(
 | 
						|
                                            background: midColor,
 | 
						|
                                            tertiary: Colors.grey,
 | 
						|
                                            secondary: Colors.grey,
 | 
						|
                                            primary: Colors.black),
 | 
						|
                                        ),
 | 
						|
                                        child: child ?? Container(),
 | 
						|
                                      );
 | 
						|
                                      return w;
 | 
						|
                                    },
 | 
						|
                                    context: context,
 | 
						|
                                    firstDate: DateTime(1900),
 | 
						|
                                    initialDate: widget.start,
 | 
						|
                                    lastDate: DateTime(2100)
 | 
						|
                                  );
 | 
						|
                                  return date;
 | 
						|
                                },
 | 
						|
                                
 | 
						|
                                format: intl.DateFormat('y-M-dd hh:mm:ss'),
 | 
						|
                                initialValue: widget.start,
 | 
						|
                                onChanged: (value) { 
 | 
						|
                                  if (value == null) { return; }
 | 
						|
                                  setState(() { widget.start = value; });
 | 
						|
                                },
 | 
						|
                                style: const TextStyle(fontSize: 12),
 | 
						|
                                decoration: const  InputDecoration(
 | 
						|
                                  fillColor: Colors.white,
 | 
						|
                                  floatingLabelBehavior: FloatingLabelBehavior.always,
 | 
						|
                                  filled: true,
 | 
						|
                                  alignLabelWithHint: false,
 | 
						|
                                  hintText: "enter start date...",
 | 
						|
                                  labelText: "",
 | 
						|
                                  errorStyle: TextStyle(fontSize: 0),
 | 
						|
                                  hintStyle: TextStyle(fontSize: 10),
 | 
						|
                                  labelStyle: TextStyle(fontSize: 15, color: Colors.black, fontWeight: FontWeight.w500),
 | 
						|
                                  enabledBorder: OutlineInputBorder(borderSide: BorderSide(color: Colors.transparent)),
 | 
						|
                                  border: OutlineInputBorder(borderSide: BorderSide(color: Colors.transparent)),
 | 
						|
                                  contentPadding: EdgeInsets.symmetric(horizontal: 10, vertical: 5),
 | 
						|
                                ),
 | 
						|
                          )
 | 
						|
                ),
 | 
						|
                Container(padding: const EdgeInsets.only(left: 20), 
 | 
						|
                  child: const Text("TO", style: TextStyle(color: Colors.white, fontSize: 15, fontWeight: FontWeight.w500))),
 | 
						|
                Container( padding: const EdgeInsets.only(left: 20, right: 20),
 | 
						|
                  width: getMainWidth(context) / 5,
 | 
						|
                  height: 30,
 | 
						|
                  child: DateTimeField( 
 | 
						|
                                validator: (value) {
 | 
						|
                                  return null;
 | 
						|
                                },
 | 
						|
                                resetIcon: null,
 | 
						|
                                onShowPicker: (context, currentValue) async { 
 | 
						|
                                  var date = await showDatePicker(                                    
 | 
						|
                                    builder: (BuildContext context, Widget? child) {
 | 
						|
                                      Widget w = Theme(
 | 
						|
                                        data: ThemeData(
 | 
						|
                                          cardTheme: CardTheme(elevation: 0, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0))),
 | 
						|
                                          dialogTheme: DialogTheme(elevation: 0, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0))),
 | 
						|
                                          colorScheme: ColorScheme.light(
 | 
						|
                                            background: midColor,
 | 
						|
                                            tertiary: Colors.grey,
 | 
						|
                                            secondary: Colors.grey,
 | 
						|
                                            primary: Colors.black),
 | 
						|
                                        ),
 | 
						|
                                        child: child ?? Container(),
 | 
						|
                                      );
 | 
						|
                                      return w;
 | 
						|
                                    },
 | 
						|
                                    context: context,
 | 
						|
                                    firstDate: DateTime(1900),
 | 
						|
                                    initialDate: widget.end,
 | 
						|
                                    lastDate: DateTime(2100)
 | 
						|
                                  );
 | 
						|
                                  return date;
 | 
						|
                                },
 | 
						|
                                format: intl.DateFormat('y-M-dd hh:mm:ss'),
 | 
						|
                                initialValue: widget.end,
 | 
						|
                                onChanged: (value) { 
 | 
						|
                                  if (value == null) { return; }
 | 
						|
                                  setState(() { widget.start = value; });
 | 
						|
                                },
 | 
						|
                                style: const TextStyle(fontSize: 12),
 | 
						|
                                decoration: const  InputDecoration(
 | 
						|
                                  fillColor: Colors.white,
 | 
						|
                                  floatingLabelBehavior: FloatingLabelBehavior.always,
 | 
						|
                                  filled: true,
 | 
						|
                                  alignLabelWithHint: false,
 | 
						|
                                  hintText: "enter end date...",
 | 
						|
                                  labelText: "",
 | 
						|
                                  errorStyle: TextStyle(fontSize: 0),
 | 
						|
                                  hintStyle: TextStyle(fontSize: 10),
 | 
						|
                                  labelStyle: TextStyle(fontSize: 15, color: Colors.black, fontWeight: FontWeight.w500),
 | 
						|
                                  enabledBorder: OutlineInputBorder(borderSide: BorderSide(color: Colors.transparent)),
 | 
						|
                                  border: OutlineInputBorder(borderSide: BorderSide(color: Colors.transparent)),
 | 
						|
                                  contentPadding: EdgeInsets.symmetric(horizontal: 10, vertical: 5),
 | 
						|
                                ),
 | 
						|
                          )
 | 
						|
                ),
 | 
						|
                Tooltip( message: "refresh scheduler",
 | 
						|
                  child: InkWell(
 | 
						|
                    onTap: () => setState(() {}),
 | 
						|
                    child: const Icon(Icons.refresh, color: Colors.white,),
 | 
						|
                  ),
 | 
						|
                )
 | 
						|
              ]))
 | 
						|
          ),
 | 
						|
          ScheduleWidget( service: widget._service, key: k, start: widget.start, end : widget.end, isList: widget.isList, isBox: false)
 | 
						|
        ]);
 | 
						|
  }
 | 
						|
} |