Files
simrsx-fe/app/components/pub/my-ui/confirmation
hasyim_kai c98018bb4e Squashed commit of the following:
commit bcfb4c1456
Merge: 1cbde57 975c87d
Author: Munawwirul Jamal <57973347+munaja@users.noreply.github.com>
Date:   Mon Nov 17 11:15:14 2025 +0700

    Merge pull request #147 from dikstub-rssa/feat/surat-kontrol-135

    Feat: Integration Rehab Medik - Surat Kontrol

commit 975c87d99a
Merge: f582090 1cbde57
Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com>
Date:   Mon Nov 17 10:58:10 2025 +0700

    Merge branch 'dev' into feat/surat-kontrol-135

commit f582090d18
Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com>
Date:   Thu Nov 13 11:56:21 2025 +0700

    Fix: Refactor surat kontrol

commit a14c4a5d3c
Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com>
Date:   Tue Nov 11 14:21:58 2025 +0700

    Fix: Refactor Surat Kontrol CRUD {id} to {code}

commit 24313adef6
Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com>
Date:   Fri Nov 7 10:35:46 2025 +0700

    Fix: debug back btn in add, edit, detail content page

commit 59b44b5729
Merge: 99a61a0 db15ec9
Author: Muhammad Hasyim Chaidir Ali <68959522+Hasyim-Kai@users.noreply.github.com>
Date:   Fri Nov 7 09:11:10 2025 +0700

    Merge branch 'dev' into feat/surat-kontrol-135

commit 99a61a0bf2
Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com>
Date:   Thu Nov 6 08:06:01 2025 +0700

    Feat: add right & bottom label in input base component

commit db48919325
Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com>
Date:   Wed Nov 5 13:53:43 2025 +0700

    Feat: add banner in List if requirement not met

commit bd57250f7e
Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com>
Date:   Wed Nov 5 13:26:48 2025 +0700

    Fix: refactor getDetail url param

commit a361922e32
Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com>
Date:   Wed Nov 5 13:19:07 2025 +0700

    Feat: Add & integrate add, edit, detail page

commit 331f4a6b20
Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com>
Date:   Tue Nov 4 16:56:08 2025 +0700

    Feat: Integrate Control Letter

commit 2275f4dc99
Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com>
Date:   Mon Oct 27 14:01:58 2025 +0700

    Feat: add UI BPJS > Surat Kontrol

commit 89e0e7a2c8
Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com>
Date:   Mon Oct 27 10:21:59 2025 +0700

    Feat: add UI CRUD Surat Kontrol at Rehab Medik > kunjungan > Proses
2025-11-18 12:58:58 +07:00
..
2025-10-08 00:03:36 +07:00

Confirmation Modal Components

Sistem confirmation modal yang modular dan dapat digunakan kembali di seluruh aplikasi.

Components

1. confirmation.vue - Base Confirmation Modal

Komponen dasar untuk modal konfirmasi yang dapat dikustomisasi.

Props:

  • open?: boolean - Status modal (terbuka/tertutup)
  • title?: string - Judul modal (default: "Konfirmasi")
  • message?: string - Pesan konfirmasi (default: "Apakah Anda yakin ingin melanjutkan?")
  • confirmText?: string - Text tombol konfirmasi (default: "Ya")
  • cancelText?: string - Text tombol batal (default: "Batal")
  • variant?: 'default' | 'destructive' | 'warning' - Varian tampilan (default: "default")
  • size?: 'sm' | 'md' | 'lg' | 'xl' - Ukuran modal (default: "md")

Events:

  • @confirm - Dipanggil saat tombol konfirmasi diklik
  • @cancel - Dipanggil saat tombol batal diklik
  • @update:open - Dipanggil saat status modal berubah

Contoh penggunaan:

<template>
  <Confirmation
    v-model:open="isConfirmOpen"
    title="Hapus Data"
    message="Apakah Anda yakin ingin menghapus data ini?"
    confirm-text="Hapus"
    variant="destructive"
    @confirm="handleConfirm"
    @cancel="handleCancel"
  />
</template>

2. record-confirmation.vue - Record-specific Confirmation

Komponen khusus untuk konfirmasi operasi pada record/data tertentu.

Props:

  • open?: boolean - Status modal
  • action?: 'delete' | 'deactivate' | 'activate' | 'archive' | 'restore' - Jenis aksi (default: "delete")
  • record?: RecordData | null - Data record yang akan diproses
  • customTitle?: string - Custom judul (opsional)
  • customMessage?: string - Custom pesan (opsional)
  • customConfirmText?: string - Custom text tombol konfirmasi (opsional)
  • customCancelText?: string - Custom text tombol batal (opsional)

Events:

  • @confirm - Dipanggil dengan parameter (record, action)
  • @cancel - Dipanggil saat batal
  • @update:open - Update status modal

Contoh penggunaan:

<template>
  <RecordConfirmation
    v-model:open="isRecordConfirmOpen"
    action="delete"
    :record="selectedRecord"
    @confirm="handleDeleteRecord"
    @cancel="handleCancel"
  >
    <template #default="{ record }">
      <div class="text-sm">
        <p><strong>ID:</strong> {{ record?.id }}</p>
        <p><strong>Nama:</strong> {{ record?.name }}</p>
      </div>
    </template>
  </RecordConfirmation>
</template>

Action Types

Record confirmation mendukung beberapa jenis aksi dengan konfigurasi default:

  • delete: Hapus data (variant: destructive, warna merah)
  • deactivate: Nonaktifkan data (variant: warning, warna kuning)
  • activate: Aktifkan data (variant: default, warna biru)
  • archive: Arsipkan data (variant: warning, warna kuning)
  • restore: Pulihkan data (variant: default, warna biru)

Integration Example

Contoh implementasi di komponen list:

<script setup>
// State management
const isRecordConfirmationOpen = ref(false)
const selectedRecord = ref(null)
const confirmAction = ref('delete')

// Handle action dari table
function handleRowAction(action, record) {
  selectedRecord.value = record
  confirmAction.value = action
  isRecordConfirmationOpen.value = true
}

// Handle konfirmasi
async function handleConfirmAction(record, action) {
  try {
    // API call berdasarkan action
    await performAction(action, record.id)
    // Refresh data
    await refreshData()
  } catch (error) {
    // Handle error
  }
}
</script>

<template>
  <!-- Your list component -->
  <DataTable @action="handleRowAction" />
  
  <!-- Confirmation modal -->
  <RecordConfirmation
    v-model:open="isRecordConfirmationOpen"
    :action="confirmAction"
    :record="selectedRecord"
    @confirm="handleConfirmAction"
  />
</template>

Styling

Komponen menggunakan Tailwind CSS dan shadcn/ui components. Pastikan dependencies berikut tersedia:

  • ~/components/pub/my-ui/modal/dialog.vue
  • ~/components/pub/ui/button