Skip to content

Commit

Permalink
feat: handle module icons
Browse files Browse the repository at this point in the history
  • Loading branch information
didoda committed Jul 24, 2023
1 parent 301c4cf commit aab55f3
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 18 deletions.
80 changes: 73 additions & 7 deletions src/View/Helper/LayoutHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
namespace App\View\Helper;

use App\Utility\Translate;
use Cake\Core\Configure;
use Cake\Utility\Hash;
use Cake\View\Helper;

Expand All @@ -24,6 +25,7 @@
* @property \App\View\Helper\LinkHelper $Link
* @property \App\View\Helper\PermsHelper $Perms
* @property \App\View\Helper\SystemHelper $System
* @property \Cake\View\Helper\UrlHelper $Url
*/
class LayoutHelper extends Helper
{
Expand All @@ -32,7 +34,7 @@ class LayoutHelper extends Helper
*
* @var array
*/
public $helpers = ['Editors', 'Html', 'Link', 'Perms', 'System'];
public $helpers = ['Editors', 'Html', 'Link', 'Perms', 'System', 'Url'];

/**
* Is Dashboard
Expand Down Expand Up @@ -110,6 +112,71 @@ public function title(): string
return empty($title) ? $name : sprintf('%s | %s', $title, $name);
}

/**
* Return dashboard module link
*
* @param string $name The module name
* @param array $module The module data
* @return string
*/
public function dashboardModuleLink(string $name, array $module): string
{
if (in_array($name, ['trash', 'users'])) {
return '';
}
$label = $name === 'objects' ? __('All objects') : Hash::get($module, 'label', $name);
$route = (array)Hash::get($module, 'route');
$param = empty($route) ? ['_name' => 'modules:list', 'object_type' => $name, 'plugin' => null] : $route;

return sprintf(
'<a href="%s" class="%s"><span>%s</span>%s</a>',
$this->Url->build($param),
sprintf('dashboard-item has-background-module-%s %s', $name, Hash::get($module, 'class', '')),
$this->tr($label),
$this->moduleIcon($name, $module)
);
}

/**
* Return module icon.
*
* @param string $name The module name
* @param array $module The module data
* @return string
*/
public function moduleIcon(string $name, array $module): string
{
if (Hash::get($module, 'hints.multiple_types') && !Hash::get($module, 'class')) {
return '<Icon icon="carbon:grid"></Icon>';
}
$icon = (string)Configure::read(sprintf('Modules.%s.icon', $name));
if (!empty($icon)) {
return sprintf('<Icon icon="%s"></Icon>', $icon);
}
$map = [
'audio' => 'carbon:document-audio',
'categories' => 'carbon:collapse-categories',
'documents' => 'carbon:document',
'events' => 'carbon:event',
'files' => 'carbon:document-blank',
'folders' => 'carbon:tree-view',
'images' => 'carbon:image',
'links' => 'carbon:link',
'locations' => 'carbon:location',
'news' => 'carbon:calendar',
'profiles' => 'carbon:person',
'publications' => 'carbon:wikis',
'tags' => 'carbon:tag',
'users' => 'carbon:user',
'videos' => 'carbon:video',
];
if (!in_array($name, array_keys($map))) {
return '';
}

return sprintf('<Icon icon="%s"></Icon>', $map[$name]);
}

/**
* Return module css class(es).
* If object is locked by parents, return base class plus 'locked' class.
Expand Down Expand Up @@ -149,13 +216,12 @@ public function moduleLink(): string
$name = $currentModule['name'];
$label = Hash::get($currentModule, 'label', $name);

return $this->Html->link(
return sprintf(
'<a href="%s" class="%s"><span class="mr-05">%s</span>%s</a>',
$this->Url->build(['_name' => 'modules:list', 'object_type' => $name]),
sprintf('is-flex align-center justify-center space-between wrap has-background-module-%s', $name),
$this->tr($label),
['_name' => 'modules:list', 'object_type' => $name],
[
'id' => 'module-icon',
'class' => sprintf('has-background-module-%s', $name),
]
$this->moduleIcon($name, $currentModule)
);
}

Expand Down
12 changes: 1 addition & 11 deletions templates/Pages/Dashboard/index.twig
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,7 @@
<section class="dashboard-section">
<div class="dashboard-items">
{% for name, module in modules %}
{% if not in_array(name, ['trash', 'users']) %}
{% set module = name == 'objects' ? {'label': __('All objects')}|merge(module) : module %}
{% set class = 'dashboard-item has-background-module-%s %s'|format(name, module.class|default('')) %}
{% set url = module.route ? Url.build(module.route) : Url.build({ '_name': 'modules:list', 'object_type': name, 'plugin': null }) %}
<a href="{{ url }}" class="{{ class }}">
<span>{{ Layout.tr(module.label|default(name)) }}</span>
{% if module.hints.multiple_types and not module.class %}<Icon icon="carbon:grid"></Icon>{% endif %}
{% if name == 'publications' %}<Icon icon="carbon:wikis"></Icon>{% endif %}
{% if name == 'folders' %}<Icon icon="carbon:tree-view"></Icon>{% endif %}
</a>
{% endif %}
{{ Layout.dashboardModuleLink(name, module)|raw }}
{% endfor %}
</div>
</section>
Expand Down

0 comments on commit aab55f3

Please sign in to comment.