{{-- ===========================================================================
[컴포넌트 사용 가이드: x-admin.forms.checkbox]
1. 등록/수정 폼 본문 (일반 사각 체크박스 + 배열 name 및 고유 id 지정):
2. 등록/수정 폼 본문 (단독 설정 토글 스위치: isSwitch):
3. 검색/필터바 전용 토글 스위치 (isFilter + isSwitch + autoSubmit):
=========================================================================== --}}
@props([
'name', // checkbox name (필수, 예: roles[], is_active)
'id' => null, // 명시적 id (미지정 시 name 기반 자동 생성)
'value' => '1', // 전송할 value
'label' => null, // 체크박스 우측 라벨
'topLabel' => null, // 스위치/체크박스 상단 라벨
'labelClass' => 'text-dark', // 라벨 추가 클래스 (예: fw-bold text-dark)
'checked' => false, // 기본 체크 여부
'isSwitch' => false, // true: 부트스트랩 토글 스위치 / false: 일반 사각 체크박스
'isFilter' => false, // true: 검색 필터 모드 (콤팩트 스타일)
'autoSubmit' => false, // true: 변경 시 폼 자동 전송
'disabled' => false, // 비활성화 여부
])
@php
// 1. ID 결정: 명시적 id 우선, 없으면 name에서 대괄호([]) 제거 후 value와 조합
$cleanName = str_replace(['[', ']'], '', $name);
$checkboxId = $id ?? ($cleanName . ($value !== '1' ? '_' . $value : ''));
// 2. 단일 값 및 다중 배열(roles[] 등) old() 값 완벽 대응
$oldValue = old($cleanName);
if ($oldValue !== null) {
$isChecked = is_array($oldValue)
? in_array((string)$value, array_map('strval', $oldValue))
: (string)$oldValue === (string)$value;
} else {
$requestValue = request($cleanName);
if ($requestValue !== null) {
$isChecked = is_array($requestValue)
? in_array((string)$value, array_map('strval', $requestValue))
: (string)$requestValue === (string)$value;
} else {
$isChecked = (bool)$checked;
}
}
// 3. 필터 활성화 여부
$isActiveFilter = $isFilter && $isChecked;
@endphp