Skip to content

Commit 348b5c5

Browse files
#254 Docs menu key fix (#262)
* refactor(layout.tsx): removed deprecated function and used suported one * fix(menu.tsx, types.ts): added key property for menu list and fixed menu broken links Resolved issue where links were not updating on the client side despite a context update, due to reliance on the initial value from the server-side rendered component fix #254 * fix(menu.tsx, layout.tsx): used server side location object for setting theme state on server render #254 * refactor(layout.tsx): changed toLocaleLowerCase for toLowerCase #254 * refactor(menu.tsx): changed toLocaleLowerCase for toLowerCase #254 * Update apps/website/src/types.ts --------- Co-authored-by: Giorgio Boa <[email protected]>
1 parent 3922041 commit 348b5c5

File tree

2 files changed

+53
-16
lines changed

2 files changed

+53
-16
lines changed

apps/website/src/components/menu/menu.tsx

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ type Props = {
1010

1111
export const Menu = component$<Props>(({ onClose$ }) => {
1212
const appState = useContext(APP_STATE);
13+
1314
const menu = [
1415
{
1516
label: 'Accordion',
@@ -27,7 +28,10 @@ export const Menu = component$<Props>(({ onClose$ }) => {
2728
label: 'Breadcrumb',
2829
path: `/docs/${appState.theme.toLowerCase()}/breadcrumb`,
2930
},
30-
{ label: 'Button', path: `/docs/${appState.theme.toLowerCase()}/button` },
31+
{
32+
label: 'Button',
33+
path: `/docs/${appState.theme.toLowerCase()}/button`,
34+
},
3135
{
3236
label: 'ButtonGroup',
3337
path: `/docs/${appState.theme.toLowerCase()}/button-group`,
@@ -41,21 +45,48 @@ export const Menu = component$<Props>(({ onClose$ }) => {
4145
label: 'Navigation Bar',
4246
path: `/docs/${appState.theme.toLowerCase()}/navigation-bar`,
4347
},
44-
{ label: 'Drawer', path: `/docs/${appState.theme.toLowerCase()}/drawer` },
48+
{
49+
label: 'Drawer',
50+
path: `/docs/${appState.theme.toLowerCase()}/drawer`,
51+
},
4552
{ label: 'Input Phone', path: `/docs/headless/input-phone` },
46-
{ label: 'Rating', path: `/docs/${appState.theme.toLowerCase()}/rating` },
47-
{ label: 'Radio', path: `/docs/${appState.theme.toLowerCase()}/radio` },
48-
{ label: 'Popover', path: `/docs/${appState.theme.toLowerCase()}/popover` },
49-
{ label: 'Select', path: `/docs/${appState.theme.toLowerCase()}/select` },
53+
{
54+
label: 'Rating',
55+
path: `/docs/${appState.theme.toLowerCase()}/rating`,
56+
},
57+
{
58+
label: 'Radio',
59+
path: `/docs/${appState.theme.toLowerCase()}/radio`,
60+
},
61+
{
62+
label: 'Popover',
63+
path: `/docs/${appState.theme.toLowerCase()}/popover`,
64+
},
65+
{
66+
label: 'Select',
67+
path: `/docs/${appState.theme.toLowerCase()}/select`,
68+
},
5069
{
5170
label: 'Spinner',
5271
path: `/docs/${appState.theme.toLowerCase()}/spinner`,
5372
},
5473
{ label: 'Tabs', path: `/docs/${appState.theme.toLowerCase()}/tabs` },
55-
{ label: 'Toast', path: `/docs/${appState.theme.toLowerCase()}/toast` },
56-
{ label: 'Toggle', path: `/docs/${appState.theme.toLowerCase()}/toggle` },
57-
{ label: 'Tooltip', path: `/docs/${appState.theme.toLowerCase()}/tooltip` },
58-
{ label: 'Slider', path: `/docs/${appState.theme.toLowerCase()}/slider` },
74+
{
75+
label: 'Toast',
76+
path: `/docs/${appState.theme.toLowerCase()}/toast`,
77+
},
78+
{
79+
label: 'Toggle',
80+
path: `/docs/${appState.theme.toLowerCase()}/toggle`,
81+
},
82+
{
83+
label: 'Tooltip',
84+
path: `/docs/${appState.theme.toLowerCase()}/tooltip`,
85+
},
86+
{
87+
label: 'Slider',
88+
path: `/docs/${appState.theme.toLowerCase()}/slider`,
89+
},
5990
{
6091
label: 'Pagination',
6192
path: `/docs/${appState.theme.toLowerCase()}/pagination`,
@@ -109,8 +140,8 @@ export const Menu = component$<Props>(({ onClose$ }) => {
109140
<ul class="py-2 px-4">
110141
{menu
111142
.sort((a, b) => (a.label > b.label ? 1 : -1))
112-
.map((menuItem) => (
113-
<li>
143+
.map((menuItem, index) => (
144+
<li key={index}>
114145
<Link href={menuItem.path}>
115146
<span class="text-lg" onClick$={onChangePage}>
116147
{menuItem.label}

apps/website/src/routes/layout.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import {
22
component$,
33
Slot,
4-
useBrowserVisibleTask$,
54
useContextProvider,
65
useStore,
6+
useTask$,
7+
useVisibleTask$,
78
} from '@builder.io/qwik';
9+
import { useLocation } from '@builder.io/qwik-city';
810
import Header from '../components/header/header';
911
import { APP_STATE } from '../constants';
1012
import { AppState } from '../types';
@@ -14,14 +16,18 @@ export default component$(() => {
1416
darkMode: false,
1517
theme: 'NOT_DEFINED',
1618
});
19+
const loc = useLocation();
1720
useContextProvider(APP_STATE, state);
1821

19-
useBrowserVisibleTask$(() => {
22+
useVisibleTask$(() => {
2023
state.darkMode = localStorage.getItem('theme') === 'dark';
24+
});
25+
26+
useTask$(() => {
2127
state.theme =
22-
location.pathname.indexOf('/headless') !== -1
28+
loc.url.pathname.indexOf('/headless') !== -1
2329
? 'HEADLESS'
24-
: location.pathname.indexOf('/material') !== -1
30+
: loc.url.pathname.indexOf('/material') !== -1
2531
? 'MATERIAL'
2632
: 'DAISY';
2733
});

0 commit comments

Comments
 (0)