Skip to content

Commit

Permalink
Collapse navbar on click
Browse files Browse the repository at this point in the history
Close #8
  • Loading branch information
nonylene committed Feb 11, 2024
1 parent 0d994a1 commit df92266
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 6 deletions.
36 changes: 31 additions & 5 deletions app/navbar.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
import { Collapse } from "./utils/bootstrap.client";
import { Link, NavLink } from "@remix-run/react";
import { useRef } from "react";

const onItemClick = (nav: HTMLElement | null) => {
if (nav !== null) {
Collapse.getInstance(nav)?.hide();
}
};

export default function Navbar() {
const collapseRef = useRef<HTMLDivElement>(null);

return (
<nav
className="navbar navbar-expand-sm bg-dark fixed-top"
Expand All @@ -20,18 +30,34 @@ export default function Navbar() {
<span className="navbar-toggler-icon"></span>
</button>

<div id="navbar" className="collapse navbar-collapse">
<div id="navbar" className="collapse navbar-collapse" ref={collapseRef}>
<div className="navbar-nav">
<NavLink to="/search/pukiwiki" className="nav-item nav-link">
<NavLink
to="/search/pukiwiki"
className="nav-item nav-link"
onClick={() => onItemClick(collapseRef.current)}
>
PukiWiki
</NavLink>
<NavLink to="/search/scrapbox" className="nav-item nav-link">
<NavLink
to="/search/scrapbox"
className="nav-item nav-link"
onClick={() => onItemClick(collapseRef.current)}
>
Scrapbox
</NavLink>
<NavLink to="/search/mail" className="nav-item nav-link">
<NavLink
to="/search/mail"
className="nav-item nav-link"
onClick={() => onItemClick(collapseRef.current)}
>
Mail
</NavLink>
<NavLink to="/help" className="nav-item nav-link">
<NavLink
to="/help"
className="nav-item nav-link"
onClick={() => onItemClick(collapseRef.current)}
>
Help
</NavLink>
</div>
Expand Down
7 changes: 7 additions & 0 deletions app/utils/bootstrap.client.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// Bootstrap のコードは server で評価した瞬間に document がなくエラーになるので、
// クライアントのみで動かすために client.tsx で import する
// Note: サーバー側で export したモジュールを使おうとすると undefined になる
// https://remix.run/docs/en/main/file-conventions/-client
import { Collapse } from "bootstrap";

export { Collapse };
11 changes: 10 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
"devDependencies": {
"@remix-run/dev": "^2.4.1",
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
"@types/bootstrap": "^5.2.10",
"@types/react": "^18.2.20",
"@types/react-dom": "^18.2.7",
"@typescript-eslint/eslint-plugin": "^6.7.4",
Expand Down

0 comments on commit df92266

Please sign in to comment.