forked from mystiq/hydrogen-web
Extract ComposerViewModel to its own file
This commit is contained in:
parent
f0b6384ad7
commit
1a0e305212
2 changed files with 72 additions and 70 deletions
71
src/domain/session/room/ComposerViewModel.js
Normal file
71
src/domain/session/room/ComposerViewModel.js
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
import {ViewModel} from "../../ViewModel.js";
|
||||||
|
|
||||||
|
export class ComposerViewModel extends ViewModel {
|
||||||
|
constructor(roomVM) {
|
||||||
|
super();
|
||||||
|
this._roomVM = roomVM;
|
||||||
|
this._isEmpty = true;
|
||||||
|
this._replyVM = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
setReplyingTo(tile) {
|
||||||
|
const changed = this._replyVM !== tile;
|
||||||
|
this._replyVM = tile;
|
||||||
|
if (changed) {
|
||||||
|
this.emitChange("replyViewModel");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
clearReplyingTo() {
|
||||||
|
this.setReplyingTo(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
get replyViewModel() {
|
||||||
|
return this._replyVM;
|
||||||
|
}
|
||||||
|
|
||||||
|
get isEncrypted() {
|
||||||
|
return this._roomVM.isEncrypted;
|
||||||
|
}
|
||||||
|
|
||||||
|
sendMessage(message) {
|
||||||
|
const success = this._roomVM._sendMessage(message, this._replyVM);
|
||||||
|
if (success) {
|
||||||
|
this._isEmpty = true;
|
||||||
|
this.emitChange("canSend");
|
||||||
|
this.clearReplyingTo();
|
||||||
|
}
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
sendPicture() {
|
||||||
|
this._roomVM._pickAndSendPicture();
|
||||||
|
}
|
||||||
|
|
||||||
|
sendFile() {
|
||||||
|
this._roomVM._pickAndSendFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
sendVideo() {
|
||||||
|
this._roomVM._pickAndSendVideo();
|
||||||
|
}
|
||||||
|
|
||||||
|
get canSend() {
|
||||||
|
return !this._isEmpty;
|
||||||
|
}
|
||||||
|
|
||||||
|
async setInput(text) {
|
||||||
|
const wasEmpty = this._isEmpty;
|
||||||
|
this._isEmpty = text.length === 0;
|
||||||
|
if (wasEmpty && !this._isEmpty) {
|
||||||
|
this._roomVM._room.ensureMessageKeyIsShared();
|
||||||
|
}
|
||||||
|
if (wasEmpty !== this._isEmpty) {
|
||||||
|
this.emitChange("canSend");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
get kind() {
|
||||||
|
return "composer";
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,6 +16,7 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {TimelineViewModel} from "./timeline/TimelineViewModel.js";
|
import {TimelineViewModel} from "./timeline/TimelineViewModel.js";
|
||||||
|
import {ComposerViewModel} from "./ComposerViewModel.js"
|
||||||
import {avatarInitials, getIdentifierColorNumber, getAvatarHttpUrl} from "../../avatar.js";
|
import {avatarInitials, getIdentifierColorNumber, getAvatarHttpUrl} from "../../avatar.js";
|
||||||
import {ViewModel} from "../../ViewModel.js";
|
import {ViewModel} from "../../ViewModel.js";
|
||||||
|
|
||||||
|
@ -307,76 +308,6 @@ export class RoomViewModel extends ViewModel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ComposerViewModel extends ViewModel {
|
|
||||||
constructor(roomVM) {
|
|
||||||
super();
|
|
||||||
this._roomVM = roomVM;
|
|
||||||
this._isEmpty = true;
|
|
||||||
this._replyVM = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
setReplyingTo(tile) {
|
|
||||||
const changed = this._replyVM !== tile;
|
|
||||||
this._replyVM = tile;
|
|
||||||
if (changed) {
|
|
||||||
this.emitChange("replyViewModel");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
clearReplyingTo() {
|
|
||||||
this.setReplyingTo(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
get replyViewModel() {
|
|
||||||
return this._replyVM;
|
|
||||||
}
|
|
||||||
|
|
||||||
get isEncrypted() {
|
|
||||||
return this._roomVM.isEncrypted;
|
|
||||||
}
|
|
||||||
|
|
||||||
sendMessage(message) {
|
|
||||||
const success = this._roomVM._sendMessage(message, this._replyVM);
|
|
||||||
if (success) {
|
|
||||||
this._isEmpty = true;
|
|
||||||
this.emitChange("canSend");
|
|
||||||
this.clearReplyingTo();
|
|
||||||
}
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
sendPicture() {
|
|
||||||
this._roomVM._pickAndSendPicture();
|
|
||||||
}
|
|
||||||
|
|
||||||
sendFile() {
|
|
||||||
this._roomVM._pickAndSendFile();
|
|
||||||
}
|
|
||||||
|
|
||||||
sendVideo() {
|
|
||||||
this._roomVM._pickAndSendVideo();
|
|
||||||
}
|
|
||||||
|
|
||||||
get canSend() {
|
|
||||||
return !this._isEmpty;
|
|
||||||
}
|
|
||||||
|
|
||||||
async setInput(text) {
|
|
||||||
const wasEmpty = this._isEmpty;
|
|
||||||
this._isEmpty = text.length === 0;
|
|
||||||
if (wasEmpty && !this._isEmpty) {
|
|
||||||
this._roomVM._room.ensureMessageKeyIsShared();
|
|
||||||
}
|
|
||||||
if (wasEmpty !== this._isEmpty) {
|
|
||||||
this.emitChange("canSend");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
get kind() {
|
|
||||||
return "composer";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function imageToInfo(image) {
|
function imageToInfo(image) {
|
||||||
return {
|
return {
|
||||||
w: image.width,
|
w: image.width,
|
||||||
|
|
Loading…
Reference in a new issue