|
| 1 | +import { useEffect, useRef, useState } from 'react'; |
1 | 2 | import * as Accordion from '@radix-ui/react-accordion'; |
2 | 3 | import cn from '@ably/ui/core/utils/cn'; |
3 | 4 | import Icon from '@ably/ui/core/Icon'; |
4 | | -import { useEffect, useRef, useState } from 'react'; |
5 | 5 |
|
6 | 6 | import { productData } from 'src/data'; |
7 | 7 | import { NavProductContent, NavProductPage } from 'src/data/nav/types'; |
@@ -136,44 +136,48 @@ const LeftSidebar = ({ inHeader = false }: LeftSidebarProps) => { |
136 | 136 | setOpenProduct(value); |
137 | 137 | }} |
138 | 138 | > |
139 | | - {Object.entries(productData).map(([productKey, productObj], index) => ( |
140 | | - <Accordion.Item |
141 | | - key={productKey} |
142 | | - value={`item-${index}`} |
143 | | - className="border-b border-neutral-300 dark:border-neutral-1000" |
144 | | - > |
145 | | - <Accordion.Trigger |
146 | | - className={cn( |
147 | | - 'group/accordion-trigger', |
148 | | - accordionTriggerClassName, |
149 | | - 'data-[state=open]:border-b data-[state=open]:sticky data-[state=open]:top-0 data-[state=open]:text-neutral-1300 dark:data-[state=open]:text-neutral-000 [&[data-state=open]_svg]:text-orange-600 h-12 px-4 py-3 font-bold', |
150 | | - openProduct === `item-${index}` && 'text-neutral-1300 dark:text-neutral-000', |
151 | | - )} |
| 139 | + {Object.entries(productData).map(([productKey, productObj], index) => { |
| 140 | + const isActive = openProduct === `item-${index}`; |
| 141 | + |
| 142 | + return ( |
| 143 | + <Accordion.Item |
| 144 | + key={productKey} |
| 145 | + value={`item-${index}`} |
| 146 | + className="border-b border-neutral-300 dark:border-neutral-1000" |
152 | 147 | > |
153 | | - <div className="flex-1 flex items-center gap-2"> |
| 148 | + <Accordion.Trigger |
| 149 | + className={cn( |
| 150 | + 'group/accordion-trigger', |
| 151 | + accordionTriggerClassName, |
| 152 | + 'data-[state=open]:border-b data-[state=open]:sticky data-[state=open]:top-0 data-[state=open]:text-neutral-1300 dark:data-[state=open]:text-neutral-000 [&[data-state=open]_svg]:text-orange-600 h-12 px-4 py-3 font-bold', |
| 153 | + isActive && 'text-neutral-1300 dark:text-neutral-000', |
| 154 | + )} |
| 155 | + > |
| 156 | + <div className="flex-1 flex items-center gap-2"> |
| 157 | + <Icon |
| 158 | + name={isActive ? productObj.nav.icon.open : productObj.nav.icon.closed} |
| 159 | + additionalCSS={cn( |
| 160 | + iconClassName, |
| 161 | + isActive |
| 162 | + ? 'text-orange-600' |
| 163 | + : 'text-neutral-900 dark:text-neutral-400 group-hover/accordion-trigger:text-neutral-1300 dark:group-hover/accordion-trigger:text-neutral-000', |
| 164 | + )} |
| 165 | + size="20px" |
| 166 | + /> |
| 167 | + <span>{productObj.nav.name}</span> |
| 168 | + </div> |
154 | 169 | <Icon |
155 | | - name={openProduct === `item-${index}` ? productObj.nav.icon.open : productObj.nav.icon.closed} |
156 | | - additionalCSS={cn( |
157 | | - iconClassName, |
158 | | - openProduct === `item-${index}` |
159 | | - ? 'text-orange-600' |
160 | | - : 'text-neutral-900 dark:text-neutral-400 group-hover/accordion-trigger:text-neutral-1300 dark:group-hover/accordion-trigger:text-neutral-000', |
161 | | - )} |
162 | | - size="20px" |
| 170 | + name="icon-gui-chevron-right-outline" |
| 171 | + additionalCSS={cn(iconClassName, '!text-neutral-900 dark:!text-neutral-400')} |
| 172 | + size="12px" |
163 | 173 | /> |
164 | | - <span>{productObj.nav.name}</span> |
165 | | - </div> |
166 | | - <Icon |
167 | | - name="icon-gui-chevron-right-outline" |
168 | | - additionalCSS={cn(iconClassName, '!text-neutral-900 dark:!text-neutral-400')} |
169 | | - size="12px" |
170 | | - /> |
171 | | - </Accordion.Trigger> |
172 | | - <Accordion.Content className={cn(accordionContentClassName, 'px-2 py-3')}> |
173 | | - <ChildAccordion content={productObj.nav.content} layer={0} tree={[index]} /> |
174 | | - </Accordion.Content> |
175 | | - </Accordion.Item> |
176 | | - ))} |
| 174 | + </Accordion.Trigger> |
| 175 | + <Accordion.Content className={cn(accordionContentClassName, 'px-2 py-3')}> |
| 176 | + <ChildAccordion content={productObj.nav.content} layer={0} tree={[index]} /> |
| 177 | + </Accordion.Content> |
| 178 | + </Accordion.Item> |
| 179 | + ); |
| 180 | + })} |
177 | 181 | </Accordion.Root> |
178 | 182 | </div> |
179 | 183 | ); |
|
0 commit comments