Files
core/src/Privacy/Filament/Extensions/CustomerErasureRelationsExtension.php
T

42 lines
1.8 KiB
PHP
Raw Normal View History

<?php
namespace Modules\Core\Privacy\Filament\Extensions;
use Lunar\Admin\Filament\Resources\CustomerResource\RelationManagers\UserRelationManager as BaseUserRelationManager;
use Lunar\Admin\Support\Extending\BaseExtension;
use Modules\Core\Privacy\RelationManagers\ErasureRequestsRelationManager;
use Modules\Core\Privacy\RelationManagers\ExportRequestsRelationManager;
use Modules\Core\Privacy\RelationManagers\UserRelationManager;
/**
* Adds the erasureRequests/exportRequests relation managers (see CorePlugin's
* Customer::erasureRequests()/exportRequests() macros) to the Customer resource's
* relation tabs — separate from CustomerErasureActionsExtension (headerActions)
* so each extension stays single-purpose. Unlike headerActions(), getRelations()
* genuinely is resource-keyed (called statically from the Resource class, not a
* page instance), so this is registered under CustomerResource::class itself in
* CorePlugin, not a page class.
*
* Also swaps Lunar's base UserRelationManager for Modules\Core\Privacy\
* RelationManagers\UserRelationManager, which adds a "Privacy Requests" row
* action per user — see that class's docblock for why this can't be a nested
* relation manager instead. Compares against Lunar's own base class, not any
* intermediate override, per docs/lunar.md "Overriding Lunar Relation Managers".
*/
class CustomerErasureRelationsExtension extends BaseExtension
{
public function getRelations(array $relations): array
{
$relations = array_map(
fn ($relation) => $relation === BaseUserRelationManager::class ? UserRelationManager::class : $relation,
$relations
);
return [
...$relations,
ErasureRequestsRelationManager::class,
ExportRequestsRelationManager::class,
];
}
}