This commit is contained in:
mr 2025-02-05 16:04:57 +01:00
parent e1968e14b0
commit 058633742e
3 changed files with 38 additions and 16 deletions

View File

@ -8,17 +8,28 @@ import 'package:oc_front/widgets/dialog/alert.dart';
import 'package:json_string/json_string.dart'; import 'package:json_string/json_string.dart';
import 'package:oc_front/core/services/specialized_services/logs_service.dart'; import 'package:oc_front/core/services/specialized_services/logs_service.dart';
bool isLoading = true;
Map<String, bool> valid = {};
class LogsWidget extends StatefulWidget { class LogsWidget extends StatefulWidget {
String? level; String? level;
String search = ""; String search = "";
WorkflowExecution? exec; WorkflowExecution? exec;
List<Log> logs = [];
LogsWidget ({ Key? key, this.search = "", this.level, this.exec }): super(key: key); LogsWidget ({ Key? key, this.search = "", this.level, this.exec }): super(key: key);
@override LogsWidgetState createState() => LogsWidgetState(); @override LogsWidgetState createState() => LogsWidgetState();
} }
class LogsWidgetState extends State<LogsWidget> { class LogsWidgetState extends State<LogsWidget> {
@override Widget build(BuildContext context) { @override Widget build(BuildContext context) {
if (!isLoading) {
isLoading = true;
Future.delayed(const Duration(milliseconds: 100), () {
try { setState(() { });
} catch (e) { /**/ }
});
return Container( height: getMainHeight(context) - 100,
child: Center( child: CircularProgressIndicator()) );
}
if (widget.exec == null) { if (widget.exec == null) {
return Container(); return Container();
} else { } else {
@ -42,18 +53,18 @@ class LogsWidgetState extends State<LogsWidget> {
end = (DateTime.parse(widget.exec!.startDate!).add( const Duration(days: 14)).microsecondsSinceEpoch).toString(); end = (DateTime.parse(widget.exec!.startDate!).add( const Duration(days: 14)).microsecondsSinceEpoch).toString();
} }
} catch(e) { /* */ } } catch(e) { /* */ }
Future.delayed(const Duration(minutes: 1), () {
try { setState(() {});
} catch (e) { /**/ }
});
return FutureBuilder(future: LogsService().search(context, [], { return FutureBuilder(future: LogsService().search(context, [], {
"workflow_execution_id": widget.exec!.id, "workflow_execution_id": widget.exec!.id,
"start": start, "start": start,
"end": end "end": end
}), builder: (a, b) { }), builder: (a, b) {
Future.delayed(const Duration(minutes: 1), () {
try {
setState(() {});
} catch (e) {}
});
List<Log> logs = []; List<Log> logs = [];
if (b.data != null && b.data!.data != null) { if (b.data != null && b.data!.data != null) {
isLoading = false;
var d = b.data!.data!; var d = b.data!.data!;
for( var r in d.result) { for( var r in d.result) {
for (var element in r.logs) { for (var element in r.logs) {
@ -65,6 +76,10 @@ class LogsWidgetState extends State<LogsWidget> {
} }
List<LogWidget> itemRows = logs.where((element) => (element.message?.toLowerCase().contains(widget.search.toLowerCase()) ?? true) List<LogWidget> itemRows = logs.where((element) => (element.message?.toLowerCase().contains(widget.search.toLowerCase()) ?? true)
&& (widget.level?.contains(element.level ?? "") ?? true) ).map((e) => LogWidget(item: e)).toList(); && (widget.level?.contains(element.level ?? "") ?? true) ).map((e) => LogWidget(item: e)).toList();
if (isLoading) {
return Container( height: getMainHeight(context) - 100,
child: Center( child: CircularProgressIndicator()) );
}
return Stack( children: [ return Stack( children: [
SingleChildScrollView( child: itemRows.isEmpty ? SingleChildScrollView( child: itemRows.isEmpty ?
Container( height: getMainHeight(context) - 100, Container( height: getMainHeight(context) - 100,

View File

@ -2,7 +2,6 @@ import 'package:oc_front/main.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:oc_front/widgets/logs.dart'; import 'package:oc_front/widgets/logs.dart';
import 'package:oc_front/models/workflow.dart'; import 'package:oc_front/models/workflow.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:flutter_box_transform/flutter_box_transform.dart'; import 'package:flutter_box_transform/flutter_box_transform.dart';
import 'package:oc_front/widgets/lib/tranformablebox.dart' as fork; import 'package:oc_front/widgets/lib/tranformablebox.dart' as fork;
import 'package:oc_front/widgets/sheduler_items/scheduler_item.dart'; import 'package:oc_front/widgets/sheduler_items/scheduler_item.dart';
@ -19,6 +18,7 @@ class ScheduleWidget extends StatefulWidget {
bool loading = true; bool loading = true;
bool isList = true; bool isList = true;
bool isBox = true; bool isBox = true;
String? selectedID;
AbstractService<WorkflowExecutions> service = WorkflowExecutionService(); AbstractService<WorkflowExecutions> service = WorkflowExecutionService();
ScheduleWidget ({ super.key, required this.start, required this.end, ScheduleWidget ({ super.key, required this.start, required this.end,
this.isBox =true, this.isList = true, this.loading = false}); this.isBox =true, this.isList = true, this.loading = false});
@ -62,7 +62,9 @@ class ScheduleWidgetState extends State<ScheduleWidget> {
for (var wf in data[selected!] ?? (<WorkflowExecution>[])) { for (var wf in data[selected!] ?? (<WorkflowExecution>[])) {
DateTime d2 = DateTime.parse(wf.startDate!).toLocal(); DateTime d2 = DateTime.parse(wf.startDate!).toLocal();
children.add( InkWell( children.add( InkWell(
onTap: () => setState(() { selectedReal = wf.startDate; }), onTap: () => setState(() {
selectedReal = wf.startDate;
}),
child: Container( margin: const EdgeInsets.all(10), child: Container( margin: const EdgeInsets.all(10),
decoration: BoxDecoration( decoration: BoxDecoration(
border: Border.all(color: selectedReal != null && selectedReal == wf.startDate ? lightColor : Colors.transparent, width: 2), border: Border.all(color: selectedReal != null && selectedReal == wf.startDate ? lightColor : Colors.transparent, width: 2),
@ -94,12 +96,12 @@ class ScheduleWidgetState extends State<ScheduleWidget> {
)); ));
} }
} }
String? selectedID;
WorkflowExecution? sel; WorkflowExecution? sel;
if (selectedReal != null) { if (selectedReal != null) {
try { try {
sel = data[selected!]!.firstWhere((element) => element.startDate == selectedReal); sel = data[selected!]!.firstWhere((element) => element.startDate == selectedReal);
selectedID = sel.id; widget.selectedID = sel.id;
} catch(e) { /* */ } } catch(e) { /* */ }
} }
menuSize = isInfo ? getMainWidth(context) : (menuSize > getMainWidth(context) / 2 ? getMainWidth(context) / 2 : menuSize); menuSize = isInfo ? getMainWidth(context) : (menuSize > getMainWidth(context) / 2 ? getMainWidth(context) / 2 : menuSize);
@ -129,7 +131,9 @@ class ScheduleWidgetState extends State<ScheduleWidget> {
child: Column( child: Column(
children: [ children: [
Row( children: [ Row( children: [
InkWell( onTap: () => setState(() { widget.isDayPlanner = true; }), InkWell( onTap: () => setState(() {
widget.isDayPlanner = true;
}),
child: Tooltip( message: "day planning", child: child: Tooltip( message: "day planning", child:
Container( height: 50, width: (isInfo ? getMainWidth(context) : (selected != null ? menuSize : 0)) / (selectedReal != null ? 2 : 1 ), Container( height: 50, width: (isInfo ? getMainWidth(context) : (selected != null ? menuSize : 0)) / (selectedReal != null ? 2 : 1 ),
alignment: Alignment.center, alignment: Alignment.center,
@ -139,7 +143,10 @@ class ScheduleWidgetState extends State<ScheduleWidget> {
child: Icon(Icons.calendar_today_outlined, color: widget.isDayPlanner ? Colors.white : Colors.grey), child: Icon(Icons.calendar_today_outlined, color: widget.isDayPlanner ? Colors.white : Colors.grey),
) )
)), )),
InkWell( onTap: () => setState(() { widget.isDayPlanner = false; }), InkWell( onTap: () => setState(() {
widget.isDayPlanner = false;
}),
child: Tooltip( message: "monitor task", child: child: Tooltip( message: "monitor task", child:
Container( height: 50, width: selectedReal == null ? 0 : ( Container( height: 50, width: selectedReal == null ? 0 : (
(isInfo ? getMainWidth(context) : (selected != null ? menuSize : 0)) / 2), (isInfo ? getMainWidth(context) : (selected != null ? menuSize : 0)) / 2),
@ -158,8 +165,8 @@ class ScheduleWidgetState extends State<ScheduleWidget> {
SingleChildScrollView( child: Column( SingleChildScrollView( child: Column(
mainAxisAlignment: children.isEmpty || widget.loading ? MainAxisAlignment.center : MainAxisAlignment.start, mainAxisAlignment: children.isEmpty || widget.loading ? MainAxisAlignment.center : MainAxisAlignment.start,
children: [ children: [
...( widget.isDayPlanner ? children : ( selectedID != null ? [ ...( widget.isDayPlanner ? children : ( widget.selectedID != null ? [
widget.loading ? const SpinKitCircle(color: Colors.white,) : LogsWidget(exec: sel, search: search, level: level) LogsWidget(exec: sel, search: search, level: level)
] : [])), ] : [])),
children.isEmpty ? Container( height: 100, alignment: Alignment.center, child: const Text("No event found", style: TextStyle(color: Colors.grey, fontSize: 20))) : Container() children.isEmpty ? Container( height: 100, alignment: Alignment.center, child: const Text("No event found", style: TextStyle(color: Colors.grey, fontSize: 20))) : Container()
]), ]),

View File

@ -1,6 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_box_transform/flutter_box_transform.dart';
import 'package:oc_front/core/sections/header/header.dart';
import 'package:oc_front/main.dart'; import 'package:oc_front/main.dart';
import 'package:oc_front/models/workflow.dart'; import 'package:oc_front/models/workflow.dart';
import 'package:oc_front/widgets/sheduler_items/schedule.dart'; import 'package:oc_front/widgets/sheduler_items/schedule.dart';
@ -34,7 +32,9 @@ class SchedulerItemWidgetState extends State<SchedulerItemWidget> {
widgets.add(InkWell( widgets.add(InkWell(
onTap: () => widget.parent?.setState(() { onTap: () => widget.parent?.setState(() {
selected = selected != element || ev.startDate != selectedReal ? element : null; selected = selected != element || ev.startDate != selectedReal ? element : null;
widget.parent!.widget.selectedID = selected;
selectedReal = selected == null ? null : ev.startDate; selectedReal = selected == null ? null : ev.startDate;
print("there");
if (selectedReal == null) { if (selectedReal == null) {
widget.parent!.widget.isDayPlanner = true; widget.parent!.widget.isDayPlanner = true;
} }