schema([ Section::make([ Fieldset::make('Primary information') ->schema([ Select::make('customer') ->relationship('customer', 'company_name') ->searchable() ->required(), ToggleButtons::make('shipping_type') ->options(ShippingType::class) ->inline() ->required(), TextInput::make('courier') ->placeholder('UPS, Purolator...'), ]), Split::make([ Fieldset::make('Account Details') ->schema([ TextInput::make('account_title') ->label('Title') ->prefixIcon('lucide-folder-pen') ->placeholder('What is this account used for?') ->columnSpan(2), TextInput::make('account_url') ->label('URL') ->prefixIcon('lucide-globe') ->placeholder('Shipping website') ->url() ->columnSpan(2), TextInput::make('account_username') ->label('Username') ->prefixIcon('lucide-circle-user') ->placeholder('...'), TextInput::make('account_password') ->label('Password') ->prefixIcon('lucide-key-round') ->placeholder('...'), ])->columnSpan(1), Fieldset::make('Shipping Instructions') ->schema([ TextInput::make('info_needed') ->label('Instructions') ->prefixIcon('lucide-pencil') ->placeholder('Example: put PO on box') ->columnSpan(2), TextInput::make('notify') ->placeholder('Who to email and CC?') ->prefixIcon('lucide-users-round') ->columnSpan(2), TextArea::make('notes') ->placeholder('Any additional information...') ->rows(2) ->columnSpan(2), ]), ])->columnSpan(2), ])->columns(2), ]); } public static function table(Table $table): Table { return $table ->columns([ TextColumn::make('shipping_type') ->label('Type') ->sortable(), TextColumn::make('courier') ->url(fn ($record) => $record->account_url ?? null, shouldOpenInNewTab: true) ->icon(fn ($record) => $record->account_url ? 'lucide-external-link' : null) ->iconPosition(IconPosition::After) ->searchable(query: function (Builder $query, $search) { return $query ->where('courier', 'like', "%{$search}%") ->orWhereHas('customer', function (Builder $query) use ($search) { return $query->where('company_name', 'like', "%{$search}%"); }); }), TextColumn::make('account_title'), TextColumn::make('info_needed'), TextColumn::make('notify'), ]) ->filters([ // ]) ->actions([ Tables\Actions\EditAction::make(), ]) ->bulkActions([ // Tables\Actions\BulkActionGroup::make([ // Tables\Actions\DeleteBulkAction::make(), // ]), ]) ->defaultGroup( Group::make('customer.company_name') ->titlePrefixedWithLabel(false) ); } public static function getRelations(): array { return [ // ]; } public static function getPages(): array { return [ 'index' => Pages\ListShippingEntries::route('/'), 'create' => Pages\CreateShippingEntry::route('/create'), 'edit' => Pages\EditShippingEntry::route('/{record}/edit'), ]; } }