aboutsummaryrefslogtreecommitdiffstats
path: root/web_src/js/features/comp/ConfirmModal.ts
blob: bf645cdbdb420eb8f1f3d24302430d3ff38d4db6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import {svg} from '../../svg.ts';
import {htmlEscape} from 'escape-goat';
import {createElementFromHTML} from '../../utils/dom.ts';
import {fomanticQuery} from '../../modules/fomantic/base.ts';

const {i18n} = window.config;

export function confirmModal({header = '', content = '', confirmButtonColor = 'primary'} = {}) {
  return new Promise((resolve) => {
    const headerHtml = header ? `<div class="header">${htmlEscape(header)}</div>` : '';
    const modal = createElementFromHTML(`
      <div class="ui g-modal-confirm modal">
        ${headerHtml}
        <div class="content">${htmlEscape(content)}</div>
        <div class="actions">
          <button class="ui cancel button">${svg('octicon-x')} ${htmlEscape(i18n.modal_cancel)}</button>
          <button class="ui ${confirmButtonColor} ok button">${svg('octicon-check')} ${htmlEscape(i18n.modal_confirm)}</button>
        </div>
      </div>
    `);
    document.body.append(modal);
    const $modal = fomanticQuery(modal);
    $modal.modal({
      onApprove() {
        resolve(true);
      },
      onHidden() {
        $modal.remove();
        resolve(false);
      },
    }).modal('show');
  });
}