Spaces:
Paused
Paused
| import { chat_metadata, saveChatDebounced, saveSettingsDebounced } from '../../../../script.js'; | |
| import { extension_settings } from '../../../extensions.js'; | |
| import { QuickReplyConfig } from './QuickReplyConfig.js'; | |
| export class QuickReplySettings { | |
| static from(props) { | |
| props.config = QuickReplyConfig.from(props.config); | |
| const instance = Object.assign(new this(), props); | |
| instance.init(); | |
| return instance; | |
| } | |
| /**@type {Boolean}*/ isEnabled = false; | |
| /**@type {Boolean}*/ isCombined = false; | |
| /**@type {Boolean}*/ isPopout = false; | |
| /**@type {Boolean}*/ showPopoutButton = true; | |
| /**@type {QuickReplyConfig}*/ config; | |
| /**@type {QuickReplyConfig}*/ _chatConfig; | |
| get chatConfig() { | |
| return this._chatConfig; | |
| } | |
| set chatConfig(value) { | |
| if (this._chatConfig != value) { | |
| this.unhookConfig(this._chatConfig); | |
| this._chatConfig = value; | |
| this.hookConfig(this._chatConfig); | |
| } | |
| } | |
| /**@type {Function}*/ onSave; | |
| /**@type {Function}*/ onRequestEditSet; | |
| init() { | |
| this.hookConfig(this.config); | |
| this.hookConfig(this.chatConfig); | |
| } | |
| hookConfig(config) { | |
| if (config) { | |
| config.onUpdate = ()=>this.save(); | |
| config.onRequestEditSet = (qrs)=>this.requestEditSet(qrs); | |
| } | |
| } | |
| unhookConfig(config) { | |
| if (config) { | |
| config.onUpdate = null; | |
| config.onRequestEditSet = null; | |
| } | |
| } | |
| save() { | |
| extension_settings.quickReplyV2 = this.toJSON(); | |
| saveSettingsDebounced(); | |
| if (this.chatConfig) { | |
| chat_metadata.quickReply = this.chatConfig.toJSON(); | |
| saveChatDebounced(); | |
| } | |
| if (this.onSave) { | |
| this.onSave(); | |
| } | |
| } | |
| requestEditSet(qrs) { | |
| if (this.onRequestEditSet) { | |
| this.onRequestEditSet(qrs); | |
| } | |
| } | |
| toJSON() { | |
| return { | |
| isEnabled: this.isEnabled, | |
| isCombined: this.isCombined, | |
| isPopout: this.isPopout, | |
| showPopoutButton: this.showPopoutButton, | |
| config: this.config, | |
| }; | |
| } | |
| } | |