96 lines
2.9 KiB
JavaScript
96 lines
2.9 KiB
JavaScript
import { AttachmentList } from "@mail/core/common/attachment_list";
|
|
import { RelativeTime } from "@mail/core/common/relative_time";
|
|
import { AvatarCardPopover } from "@mail/discuss/web/avatar_card/avatar_card_popover";
|
|
import { ConfirmationDialog } from "@web/core/confirmation_dialog/confirmation_dialog";
|
|
import { _t } from "@web/core/l10n/translation";
|
|
import { usePopover } from "@web/core/popover/popover_hook";
|
|
import { useService } from "@web/core/utils/hooks";
|
|
|
|
import { Component, useState } from "@odoo/owl";
|
|
|
|
export const SCHEDULED_MESSAGE_TRUNCATE_THRESHOLD = 50; // arbitrary, ~ 1 line on large screen
|
|
|
|
export class ScheduledMessage extends Component {
|
|
static props = {
|
|
onScheduledMessageChanged: Function,
|
|
scheduledMessage: Object,
|
|
};
|
|
static template = "mail.ScheduledMessage";
|
|
static components = {
|
|
AttachmentList,
|
|
RelativeTime,
|
|
};
|
|
|
|
setup() {
|
|
super.setup();
|
|
this.state = useState({
|
|
readMore: false,
|
|
});
|
|
this.avatarCard = usePopover(AvatarCardPopover);
|
|
this.dialogService = useService("dialog");
|
|
}
|
|
|
|
get isShort() {
|
|
return (
|
|
this.props.scheduledMessage.textContent.length < SCHEDULED_MESSAGE_TRUNCATE_THRESHOLD
|
|
);
|
|
}
|
|
|
|
get scheduledDate() {
|
|
return this.props.scheduledMessage.scheduled_date.toLocaleString(
|
|
luxon.DateTime.DATETIME_SHORT,
|
|
);
|
|
}
|
|
|
|
get truncatedMessage() {
|
|
return (
|
|
this.props.scheduledMessage.textContent.substring(
|
|
0,
|
|
SCHEDULED_MESSAGE_TRUNCATE_THRESHOLD,
|
|
) + "..."
|
|
);
|
|
}
|
|
|
|
async cancel() {
|
|
const thread = this.props.scheduledMessage.thread;
|
|
await this.props.scheduledMessage.cancel();
|
|
this.props.onScheduledMessageChanged(thread);
|
|
}
|
|
|
|
onClick(ev) {
|
|
this.props.scheduledMessage.store.handleClickOnLink(ev, this.props.scheduledMessage.thread);
|
|
}
|
|
|
|
async onClickAttachmentUnlink(attachment) {
|
|
attachment.remove();
|
|
}
|
|
|
|
onClickAuthor(ev) {
|
|
if (!this.avatarCard.isOpen) {
|
|
this.avatarCard.open(ev.currentTarget, {
|
|
id: this.props.scheduledMessage.author.userId,
|
|
});
|
|
}
|
|
}
|
|
|
|
onClickCancel() {
|
|
this.dialogService.add(ConfirmationDialog, {
|
|
body: _t("Are you sure you want to cancel the scheduled message?"),
|
|
cancel: () => {},
|
|
cancelLabel: _t("Close"),
|
|
confirm: this.cancel.bind(this),
|
|
confirmLabel: _t("Cancel Message"),
|
|
});
|
|
}
|
|
|
|
async onClickEdit() {
|
|
await this.props.scheduledMessage.edit();
|
|
this.props.onScheduledMessageChanged(this.props.scheduledMessage.thread);
|
|
}
|
|
|
|
async onClickSendNow() {
|
|
await this.props.scheduledMessage.send();
|
|
this.props.onScheduledMessageChanged(this.props.scheduledMessage.thread);
|
|
}
|
|
}
|