Skip to content

Commit f329468

Browse files
committed
minor #2356 [Icons] Support aliases in LockIconsCommand (smnandre)
This PR was squashed before being merged into the 2.x branch. Discussion ---------- [Icons] Support aliases in LockIconsCommand | Q | A | ------------- | --- | Bug fix? | no | New feature? | yes | Issues | Fix #2354 | License | MIT Alias icons are now all locked, and icon set aliases are supported too. Commits ------- 9ac91b8 [Icons] Support aliases in LockIconsCommand
2 parents 5fc5604 + 9ac91b8 commit f329468

File tree

4 files changed

+32
-7
lines changed

4 files changed

+32
-7
lines changed

src/Icons/src/Command/LockIconsCommand.php

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ public function __construct(
3737
private Iconify $iconify,
3838
private LocalSvgIconRegistry $registry,
3939
private IconFinder $iconFinder,
40+
private readonly array $iconAliases = [],
41+
private readonly array $iconSetAliases = [],
4042
) {
4143
parent::__construct();
4244
}
@@ -59,19 +61,25 @@ protected function execute(InputInterface $input, OutputInterface $output): int
5961
$count = 0;
6062

6163
$io->comment('Scanning project for icons...');
64+
$finderIcons = $this->iconFinder->icons();
6265

63-
foreach ($this->iconFinder->icons() as $icon) {
66+
if ($this->iconAliases) {
67+
$io->comment('Adding icons aliases...');
68+
}
69+
70+
foreach ([...array_values($this->iconAliases), ...array_values($finderIcons)] as $icon) {
6471
if (2 !== \count($parts = explode(':', $icon))) {
6572
continue;
6673
}
6774

68-
if (!$force && $this->registry->has($icon)) {
75+
[$prefix, $name] = $parts;
76+
$prefix = $this->iconSetAliases[$prefix] ?? $prefix;
77+
78+
if (!$force && $this->registry->has($prefix.':'.$name)) {
6979
// icon already imported
7080
continue;
7181
}
7282

73-
[$prefix, $name] = $parts;
74-
7583
if (!$this->iconify->hasIconSet($prefix)) {
7684
// not an icon set? example: "og:twitter"
7785
if ($io->isVeryVerbose()) {

src/Icons/src/DependencyInjection/UXIconsExtension.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,11 @@ protected function loadInternal(array $mergedConfig, ContainerBuilder $container
178178
}
179179
}
180180

181+
$container->getDefinition('.ux_icons.command.lock')
182+
->setArgument(3, $mergedConfig['aliases'])
183+
->setArgument(4, $iconSetAliases)
184+
;
185+
181186
if (!$container->getParameter('kernel.debug')) {
182187
$container->removeDefinition('.ux_icons.command.import');
183188
}

src/Icons/tests/Fixtures/TestKernel.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ protected function configureContainer(ContainerConfigurator $container): void
6060

6161
$container->extension('ux_icons', [
6262
'icon_dir' => '%kernel.project_dir%/tests/Fixtures/icons',
63+
'aliases' => [
64+
'foo' => 'lucide:circle',
65+
'bar' => 'lu:circle-off',
66+
],
6367
'icon_sets' => [
6468
'fla' => [
6569
'path' => '%kernel.project_dir%/tests/Fixtures/images/flags',

src/Icons/tests/Integration/Command/LockIconsCommandTest.php

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ final class LockIconsCommandTest extends KernelTestCase
2525
private const ICONS = [
2626
__DIR__.'/../../Fixtures/icons/iconamoon/3d-duotone.svg',
2727
__DIR__.'/../../Fixtures/icons/flag/eu-4x3.svg',
28+
__DIR__.'/../../Fixtures/icons/lucide/circle.svg',
29+
__DIR__.'/../../Fixtures/icons/lucide/circle-off.svg',
2830
];
2931

3032
/**
@@ -50,9 +52,11 @@ public function testImportFoundIcons(): void
5052
$this->executeConsoleCommand('ux:icons:lock')
5153
->assertSuccessful()
5254
->assertOutputContains('Scanning project for icons...')
55+
->assertOutputContains('Imported lucide:circle')
56+
->assertOutputContains('Imported lucide:circle-off')
5357
->assertOutputContains('Imported flag:eu-4x3')
5458
->assertOutputContains('Imported iconamoon:3d-duotone')
55-
->assertOutputContains('Imported 2 icons')
59+
->assertOutputContains('Imported 4 icons')
5660
;
5761

5862
foreach (self::ICONS as $icon) {
@@ -70,17 +74,21 @@ public function testForceImportFoundIcons(): void
7074
$this->executeConsoleCommand('ux:icons:lock')
7175
->assertSuccessful()
7276
->assertOutputContains('Scanning project for icons...')
77+
->assertOutputContains('Imported lucide:circle')
78+
->assertOutputContains('Imported lucide:circle-off')
7379
->assertOutputContains('Imported flag:eu-4x3')
7480
->assertOutputContains('Imported iconamoon:3d-duotone')
75-
->assertOutputContains('Imported 2 icons')
81+
->assertOutputContains('Imported 4 icons')
7682
;
7783

7884
$this->executeConsoleCommand('ux:icons:lock --force')
7985
->assertSuccessful()
8086
->assertOutputContains('Scanning project for icons...')
87+
->assertOutputContains('Imported lucide:circle')
88+
->assertOutputContains('Imported lucide:circle-off')
8189
->assertOutputContains('Imported flag:eu-4x3')
8290
->assertOutputContains('Imported iconamoon:3d-duotone')
83-
->assertOutputContains('Imported 2 icons')
91+
->assertOutputContains('Imported 4 icons')
8492
;
8593
}
8694
}

0 commit comments

Comments
 (0)