components([ DatePicker::make('expense_date') ->label('Tanggal') ->default(now()) ->required() ->native(false) ->displayFormat('l, d F Y'), TextInput::make('amount') ->label('Nominal') ->placeholder('0') ->autocomplete(false) ->required() ->currencyMask(thousandSeparator: '.', decimalSeparator: ',', precision: 0) ->prefix('Rp') ->dehydrateStateUsing(fn ($state) => (int) str()->replace('.', '', (string) ($state ?? 0))), Textarea::make('notes') ->label('Keterangan / Catatan') ->placeholder('Bayar listrik bulanan') ->nullable() ->autocomplete(false), SpatieMediaLibraryFileUpload::make('image') ->label('Bukti') ->disk(config('filesystems.default')) ->acceptedFileTypes(['image/*']) ->maxSize(1024 * 3) ->collection('expenses') ->customProperties(fn (): array => [ 'feature' => 'expenses', 'date' => now()->toDateString(), ]) ->image(), ]) ->columns(1); } public static function table(Table $table): Table { return $table ->columns([ TextColumn::make('expense_date') ->label('Tanggal') ->date('l, d F Y') ->sortable(), TextColumn::make('notes') ->label('Keterangan') ->searchable() ->sortable() ->limit(50), TextColumn::make('amount') ->label('Nominal') ->money('IDR', decimalPlaces: 0) ->sortable(), ...TimestampColumns::make(), ]) ->filters([ TrashedFilter::make() ->native(false), ]) ->recordActions([ EditAction::make() ->modalWidth(Width::Large), DeleteAction::make(), ForceDeleteAction::make(), RestoreAction::make(), ]) ->toolbarActions([ BulkActionGroup::make([ ...DefaultBulkActions::make('Pengeluaran'), ]), ]) ->emptyStateIcon(Heroicon::CreditCard) ->emptyStateDescription('Setelah Anda membuat data pertama, maka akan muncul disini.') ->defaultSort('expense_date', 'desc') ->deferFilters(false); } public static function getPages(): array { return [ 'index' => ManageExpenses::route('/'), ]; } public static function getRecordRouteBindingEloquentQuery(): Builder { return parent::getRecordRouteBindingEloquentQuery() ->withoutGlobalScopes([ SoftDeletingScope::class, ]); } }