components([ HrForm::leaveDatePicker('start_date', __(hr.fields.start_date)), HrForm::leaveDatePicker('end_date', __(hr.fields.end_date)), HrForm::leaveDaysDisplay(), Textarea::make('reason') ->rows(3) ->columnSpanFull(), ]); } public function table(Table $table): Table { return $table ->recordTitleAttribute('start_date') ->columns([ TextColumn::make('start_date') ->date() ->sortable(), TextColumn::make('end_date') ->date() ->sortable(), TextColumn::make('days') ->numeric() ->sortable(), TextColumn::make('status') ->badge() ->color(fn (ApprovalStatus $state): string => $state->color()) ->formatStateUsing(fn (ApprovalStatus $state): string => $state->label()) ->sortable(), TextColumn::make('approver.name') ->label(__('hr.fields.approved_by')) ->toggleable(isToggledHiddenByDefault: true), ]) ->filters([ SelectFilter::make('status') ->options(ApprovalStatus::class), TrashedFilter::make(), ]) ->headerActions([ CreateAction::make(), ]) ->recordActions([ Action::make('approve') ->label(__('hr.actions.approve')) ->icon('heroicon-o-check-badge') ->color('success') ->requiresConfirmation() ->visible(fn (UnpaidLeave $record): bool => $record->status === ApprovalStatus::Pending) ->action(function (UnpaidLeave $record, UnpaidLeaveService $unpaidLeaveService): void { $unpaidLeaveService->approve($record, Auth::user()); }), Action::make('reject') ->label(__('hr.actions.reject')) ->icon('heroicon-o-x-mark') ->color('danger') ->requiresConfirmation() ->visible(fn (UnpaidLeave $record): bool => $record->status === ApprovalStatus::Pending) ->action(function (UnpaidLeave $record, UnpaidLeaveService $unpaidLeaveService): void { $unpaidLeaveService->reject($record, Auth::user()); }), EditAction::make(), DeleteAction::make(), ]) ->toolbarActions([ BulkActionGroup::make([ DeleteBulkAction::make(), ForceDeleteBulkAction::make(), RestoreBulkAction::make(), ]), ]); } }