import React, { useState, useRef, useEffect, useCallback } from 'react'; import { useTheme } from '@emotion/react'; import { StyledSegment } from './style'; import { ECalendarMode } from '../../SACalendar/types'; export interface ISegment { label1: string; label2: string; isPressed: boolean; setPressed: (val: boolean) => void; } export const Segment = ({ label1, label2, isPressed = false, setPressed, }: ISegment) => { const colors = useTheme(); // const [isPressed, setPressed] = useState(false); const [width, setWidth] = useState(100); const [changeLabel, setChangeLabel] = useState(false); const ref = useRef(null); useEffect(() => { setTimeout(() => { setChangeLabel(isPressed); }, 40); }, [isPressed]); useEffect(() => { if (ref.current) { // @ts-ignore: Object is possibly 'null'. setWidth(ref.current.offsetWidth); } }, [ref.current]); return (
setPressed(false)}> {label1} setPressed(true)}> {label2} setPressed(!isPressed)}> {changeLabel ? label2 : label1}
); }; export const SegmentMultiple = ({ mode, setMode, }: { mode: ECalendarMode; setMode: (mode: ECalendarMode) => void; }) => { const colors = useTheme(); const [width, setWidth] = useState(100); const getId = useCallback((mode: ECalendarMode) => `view_button_${mode}`, []); useEffect(() => { const item = document.getElementById(getId(mode)); if (item) { setWidth(item.offsetLeft); } }, [mode]); return (
{Object.values(ECalendarMode).map((item) => ( setMode(item)} > {item} ))} {mode}
); };