import 'package:didvan/config/design_config.dart'; import 'package:didvan/models/mention/mention.dart'; import 'package:didvan/models/comment/user.dart'; import 'package:didvan/models/enums.dart'; import 'package:didvan/models/users_mention.dart'; import 'package:didvan/providers/core.dart'; import 'package:didvan/providers/user.dart'; import 'package:didvan/services/network/request.dart'; import 'package:didvan/services/network/request_helper.dart'; import 'package:flutter/cupertino.dart'; import 'package:provider/provider.dart'; class MentionsState extends CoreProvier { TextEditingController commentTextFieldController = TextEditingController(); List mentionedUsers = []; String searchUsers = ''; int? commentId; UserOverview? replyingTo; bool showReplyBox = false; bool showUsersForMentionsLayout = false; bool showPrivates = false; bool hideMentionedUser = false; int _count = 0; late String type; final List comments = []; final List users = []; int itemId = 0; Future getComments() async { final service = RequestService( RequestHelper.mention(itemId, type), ); await service.httpGet(); if (service.isSuccess) { comments.clear(); final messages = service.result['comments']; for (var i = 0; i < messages.length; i++) { comments.add(MentionData.fromJson(messages[i])); _count++; } appState = AppState.idle; return; } appState = AppState.failed; } Future getUsersMention() async { final service = RequestService( RequestHelper.usersMentions(searchUsers), ); await service.httpGet(); if (service.isSuccess) { users.clear(); final List resUsers = service.data('users'); users .addAll(resUsers.map((user) => UsersMention.fromJson(user)).toList()); appState = AppState.idle; return; } appState = AppState.failed; } Future addComment() async { late List cList = comments; final user = DesignConfig.context!.read().user; cList.insert( 0, MentionData( id: 0, fullName: user.fullName, text: commentTextFieldController.text, createdAt: DateTime.now().toString(), mentions: mentionedUsers.map((user) => user.name).toList(), ), ); final body = {}; body.addAll({ 'text': commentTextFieldController.text, "mentions": mentionedUsers.map((user) => user.id.toString()).toList(), }); final service = RequestService( RequestHelper.mention(itemId, type), body: body, ); await service.post(); if (service.isSuccess) { cList.firstWhere((comment) => comment.id == 0).id = service.result['comment']['id']; mentionedUsers = []; searchUsers = ''; update(); } } void deleteComment(int id, int status, int? rootId) async { final service = RequestService(RequestHelper.deleteComment(id)); await service.delete(); if (service.isSuccess) await getComments(); notifyListeners(); } }