frigate/web/src/components/ButtonsTabbed.jsx

76 lines
2.3 KiB
React
Raw Normal View History

2021-07-14 16:32:19 +03:00
import { h } from 'preact';
2021-07-16 11:51:21 +03:00
import { useCallback, useState } from 'preact/hooks';
import Link from './Link';
2021-07-14 16:32:19 +03:00
2021-07-16 11:51:21 +03:00
export default function ButtonsTabbed({
viewModes = [''],
setViewMode = null,
setHeader = null,
headers = [''],
className = 'text-gray-600 py-0 px-4 block hover:text-gray-500',
selectedClassName = `${className} focus:outline-none border-b-2 font-medium border-gray-500`,
camera='',
currentPage=''
2021-07-16 11:51:21 +03:00
}) {
const [selected, setSelected] = useState(0);
const captitalize = (str) => { return (`${str.charAt(0).toUpperCase()}${str.slice(1)}`); };
const getHeader = useCallback((i) => {
return (headers.length === viewModes.length ? headers[i] : captitalize(viewModes[i]));
}, [headers, viewModes]);
2021-07-14 16:32:19 +03:00
const handleClick = useCallback((i) => {
2021-07-16 11:51:21 +03:00
setSelected(i);
setViewMode && setViewMode(viewModes[i]);
setHeader && setHeader(getHeader(i));
}, [setViewMode, setHeader, setSelected, viewModes, getHeader]);
2021-07-14 16:32:19 +03:00
2021-07-16 11:51:21 +03:00
setHeader && setHeader(getHeader(selected));
if(currentPage === '' || currentPage === 'live') {
return (
<nav className="flex justify-end">
{viewModes.map((item, i) => {
return (
item === 'recordings' ? (
<Link className={className} href={`/recording/${camera}`}>Recordings</Link>
) : (
<button onClick={() => handleClick(i)} className={i === selected ? selectedClassName : className}>
{captitalize(item)}
</button>
)
)
})}
</nav>
);
} else if (currentPage === 'recording') {
return (
<nav className="flex justify-end">
{viewModes.map((item, i) => {
return (
item === 'live' ? (
<Link className={className} href={`/cameras/${camera}`}>Live</Link>
) : (
<button onClick={() => handleClick(i)} className={selectedClassName}>
{captitalize(item)}
</button>
)
)
})}
</nav>
);
} else {
return (
<nav className="flex justify-end">
{viewModes.map((item, i) => {
return (
<button onClick={() => handleClick(i)} className={i === selected ? selectedClassName : className}>
{captitalize(item)}
</button>
);
})}
</nav>
);
}
2021-07-14 16:32:19 +03:00
}