/** * Composable untuk menyediakan fungsi dan aturan validasi umum. */ export const useValidation = () => { const required = (value, message = 'Bidang ini wajib diisi.') => { // Memastikan nilai ada dan bukan string kosong (setelah trim) return (value !== null && value !== undefined && String(value).trim() !== '') || message; }; const minNameLength = (value, minLength = 3) => { if (!value) return true; // Lewati jika kosong (handle oleh 'required') const length = value.trim().length; // Hitung panjang setelah menghapus spasi di awal/akhir return length >= minLength || `Panjang minimal adalah ${minLength} karakter.`; }; const isNumber = (value) => { if (!value) return true; // Lewati jika kosong (handle oleh 'required') return /^[0-9]+$/.test(value) || 'Hanya boleh mengandung angka.'; }; const phoneLength = (value) => { if (!value) return true; // Hapus karakter non-angka sebelum menghitung panjang const length = value.replace(/[^0-9]/g, '').length; return (length >= 9 && length <= 15) || 'Nomor telepon harus antara 9 hingga 15 digit.'; }; const indonesianPhoneFormat = (value) => { if (!value) return true; // Pola: Harus dimulai dengan '08', diikuti 7 hingga 13 digit angka return /^08[0-9]{7,13}$/.test(value) || 'Format nomor telepon tidak valid (Contoh: 08xxxxxxxx).'; }; // Gabungkan semua aturan validasi telepon ke dalam satu objek untuk kemudahan const phoneRules = [ required, isNumber, phoneLength, indonesianPhoneFormat // Opsional: Hapus komentar jika format 08 wajib ]; const textRules = [ required, minNameLength ]; const requiredRules = [ required ] return { required, isNumber, phoneLength, indonesianPhoneFormat, phoneRules, textRules, requiredRules }; };