Shared space
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_spinkit/flutter_spinkit.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:oc_front/core/services/auth.service.dart';
|
||||
@@ -14,9 +15,34 @@ class LoginWidgetState extends State<LoginWidget> {
|
||||
|
||||
String? error;
|
||||
bool loading = false;
|
||||
|
||||
FocusNode focusNode = FocusNode();
|
||||
@override Widget build(BuildContext context) {
|
||||
return Padding(padding: const EdgeInsets.all(50), child: Column(mainAxisSize: MainAxisSize.min, children: [
|
||||
return KeyboardListener(focusNode: focusNode,
|
||||
onKeyEvent: (value) {
|
||||
if (value is KeyDownEvent && value.logicalKey == LogicalKeyboardKey.enter) {
|
||||
if (usernameCtrl.text == "" || passwordCtrl.text == "") { return; }
|
||||
error = null;
|
||||
setState(() {
|
||||
loading = true;
|
||||
});
|
||||
AuthService.login(usernameCtrl.text, passwordCtrl.text).catchError( (e) {
|
||||
setState(() {
|
||||
loading = false;
|
||||
error = "Invalid username or password";
|
||||
});
|
||||
});
|
||||
|
||||
if (error == null) {
|
||||
// ignore: use_build_context_synchronously
|
||||
setState(() {
|
||||
loading = true;
|
||||
});
|
||||
context.pop();
|
||||
}
|
||||
}
|
||||
},
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(50), child: Column(mainAxisSize: MainAxisSize.min, children: [
|
||||
const Center(child: Icon(Icons.person_search, size: 150, color: Colors.grey,)),
|
||||
Center(child: Padding( padding: const EdgeInsets.only(top: 5, bottom: 20),
|
||||
child: Text("WELCOME ON OPENCLOUD", style: TextStyle(fontSize: 25, fontWeight: FontWeight.w600,
|
||||
@@ -100,6 +126,6 @@ class LoginWidgetState extends State<LoginWidget> {
|
||||
fontSize: 15) ))))),
|
||||
])
|
||||
]),
|
||||
],));
|
||||
],)));
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,7 @@ import 'package:oc_front/main.dart';
|
||||
import 'package:oc_front/pages/shared.dart';
|
||||
import 'package:oc_front/pages/workflow.dart';
|
||||
import 'package:oc_front/widgets/dialog/alert.dart';
|
||||
import 'package:oc_front/widgets/dialog/confirm_box.dart';
|
||||
import 'package:oc_front/widgets/inputs/shallow_text_input.dart';
|
||||
|
||||
class SchedulerFormsWidget extends StatefulWidget {
|
||||
@@ -113,12 +114,19 @@ class SchedulerFormsWidgetState extends State<SchedulerFormsWidget> {
|
||||
type: CollaborativeAreaType.workflow,
|
||||
canRemove: PermsService.getPerm(Perms.WORKFLOW_DELETE) ? (p0) => p0 != null && p0.isNotEmpty : null,
|
||||
remove: PermsService.getPerm(Perms.WORKFLOW_DELETE) ? (p0) async {
|
||||
await WorflowService().delete(context, widget.item.id ?? "", {}).then((value) {
|
||||
dash.id = null;
|
||||
dash.name = "";
|
||||
dash.isOpened = false;
|
||||
dash.clear();
|
||||
dash.chartKey.currentState?.widget.flowChart.setState(() { });
|
||||
showDialog(context: context, builder: (context) {
|
||||
return ConfirmBoxWidget(
|
||||
purpose: "Are you sure you want to delete this workflow?",
|
||||
validate: () async {
|
||||
await WorflowService().delete(context, widget.item.id ?? "", {}).then((value) {
|
||||
dash.id = null;
|
||||
dash.name = "";
|
||||
dash.isOpened = false;
|
||||
dash.clear();
|
||||
dash.chartKey.currentState?.widget.flowChart.setState(() { });
|
||||
});
|
||||
},
|
||||
);
|
||||
});
|
||||
} : null,
|
||||
);
|
||||
@@ -464,9 +472,9 @@ class SchedulerFormsWidgetState extends State<SchedulerFormsWidget> {
|
||||
),
|
||||
widget.item.info["shared"] != null && (widget.item.info["shared"] as List<dynamic>).isNotEmpty ? Column( children: [
|
||||
Container(
|
||||
height: 20,
|
||||
height: 30,
|
||||
width: 200,
|
||||
decoration: const BoxDecoration(border: Border(top: BorderSide(color: Colors.black))),
|
||||
decoration: const BoxDecoration(border: Border(top: BorderSide(color: Colors.grey))),
|
||||
),
|
||||
Container( alignment: Alignment.center, padding: const EdgeInsets.symmetric(horizontal: 10),
|
||||
child:Text( textAlign: TextAlign.center, overflow: TextOverflow.ellipsis,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_flow_chart/flutter_flow_chart.dart';
|
||||
import 'package:oc_front/main.dart';
|
||||
import 'package:oc_front/models/response.dart';
|
||||
|
||||
@@ -9,15 +10,16 @@ const List<GlobalKey<State>> _empty = [];
|
||||
class ShallowItemRowWidget extends StatefulWidget {
|
||||
bool readOnly = false;
|
||||
double contextWidth = 0;
|
||||
Color? color;
|
||||
ShallowData item;
|
||||
IconData? icon;
|
||||
bool low = false;
|
||||
bool show = false;
|
||||
List<IconData> badges = [];
|
||||
List<Widget> badges = [];
|
||||
void Function(String?)? delete;
|
||||
void Function(String?)? edit;
|
||||
List<GlobalKey<State>> keys = [];
|
||||
ShallowItemRowWidget ({ super.key, this.low = false, this.icon, this.delete, this.edit, this.badges = const [],
|
||||
ShallowItemRowWidget ({ super.key, this.low = false, this.icon, this.delete, this.edit, this.color, this.badges = const [],
|
||||
required this.contextWidth, this.readOnly = false, required this.item, this.keys = _empty });
|
||||
@override ShallowItemRowWidgetState createState() => ShallowItemRowWidgetState();
|
||||
}
|
||||
@@ -32,8 +34,80 @@ class ShallowItemRowWidgetState extends State<ShallowItemRowWidget> {
|
||||
}),
|
||||
child: Container(
|
||||
height: widget.contextWidth, width: widget.contextWidth,
|
||||
padding: const EdgeInsets.all(20),
|
||||
decoration: BoxDecoration( borderRadius: BorderRadius.circular(4), color: Colors.white,
|
||||
padding: const EdgeInsets.all(10),
|
||||
margin: const EdgeInsets.all(10),
|
||||
decoration: BoxDecoration( borderRadius: BorderRadius.circular(4), color: widget.color ?? Colors.white,
|
||||
boxShadow: const [BoxShadow(color: Colors.grey, spreadRadius: 1, blurRadius: 1, offset: Offset(0, 1))]),
|
||||
child: Stack( children: [
|
||||
widget.show ? Positioned( left: 0, top: 0,
|
||||
child: Row( children: [
|
||||
Padding( padding: const EdgeInsets.only(right: 5),
|
||||
child: widget.edit == null ? Container() : InkWell( mouseCursor: SystemMouseCursors.click,
|
||||
onTap: () => widget.edit!(widget.item.getID() + "~" + widget.item.getName()), child: const Icon(Icons.edit, color: Colors.grey,))),
|
||||
Padding( padding: const EdgeInsets.only(right: 5),
|
||||
child: widget.delete == null ? Container() : InkWell( mouseCursor: SystemMouseCursors.click,
|
||||
onTap: () => widget.delete!(widget.item.getID()), child: const Icon(Icons.delete, color: Colors.grey,))),
|
||||
] )) : Container(),
|
||||
Positioned( right: 0, top: 0, child: Row( children: widget.badges )),
|
||||
Column( children: [
|
||||
widget.low || widget.icon == null ? Container( padding: const EdgeInsets.only(left: 10),) : Container( padding: const EdgeInsets.all(10),
|
||||
constraints: BoxConstraints(maxWidth: widget.contextWidth, minWidth: widget.contextWidth),
|
||||
child: Icon( widget.icon!, size: widget.contextWidth / 1.9, color: const Color(0xFFF67C0B9),)),
|
||||
Container(
|
||||
child: Padding(padding: widget.contextWidth != getMainWidth(context) ?
|
||||
const EdgeInsets.symmetric(horizontal: 10) : const EdgeInsets.symmetric(horizontal: 20),
|
||||
child: Column(crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.center, children: [
|
||||
Row( children: [
|
||||
Expanded( child: Center( child: Text(widget.item.getName().toUpperCase(),
|
||||
style: const TextStyle(fontSize: 15,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
fontWeight: FontWeight.w600, color: Colors.grey)),
|
||||
))
|
||||
]),
|
||||
],)
|
||||
)
|
||||
),
|
||||
])
|
||||
]))));
|
||||
return widget.readOnly || widget.low ? w : InkWell( mouseCursor: SystemMouseCursors.click,
|
||||
onTap: () { },
|
||||
child: w );
|
||||
}
|
||||
}
|
||||
|
||||
class ShallowItemFlowDataRowWidget extends StatefulWidget {
|
||||
bool readOnly = false;
|
||||
double contextWidth = 0;
|
||||
Color? color;
|
||||
FlowData item;
|
||||
IconData? icon;
|
||||
bool low = false;
|
||||
bool show = false;
|
||||
List<Widget> badges = [];
|
||||
List<Widget> bottomBadges = [];
|
||||
void Function(String?)? delete;
|
||||
void Function(String?)? edit;
|
||||
List<GlobalKey<State>> keys = [];
|
||||
ShallowItemFlowDataRowWidget ({ super.key, this.low = false, this.icon, this.delete, this.bottomBadges = const [],
|
||||
this.edit, this.color, this.badges = const [],
|
||||
required this.contextWidth, this.readOnly = false, required this.item, this.keys = _empty });
|
||||
@override ShallowItemFlowDataRowWidgetState createState() => ShallowItemFlowDataRowWidgetState();
|
||||
}
|
||||
class ShallowItemFlowDataRowWidgetState extends State<ShallowItemFlowDataRowWidget> {
|
||||
@override Widget build(BuildContext context) {
|
||||
Widget w = Tooltip( message: widget.item.getName(), child: MouseRegion(
|
||||
onHover: (e) => setState(() {
|
||||
widget.show = true;
|
||||
}),
|
||||
onExit: (e) => setState(() {
|
||||
widget.show = false;
|
||||
}),
|
||||
child: Container(
|
||||
height: widget.contextWidth, width: widget.contextWidth,
|
||||
padding: const EdgeInsets.all(10),
|
||||
margin: const EdgeInsets.all(10),
|
||||
decoration: BoxDecoration( borderRadius: BorderRadius.circular(4), color: widget.color ?? Colors.white,
|
||||
boxShadow: const [BoxShadow(color: Colors.grey, spreadRadius: 1, blurRadius: 1, offset: Offset(0, 1))]),
|
||||
child: Stack( children: [
|
||||
widget.show ? Positioned( left: 0, top: 0,
|
||||
@@ -46,7 +120,9 @@ class ShallowItemRowWidgetState extends State<ShallowItemRowWidget> {
|
||||
onTap: () => widget.delete!(widget.item.getID()), child: const Icon(Icons.delete, color: Colors.grey,))),
|
||||
] )) : Container(),
|
||||
Positioned( right: 0, top: 0,
|
||||
child: Row( children: widget.badges.map( (e) => Padding( padding: const EdgeInsets.only(left: 5), child: Icon(e, color: Colors.orange.shade300,))).toList() )),
|
||||
child: Row( children: widget.badges )),
|
||||
Positioned( left: 0, bottom: 0,
|
||||
child: Row( children: widget.bottomBadges )),
|
||||
Column( children: [
|
||||
widget.low || widget.icon == null ? Container( padding: const EdgeInsets.only(left: 10),) : Container( padding: const EdgeInsets.all(10),
|
||||
constraints: BoxConstraints(maxWidth: widget.contextWidth, minWidth: widget.contextWidth),
|
||||
|
||||
@@ -29,7 +29,7 @@ class ScheduleWidgetState extends State<ScheduleWidget> {
|
||||
String search = "";
|
||||
String? level;
|
||||
List<Color> colors = [Colors.blue, Colors.orange, redColor, Colors.green, redColor];
|
||||
List<String> titles = ["SCHEDULED", "RUNNING", "FAILURE", "SUCCESS", "FORGOTTEN"];
|
||||
List<String> titles = ["SCHEDULED", "RUNNING", "FAILURE", "SUCCESS", "MISSED"];
|
||||
|
||||
DateTime getFocusedDay() {
|
||||
if (selected != null) { return DateTime.parse(selected!); }
|
||||
|
||||
@@ -25,7 +25,7 @@ class SchedulerCalendarWidget extends StatefulWidget {
|
||||
}
|
||||
class SchedulerCalendarWidgetState extends State<SchedulerCalendarWidget> {
|
||||
List<Color> colors = [Colors.blue, Colors.orange, redColor, Colors.green, redColor];
|
||||
List<String> titles = ["SCHEDULED", "RUNNING", "FAILURE", "SUCCESS", "FORGOTTEN"];
|
||||
List<String> titles = ["SCHEDULED", "RUNNING", "FAILURE", "SUCCESS", "MISSED"];
|
||||
bool isEvent(Map<String, List<WorkflowExecution>> data, DateTime day) {
|
||||
if (data[day.toIso8601String()] == null || data[day.toIso8601String()]!.isEmpty) { return false; }
|
||||
return true;
|
||||
|
||||
@@ -19,7 +19,7 @@ class SchedulerItemWidget extends StatefulWidget {
|
||||
}
|
||||
class SchedulerItemWidgetState extends State<SchedulerItemWidget> {
|
||||
List<Color> colors = [Colors.blue, Colors.orange, redColor, Colors.green, redColor];
|
||||
List<String> titles = ["SCHEDULED", "RUNNING", "FAILURE", "SUCCESS", "FORGOTTEN"];
|
||||
List<String> titles = ["SCHEDULED", "RUNNING", "FAILURE", "SUCCESS", "MISSED"];
|
||||
|
||||
@override Widget build(BuildContext context) {
|
||||
List<Widget> children = [];
|
||||
|
||||
Reference in New Issue
Block a user