Newer
Older
navi-1 / webclient / src / components / ui / ConfirmDialog.vue
<template>
  <Teleport to="body">
    <Transition name="modal">
      <div v-if="visible" class="modal a-show" @click.self="onCancel">
        <div class="modal-backdrop" @click="onCancel" />
        <div class="modal-panel confirm-panel" role="dialog" aria-modal="true">
          <header class="modal-header">
            <h4 class="modal-title">Requires confirmation</h4>
            <button class="btn-icon modal-close" type="button" aria-label="Close" @click="onCancel">✕</button>
          </header>
          <div class="modal-body">
            <p>{{ message }}</p>
          </div>
          <footer class="modal-footer">
            <div class="actions">
              <button class="btn btn-primary" @click="onCancel">No</button>
              <button class="btn btn-warning" @click="onConfirm">Yes</button>
            </div>
          </footer>
        </div>
      </div>
    </Transition>
  </Teleport>
</template>

<script setup>
import { useConfirmState, _confirmResolve } from '@/composables/useConfirm.js'

const { visible, message } = useConfirmState()

function onConfirm() { _confirmResolve(true) }
function onCancel()  { _confirmResolve(false) }
</script>

<style scoped>
.confirm-panel {
  max-width: 420px;
  min-height: unset;
}
</style>