Skip to content

Commit cdf444a

Browse files
Merge pull request #827 from bcbogdan/fix/recipe-selector
Fix recipe selector
2 parents 2318206 + c751140 commit cdf444a

File tree

1 file changed

+43
-21
lines changed

1 file changed

+43
-21
lines changed

v2/src/theme/NavbarItem/recipeSelector.js

Lines changed: 43 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
import React, { useState, useEffect } from "react";
1+
import React, { useCallback, useState, useEffect, useRef } from "react";
22
import clsx from "clsx";
33
import CloseIcon from "../../../static/img/recipe_selector_close.png";
4-
import OpenIcon from "../../../static/img/recipe_selector_open.png";
54

6-
import { useLocation } from '@docusaurus/router';
5+
import { useLocation } from "@docusaurus/router";
76

87
export default function RecipeSelector(props) {
9-
const { pathname } = useLocation()
8+
const { pathname } = useLocation();
109
const currDocs = pathname.split("/")[2];
10+
const ref = useRef(null);
1111
const [open, setOpen] = useState(false);
1212
const activeSelector = (id) => {
1313
return id === currDocs;
@@ -42,25 +42,33 @@ export default function RecipeSelector(props) {
4242
return "Select Recipe";
4343
}
4444
};
45+
const closeDropdownMenuOnOusideClick = useCallback((e) => {
46+
if (ref.current && !ref.current.contains(e.target)) {
47+
setOpen(false);
48+
}
49+
}, []);
50+
4551
useEffect(() => {
46-
const closeDropDown = (e) => {
47-
if (e.target.classList[0]?.startsWith("recipe_selector")) {
48-
// no-op
49-
} else {
50-
setOpen(false);
51-
}
52-
};
53-
window.addEventListener("click", closeDropDown);
52+
window.addEventListener("click", closeDropdownMenuOnOusideClick);
53+
return () =>
54+
window.removeEventListener("click", closeDropdownMenuOnOusideClick);
5455
}, []);
56+
5557
return (
56-
<div className="recipe_selector">
58+
<div className="recipe_selector" ref={ref}>
5759
<div
5860
onClick={() => setOpen(!open)}
5961
className={clsx("recipe_selector__dropdown", { open: open })}
6062
>
6163
<span>{label()}</span>
6264
<div>
63-
<img src={CloseIcon} style={{ transform: open ? "rotate(180deg)" : "", transition: "all 250ms linear" }} />
65+
<img
66+
src={CloseIcon}
67+
style={{
68+
transform: open ? "rotate(180deg)" : "",
69+
transition: "all 250ms linear",
70+
}}
71+
/>
6472
</div>
6573
</div>
6674
<div
@@ -77,7 +85,9 @@ export default function RecipeSelector(props) {
7785
active: activeSelector("thirdpartyemailpassword"),
7886
})}
7987
>
80-
<a href="/docs/thirdpartyemailpassword/introduction">Email password + Social / Enterprise Login</a>
88+
<a href="/docs/thirdpartyemailpassword/introduction">
89+
Email password + Social / Enterprise Login
90+
</a>
8191
</li>
8292
<li
8393
className={clsx("recipe_selector__menu__auth_methods_items", {
@@ -91,28 +101,36 @@ export default function RecipeSelector(props) {
91101
active: activeSelector("emailpassword"),
92102
})}
93103
>
94-
<a href="/docs/emailpassword/introduction">Email password Login</a>
104+
<a href="/docs/emailpassword/introduction">
105+
Email password Login
106+
</a>
95107
</li>
96108
<li
97109
className={clsx("recipe_selector__menu__auth_methods_items", {
98110
active: activeSelector("thirdpartypasswordless"),
99111
})}
100112
>
101-
<a href="/docs/thirdpartypasswordless/introduction">Social / Enterprise Login + Passwordless</a>
113+
<a href="/docs/thirdpartypasswordless/introduction">
114+
Social / Enterprise Login + Passwordless
115+
</a>
102116
</li>
103117
<li
104118
className={clsx("recipe_selector__menu__auth_methods_items", {
105119
active: activeSelector("thirdparty"),
106120
})}
107121
>
108-
<a href="/docs/thirdparty/introduction">Social / Enterprise Login</a>
122+
<a href="/docs/thirdparty/introduction">
123+
Social / Enterprise Login
124+
</a>
109125
</li>
110126
<li
111127
className={clsx("recipe_selector__menu__auth_methods_items", {
112128
active: activeSelector("phonepassword"),
113129
})}
114130
>
115-
<a href="/docs/phonepassword/introduction">Phone Password Login</a>
131+
<a href="/docs/phonepassword/introduction">
132+
Phone Password Login
133+
</a>
116134
</li>
117135
</ul>
118136
</div>
@@ -152,14 +170,18 @@ export default function RecipeSelector(props) {
152170
active: activeSelector("microservice_auth"),
153171
})}
154172
>
155-
<a href="/docs/microservice_auth/introduction">Microservice Authentication</a>
173+
<a href="/docs/microservice_auth/introduction">
174+
Microservice Authentication
175+
</a>
156176
</li>
157177
<li
158178
className={clsx("recipe_selector__menu__add_ons_items", {
159179
active: activeSelector("multitenancy"),
160180
})}
161181
>
162-
<a href="/docs/multitenancy/introduction">Multi tenancy / organizations</a>
182+
<a href="/docs/multitenancy/introduction">
183+
Multi tenancy / organizations
184+
</a>
163185
</li>
164186
</ul>
165187
</div>

0 commit comments

Comments
 (0)