diff --git a/src/Export/CsvColumn.php b/src/Export/CsvColumn.php index 4d796c3..994acea 100644 --- a/src/Export/CsvColumn.php +++ b/src/Export/CsvColumn.php @@ -2,6 +2,8 @@ namespace Modules\Core\Export; +use Closure; + /** * One column in a CsvWriter schema: a header label plus a closure that pulls this * column's value out of one record. The closure doesn't care what shape a record @@ -12,10 +14,10 @@ namespace Modules\Core\Export; final class CsvColumn { /** - * @param \Closure(mixed): (string|int|float|null) $value + * @param Closure(mixed):((string|int|float|null)) $value */ public function __construct( public readonly string $header, - public readonly \Closure $value, + public readonly Closure $value, ) {} } diff --git a/src/Payment/Filament/Resources/PaymentMethodResource.php b/src/Payment/Filament/Resources/PaymentMethodResource.php index 5a441d6..2cfbc2c 100644 --- a/src/Payment/Filament/Resources/PaymentMethodResource.php +++ b/src/Payment/Filament/Resources/PaymentMethodResource.php @@ -60,9 +60,9 @@ class PaymentMethodResource extends Resource { protected static ?string $model = PaymentMethod::class; - protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-credit-card'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-credit-card'; - protected static string|\UnitEnum|null $navigationGroup = 'Settings'; + protected static string | \UnitEnum | null $navigationGroup = 'Settings'; protected static ?string $modelLabel = 'Payment Method'; diff --git a/src/Payment/Filament/Resources/PaymentMethodResource/Pages/ListPaymentMethods.php b/src/Payment/Filament/Resources/PaymentMethodResource/Pages/ListPaymentMethods.php index 5e318c2..9d170b1 100644 --- a/src/Payment/Filament/Resources/PaymentMethodResource/Pages/ListPaymentMethods.php +++ b/src/Payment/Filament/Resources/PaymentMethodResource/Pages/ListPaymentMethods.php @@ -2,6 +2,7 @@ namespace Modules\Core\Payment\Filament\Resources\PaymentMethodResource\Pages; +use Filament\Actions\CreateAction; use Filament\Actions; use Filament\Resources\Pages\ListRecords; use Modules\Core\Payment\Filament\Resources\PaymentMethodResource; @@ -15,7 +16,7 @@ class ListPaymentMethods extends ListRecords protected function getHeaderActions(): array { return [ - Actions\CreateAction::make() + CreateAction::make() ->schema(PaymentMethodResource::getFormComponents()) ->fillForm(fn () => [ 'position' => (PaymentMethod::max('position') ?? 0) + 1, diff --git a/src/Privacy/Filament/Extensions/CustomerErasureActionsExtension.php b/src/Privacy/Filament/Extensions/CustomerErasureActionsExtension.php index a481ac4..795a59e 100644 --- a/src/Privacy/Filament/Extensions/CustomerErasureActionsExtension.php +++ b/src/Privacy/Filament/Extensions/CustomerErasureActionsExtension.php @@ -33,7 +33,7 @@ class CustomerErasureActionsExtension extends BaseExtension ->color('danger') ->requiresConfirmation() ->modalDescription('Opens a cancellable grace-period erasure request for this Customer account. No linked User\'s login is affected.') - ->form([ + ->schema([ Checkbox::make('immediate') ->label('Erase immediately (skip the 30-day grace period)') ->helperText('Staff-only, for a formal legal request or regulator inquiry that genuinely requires urgency — not a routine deletion. Runs synchronously, cannot be cancelled once submitted.') diff --git a/src/Privacy/Filament/Resources/DataErasureRequestResource.php b/src/Privacy/Filament/Resources/DataErasureRequestResource.php index 837169f..84b2fc2 100644 --- a/src/Privacy/Filament/Resources/DataErasureRequestResource.php +++ b/src/Privacy/Filament/Resources/DataErasureRequestResource.php @@ -2,13 +2,15 @@ namespace Modules\Core\Privacy\Filament\Resources; +use Filament\Schemas\Schema; +use Filament\Actions\ViewAction; +use Filament\Actions\Action; +use Modules\Core\Privacy\Filament\Resources\DataErasureRequestResource\Pages\ListDataErasureRequests; +use Modules\Core\Privacy\Filament\Resources\DataErasureRequestResource\Pages\ViewDataErasureRequest; use Filament\Forms\Components\KeyValue; use Filament\Forms\Components\Placeholder; use Filament\Forms\Components\TextInput; -use Filament\Forms\Form; use Filament\Resources\Resource; -use Filament\Tables\Actions\Action; -use Filament\Tables\Actions\ViewAction; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; @@ -30,17 +32,17 @@ class DataErasureRequestResource extends Resource { protected static ?string $model = DataErasureRequest::class; - protected static ?string $navigationIcon = 'heroicon-o-shield-exclamation'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-shield-exclamation'; - protected static ?string $navigationGroup = 'Privacy'; + protected static string | \UnitEnum | null $navigationGroup = 'Privacy'; protected static ?string $modelLabel = 'Erasure Request'; protected static ?string $pluralModelLabel = 'Erasure Requests'; - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form->schema([ + return $schema->components([ Placeholder::make('subject') ->label('Subject') ->content(fn (DataErasureRequest $record) => sprintf( @@ -139,7 +141,7 @@ class DataErasureRequestResource extends Resource ]; }), ]) - ->actions([ + ->recordActions([ ViewAction::make(), Action::make('cancel') ->label('Cancel') @@ -154,8 +156,8 @@ class DataErasureRequestResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListDataErasureRequests::route('/'), - 'view' => Pages\ViewDataErasureRequest::route('/{record}'), + 'index' => ListDataErasureRequests::route('/'), + 'view' => ViewDataErasureRequest::route('/{record}'), ]; } diff --git a/src/Privacy/Filament/Resources/DataExportRequestResource.php b/src/Privacy/Filament/Resources/DataExportRequestResource.php index ef59744..2b87982 100644 --- a/src/Privacy/Filament/Resources/DataExportRequestResource.php +++ b/src/Privacy/Filament/Resources/DataExportRequestResource.php @@ -2,12 +2,14 @@ namespace Modules\Core\Privacy\Filament\Resources; +use Filament\Schemas\Schema; +use Filament\Actions\ViewAction; +use Filament\Actions\Action; +use Modules\Core\Privacy\Filament\Resources\DataExportRequestResource\Pages\ListDataExportRequests; +use Modules\Core\Privacy\Filament\Resources\DataExportRequestResource\Pages\ViewDataExportRequest; use Filament\Forms\Components\Placeholder; use Filament\Forms\Components\TextInput; -use Filament\Forms\Form; use Filament\Resources\Resource; -use Filament\Tables\Actions\Action; -use Filament\Tables\Actions\ViewAction; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; @@ -25,17 +27,17 @@ class DataExportRequestResource extends Resource { protected static ?string $model = DataExportRequest::class; - protected static ?string $navigationIcon = 'heroicon-o-arrow-down-tray'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-arrow-down-tray'; - protected static ?string $navigationGroup = 'Privacy'; + protected static string | \UnitEnum | null $navigationGroup = 'Privacy'; protected static ?string $modelLabel = 'Export Request'; protected static ?string $pluralModelLabel = 'Export Requests'; - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form->schema([ + return $schema->components([ Placeholder::make('subject') ->label('Subject') ->content(fn (DataExportRequest $record) => sprintf( @@ -100,7 +102,7 @@ class DataExportRequestResource extends Resource ExportRequestStatus::Failed->value => 'Failed', ]), ]) - ->actions([ + ->recordActions([ ViewAction::make(), Action::make('download') ->label('Download') @@ -113,8 +115,8 @@ class DataExportRequestResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListDataExportRequests::route('/'), - 'view' => Pages\ViewDataExportRequest::route('/{record}'), + 'index' => ListDataExportRequests::route('/'), + 'view' => ViewDataExportRequest::route('/{record}'), ]; } diff --git a/src/Privacy/Jobs/ExportDataSubjectJob.php b/src/Privacy/Jobs/ExportDataSubjectJob.php index 12cf170..a9cbfef 100644 --- a/src/Privacy/Jobs/ExportDataSubjectJob.php +++ b/src/Privacy/Jobs/ExportDataSubjectJob.php @@ -2,6 +2,7 @@ namespace Modules\Core\Privacy\Jobs; +use Throwable; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; @@ -60,7 +61,7 @@ class ExportDataSubjectJob implements ShouldQueue )); } - public function failed(\Throwable $exception): void + public function failed(Throwable $exception): void { $this->request->update(['status' => ExportRequestStatus::Failed]); } diff --git a/src/Privacy/PrivacyManager.php b/src/Privacy/PrivacyManager.php index fcca184..dbea65b 100644 --- a/src/Privacy/PrivacyManager.php +++ b/src/Privacy/PrivacyManager.php @@ -2,6 +2,7 @@ namespace Modules\Core\Privacy; +use LogicException; use Illuminate\Contracts\Container\Container; use Modules\Core\Privacy\Contracts\PersonalDataProvider; @@ -41,7 +42,7 @@ class PrivacyManager $duplicates = array_diff_assoc($names, array_unique($names)); if ($duplicates !== []) { - throw new \LogicException( + throw new LogicException( 'Duplicate Modules\Core\Privacy provider name(s): '.implode(', ', array_unique($duplicates)) .'. Each provider registered in config(\'core.privacy.providers\') must return a unique name().' ); diff --git a/src/Privacy/RelationManagers/ErasureRequestsRelationManager.php b/src/Privacy/RelationManagers/ErasureRequestsRelationManager.php index 8d8fe0b..c8b4798 100644 --- a/src/Privacy/RelationManagers/ErasureRequestsRelationManager.php +++ b/src/Privacy/RelationManagers/ErasureRequestsRelationManager.php @@ -2,9 +2,9 @@ namespace Modules\Core\Privacy\RelationManagers; +use Filament\Actions\ViewAction; +use Filament\Actions\Action; use Filament\Resources\RelationManagers\RelationManager; -use Filament\Tables\Actions\Action; -use Filament\Tables\Actions\ViewAction; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; @@ -65,7 +65,7 @@ class ErasureRequestsRelationManager extends RelationManager ]), ]) ->headerActions([]) - ->actions([ + ->recordActions([ ViewAction::make() ->url(fn (DataErasureRequest $record) => DataErasureRequestResource::getUrl('view', ['record' => $record])), Action::make('cancel') diff --git a/src/Privacy/RelationManagers/ExportRequestsRelationManager.php b/src/Privacy/RelationManagers/ExportRequestsRelationManager.php index 2cec4c7..91ace45 100644 --- a/src/Privacy/RelationManagers/ExportRequestsRelationManager.php +++ b/src/Privacy/RelationManagers/ExportRequestsRelationManager.php @@ -2,9 +2,9 @@ namespace Modules\Core\Privacy\RelationManagers; +use Filament\Actions\ViewAction; +use Filament\Actions\Action; use Filament\Resources\RelationManagers\RelationManager; -use Filament\Tables\Actions\Action; -use Filament\Tables\Actions\ViewAction; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; @@ -56,7 +56,7 @@ class ExportRequestsRelationManager extends RelationManager ]), ]) ->headerActions([]) - ->actions([ + ->recordActions([ ViewAction::make() ->url(fn (DataExportRequest $record) => DataExportRequestResource::getUrl('view', ['record' => $record])), Action::make('download') diff --git a/src/Privacy/RelationManagers/UserRelationManager.php b/src/Privacy/RelationManagers/UserRelationManager.php index 2d9b6d5..f22016b 100644 --- a/src/Privacy/RelationManagers/UserRelationManager.php +++ b/src/Privacy/RelationManagers/UserRelationManager.php @@ -2,11 +2,11 @@ namespace Modules\Core\Privacy\RelationManagers; +use Filament\Actions\Action; use Filament\Forms\Components\Checkbox; use Filament\Infolists\Components\RepeatableEntry; use Filament\Infolists\Components\TextEntry; use Filament\Notifications\Notification; -use Filament\Tables\Actions\Action; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Model; use Modules\Core\Customer\RelationManagers\UserRelationManager as CoreUserRelationManager; @@ -31,7 +31,7 @@ class UserRelationManager extends CoreUserRelationManager { $table = parent::getDefaultTable($table); - return $table->actions([ + return $table->recordActions([ ...$table->getActions(), Action::make('privacyRequests') ->label('Privacy Requests') @@ -39,14 +39,14 @@ class UserRelationManager extends CoreUserRelationManager ->modalHeading(fn (Model $record) => "Privacy requests for {$record->name}") ->modalSubmitAction(false) ->modalCancelActionLabel('Close') - ->infolist(fn (Model $record) => $this->requestsInfolist($record)), + ->schema(fn (Model $record) => $this->requestsInfolist($record)), Action::make('requestErasure') ->label('Request Erasure') ->icon('heroicon-o-shield-exclamation') ->color('danger') ->requiresConfirmation() ->modalDescription('Opens a cancellable grace-period erasure request for this individual — deactivates their login and detaches them from every linked Customer account once it completes. No Customer account\'s own data is affected.') - ->form([ + ->schema([ Checkbox::make('immediate') ->label('Erase immediately (skip the 30-day grace period)') ->helperText('Staff-only, for a formal legal request or regulator inquiry that genuinely requires urgency — not a routine deletion. Runs synchronously, cannot be cancelled once submitted.') diff --git a/src/Shipping/Extensions/ShippingMethodResourceExtension.php b/src/Shipping/Extensions/ShippingMethodResourceExtension.php index d905058..3506fa9 100644 --- a/src/Shipping/Extensions/ShippingMethodResourceExtension.php +++ b/src/Shipping/Extensions/ShippingMethodResourceExtension.php @@ -47,7 +47,7 @@ class ShippingMethodResourceExtension extends ResourceExtension } if (in_array(HasChildComponents::class, class_uses_recursive($component), true)) { - $component->schema($this->replaceNameField($component->getChildComponents())); + $component->schema($this->replaceNameField($component->getDefaultChildComponents())); } return $component; @@ -158,7 +158,7 @@ class ShippingMethodResourceExtension extends ResourceExtension if (in_array(HasChildComponents::class, class_uses_recursive($component), true)) { $component->schema( - $this->replaceChargeByField($component->getChildComponents()) + $this->replaceChargeByField($component->getDefaultChildComponents()) ); } @@ -269,7 +269,7 @@ class ShippingMethodResourceExtension extends ResourceExtension if (in_array(HasChildComponents::class, class_uses_recursive($component), true)) { $component->schema( - $this->replaceDriverField($component->getChildComponents()) + $this->replaceDriverField($component->getDefaultChildComponents()) ); }