src/CompanyGroupBundle/Resources/views/pages/admin/_sidebar.html.twig line 1

Open in your IDE?
  1. {# Admin panel sidebar — included in all admin pages #}
  2. <div class="hb-admin-sidebar">
  3.     <div class="hb-admin-sidebar__brand">
  4.         <span class="hb-admin-sidebar__logo">🐝</span>
  5.         <span class="hb-admin-sidebar__title">HoneyBee Admin</span>
  6.     </div>
  7.     <nav class="hb-admin-nav">
  8.         <a href="{{ path('super_admin_command_center') }}"
  9.            class="hb-admin-nav__item {{ app.request.get('_route') == 'super_admin_command_center' ? 'is-active' : '' }}">
  10.             <i class="ft-grid"></i> Dashboard
  11.         </a>
  12.         <div class="hb-admin-nav__group-label">Quotes</div>
  13.         <a href="{{ path('admin_quotes_list') }}"
  14.            class="hb-admin-nav__item {{ app.request.get('_route') starts with 'admin_quote' ? 'is-active' : '' }}">
  15.             <i class="ft-file-text"></i> All Quotes
  16.             {% set _pending_quotes = pending_quotes_count|default(0) %}
  17.             {% if _pending_quotes > 0 %}
  18.                 <span class="hb-admin-badge">{{ _pending_quotes }}</span>
  19.             {% endif %}
  20.         </a>
  21.         <a href="{{ path('admin_quotes_list', {status: 'requested'}) }}"
  22.            class="hb-admin-nav__item hb-admin-nav__item--sub">
  23.             Requested
  24.         </a>
  25.         <a href="{{ path('admin_quotes_list', {status: 'modified'}) }}"
  26.            class="hb-admin-nav__item hb-admin-nav__item--sub">
  27.             Modified
  28.         </a>
  29.         <a href="{{ path('admin_quotes_list', {status: 'accepted'}) }}"
  30.            class="hb-admin-nav__item hb-admin-nav__item--sub">
  31.             Accepted
  32.         </a>
  33.         <a href="{{ path('admin_quotes_list', {status: 'rejected'}) }}"
  34.            class="hb-admin-nav__item hb-admin-nav__item--sub">
  35.             Rejected
  36.         </a>
  37.         <a href="{{ path('admin_quote_create') }}"
  38.            class="hb-admin-nav__item hb-admin-nav__item--action">
  39.             <i class="ft-plus-circle"></i> New Quote
  40.         </a>
  41.         <div class="hb-admin-nav__group-label">Invoices</div>
  42.         <a href="{{ path('admin_invoices_list') }}"
  43.            class="hb-admin-nav__item {{ app.request.get('_route') starts with 'admin_invoice' ? 'is-active' : '' }}">
  44.             <i class="ft-dollar-sign"></i> All Invoices
  45.         </a>
  46.         <a href="{{ path('admin_invoices_list', {status: 'pending'}) }}"
  47.            class="hb-admin-nav__item hb-admin-nav__item--sub">
  48.             Pending
  49.         </a>
  50.         <a href="{{ path('admin_invoices_list', {status: 'paid'}) }}"
  51.            class="hb-admin-nav__item hb-admin-nav__item--sub">
  52.             Paid
  53.         </a>
  54.         <a href="{{ path('admin_invoices_list', {status: 'failed'}) }}"
  55.            class="hb-admin-nav__item hb-admin-nav__item--sub">
  56.             Failed
  57.         </a>
  58.         <div class="hb-admin-nav__group-label">Companies</div>
  59.         <a href="{{ path('admin_companies_list') }}"
  60.            class="hb-admin-nav__item {{ app.request.get('_route') in ['admin_companies_list', 'admin_company_view', 'admin_company_settings', 'admin_company_module_settings'] ? 'is-active' : '' }}">
  61.             <i class="ft-briefcase"></i> Company List
  62.         </a>
  63.         <a href="{{ path('admin_companies_list') }}"
  64.            class="hb-admin-nav__item hb-admin-nav__item--sub {{ app.request.get('_route') in ['admin_company_settings', 'admin_company_module_settings'] ? 'is-active' : '' }}">
  65.             Company Settings
  66.         </a>
  67.         <a href="{{ path('owner_dashboard') }}"
  68.            class="hb-admin-nav__item {{ app.request.get('_route') starts with 'owner_' ? 'is-active' : '' }}">
  69.             <i class="ft-grid"></i> Owner Portal
  70.         </a>
  71.         <div class="hb-admin-nav__group-label">Catalog</div>
  72.         <a href="{{ path('central_product_control') }}"
  73.            class="hb-admin-nav__item {{ app.request.get('_route') starts with 'central_product_control' and app.request.get('_route') != 'central_product_control_duplicates' ? 'is-active' : '' }}">
  74.             <i class="ft-box"></i> Product Control
  75.         </a>
  76.         <a href="{{ path('central_product_control_duplicates') }}"
  77.            class="hb-admin-nav__item hb-admin-nav__item--sub {{ app.request.get('_route') == 'central_product_control_duplicates' ? 'is-active' : '' }}">
  78.             Duplicates &amp; Merge
  79.         </a>
  80.         <div class="hb-admin-nav__group-label">Support</div>
  81.         <a href="{{ path('ticket_list') }}"
  82.            class="hb-admin-nav__item {{ app.request.get('_route') starts with 'ticket' ? 'is-active' : '' }}">
  83.             <i class="ft-alert-circle"></i> All Tickets
  84.         </a>
  85.         <a href="{{ path('ticket_create') }}"
  86.            class="hb-admin-nav__item hb-admin-nav__item--action">
  87.             <i class="ft-plus-circle"></i> New Ticket
  88.         </a>
  89.     </nav>
  90. </div>
  91. <style>
  92. .hb-admin-sidebar {
  93.     position: fixed;
  94.     top: 0; left: 0;
  95.     width: 220px;
  96.     height: 100vh;
  97.     background: linear-gradient(180deg, #0f2952 0%, #1a3d6e 100%);
  98.     display: flex;
  99.     flex-direction: column;
  100.     z-index: 900;
  101.     overflow-y: auto;
  102.     box-shadow: 4px 0 18px rgba(15,41,82,0.18);
  103. }
  104. .hb-admin-sidebar__brand {
  105.     display: flex;
  106.     align-items: center;
  107.     gap: 10px;
  108.     padding: 22px 20px 18px;
  109.     border-bottom: 1px solid rgba(255,255,255,0.08);
  110. }
  111. .hb-admin-sidebar__logo { font-size: 1.5rem; }
  112. .hb-admin-sidebar__title {
  113.     font-size: 0.92rem;
  114.     font-weight: 700;
  115.     color: #fff;
  116.     letter-spacing: 0.02em;
  117. }
  118. .hb-admin-nav { padding: 10px 0 30px; flex: 1; }
  119. .hb-admin-nav__group-label {
  120.     font-size: 0.65rem;
  121.     font-weight: 700;
  122.     text-transform: uppercase;
  123.     letter-spacing: 0.12em;
  124.     color: rgba(255,255,255,0.35);
  125.     padding: 16px 20px 4px;
  126. }
  127. .hb-admin-nav__item {
  128.     display: flex;
  129.     align-items: center;
  130.     gap: 9px;
  131.     padding: 9px 20px;
  132.     color: rgba(255,255,255,0.72);
  133.     font-size: 0.865rem;
  134.     text-decoration: none;
  135.     transition: background 0.15s, color 0.15s;
  136.     border-radius: 0;
  137.     position: relative;
  138. }
  139. .hb-admin-nav__item:hover,
  140. .hb-admin-nav__item.is-active {
  141.     background: rgba(255,255,255,0.10);
  142.     color: #fff;
  143.     text-decoration: none;
  144. }
  145. .hb-admin-nav__item.is-active::before {
  146.     content: '';
  147.     position: absolute;
  148.     left: 0; top: 0; bottom: 0;
  149.     width: 3px;
  150.     background: #f5c518;
  151.     border-radius: 0 2px 2px 0;
  152. }
  153. .hb-admin-nav__item--sub {
  154.     padding-left: 40px;
  155.     font-size: 0.815rem;
  156.     color: rgba(255,255,255,0.52);
  157. }
  158. .hb-admin-nav__item--sub:hover { color: rgba(255,255,255,0.85); }
  159. .hb-admin-nav__item--action {
  160.     margin: 6px 12px;
  161.     padding: 8px 14px;
  162.     background: rgba(245,197,24,0.12);
  163.     border: 1px solid rgba(245,197,24,0.3);
  164.     border-radius: 7px;
  165.     color: #f5c518;
  166.     font-weight: 600;
  167. }
  168. .hb-admin-nav__item--action:hover {
  169.     background: rgba(245,197,24,0.22);
  170.     color: #f5c518;
  171. }
  172. .hb-admin-nav__divider {
  173.     height: 1px;
  174.     background: rgba(255,255,255,0.08);
  175.     margin: 10px 20px;
  176. }
  177. .hb-admin-badge {
  178.     margin-left: auto;
  179.     background: #e74c3c;
  180.     color: #fff;
  181.     font-size: 0.68rem;
  182.     font-weight: 700;
  183.     border-radius: 10px;
  184.     padding: 1px 7px;
  185.     min-width: 18px;
  186.     text-align: center;
  187. }
  188. /* Push main content right when sidebar is present */
  189. .hb-admin-layout { margin-left: 220px; }
  190. @media (max-width: 900px) {
  191.     .hb-admin-sidebar { display: none; }
  192.     .hb-admin-layout { margin-left: 0; }
  193. }
  194. </style>