Pola
Perubahan belum disimpan
Mencegah pekerjaan hilang saat pengguna meninggalkan form atau berpindah perusahaan sebelum menyimpan.
Contoh
Ubah nomor PO, lalu tekan Pindah ke Divistant. Tanpa perubahan, perpindahan langsung terjadi tanpa bertanya.
Ubah isian ini, lalu coba pindah perusahaan.
import { useState } from 'react';
import { Button, Dialog, FormField, Input } from '@divistant/circca-react';
// Perubahan belum disimpan: tiga pilihan seperti dialog simpan macOS — Buang di kiri, Tetap di sini (fokus awal) & Simpan draf di kanan.
export default function Example() {
const [nomor, setNomor] = useState('PO/MEP/X/2026/0042');
const [tersimpan, setTersimpan] = useState(nomor);
const [tanya, setTanya] = useState(false);
const [pesan, setPesan] = useState<string>();
const kotor = nomor !== tersimpan;
const pergi = () => {
if (kotor) setTanya(true);
else setPesan('Berpindah ke PT Divistant Teknologi Indonesia.');
};
return (
<div className="grid max-w-sm gap-4">
<FormField label="No. PO customer" helperText={kotor ? 'Ada perubahan yang belum disimpan.' : 'Ubah isian ini, lalu coba pindah perusahaan.'}>
<Input value={nomor} onChange={e => setNomor(e.target.value)} />
</FormField>
<div>
<Button onClick={pergi}>Pindah ke Divistant</Button>
</div>
{pesan && <p className="type-callout-default text-muted">{pesan}</p>}
<Dialog
open={tanya}
onOpenChange={setTanya}
alert
size="md"
title="Simpan perubahan PO-2026-0146?"
subtitle="Perubahan yang belum disimpan akan hilang bila Anda pindah perusahaan sekarang."
footer={
<>
<Button
variant="ghost"
className="mr-auto"
onClick={() => {
setNomor(tersimpan);
setTanya(false);
setPesan('Perubahan dibuang. Berpindah ke PT Divistant Teknologi Indonesia.');
}}
>
Buang perubahan
</Button>
<Dialog.Close asChild>
<Button>Tetap di sini</Button>
</Dialog.Close>
<Button
variant="primary"
onClick={() => {
setTersimpan(nomor);
setTanya(false);
setPesan('Draf disimpan. Berpindah ke PT Divistant Teknologi Indonesia.');
}}
>
Simpan draf
</Button>
</>
}
/>
</div>
);
}Aturan
- 1Simpan draf otomatis lebih duluForm dokumen menyimpan draf otomatis ("Draf tersimpan otomatis · 10.42"). Dialog hanya muncul untuk perubahan yang belum sempat tersimpan.
- 2Tanya hanya bila ada perubahanJangan memunculkan dialog untuk form yang tidak diubah — pengguna belajar mengabaikan dialog yang selalu muncul.
- 3Tiga pilihan, aksi aman paling menonjolBuang perubahan (Ghost, kiri) · Tetap di sini (Secondary) · Simpan draf (Primary, kanan). Simpan draf tidak mengajukan dokumen.
- 4Berlaku juga untuk pindah perusahaanData selalu terikat perusahaan aktif. Berpindah perusahaan sama dengan meninggalkan form, jadi aturan yang sama berlaku.
- 5Judul menyebut dokumennya"Simpan perubahan PO-2026-0146?" — bukan "Perubahan belum disimpan".