disk(config('hr.file_uploads.disk')) ->directory(config('hr.file_uploads.directory')) ->visibility('private'); } public static function employeeSelect(): Select { return Select::make('employee_id') ->relationship('employee', 'full_name') ->searchable() ->preload() ->required(); } public static function leaveDaysDisplay(): TextInput { return TextInput::make('days') ->label(__('hr.fields.days')) ->numeric() ->disabled() ->dehydrated(false) ->afterStateHydrated(function (TextInput $component, $state, Set $set, Get $get): void { self::syncLeaveDays($set, $get); }); } public static function leaveDatePicker(string $name, string $label): DatePicker { return DatePicker::make($name) ->label($label) ->required() ->live() ->afterStateUpdated(fn (Set $set, Get $get) => self::syncLeaveDays($set, $get)); } public static function syncLeaveDays(Set $set, Get $get): void { $startDate = $get('start_date'); $endDate = $get('end_date'); if (! $startDate || ! $endDate) { $set('days', null); return; } $days = app(LeaveDaysCalculator::class)->between( Carbon::parse($startDate), Carbon::parse($endDate), ); $set('days', $days); } }