✨ 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