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:oc_front/core/services/specialized_services/logs_service.dart';
bool isLoading = true;
Map<String, bool> valid = {};
class LogsWidget extends StatefulWidget {
String? level;
String search = "";
WorkflowExecution? exec;
List<Log> logs = [];
LogsWidget ({ Key? key, this.search = "", this.level, this.exec }): super(key: key);
@override LogsWidgetState createState() => LogsWidgetState();
}
class LogsWidgetState extends State<LogsWidget> {
@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) {
return Container();
} else {
@ -42,18 +53,18 @@ class LogsWidgetState extends State<LogsWidget> {
end = (DateTime.parse(widget.exec!.startDate!).add( const Duration(days: 14)).microsecondsSinceEpoch).toString();
}
} catch(e) { /* */ }
Future.delayed(const Duration(minutes: 1), () {
try { setState(() {});
} catch (e) { /**/ }
});
return FutureBuilder(future: LogsService().search(context, [], {
"workflow_execution_id": widget.exec!.id,
"start": start,
"end": end
}), builder: (a, b) {
Future.delayed(const Duration(minutes: 1), () {
try {
setState(() {});
} catch (e) {}
});
List<Log> logs = [];
if (b.data != null && b.data!.data != null) {
isLoading = false;
var d = b.data!.data!;
for( var r in d.result) {
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)
&& (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: [
SingleChildScrollView( child: itemRows.isEmpty ?
Container( height: getMainHeight(context) - 100,

View File

@ -2,7 +2,6 @@ import 'package:oc_front/main.dart';
import 'package:flutter/material.dart';
import 'package:oc_front/widgets/logs.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:oc_front/widgets/lib/tranformablebox.dart' as fork;
import 'package:oc_front/widgets/sheduler_items/scheduler_item.dart';
@ -19,6 +18,7 @@ class ScheduleWidget extends StatefulWidget {
bool loading = true;
bool isList = true;
bool isBox = true;
String? selectedID;
AbstractService<WorkflowExecutions> service = WorkflowExecutionService();
ScheduleWidget ({ super.key, required this.start, required this.end,
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>[])) {
DateTime d2 = DateTime.parse(wf.startDate!).toLocal();
children.add( InkWell(
onTap: () => setState(() { selectedReal = wf.startDate; }),
onTap: () => setState(() {
selectedReal = wf.startDate;
}),
child: Container( margin: const EdgeInsets.all(10),
decoration: BoxDecoration(
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;
if (selectedReal != null) {
try {
sel = data[selected!]!.firstWhere((element) => element.startDate == selectedReal);
selectedID = sel.id;
widget.selectedID = sel.id;
} catch(e) { /* */ }
}
menuSize = isInfo ? getMainWidth(context) : (menuSize > getMainWidth(context) / 2 ? getMainWidth(context) / 2 : menuSize);
@ -129,7 +131,9 @@ class ScheduleWidgetState extends State<ScheduleWidget> {
child: Column(
children: [
Row( children: [
InkWell( onTap: () => setState(() { widget.isDayPlanner = true; }),
InkWell( onTap: () => setState(() {
widget.isDayPlanner = true;
}),
child: Tooltip( message: "day planning", child:
Container( height: 50, width: (isInfo ? getMainWidth(context) : (selected != null ? menuSize : 0)) / (selectedReal != null ? 2 : 1 ),
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),
)
)),
InkWell( onTap: () => setState(() { widget.isDayPlanner = false; }),
InkWell( onTap: () => setState(() {
widget.isDayPlanner = false;
}),
child: Tooltip( message: "monitor task", child:
Container( height: 50, width: selectedReal == null ? 0 : (
(isInfo ? getMainWidth(context) : (selected != null ? menuSize : 0)) / 2),
@ -158,8 +165,8 @@ class ScheduleWidgetState extends State<ScheduleWidget> {
SingleChildScrollView( child: Column(
mainAxisAlignment: children.isEmpty || widget.loading ? MainAxisAlignment.center : MainAxisAlignment.start,
children: [
...( widget.isDayPlanner ? children : ( selectedID != null ? [
widget.loading ? const SpinKitCircle(color: Colors.white,) : LogsWidget(exec: sel, search: search, level: level)
...( widget.isDayPlanner ? children : ( widget.selectedID != null ? [
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()
]),

View File

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