Compare commits

..

7 Commits

Author SHA1 Message Date
renovate[bot]
d554de89ca fix(deps): update dependency @fortawesome/react-fontawesome to v0.2.1 2024-05-20 07:06:56 +00:00
renovate[bot]
72be96c230 chore(deps): update dependency @edx/frontend-platform to v8.0.3 2024-05-20 07:06:23 +00:00
renovate[bot]
564f34a7c6 chore(deps): update dependency react-router-dom to v6.23.1 2024-05-13 06:55:33 +00:00
renovate[bot]
ab15b3d2bf chore(deps): update dependency @edx/frontend-platform to v8.0.2 2024-05-13 06:55:03 +00:00
Ahtesham Quraish
59db41c61e fix: provide onClick feature
Provide onClick facility for all the kind of menus
VAN-1914
2024-05-07 15:55:57 +01:00
renovate[bot]
0415c00353 chore(deps): update dependency react-router-dom to v6.23.0 2024-04-29 04:22:05 +00:00
renovate[bot]
9d01c074e0 chore(deps): update dependency @openedx/paragon to v22.3.1 2024-04-29 04:21:31 +00:00
5 changed files with 69 additions and 49 deletions

94
package-lock.json generated
View File

@@ -23,10 +23,10 @@
"devDependencies": {
"@edx/brand": "npm:@openedx/brand-openedx@^1.2.2",
"@edx/browserslist-config": "^1.1.1",
"@edx/frontend-platform": "8.0.0",
"@edx/frontend-platform": "8.0.3",
"@edx/reactifex": "^2.1.1",
"@openedx/frontend-build": "14.0.3",
"@openedx/paragon": "22.2.2",
"@openedx/paragon": "22.3.1",
"@testing-library/dom": "10.0.0",
"@testing-library/jest-dom": "5.17.0",
"@testing-library/react": "10.4.9",
@@ -37,7 +37,7 @@
"react": "17.0.2",
"react-dom": "17.0.2",
"react-redux": "7.2.9",
"react-router-dom": "6.22.3",
"react-router-dom": "6.23.1",
"react-test-renderer": "17.0.2",
"redux": "4.2.1",
"redux-saga": "1.3.0"
@@ -2213,15 +2213,16 @@
}
},
"node_modules/@edx/frontend-platform": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/@edx/frontend-platform/-/frontend-platform-8.0.0.tgz",
"integrity": "sha512-vcjo4khqi8Y3tUdhqfQ0iyJFg/kPFpuBjeDrs6nsLh5e8RT5ZGX4ImXhsdOAzJShcxapHHp3jrCtkmocslhP7g==",
"version": "8.0.3",
"resolved": "https://registry.npmjs.org/@edx/frontend-platform/-/frontend-platform-8.0.3.tgz",
"integrity": "sha512-eXmlaZm8G4Gr2Jtd6bzZJ3YfWNcXccTO9O+WR6mv/Lf/79zv7JX6uk14nOjtovZKQff1TvW87CqvsHbgrkeHzA==",
"dev": true,
"license": "AGPL-3.0",
"dependencies": {
"@cospired/i18n-iso-languages": "4.2.0",
"@formatjs/intl-pluralrules": "4.3.3",
"@formatjs/intl-relativetimeformat": "10.0.1",
"axios": "0.28.0",
"axios": "0.28.1",
"axios-cache-interceptor": "0.10.7",
"form-urlencoded": "4.1.4",
"glob": "7.2.3",
@@ -2235,7 +2236,7 @@
"lodash.merge": "4.6.2",
"lodash.snakecase": "4.1.1",
"pubsub-js": "1.9.4",
"react-intl": "6.6.5",
"react-intl": "6.6.6",
"universal-cookie": "4.0.4"
},
"bin": {
@@ -2245,7 +2246,7 @@
"peerDependencies": {
"@openedx/frontend-build": ">= 14.0.0",
"@openedx/paragon": ">= 21.5.7 < 23.0.0",
"prop-types": "^15.7.2",
"prop-types": ">=15.7.2 <16.0.0",
"react": "^16.9.0 || ^17.0.0",
"react-dom": "^16.9.0 || ^17.0.0",
"react-redux": "^7.1.1 || ^8.1.1",
@@ -2254,10 +2255,11 @@
}
},
"node_modules/@edx/frontend-platform/node_modules/axios": {
"version": "0.28.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.28.0.tgz",
"integrity": "sha512-Tu7NYoGY4Yoc7I+Npf9HhUMtEEpV7ZiLH9yndTCoNhcpBH0kwcvFbzYN9/u5QKI5A6uefjsNNWaz5olJVYS62Q==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.28.1.tgz",
"integrity": "sha512-iUcGA5a7p0mVb4Gm/sy+FSECNkPFT4y7wt6OM/CDpO/OnNCvSs3PoMG8ibrC9jRoGYU0gUK5pXVC4NPXq6lHRQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
@@ -2516,9 +2518,9 @@
}
},
"node_modules/@formatjs/intl": {
"version": "2.10.1",
"resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.10.1.tgz",
"integrity": "sha512-dsLG15U7xDi8yzKf4hcAWSsCaez3XrjTO2oaRHPyHtXLm1aEzYbDw6bClo/HMHu+iwS5GbDqT3DV+hYP2ylScg==",
"version": "2.10.2",
"resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.10.2.tgz",
"integrity": "sha512-raPGWr3JRv3neXV78SqPFrGC05fIbhhNzVghHNxFde27ls2KkXiMhtP7HBybjGpikVSjjhdhaZto+4p1vmm9bQ==",
"dev": true,
"dependencies": {
"@formatjs/ecma402-abstract": "1.18.2",
@@ -2526,7 +2528,7 @@
"@formatjs/icu-messageformat-parser": "2.7.6",
"@formatjs/intl-displaynames": "6.6.6",
"@formatjs/intl-listformat": "7.5.5",
"intl-messageformat": "10.5.11",
"intl-messageformat": "10.5.12",
"tslib": "^2.4.0"
},
"peerDependencies": {
@@ -2748,9 +2750,10 @@
}
},
"node_modules/@fortawesome/react-fontawesome": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz",
"integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==",
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.1.tgz",
"integrity": "sha512-ldr5QO2MneAX5W5WBCYB2pZp/PiHDD1hy9YEBLcXUyJb0qnO86oP8RU+CgmYVSH/R4Dbe2ernhcWOrcgaKD9NQ==",
"license": "MIT",
"dependencies": {
"prop-types": "^15.8.1"
},
@@ -3651,10 +3654,17 @@
}
},
"node_modules/@openedx/paragon": {
"version": "22.2.2",
"resolved": "https://registry.npmjs.org/@openedx/paragon/-/paragon-22.2.2.tgz",
"integrity": "sha512-kHljO3JjLQzkk16aOIUN+LbSVMF9a6jkO0G9CmAYhYRDZMpWlP8qUz5uWk7pJvQdCoqD2dL9Cp9YqhWLXCa2kQ==",
"version": "22.3.1",
"resolved": "https://registry.npmjs.org/@openedx/paragon/-/paragon-22.3.1.tgz",
"integrity": "sha512-5+hHOKO8W9H1gwjYnj2iMqZ1cgPzNE4FWl+31vwtU1SXS9eGQLb5ukJJKHIk0A4Tt0CoLgb544wwDI+BkyfIpA==",
"dev": true,
"workspaces": [
"example",
"component-generator",
"www",
"icons",
"dependent-usage-analyzer"
],
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^6.1.1",
"@fortawesome/react-fontawesome": "^0.1.18",
@@ -3871,9 +3881,9 @@
"dev": true
},
"node_modules/@remix-run/router": {
"version": "1.15.3",
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.3.tgz",
"integrity": "sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==",
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.1.tgz",
"integrity": "sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==",
"dev": true,
"engines": {
"node": ">=14.0.0"
@@ -10910,9 +10920,9 @@
}
},
"node_modules/intl-messageformat": {
"version": "10.5.11",
"resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.11.tgz",
"integrity": "sha512-eYq5fkFBVxc7GIFDzpFQkDOZgNayNTQn4Oufe8jw6YY6OHVw70/4pA3FyCsQ0Gb2DnvEJEMmN2tOaXUGByM+kg==",
"version": "10.5.12",
"resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.12.tgz",
"integrity": "sha512-izl0uxhy/melhw8gP2r8pGiVieviZmM4v5Oqx3c1/R7g9cwER2smmGfSjcIsp8Y3Q53bfciL/gkxacJRx/dUvg==",
"dev": true,
"dependencies": {
"@formatjs/ecma402-abstract": "1.18.2",
@@ -15443,20 +15453,20 @@
}
},
"node_modules/react-intl": {
"version": "6.6.5",
"resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.6.5.tgz",
"integrity": "sha512-OErDPbGqus0QKVj77MGCC9Plbnys3CDQrq6Lw41c60pmeTdn41AhoS1SIzXG6SUlyF7qNN2AVqfrrIvHUgSyLQ==",
"version": "6.6.6",
"resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.6.6.tgz",
"integrity": "sha512-dKXQNUrhZTlCp8uelYW8PHiM4saNKyLmHCfsJYWK0N/kZ/Ien35wjPHB8x9yQcTJbeN/hBOmb4x16iKUrdL9MA==",
"dev": true,
"dependencies": {
"@formatjs/ecma402-abstract": "1.18.2",
"@formatjs/icu-messageformat-parser": "2.7.6",
"@formatjs/intl": "2.10.1",
"@formatjs/intl": "2.10.2",
"@formatjs/intl-displaynames": "6.6.6",
"@formatjs/intl-listformat": "7.5.5",
"@types/hoist-non-react-statics": "^3.3.1",
"@types/react": "16 || 17 || 18",
"hoist-non-react-statics": "^3.3.2",
"intl-messageformat": "10.5.11",
"intl-messageformat": "10.5.12",
"tslib": "^2.4.0"
},
"peerDependencies": {
@@ -15649,12 +15659,12 @@
}
},
"node_modules/react-router": {
"version": "6.22.3",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.3.tgz",
"integrity": "sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==",
"version": "6.23.1",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.1.tgz",
"integrity": "sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==",
"dev": true,
"dependencies": {
"@remix-run/router": "1.15.3"
"@remix-run/router": "1.16.1"
},
"engines": {
"node": ">=14.0.0"
@@ -15664,13 +15674,13 @@
}
},
"node_modules/react-router-dom": {
"version": "6.22.3",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.3.tgz",
"integrity": "sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==",
"version": "6.23.1",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.1.tgz",
"integrity": "sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==",
"dev": true,
"dependencies": {
"@remix-run/router": "1.15.3",
"react-router": "6.22.3"
"@remix-run/router": "1.16.1",
"react-router": "6.23.1"
},
"engines": {
"node": ">=14.0.0"

View File

@@ -35,10 +35,10 @@
"devDependencies": {
"@edx/brand": "npm:@openedx/brand-openedx@^1.2.2",
"@edx/browserslist-config": "^1.1.1",
"@edx/frontend-platform": "8.0.0",
"@edx/frontend-platform": "8.0.3",
"@edx/reactifex": "^2.1.1",
"@openedx/frontend-build": "14.0.3",
"@openedx/paragon": "22.2.2",
"@openedx/paragon": "22.3.1",
"@testing-library/dom": "10.0.0",
"@testing-library/jest-dom": "5.17.0",
"@testing-library/react": "10.4.9",
@@ -49,7 +49,7 @@
"react": "17.0.2",
"react-dom": "17.0.2",
"react-redux": "7.2.9",
"react-router-dom": "6.22.3",
"react-router-dom": "6.23.1",
"react-test-renderer": "17.0.2",
"redux": "4.2.1",
"redux-saga": "1.3.0"

View File

@@ -33,6 +33,7 @@ class DesktopHeader extends React.Component {
submenuContent,
disabled,
isActive,
onClick,
} = menuItem;
if (type === 'item') {
@@ -41,6 +42,7 @@ class DesktopHeader extends React.Component {
key={`${type}-${content}`}
className={`nav-link${disabled ? ' disabled' : ''}${isActive ? ' active' : ''}`}
href={href}
onClick={onClick || null}
>
{content}
</a>
@@ -49,7 +51,7 @@ class DesktopHeader extends React.Component {
return (
<Menu key={`${type}-${content}`} tag="div" className="nav-item" respondToPointerEvents>
<MenuTrigger tag="a" className="nav-link d-inline-flex align-items-center" href={href}>
<MenuTrigger onClick={onClick || null} tag="a" className="nav-link d-inline-flex align-items-center" href={href}>
{content} <CaretIcon role="img" aria-hidden focusable="false" />
</MenuTrigger>
<MenuContent className="pin-left pin-right shadow py-2">
@@ -94,12 +96,13 @@ class DesktopHeader extends React.Component {
<React.Fragment key={index}>
{group.heading && <div className="dropdown-header" role="heading" aria-level="1">{group.heading}</div>}
{group.items.map(({
type, content, href, disabled, isActive,
type, content, href, disabled, isActive, onClick,
}) => (
<a
className={`dropdown-${type}${isActive ? ' active' : ''}${disabled ? ' disabled' : ''}`}
key={`${type}-${content}`}
href={href}
onClick={onClick || null}
>
{content}
</a>
@@ -184,6 +187,7 @@ DesktopHeader.propTypes = {
href: PropTypes.string,
content: PropTypes.string,
isActive: PropTypes.bool,
onClick: PropTypes.func,
})),
})),
loggedOutItems: PropTypes.arrayOf(PropTypes.shape({

View File

@@ -33,6 +33,7 @@ class MobileHeader extends React.Component {
submenuContent,
disabled,
isActive,
onClick,
} = menuItem;
if (type === 'item') {
@@ -41,6 +42,7 @@ class MobileHeader extends React.Component {
key={`${type}-${content}`}
className={`nav-link${disabled ? ' disabled' : ''}${isActive ? ' active' : ''}`}
href={href}
onClick={onClick || null}
>
{content}
</a>
@@ -49,7 +51,7 @@ class MobileHeader extends React.Component {
return (
<Menu key={`${type}-${content}`} tag="div" className="nav-item">
<MenuTrigger tag="a" role="button" tabIndex="0" className="nav-link">
<MenuTrigger onClick={onClick || null} tag="a" role="button" tabIndex="0" className="nav-link">
{content}
</MenuTrigger>
<MenuContent className="position-static pin-left pin-right py-2">
@@ -75,12 +77,13 @@ class MobileHeader extends React.Component {
return userMenu.map((group) => (
group.items.map(({
type, content, href, disabled, isActive,
type, content, href, disabled, isActive, onClick,
}) => (
<li className="nav-item" key={`${type}-${content}`}>
<a
className={`nav-link${isActive ? ' active' : ''}${disabled ? ' disabled' : ''}`}
href={href}
onClick={onClick || null}
>
{content}
</a>
@@ -192,6 +195,7 @@ MobileHeader.propTypes = {
href: PropTypes.string,
content: PropTypes.string,
isActive: PropTypes.bool,
onClick: PropTypes.func,
})),
})),
loggedOutItems: PropTypes.arrayOf(PropTypes.shape({

View File

@@ -33,6 +33,7 @@ exports[`<Header /> renders correctly for anonymous desktop 1`] = `
<a
className="nav-link"
href="http://localhost:18000/dashboard"
onClick={null}
>
Courses
</a>
@@ -229,6 +230,7 @@ exports[`<Header /> renders correctly for authenticated desktop 1`] = `
<a
className="nav-link"
href="http://localhost:18000/dashboard"
onClick={null}
>
Courses
</a>