119 lines
3.1 KiB
Dart
119 lines
3.1 KiB
Dart
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<UsersMention> 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<MentionData> comments = [];
|
|
final List<UsersMention> users = [];
|
|
|
|
int itemId = 0;
|
|
|
|
Future<void> 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<void> getUsersMention() async {
|
|
final service = RequestService(
|
|
RequestHelper.usersMentions(searchUsers),
|
|
);
|
|
|
|
await service.httpGet();
|
|
|
|
if (service.isSuccess) {
|
|
users.clear();
|
|
final List<dynamic> resUsers = service.data('users');
|
|
|
|
users
|
|
.addAll(resUsers.map((user) => UsersMention.fromJson(user)).toList());
|
|
|
|
appState = AppState.idle;
|
|
return;
|
|
}
|
|
appState = AppState.failed;
|
|
}
|
|
|
|
Future<void> addComment() async {
|
|
late List<MentionData> cList = comments;
|
|
final user = DesignConfig.context!.read<UserProvider>().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();
|
|
}
|
|
}
|