From 82b10e4eeda049144ed8932c66e9e2f0146c5444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Thu, 8 Jun 2023 21:27:51 +0200 Subject: [PATCH] Added functionality to create chat --- .../talk/createRoom/createRoom.dart | 24 +++++++++++++++++ .../talk/createRoom/createRoomParams.dart | 27 +++++++++++++++++++ .../talk/createRoom/createRoomParams.g.dart | 27 +++++++++++++++++++ lib/view/pages/talk/chatList.dart | 23 ++++++++++++++-- 4 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 lib/api/marianumcloud/talk/createRoom/createRoom.dart create mode 100644 lib/api/marianumcloud/talk/createRoom/createRoomParams.dart create mode 100644 lib/api/marianumcloud/talk/createRoom/createRoomParams.g.dart diff --git a/lib/api/marianumcloud/talk/createRoom/createRoom.dart b/lib/api/marianumcloud/talk/createRoom/createRoom.dart new file mode 100644 index 0000000..ae3afd1 --- /dev/null +++ b/lib/api/marianumcloud/talk/createRoom/createRoom.dart @@ -0,0 +1,24 @@ + +import 'package:http/http.dart' as http; +import 'package:http/http.dart'; + +import '../talkApi.dart'; +import 'createRoomParams.dart'; +class CreateRoom extends TalkApi { + CreateRoomParams params; + + CreateRoom(this.params) : super("v4/room", params); + + @override + assemble(String raw) { + } + + @override + Future? request(Uri uri, Object? body, Map? headers) { + if(body is CreateRoomParams) { + return http.post(uri, headers: headers, body: body.toJson().map((key, value) => MapEntry(key, value.toString()))); + } + + return null; + } +} \ No newline at end of file diff --git a/lib/api/marianumcloud/talk/createRoom/createRoomParams.dart b/lib/api/marianumcloud/talk/createRoom/createRoomParams.dart new file mode 100644 index 0000000..66534fa --- /dev/null +++ b/lib/api/marianumcloud/talk/createRoom/createRoomParams.dart @@ -0,0 +1,27 @@ +import 'package:json_annotation/json_annotation.dart'; + +import '../../../apiParams.dart'; + +part 'createRoomParams.g.dart'; + +@JsonSerializable() +class CreateRoomParams extends ApiParams { + int roomType; + String invite; + String? source; + String? roomName; + String? objectType; + String? objectId; + + CreateRoomParams({ + required this.roomType, + required this.invite, + this.source, + this.roomName, + this.objectType, + this.objectId + }); + + factory CreateRoomParams.fromJson(Map json) => _$CreateRoomParamsFromJson(json); + Map toJson() => _$CreateRoomParamsToJson(this); +} \ No newline at end of file diff --git a/lib/api/marianumcloud/talk/createRoom/createRoomParams.g.dart b/lib/api/marianumcloud/talk/createRoom/createRoomParams.g.dart new file mode 100644 index 0000000..e3ad2e5 --- /dev/null +++ b/lib/api/marianumcloud/talk/createRoom/createRoomParams.g.dart @@ -0,0 +1,27 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'createRoomParams.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +CreateRoomParams _$CreateRoomParamsFromJson(Map json) => + CreateRoomParams( + roomType: json['roomType'] as int, + invite: json['invite'] as String, + source: json['source'] as String?, + roomName: json['roomName'] as String?, + objectType: json['objectType'] as String?, + objectId: json['objectId'] as String?, + ); + +Map _$CreateRoomParamsToJson(CreateRoomParams instance) => + { + 'roomType': instance.roomType, + 'invite': instance.invite, + 'source': instance.source, + 'roomName': instance.roomName, + 'objectType': instance.objectType, + 'objectId': instance.objectId, + }; diff --git a/lib/view/pages/talk/chatList.dart b/lib/view/pages/talk/chatList.dart index df7a182..6f40e97 100644 --- a/lib/view/pages/talk/chatList.dart +++ b/lib/view/pages/talk/chatList.dart @@ -1,8 +1,11 @@ import 'dart:async'; import 'package:flutter/material.dart'; +import 'package:marianum_mobile/api/marianumcloud/talk/createRoom/createRoomParams.dart'; +import 'package:marianum_mobile/widget/confirmDialog.dart'; import 'package:provider/provider.dart'; +import '../../../api/marianumcloud/talk/createRoom/createRoom.dart'; import '../../../model/chatList/chatListProps.dart'; import '../../../storage/base/settingsProvider.dart'; import 'chatTile.dart'; @@ -51,8 +54,24 @@ class _ChatListState extends State { floatingActionButton: FloatingActionButton( heroTag: "createChat", backgroundColor: Theme.of(context).primaryColor, - onPressed: () { - showSearch(context: context, delegate: JoinChat()); + onPressed: () async { + showSearch(context: context, delegate: JoinChat()).then((username) { + if(username == null) return; + + ConfirmDialog( + title: "Chat starten", + content: "Möchtest du einen Chat mit nutzer '$username' starten?", + confirmButton: "Chat starten", + onConfirm: () { + CreateRoom(CreateRoomParams( + roomType: 1, + invite: username, + )).run().then((value) { + _query(renew: true); + }); + }, + ).asDialog(context); + }); }, child: const Icon(Icons.add_comment_outlined), ),