develop-replyToMessages #67
@ -1,16 +1,23 @@
|
|||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
import '../../api/apiResponse.dart';
|
import '../../api/apiResponse.dart';
|
||||||
import '../../api/marianumcloud/talk/chat/getChatCache.dart';
|
import '../../api/marianumcloud/talk/chat/getChatCache.dart';
|
||||||
import '../../api/marianumcloud/talk/chat/getChatResponse.dart';
|
import '../../api/marianumcloud/talk/chat/getChatResponse.dart';
|
||||||
|
import '../../storage/base/settingsProvider.dart';
|
||||||
import '../dataHolder.dart';
|
import '../dataHolder.dart';
|
||||||
|
|
||||||
class ChatProps extends DataHolder {
|
class ChatProps extends DataHolder {
|
||||||
String _queryToken = '';
|
String _queryToken = '';
|
||||||
DateTime _lastTokenSet = DateTime.now();
|
DateTime _lastTokenSet = DateTime.now();
|
||||||
int? referenceMessageId;
|
int? _referenceMessageId;
|
||||||
|
|
||||||
GetChatResponse? _getChatResponse;
|
GetChatResponse? _getChatResponse;
|
||||||
GetChatResponse get getChatResponse => _getChatResponse!;
|
GetChatResponse get getChatResponse => _getChatResponse!;
|
||||||
|
|
||||||
|
int? get getReferenceMessageId => _referenceMessageId;
|
||||||
|
set unsafeInternalSetReferenceMessageId(int? reference) => _referenceMessageId = reference;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<ApiResponse?> properties() => [_getChatResponse];
|
List<ApiResponse?> properties() => [_getChatResponse];
|
||||||
|
|
||||||
@ -31,9 +38,18 @@ class ChatProps extends DataHolder {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setReferenceMessageId(int? messageId) {
|
void setReferenceMessageId(int? messageId, BuildContext context, String sendToToken) {
|
||||||
referenceMessageId = messageId;
|
Future.microtask(() {
|
||||||
notifyListeners();
|
_referenceMessageId = messageId;
|
||||||
|
notifyListeners();
|
||||||
|
|
||||||
|
var settings = Provider.of<SettingsProvider>(context, listen: false);
|
||||||
|
if(messageId != null) {
|
||||||
|
settings.val(write: true).talkSettings.draftReplies[sendToToken] = messageId;
|
||||||
|
} else {
|
||||||
|
settings.val(write: true).talkSettings.draftReplies.removeWhere((key, value) => key == sendToToken);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void setQueryToken(String token) {
|
void setQueryToken(String token) {
|
||||||
|
@ -7,8 +7,9 @@ class TalkSettings {
|
|||||||
bool sortFavoritesToTop;
|
bool sortFavoritesToTop;
|
||||||
bool sortUnreadToTop;
|
bool sortUnreadToTop;
|
||||||
Map<String, String> drafts;
|
Map<String, String> drafts;
|
||||||
|
Map<String, int> draftReplies;
|
||||||
|
|
||||||
TalkSettings({required this.sortFavoritesToTop, required this.sortUnreadToTop, required this.drafts});
|
TalkSettings({required this.sortFavoritesToTop, required this.sortUnreadToTop, required this.drafts, required this.draftReplies});
|
||||||
|
|
||||||
factory TalkSettings.fromJson(Map<String, dynamic> json) => _$TalkSettingsFromJson(json);
|
factory TalkSettings.fromJson(Map<String, dynamic> json) => _$TalkSettingsFromJson(json);
|
||||||
Map<String, dynamic> toJson() => _$TalkSettingsToJson(this);
|
Map<String, dynamic> toJson() => _$TalkSettingsToJson(this);
|
||||||
|
@ -10,6 +10,7 @@ TalkSettings _$TalkSettingsFromJson(Map<String, dynamic> json) => TalkSettings(
|
|||||||
sortFavoritesToTop: json['sortFavoritesToTop'] as bool,
|
sortFavoritesToTop: json['sortFavoritesToTop'] as bool,
|
||||||
sortUnreadToTop: json['sortUnreadToTop'] as bool,
|
sortUnreadToTop: json['sortUnreadToTop'] as bool,
|
||||||
drafts: Map<String, String>.from(json['drafts'] as Map),
|
drafts: Map<String, String>.from(json['drafts'] as Map),
|
||||||
|
draftReplies: Map<String, int>.from(json['draftReplies'] as Map),
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$TalkSettingsToJson(TalkSettings instance) =>
|
Map<String, dynamic> _$TalkSettingsToJson(TalkSettings instance) =>
|
||||||
@ -17,4 +18,5 @@ Map<String, dynamic> _$TalkSettingsToJson(TalkSettings instance) =>
|
|||||||
'sortFavoritesToTop': instance.sortFavoritesToTop,
|
'sortFavoritesToTop': instance.sortFavoritesToTop,
|
||||||
'sortUnreadToTop': instance.sortUnreadToTop,
|
'sortUnreadToTop': instance.sortUnreadToTop,
|
||||||
'drafts': instance.drafts,
|
'drafts': instance.drafts,
|
||||||
|
'draftReplies': instance.draftReplies,
|
||||||
};
|
};
|
||||||
|
@ -279,7 +279,7 @@ class _ChatBubbleState extends State<ChatBubble> with SingleTickerProviderStateM
|
|||||||
_position = const Offset(0, 0);
|
_position = const Offset(0, 0);
|
||||||
});
|
});
|
||||||
if(widget.bubbleData.isReplyable) {
|
if(widget.bubbleData.isReplyable) {
|
||||||
Provider.of<ChatProps>(context, listen: false).setReferenceMessageId(widget.bubbleData.id);
|
Provider.of<ChatProps>(context, listen: false).setReferenceMessageId(widget.bubbleData.id, context, widget.chatData.token);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onLongPress: showOptionsDialog,
|
onLongPress: showOptionsDialog,
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
|
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'package:flutter/cupertino.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:nextcloud/nextcloud.dart';
|
import 'package:nextcloud/nextcloud.dart';
|
||||||
import 'package:persistent_bottom_nav_bar_v2/persistent_bottom_nav_bar_v2.dart';
|
import 'package:persistent_bottom_nav_bar_v2/persistent_bottom_nav_bar_v2.dart';
|
||||||
@ -81,7 +80,8 @@ class _ChatTextfieldState extends State<ChatTextfield> {
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
settings = Provider.of<SettingsProvider>(context, listen: false);
|
settings = Provider.of<SettingsProvider>(context, listen: false);
|
||||||
Provider.of<ChatProps>(context, listen: false).referenceMessageId = null;
|
Provider.of<ChatProps>(context, listen: false).unsafeInternalSetReferenceMessageId =
|
||||||
|
settings.val().talkSettings.draftReplies[widget.sendToToken];
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -99,8 +99,8 @@ class _ChatTextfieldState extends State<ChatTextfield> {
|
|||||||
children: [
|
children: [
|
||||||
Consumer<ChatProps>(
|
Consumer<ChatProps>(
|
||||||
builder: (context, data, child) {
|
builder: (context, data, child) {
|
||||||
if(data.referenceMessageId != null) {
|
if(data.getReferenceMessageId != null) {
|
||||||
var referenceMessage = data.getChatResponse.sortByTimestamp().where((element) => element.id == data.referenceMessageId).last;
|
var referenceMessage = data.getChatResponse.sortByTimestamp().where((element) => element.id == data.getReferenceMessageId).last;
|
||||||
return Row(
|
return Row(
|
||||||
children: [
|
children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
@ -111,7 +111,7 @@ class _ChatTextfieldState extends State<ChatTextfield> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
IconButton(
|
IconButton(
|
||||||
onPressed: () => data.setReferenceMessageId(null),
|
onPressed: () => data.setReferenceMessageId(null, context, widget.sendToToken),
|
||||||
icon: const Icon(Icons.close_outlined),
|
icon: const Icon(Icons.close_outlined),
|
||||||
padding: const EdgeInsets.only(left: 0),
|
padding: const EdgeInsets.only(left: 0),
|
||||||
),
|
),
|
||||||
@ -194,7 +194,7 @@ class _ChatTextfieldState extends State<ChatTextfield> {
|
|||||||
const SizedBox(width: 15),
|
const SizedBox(width: 15),
|
||||||
FloatingActionButton(
|
FloatingActionButton(
|
||||||
mini: true,
|
mini: true,
|
||||||
onPressed: (){
|
onPressed: () {
|
||||||
if(_textBoxController.text.isEmpty) return;
|
if(_textBoxController.text.isEmpty) return;
|
||||||
if(isLoading) return;
|
if(isLoading) return;
|
||||||
|
|
||||||
@ -203,7 +203,7 @@ class _ChatTextfieldState extends State<ChatTextfield> {
|
|||||||
});
|
});
|
||||||
SendMessage(widget.sendToToken, SendMessageParams(
|
SendMessage(widget.sendToToken, SendMessageParams(
|
||||||
_textBoxController.text,
|
_textBoxController.text,
|
||||||
replyTo: Provider.of<ChatProps>(context, listen: false).referenceMessageId.toString()
|
replyTo: Provider.of<ChatProps>(context, listen: false).getReferenceMessageId.toString()
|
||||||
)).run().then((value) {
|
)).run().then((value) {
|
||||||
_query();
|
_query();
|
||||||
setState(() {
|
setState(() {
|
||||||
@ -211,8 +211,8 @@ class _ChatTextfieldState extends State<ChatTextfield> {
|
|||||||
});
|
});
|
||||||
_textBoxController.text = '';
|
_textBoxController.text = '';
|
||||||
setDraft('');
|
setDraft('');
|
||||||
|
Provider.of<ChatProps>(context, listen: false).setReferenceMessageId(null, context, widget.sendToToken);
|
||||||
});
|
});
|
||||||
Provider.of<ChatProps>(context, listen: false).referenceMessageId = null;
|
|
||||||
},
|
},
|
||||||
backgroundColor: Theme.of(context).primaryColor,
|
backgroundColor: Theme.of(context).primaryColor,
|
||||||
elevation: 5,
|
elevation: 5,
|
||||||
|
@ -29,6 +29,7 @@ class DefaultSettings {
|
|||||||
sortFavoritesToTop: true,
|
sortFavoritesToTop: true,
|
||||||
sortUnreadToTop: false,
|
sortUnreadToTop: false,
|
||||||
drafts: {},
|
drafts: {},
|
||||||
|
draftReplies: {},
|
||||||
),
|
),
|
||||||
fileSettings: FileSettings(
|
fileSettings: FileSettings(
|
||||||
sortFoldersToTop: true,
|
sortFoldersToTop: true,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user