devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
153 lines (150 loc) • 6 kB
JavaScript
/**
* DevExtreme (cjs/__internal/ui/chat/editing_preview.js)
* Version: 25.1.3
* Build date: Wed Jun 25 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.CHAT_EDITING_PREVIEW_TEXT_CLASS = exports.CHAT_EDITING_PREVIEW_HIDING_CLASS = exports.CHAT_EDITING_PREVIEW_CONTENT_CLASS = exports.CHAT_EDITING_PREVIEW_CLASS = exports.CHAT_EDITING_PREVIEW_CAPTION_CLASS = exports.CHAT_EDITING_PREVIEW_CANCEL_BUTTON_CLASS = void 0;
var _message = _interopRequireDefault(require("../../../common/core/localization/message"));
var _renderer = _interopRequireDefault(require("../../../core/renderer"));
var _button = _interopRequireDefault(require("../../../ui/button"));
var _dom_component = _interopRequireDefault(require("../../core/widget/dom_component"));
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
}
}
function _extends() {
return _extends = Object.assign ? Object.assign.bind() : function(n) {
for (var e = 1; e < arguments.length; e++) {
var t = arguments[e];
for (var r in t) {
({}).hasOwnProperty.call(t, r) && (n[r] = t[r])
}
}
return n
}, _extends.apply(null, arguments)
}
const CHAT_EDITING_PREVIEW_CLASS = exports.CHAT_EDITING_PREVIEW_CLASS = "dx-chat-editing-preview";
const CHAT_EDITING_PREVIEW_HIDING_CLASS = exports.CHAT_EDITING_PREVIEW_HIDING_CLASS = "dx-chat-editing-preview-hiding";
const CHAT_EDITING_PREVIEW_CONTENT_CLASS = exports.CHAT_EDITING_PREVIEW_CONTENT_CLASS = "dx-chat-editing-preview-content";
const CHAT_EDITING_PREVIEW_CAPTION_CLASS = exports.CHAT_EDITING_PREVIEW_CAPTION_CLASS = "dx-chat-editing-preview-caption";
const CHAT_EDITING_PREVIEW_TEXT_CLASS = exports.CHAT_EDITING_PREVIEW_TEXT_CLASS = "dx-chat-editing-preview-text";
const CHAT_EDITING_PREVIEW_CANCEL_BUTTON_CLASS = exports.CHAT_EDITING_PREVIEW_CANCEL_BUTTON_CLASS = "dx-chat-editing-preview-cancel-button";
class EditingPreview extends _dom_component.default {
_getDefaultOptions() {
return _extends({}, super._getDefaultOptions(), {
activeStateEnabled: true,
focusStateEnabled: true,
hoverStateEnabled: true,
text: "",
onCancel: void 0
})
}
_init() {
super._init();
(0, _renderer.default)(this.element()).addClass(CHAT_EDITING_PREVIEW_CLASS)
}
_initMarkup() {
super._initMarkup();
const {
text: text
} = this.option();
if (text) {
this._renderContent();
return
}
this._cleanContent()
}
_renderContent() {
this._renderMessagePreview();
this._updateText();
this._renderCloseButton()
}
_renderMessagePreview() {
const $message = (0, _renderer.default)("<div>").addClass(CHAT_EDITING_PREVIEW_CONTENT_CLASS).appendTo(this.element());
(0, _renderer.default)("<div>").addClass(CHAT_EDITING_PREVIEW_CAPTION_CLASS).text(_message.default.format("dxChat-editingMessageCaption")).appendTo($message);
this._$messageText = (0, _renderer.default)("<div>").addClass(CHAT_EDITING_PREVIEW_TEXT_CLASS).appendTo($message)
}
_updateText() {
const {
text: text = ""
} = this.option();
this._$messageText.text(text)
}
_renderCloseButton() {
const {
onCancel: onCancel,
activeStateEnabled: activeStateEnabled,
focusStateEnabled: focusStateEnabled,
hoverStateEnabled: hoverStateEnabled
} = this.option();
const $button = (0, _renderer.default)("<div>").addClass(CHAT_EDITING_PREVIEW_CANCEL_BUTTON_CLASS).appendTo(this.element());
this._closeButton = this._createComponent($button, _button.default, {
activeStateEnabled: activeStateEnabled,
focusStateEnabled: focusStateEnabled,
hoverStateEnabled: hoverStateEnabled,
icon: "remove",
type: "normal",
stylingMode: "text",
elementAttr: {
"aria-label": _message.default.format("dxChat-cancelEditingButtonAriaLabel")
},
onClick: e => {
null === onCancel || void 0 === onCancel || onCancel(e)
}
})
}
_processTextUpdate(previousValue) {
const {
text: text = ""
} = this.option();
if (previousValue && text) {
this._updateText();
return
}
if (text) {
this._renderContent();
return
}
this.$element().get(0).addEventListener("animationend", (() => {
this._cleanContent()
}), {
once: true
});
this.$element().addClass(CHAT_EDITING_PREVIEW_HIDING_CLASS)
}
_cleanContent() {
super._dispose();
this.$element().remove()
}
_optionChanged(args) {
const {
name: name,
value: value,
previousValue: previousValue
} = args;
switch (name) {
case "activeStateEnabled":
case "focusStateEnabled":
case "hoverStateEnabled":
this._closeButton.option(name, value);
break;
case "text":
this._processTextUpdate(previousValue);
break;
case "onCancel":
this._closeButton.option("onClick", value);
break;
default:
super._optionChanged(args)
}
}
}
var _default = exports.default = EditingPreview;