✨ Realm basis
This commit is contained in:
@ -15,8 +15,9 @@ import 'package:uuid/uuid.dart';
|
||||
|
||||
class ChannelEditorScreen extends StatefulWidget {
|
||||
final Channel? editing;
|
||||
final String? realm;
|
||||
|
||||
const ChannelEditorScreen({super.key, this.editing});
|
||||
const ChannelEditorScreen({super.key, this.editing, this.realm});
|
||||
|
||||
@override
|
||||
State<ChannelEditorScreen> createState() => _ChannelEditorScreenState();
|
||||
@ -39,8 +40,8 @@ class _ChannelEditorScreenState extends State<ChannelEditorScreen> {
|
||||
}
|
||||
|
||||
final uri = widget.editing == null
|
||||
? getRequestUri('messaging', '/api/channels/global')
|
||||
: getRequestUri('messaging', '/api/channels/global/${widget.editing!.id}');
|
||||
? getRequestUri('messaging', '/api/channels/${widget.realm ?? 'global'}')
|
||||
: getRequestUri('messaging', '/api/channels/${widget.realm ?? 'global'}/${widget.editing!.id}');
|
||||
|
||||
final req = Request(widget.editing == null ? 'POST' : 'PUT', uri);
|
||||
req.headers['Content-Type'] = 'application/json';
|
||||
|
@ -15,8 +15,9 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
class ChatMemberScreen extends StatefulWidget {
|
||||
final Channel channel;
|
||||
final String realm;
|
||||
|
||||
const ChatMemberScreen({super.key, required this.channel});
|
||||
const ChatMemberScreen({super.key, required this.channel, this.realm = 'global'});
|
||||
|
||||
@override
|
||||
State<ChatMemberScreen> createState() => _ChatMemberScreenState();
|
||||
@ -36,8 +37,7 @@ class _ChatMemberScreenState extends State<ChatMemberScreen> {
|
||||
|
||||
_selfId = prof['id'];
|
||||
|
||||
var uri = getRequestUri(
|
||||
'messaging', '/api/channels/global/${widget.channel.alias}/members');
|
||||
var uri = getRequestUri('messaging', '/api/channels/${widget.realm}/${widget.channel.alias}/members');
|
||||
|
||||
var res = await auth.client!.get(uri);
|
||||
if (res.statusCode == 200) {
|
||||
@ -51,7 +51,7 @@ class _ChatMemberScreenState extends State<ChatMemberScreen> {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> kickMember(ChannelMember item) async {
|
||||
Future<void> removeMember(ChannelMember item) async {
|
||||
setState(() => _isSubmitting = true);
|
||||
|
||||
final auth = context.read<AuthProvider>();
|
||||
@ -60,10 +60,9 @@ class _ChatMemberScreenState extends State<ChatMemberScreen> {
|
||||
return;
|
||||
}
|
||||
|
||||
var uri = getRequestUri(
|
||||
'messaging', '/api/channels/global/${widget.channel.alias}/kick');
|
||||
var uri = getRequestUri('messaging', '/api/channels/global/${widget.channel.alias}');
|
||||
|
||||
var res = await auth.client!.post(
|
||||
var res = await auth.client!.delete(
|
||||
uri,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
@ -82,7 +81,7 @@ class _ChatMemberScreenState extends State<ChatMemberScreen> {
|
||||
setState(() => _isSubmitting = false);
|
||||
}
|
||||
|
||||
Future<void> inviteMember(String username) async {
|
||||
Future<void> addMember(String username) async {
|
||||
setState(() => _isSubmitting = true);
|
||||
|
||||
final auth = context.read<AuthProvider>();
|
||||
@ -91,8 +90,7 @@ class _ChatMemberScreenState extends State<ChatMemberScreen> {
|
||||
return;
|
||||
}
|
||||
|
||||
var uri = getRequestUri(
|
||||
'messaging', '/api/channels/global/${widget.channel.alias}/invite');
|
||||
var uri = getRequestUri('messaging', '/api/channels/${widget.realm}/${widget.channel.alias}');
|
||||
|
||||
var res = await auth.client!.post(
|
||||
uri,
|
||||
@ -122,10 +120,10 @@ class _ChatMemberScreenState extends State<ChatMemberScreen> {
|
||||
);
|
||||
if (input == null) return;
|
||||
|
||||
await inviteMember((input as Account).name);
|
||||
await addMember((input as Account).name);
|
||||
}
|
||||
|
||||
bool getKickable(ChannelMember item) {
|
||||
bool getRemovable(ChannelMember item) {
|
||||
if (_selfId != widget.channel.account.externalId) return false;
|
||||
if (item.accountId == widget.channel.accountId) return false;
|
||||
if (item.account.externalId == _selfId) return false;
|
||||
@ -156,9 +154,7 @@ class _ChatMemberScreenState extends State<ChatMemberScreen> {
|
||||
child: CustomScrollView(
|
||||
slivers: [
|
||||
SliverToBoxAdapter(
|
||||
child: _isSubmitting
|
||||
? const LinearProgressIndicator().animate().scaleX()
|
||||
: Container(),
|
||||
child: _isSubmitting ? const LinearProgressIndicator().animate().scaleX() : Container(),
|
||||
),
|
||||
SliverList.builder(
|
||||
itemCount: _members.length,
|
||||
@ -169,9 +165,7 @@ class _ChatMemberScreenState extends State<ChatMemberScreen> {
|
||||
|
||||
return Dismissible(
|
||||
key: Key(randomId.toString()),
|
||||
direction: getKickable(element)
|
||||
? DismissDirection.startToEnd
|
||||
: DismissDirection.none,
|
||||
direction: getRemovable(element) ? DismissDirection.startToEnd : DismissDirection.none,
|
||||
background: Container(
|
||||
color: Colors.red,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 20),
|
||||
@ -179,13 +173,12 @@ class _ChatMemberScreenState extends State<ChatMemberScreen> {
|
||||
child: const Icon(Icons.remove, color: Colors.white),
|
||||
),
|
||||
child: ListTile(
|
||||
leading: AccountAvatar(
|
||||
source: element.account.avatar, direct: true),
|
||||
leading: AccountAvatar(source: element.account.avatar, direct: true),
|
||||
title: Text(element.account.nick),
|
||||
subtitle: Text(element.account.name),
|
||||
),
|
||||
onDismissed: (_) {
|
||||
kickMember(element);
|
||||
removeMember(element);
|
||||
},
|
||||
);
|
||||
},
|
||||
|
Reference in New Issue
Block a user