mirror of
				https://github.com/blakeblackshear/frigate.git
				synced 2025-10-27 10:52:11 +01:00 
			
		
		
		
	add tabbed buttons component
This commit is contained in:
		
							parent
							
								
									4449bc5292
								
							
						
					
					
						commit
						16ef432228
					
				@ -1,26 +1,34 @@
 | 
				
			|||||||
import { h } from 'preact';
 | 
					import { h } from 'preact';
 | 
				
			||||||
import { useCallback } from 'preact/hooks';
 | 
					import { useCallback, useState } from 'preact/hooks';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function ButtonsTabbed({ titles = [], viewMode, setViewMode }) {
 | 
					export default function ButtonsTabbed({
 | 
				
			||||||
  const className = 'text-gray-600 py-0 px-4 block hover:text-gray-500';
 | 
					  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`
 | 
				
			||||||
 | 
					}) {
 | 
				
			||||||
 | 
					  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]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const handleClick = useCallback((i) => {
 | 
					  const handleClick = useCallback((i) => {
 | 
				
			||||||
    setViewMode(titles[i]);
 | 
					    setSelected(i);
 | 
				
			||||||
  }, [viewMode]); // eslint-disable-line react-hooks/exhaustive-deps
 | 
					    setViewMode && setViewMode(viewModes[i]);
 | 
				
			||||||
 | 
					    setHeader && setHeader(getHeader(i));
 | 
				
			||||||
 | 
					  }, [setViewMode, setHeader, setSelected, viewModes, getHeader]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  setHeader && setHeader(getHeader(selected));
 | 
				
			||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <nav className="flex justify-end">
 | 
					    <nav className="flex justify-end">
 | 
				
			||||||
      {titles.map((title, i) => {
 | 
					      {viewModes.map((item, i) => {
 | 
				
			||||||
        return (
 | 
					        return (
 | 
				
			||||||
          <button
 | 
					          <button onClick={() => handleClick(i)} className={i === selected ? selectedClassName : className}>
 | 
				
			||||||
            autoFocus={!i}
 | 
					            {captitalize(item)}
 | 
				
			||||||
            onClick={() => handleClick(i)}
 | 
					 | 
				
			||||||
            className={viewMode === title
 | 
					 | 
				
			||||||
              ? `${className} focus:outline-none border-b-2 font-medium border-gray-500`
 | 
					 | 
				
			||||||
              : className
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
          >
 | 
					 | 
				
			||||||
            {`${title.charAt(0).toUpperCase()}${title.slice(1)}`}
 | 
					 | 
				
			||||||
          </button>
 | 
					          </button>
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
      })}
 | 
					      })}
 | 
				
			||||||
 | 
				
			|||||||
@ -113,7 +113,7 @@ export default function Camera({ camera }) {
 | 
				
			|||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <div className="space-y-4">
 | 
					    <div className="space-y-4">
 | 
				
			||||||
      <Heading size="2xl">{camera}</Heading>
 | 
					      <Heading size="2xl">{camera}</Heading>
 | 
				
			||||||
      <ButtonsTabbed titles={['live', 'debug']} setViewMode={setViewMode} viewMode={viewMode} />
 | 
					      <ButtonsTabbed viewModes={['live', 'debug']} setViewMode={setViewMode} />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      {player}
 | 
					      {player}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user