Merge branch 'fix/daily-checklist' into 'development'

[FIX/FE] Daily Checklist

See merge request mbugroup/lti-web-client!483
This commit is contained in:
Rivaldi A N S
2026-05-19 05:12:37 +00:00
2 changed files with 25 additions and 2 deletions
@@ -20,6 +20,7 @@ interface DatePickerProps {
disabled?: boolean; disabled?: boolean;
placeholder?: string; placeholder?: string;
formatDisplay?: (date: string) => string; formatDisplay?: (date: string) => string;
hasError?: boolean;
} }
export function DatePicker({ export function DatePicker({
@@ -28,6 +29,7 @@ export function DatePicker({
disabled = false, disabled = false,
placeholder = 'Select date', placeholder = 'Select date',
formatDisplay, formatDisplay,
hasError = false,
}: DatePickerProps) { }: DatePickerProps) {
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
const [currentMonth, setCurrentMonth] = useState(() => { const [currentMonth, setCurrentMonth] = useState(() => {
@@ -154,7 +156,7 @@ export function DatePicker({
<Button <Button
variant='outline' variant='outline'
disabled={disabled} disabled={disabled}
className='w-full justify-start text-left font-normal border-gray-200 hover:bg-gray-50' className={`w-full justify-start text-left font-normal hover:bg-gray-50 ${hasError ? 'border-red-500 focus:ring-red-500' : 'border-gray-200'}`}
> >
<CalendarIcon className='mr-2 h-4 w-4 text-gray-500' /> <CalendarIcon className='mr-2 h-4 w-4 text-gray-500' />
{date ? ( {date ? (
@@ -181,6 +181,8 @@ export function DailyChecklistContent() {
const [initialLoading, setInitialLoading] = useState(!!checklistIdFromUrl); const [initialLoading, setInitialLoading] = useState(!!checklistIdFromUrl);
const [emptyKandangEndDate, setEmptyKandangEndDate] = useState<string>(''); const [emptyKandangEndDate, setEmptyKandangEndDate] = useState<string>('');
const [emptyKandangEndDateError, setEmptyKandangEndDateError] =
useState<string>('');
const [existingDocuments, setExistingDocuments] = useState<Document[]>([]); const [existingDocuments, setExistingDocuments] = useState<Document[]>([]);
const [documents, setDocuments] = useState<File[]>([]); const [documents, setDocuments] = useState<File[]>([]);
@@ -788,6 +790,11 @@ export function DailyChecklistContent() {
return; return;
} }
if (emptyKandang && !emptyKandangEndDate) {
setEmptyKandangEndDateError('Tanggal akhir kandang kosong wajib diisi');
return;
}
setIsLoadingDraft(true); setIsLoadingDraft(true);
try { try {
@@ -865,6 +872,11 @@ export function DailyChecklistContent() {
return; return;
} }
if (emptyKandang && !emptyKandangEndDate) {
setEmptyKandangEndDateError('Tanggal akhir kandang kosong wajib diisi');
return;
}
if (!isKandangEmpty) { if (!isKandangEmpty) {
if (selectedEmployees.length === 0) { if (selectedEmployees.length === 0) {
toast.error('Pilih minimal 1 ABK'); toast.error('Pilih minimal 1 ABK');
@@ -1224,11 +1236,20 @@ export function DailyChecklistContent() {
<div className='mt-1.5'> <div className='mt-1.5'>
<DatePicker <DatePicker
date={emptyKandangEndDate} date={emptyKandangEndDate}
onDateChange={setEmptyKandangEndDate} onDateChange={(val) => {
setEmptyKandangEndDate(val);
if (val) setEmptyKandangEndDateError('');
}}
disabled={!isChecklistStatusDraft} disabled={!isChecklistStatusDraft}
placeholder='Pilih tanggal' placeholder='Pilih tanggal'
formatDisplay={formatDateForDisplay} formatDisplay={formatDateForDisplay}
hasError={!!emptyKandangEndDateError}
/> />
{emptyKandangEndDateError && (
<p className='text-xs text-red-500 mt-1'>
{emptyKandangEndDateError}
</p>
)}
</div> </div>
</div> </div>
</div> </div>