e3ca4fafa6
The screen allows the user to change the default permission set, that applies to every member (but not the owner nor the admins). This screen is only accessible by the owner, admins or members with the changeAdmin permission.
115 lines
3.2 KiB
Dart
115 lines
3.2 KiB
Dart
import 'dart:math';
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:outbag_app/backend/permissions.dart';
|
|
import 'package:outbag_app/backend/request.dart';
|
|
import 'package:outbag_app/backend/room.dart';
|
|
import 'package:outbag_app/tools/fetch_wrapper.dart';
|
|
import 'package:routemaster/routemaster.dart';
|
|
|
|
class EditRoomPermissionSetPage extends StatefulWidget {
|
|
final String server;
|
|
final String tag;
|
|
|
|
const EditRoomPermissionSetPage(this.server, this.tag, {super.key});
|
|
|
|
@override
|
|
State<StatefulWidget> createState() => _EditRoomPermissionSetPageState();
|
|
}
|
|
|
|
class _EditRoomPermissionSetPageState extends State<EditRoomPermissionSetPage> {
|
|
List<int> items = RoomPermission.asList;
|
|
int permissions = 0;
|
|
|
|
void fetchInfo() {
|
|
final rmaster = Routemaster.of(context);
|
|
final sm = ScaffoldMessenger.of(context);
|
|
|
|
doNetworkRequest(
|
|
sm,
|
|
req: (user) => postWithCreadentials(
|
|
path: 'getRoomInfo',
|
|
credentials: user!,
|
|
target: (user.server),
|
|
body: {'room': widget.tag, 'server': widget.server}),
|
|
onAnyErr: () {
|
|
// user should not be here
|
|
// close screen
|
|
rmaster.replace('/');
|
|
return false;
|
|
},
|
|
onOK: (body) async {
|
|
final info = RoomInfo.fromJSON(body['data']);
|
|
setState(() {
|
|
permissions = info.permissions;
|
|
});
|
|
return true;
|
|
},
|
|
);
|
|
}
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
|
|
WidgetsBinding.instance.addPostFrameCallback((_) => fetchInfo());
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
title: const Text('Default permissions'),
|
|
leading: IconButton(
|
|
onPressed: () {
|
|
// go back
|
|
Navigator.of(context).pop();
|
|
},
|
|
icon: const Icon(Icons.arrow_back),
|
|
tooltip: "Go back",
|
|
),
|
|
),
|
|
body: ListView.builder(
|
|
itemCount: items.length,
|
|
itemBuilder: (context, index) {
|
|
final item = items[index];
|
|
|
|
final int col = pow(2, index + 1) as int;
|
|
|
|
return SwitchListTile(
|
|
title: Text(RoomPermission.name(item)),
|
|
subtitle: Text(RoomPermission.describe(item)),
|
|
onChanged: (state) {
|
|
setState(() {
|
|
permissions += (state ? 1 : -1) * col;
|
|
});
|
|
},
|
|
value: permissions & col != 0);
|
|
},
|
|
),
|
|
floatingActionButton: FloatingActionButton.extended(
|
|
icon: const Icon(Icons.edit),
|
|
tooltip: "Update default permission set",
|
|
label: const Text('Edit'),
|
|
onPressed: () {
|
|
final rmaster = Routemaster.of(context);
|
|
final sm = ScaffoldMessenger.of(context);
|
|
// update permissions
|
|
doNetworkRequest(sm,
|
|
req: (user) => postWithCreadentials(
|
|
path: 'setRoomRight',
|
|
credentials: user!,
|
|
target: user.server,
|
|
body: {
|
|
'room': widget.tag,
|
|
'server': widget.server,
|
|
'rights': permissions
|
|
}),
|
|
onOK: (_) {
|
|
rmaster.pop();
|
|
});
|
|
},
|
|
),
|
|
);
|
|
}
|
|
}
|