refactor(addressbook): remove factory, extract filter-chip builder, split CSS
Remove AddressBookServicesFactory — all 8 dependencies already registered in DI container individually. Update container registrar to wire directly. Extract 42-line filter-chip builder from index().php into AddressBookService::buildCustomFieldChipMeta(). Split 576-line CSS file into functional layout (76 lines) and decorative banner animation (500 lines) with separate asset registration. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -5,25 +5,28 @@ namespace MintyPHP\Module\AddressBook;
|
||||
use MintyPHP\App\AppContainer;
|
||||
use MintyPHP\App\Container\ContainerRegistrar;
|
||||
use MintyPHP\Module\AddressBook\Service\AddressBookService;
|
||||
use MintyPHP\Module\AddressBook\Service\AddressBookServicesFactory;
|
||||
use MintyPHP\Service\CustomField\CustomFieldServicesFactory;
|
||||
use MintyPHP\Service\Directory\DirectoryServicesFactory;
|
||||
use MintyPHP\Service\Access\RoleService;
|
||||
use MintyPHP\Service\CustomField\UserCustomFieldValueService;
|
||||
use MintyPHP\Service\Org\DepartmentService;
|
||||
use MintyPHP\Service\Tenant\TenantScopeService;
|
||||
use MintyPHP\Service\User\UserServicesFactory;
|
||||
use MintyPHP\Service\Tenant\TenantService;
|
||||
use MintyPHP\Service\User\UserAccountService;
|
||||
use MintyPHP\Service\User\UserAssignmentService;
|
||||
use MintyPHP\Service\User\UserAvatarService;
|
||||
|
||||
final class AddressBookContainerRegistrar implements ContainerRegistrar
|
||||
{
|
||||
public function register(AppContainer $container): void
|
||||
{
|
||||
$container->set(AddressBookServicesFactory::class, static fn (AppContainer $c): AddressBookServicesFactory => new AddressBookServicesFactory(
|
||||
$c->get(UserServicesFactory::class),
|
||||
$c->get(DirectoryServicesFactory::class),
|
||||
$c->get(CustomFieldServicesFactory::class),
|
||||
$c->get(TenantScopeService::class)
|
||||
$container->set(AddressBookService::class, static fn (AppContainer $c): AddressBookService => new AddressBookService(
|
||||
$c->get(UserAccountService::class),
|
||||
$c->get(UserAssignmentService::class),
|
||||
$c->get(TenantService::class),
|
||||
$c->get(DepartmentService::class),
|
||||
$c->get(RoleService::class),
|
||||
$c->get(TenantScopeService::class),
|
||||
$c->get(UserCustomFieldValueService::class),
|
||||
$c->get(UserAvatarService::class)
|
||||
));
|
||||
|
||||
$container->set(AddressBookService::class, static fn (AppContainer $c): AddressBookService => $c
|
||||
->get(AddressBookServicesFactory::class)
|
||||
->createAddressBookService());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -312,6 +312,61 @@ class AddressBookService
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Transform custom field filter definitions into chip metadata for the grid UI.
|
||||
*
|
||||
* @param list<array<string, mixed>> $definitions
|
||||
* @return list<array<string, mixed>>
|
||||
*/
|
||||
public function buildCustomFieldChipMeta(array $definitions): array
|
||||
{
|
||||
$chips = [];
|
||||
foreach ($definitions as $definition) {
|
||||
$uuid = strtolower(trim((string) ($definition['uuid'] ?? '')));
|
||||
$type = strtolower(trim((string) ($definition['type'] ?? '')));
|
||||
$label = trim((string) ($definition['label'] ?? ''));
|
||||
$options = is_array($definition['options'] ?? null) ? $definition['options'] : [];
|
||||
if ($uuid === '' || $type === '' || $label === '') {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (in_array($type, ['select', 'boolean'], true)) {
|
||||
$optionMap = gridOptionMapFromItems($options);
|
||||
if ($type === 'boolean') {
|
||||
$optionMap = ['1' => t('Yes'), '0' => t('No')];
|
||||
}
|
||||
$chips[] = [
|
||||
'type' => 'scalar',
|
||||
'param' => 'cf_' . $uuid,
|
||||
'label' => $label,
|
||||
'options' => $optionMap,
|
||||
];
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($type === 'multiselect') {
|
||||
$chips[] = [
|
||||
'type' => 'multi_csv',
|
||||
'param' => 'cfm_' . $uuid,
|
||||
'label' => $label,
|
||||
'options' => gridOptionMapFromItems($options),
|
||||
];
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($type === 'date') {
|
||||
$chips[] = [
|
||||
'type' => 'date_range',
|
||||
'label' => $label,
|
||||
'from_param' => 'cfd_' . $uuid . '_from',
|
||||
'to_param' => 'cfd_' . $uuid . '_to',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return $chips;
|
||||
}
|
||||
|
||||
private function splitCommaValues($value): array
|
||||
{
|
||||
return array_values(array_filter(
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace MintyPHP\Module\AddressBook\Service;
|
||||
|
||||
use MintyPHP\Service\CustomField\CustomFieldServicesFactory;
|
||||
use MintyPHP\Service\Directory\DirectoryServicesFactory;
|
||||
use MintyPHP\Service\Tenant\TenantScopeService;
|
||||
use MintyPHP\Service\User\UserServicesFactory;
|
||||
|
||||
class AddressBookServicesFactory
|
||||
{
|
||||
private ?AddressBookService $addressBookService = null;
|
||||
|
||||
public function __construct(
|
||||
private readonly UserServicesFactory $userServicesFactory,
|
||||
private readonly DirectoryServicesFactory $directoryServicesFactory,
|
||||
private readonly CustomFieldServicesFactory $customFieldServicesFactory,
|
||||
private readonly TenantScopeService $tenantScopeService
|
||||
) {
|
||||
}
|
||||
|
||||
public function createAddressBookService(): AddressBookService
|
||||
{
|
||||
if ($this->addressBookService !== null) {
|
||||
return $this->addressBookService;
|
||||
}
|
||||
|
||||
$userFactory = $this->userServicesFactory;
|
||||
$directoryFactory = $this->directoryServicesFactory;
|
||||
return $this->addressBookService = new AddressBookService(
|
||||
$userFactory->createUserAccountService(),
|
||||
$userFactory->createUserAssignmentService(),
|
||||
$directoryFactory->createTenantService(),
|
||||
$directoryFactory->createDepartmentService(),
|
||||
$directoryFactory->createRoleService(),
|
||||
$this->tenantScopeService,
|
||||
$this->customFieldServicesFactory->createUserCustomFieldValueService(),
|
||||
$userFactory->createUserAvatarService()
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user