-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* better variable naming * add resize handler and menu button to toggle menu * remove comment * refactor to use common component for rendering items to unify styling changes * add some basic mobile nav handling * hide menu when option is selected * init size variables that we set on screen resize * refactor repeat code to function
- Loading branch information
Mike Zrimsek
authored
Apr 12, 2024
1 parent
f0816f8
commit c8e9500
Showing
7 changed files
with
229 additions
and
53 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
import React from "react"; | ||
|
||
// add a prop type interface with a property called onClick that is a function that returns void | ||
interface HamburgerButtonProps { | ||
onClick: () => void; | ||
} | ||
|
||
const HamburgerButton: React.FC<HamburgerButtonProps> = ({ onClick }) => { | ||
return ( | ||
<button | ||
className="navbar-burger flex items-center p-3 text-black dark:text-white" | ||
onClick={onClick} | ||
> | ||
<svg | ||
className="block h-4 w-4 fill-current" | ||
viewBox="0 0 20 20" | ||
xmlns="http://www.w3.org/2000/svg" | ||
> | ||
<path d="M0 3h20v2H0V3zm0 6h20v2H0V9zm0 6h20v2H0v-2z"></path> | ||
</svg> | ||
</button> | ||
); | ||
}; | ||
|
||
export default HamburgerButton; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
import React from "react"; | ||
|
||
import Menu from "~/components/Menu.component"; | ||
import { SCREEN_SIZES } from "~/models"; | ||
|
||
interface MessagesDisplayProps { | ||
children?: React.ReactNode; | ||
menuOptions: Array<string>; | ||
showMenu: boolean; | ||
setShowMenu: (showMenu: boolean) => void; | ||
hideAllOption?: boolean; | ||
selectedOption: string; | ||
setSelectedOption: (option: string) => void; | ||
getMessageCountForSelectedOption: (option: string) => number; | ||
title?: string; | ||
shouldRenderTopicAcknowledgementButton?: boolean; | ||
acknowledgeSelectedOption?: (option: string) => void; | ||
screenSize: number; | ||
} | ||
|
||
const MessagesDisplay: React.FC<MessagesDisplayProps> = ({ | ||
children, | ||
menuOptions, | ||
showMenu, | ||
setShowMenu, | ||
hideAllOption, | ||
selectedOption, | ||
setSelectedOption, | ||
getMessageCountForSelectedOption, | ||
shouldRenderTopicAcknowledgementButton, | ||
title, | ||
acknowledgeSelectedOption, | ||
screenSize, | ||
}) => { | ||
const shouldRenderAcknowledgementButton = | ||
acknowledgeSelectedOption && shouldRenderTopicAcknowledgementButton; | ||
|
||
const listClassNameBase = "px-4 py-4 overflow-auto justify-self-end"; | ||
const listClassName = showMenu | ||
? `${listClassNameBase} w-4/5` | ||
: `${listClassNameBase} w-full`; | ||
|
||
const menuClassNameBase = | ||
"border-r border-gray-200 fixed overflow-y-auto top-20 bottom-0"; | ||
const getMenuClassName = () => { | ||
if (screenSize >= SCREEN_SIZES.md) { | ||
return `${menuClassNameBase} w-1/5`; | ||
} | ||
return showMenu ? `${menuClassNameBase} w-full` : "hidden"; | ||
}; | ||
|
||
const shouldRenderList = screenSize >= SCREEN_SIZES.md || !showMenu; | ||
|
||
const handleOptionSelected = (option: string) => { | ||
// if the screen is small, hide the menu when an option is selected | ||
if (screenSize < SCREEN_SIZES.md) { | ||
setShowMenu(false); | ||
} | ||
setSelectedOption(option); | ||
}; | ||
|
||
return ( | ||
<div className="grid"> | ||
{showMenu && ( | ||
<div className={getMenuClassName()}> | ||
<Menu | ||
options={menuOptions} | ||
selectedOption={selectedOption} | ||
setSelectedOption={handleOptionSelected} | ||
getCountForOption={getMessageCountForSelectedOption} | ||
hideAllOption={hideAllOption} | ||
/> | ||
</div> | ||
)} | ||
{shouldRenderList && ( | ||
<div className={listClassName}> | ||
<div className="flex items-center justify-between"> | ||
{title && <h1 className="text-xl font-bold mb-0 mr-4">{title}</h1>} | ||
{shouldRenderAcknowledgementButton && ( | ||
<button | ||
className="px-4 py-2 rounded-md font-medium bg-blue-500 text-white hover:bg-gray-200 hover:text-gray-800" | ||
onClick={() => acknowledgeSelectedOption(selectedOption)} | ||
> | ||
Acknowledge Topic | ||
</button> | ||
)} | ||
</div> | ||
{children} | ||
</div> | ||
)} | ||
</div> | ||
); | ||
}; | ||
|
||
export default MessagesDisplay; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,9 @@ | ||
export const ALL_OPTIONS = "ALL_OPTIONS"; | ||
export const UNTAGGED = "untagged"; | ||
|
||
export const SCREEN_SIZES = { | ||
sm: 640, | ||
md: 768, | ||
lg: 1024, | ||
xl: 1280, | ||
}; |
Oops, something went wrong.