in ui/lib/modules/my_services/widgets/workstation_widget.dart [38:213]
Widget build(BuildContext context) {
final user = ref.read(authRepositoryProvider).currentUser()!;
final ldap = user.email.toString().split('@')[0];
final email = user.email;
List<Widget> children = [];
final workstationsList = ref.watch(workstationsProvider(
projectId: widget.service.projectId,
clusterName: widget.service.workstationCluster,
configName: widget.service.workstationConfig,
region: widget.service.region,
));
workstationsList.when(
loading: () => Text('Loading...'),
error: (err, stack) => Text('Error: $err'),
data: (wrkList) {
wrkList.forEach((wkstn) {
if (wkstn.name.contains(ldap)) {
children.add(Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
_getStatusIcon(workstation: wkstn),
SizedBox(width: 15),
Text(wkstn.displayName),
SizedBox(width: 15),
_getActionButton(
workstation: wkstn, context: context, ref: ref),
SizedBox(width: 15),
wkstn.state.contains("RUNNING")
? ElevatedButton(
style: ElevatedButton.styleFrom(
padding: EdgeInsets.all(0),
),
onPressed: () async {
launchUrl(Uri.parse("https://80-${wkstn.host}"));
},
child: Text(
"Launch",
style: TextStyle(fontSize: 12),
),
)
: Container(),
SizedBox(width: 15),
wkstn.state.isNotEmpty
? ElevatedButton(
style: ElevatedButton.styleFrom(
padding: EdgeInsets.all(0),
),
onPressed: () async {
await ref
.watch(cloudWorkstationsRepositoryProvider)
.deleteInstance(
widget.service.projectId,
wkstn.clusterName,
wkstn.configName,
wkstn.displayName,
widget.service.region);
await ref
.watch(cloudWorkstationsRepositoryProvider)
.checkInstanceStatus(widget.service.projectId,
wkstn.clusterName,
wkstn.configName,
wkstn.displayName,
widget.service.region);
ref.invalidate(workstationsProvider);
},
child: Text(
"Delete",
style: TextStyle(fontSize: 12),
),
)
: Container(),
],
));
}
});
if (children.length == 0) {
children.add(SizedBox(
height: 5,
));
children.add(
Text("No workstations found for this user config combination"));
children.add(SizedBox(
height: 5,
));
children.add(
InkWell(
onTap: () async {
Response response = await ref
.watch(cloudWorkstationsRepositoryProvider)
.checkInstanceStatus(widget.service.projectId,
widget.service.workstationCluster,
widget.service.workstationConfig,
"${ldap}-${widget.service.workstationConfig}",
widget.service.region);
if (response.statusCode == 404) {
await ref
.watch(cloudWorkstationsRepositoryProvider)
.createInstance(
widget.service.projectId,
widget.service.workstationCluster,
widget.service.workstationConfig,
"${ldap}-${widget.service.workstationConfig}",
widget.service.region,
email!);
ref.invalidate(workstationsProvider);
} else {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text("Workstation is in reconciling state."),
backgroundColor: Theme.of(context).primaryColor,
),
);
}
},
child: Row(
children: [
Icon(
Icons.add_box,
color: Theme.of(context).primaryColor,
),
Text(
"Create Workstation",
style: Theme.of(context).textTheme.bodyMedium?.merge(
TextStyle(
color: Theme.of(context).primaryColor,
),
),
),
SizedBox(
width: 20,
),
],
),
),
);
}
;
},
);
children.insert(
0,
Row(
children: [
Text(
"Related Workstations",
style: Theme.of(context).textTheme.titleMedium,
),
IconButton(
tooltip: 'Refresh',
onPressed: () async {
ref.invalidate(workstationsProvider);
},
icon: Icon(
Icons.refresh,
color: Colors.blue,
),
),
],
));
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: children,
);
}