Source: messages/common-message-forms/simple-message-form.js


import {gettext}        from '$qui/base/i18n.js'
import FormButton       from '$qui/forms/form-button.js'
import StockIcon        from '$qui/icons/stock-icon.js'
import {asap}           from '$qui/utils/misc.js'
import * as ObjectUtils from '$qui/utils/object.js'

import MessageForm from '../message-form.js'


/**
 * A simple message form.
 * @alias qui.messages.commonmessageforms.SimpleMessageForm
 * @extends qui.messages.MessageForm
 */
class SimpleMessageForm extends MessageForm {

    /**
     * @constructs
     * @param {String} type message type (`"info"`, `"warning"` or `"error"`)
     * @param {String} [buttonCaption] optional button caption (defaults to `"OK"`)
     * @param {qui.messages.MessageForm.Callback} [onClose] a dismiss callback
     * @param {...*} args parent class parameters
     */
    constructor({type, buttonCaption = gettext('OK'), onClose = null, ...args}) {
        let variant = null
        let iconName = null
        switch (type) {
            case 'info':
                variant = 'foreground'
                iconName = 'info'
                break

            case 'warning':
                variant = 'warning'
                iconName = 'exclam'
                break

            case 'error':
                variant = 'error'
                iconName = 'exclam'
                break
        }

        if (iconName && variant && args.icon == null) {
            args.icon = new StockIcon({name: iconName, variant: variant})
        }

        ObjectUtils.setDefault(args, 'buttons', [
            new FormButton({id: 'ok', caption: buttonCaption, def: true, style: 'interactive'})
        ])

        super(args)

        this._onClose = onClose
    }

    onClose() {
        if (this._onClose) {
            asap(this._onClose)
        }
    }

}


export default SimpleMessageForm