mirror of
https://github.com/Unleash/unleash.git
synced 2025-02-04 00:18:01 +01:00
refactor: implement an event timeline context and provider (#8321)
https://linear.app/unleash/issue/2-2730/refactor-the-event-timeline-state-management-to-a-context-and-provider This PR refactors the state management for the **Event Timeline** component by introducing a context and provider to improve accessibility of state across the component tree.
This commit is contained in:
parent
2d8bc3268f
commit
5dae654022
@ -4,11 +4,11 @@ import { startOfDay, sub } from 'date-fns';
|
|||||||
import { useEventSearch } from 'hooks/api/getters/useEventSearch/useEventSearch';
|
import { useEventSearch } from 'hooks/api/getters/useEventSearch/useEventSearch';
|
||||||
import { EventTimelineEventGroup } from './EventTimelineEventGroup/EventTimelineEventGroup';
|
import { EventTimelineEventGroup } from './EventTimelineEventGroup/EventTimelineEventGroup';
|
||||||
import { EventTimelineHeader } from './EventTimelineHeader/EventTimelineHeader';
|
import { EventTimelineHeader } from './EventTimelineHeader/EventTimelineHeader';
|
||||||
import type { TimeSpanOption } from './useEventTimeline';
|
|
||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
import { useSignalQuery } from 'hooks/api/getters/useSignalQuery/useSignalQuery';
|
import { useSignalQuery } from 'hooks/api/getters/useSignalQuery/useSignalQuery';
|
||||||
import type { ISignalQuerySignal } from 'interfaces/signal';
|
import type { ISignalQuerySignal } from 'interfaces/signal';
|
||||||
import type { IEnvironment } from 'interfaces/environments';
|
import type { IEnvironment } from 'interfaces/environments';
|
||||||
|
import { useEventTimelineContext } from './EventTimelineContext';
|
||||||
|
|
||||||
export type TimelineEventType = 'signal' | EventSchemaType;
|
export type TimelineEventType = 'signal' | EventSchemaType;
|
||||||
|
|
||||||
@ -157,21 +157,8 @@ const getTimelineEvent = (
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
interface IEventTimelineProps {
|
export const EventTimeline = () => {
|
||||||
timeSpan: TimeSpanOption;
|
const { timeSpan, environment } = useEventTimelineContext();
|
||||||
environment: IEnvironment | undefined;
|
|
||||||
setTimeSpan: (timeSpan: TimeSpanOption) => void;
|
|
||||||
setEnvironment: (environment: IEnvironment) => void;
|
|
||||||
setOpen: (open: boolean) => void;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const EventTimeline = ({
|
|
||||||
timeSpan,
|
|
||||||
environment,
|
|
||||||
setTimeSpan,
|
|
||||||
setEnvironment,
|
|
||||||
setOpen,
|
|
||||||
}: IEventTimelineProps) => {
|
|
||||||
const endDate = new Date();
|
const endDate = new Date();
|
||||||
const startDate = sub(endDate, timeSpan.value);
|
const startDate = sub(endDate, timeSpan.value);
|
||||||
const endTime = endDate.getTime();
|
const endTime = endDate.getTime();
|
||||||
@ -246,14 +233,7 @@ export const EventTimeline = ({
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<StyledRow>
|
<StyledRow>
|
||||||
<EventTimelineHeader
|
<EventTimelineHeader totalEvents={events.length} />
|
||||||
totalEvents={events.length}
|
|
||||||
timeSpan={timeSpan}
|
|
||||||
setTimeSpan={setTimeSpan}
|
|
||||||
environment={environment}
|
|
||||||
setEnvironment={setEnvironment}
|
|
||||||
setOpen={setOpen}
|
|
||||||
/>
|
|
||||||
</StyledRow>
|
</StyledRow>
|
||||||
<StyledTimelineBody>
|
<StyledTimelineBody>
|
||||||
<StyledTimelineContainer>
|
<StyledTimelineContainer>
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
import { createContext, useContext } from 'react';
|
||||||
|
import type { IEventTimelineContext } from './EventTimelineProvider';
|
||||||
|
|
||||||
|
export const EventTimelineContext = createContext<
|
||||||
|
IEventTimelineContext | undefined
|
||||||
|
>(undefined);
|
||||||
|
|
||||||
|
export const useEventTimelineContext = (): IEventTimelineContext => {
|
||||||
|
const context = useContext(EventTimelineContext);
|
||||||
|
|
||||||
|
if (!context) {
|
||||||
|
throw new Error(
|
||||||
|
'useEventTimelineContext must be used within a EventTimelineProvider',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return context;
|
||||||
|
};
|
@ -7,10 +7,10 @@ import {
|
|||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||||
import { useEnvironments } from 'hooks/api/getters/useEnvironments/useEnvironments';
|
import { useEnvironments } from 'hooks/api/getters/useEnvironments/useEnvironments';
|
||||||
import type { IEnvironment } from 'interfaces/environments';
|
|
||||||
import { useEffect, useMemo } from 'react';
|
import { useEffect, useMemo } from 'react';
|
||||||
import { type TimeSpanOption, timeSpanOptions } from '../useEventTimeline';
|
import { timeSpanOptions } from '../EventTimelineProvider';
|
||||||
import CloseIcon from '@mui/icons-material/Close';
|
import CloseIcon from '@mui/icons-material/Close';
|
||||||
|
import { useEventTimelineContext } from '../EventTimelineContext';
|
||||||
|
|
||||||
const StyledCol = styled('div')(({ theme }) => ({
|
const StyledCol = styled('div')(({ theme }) => ({
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
@ -36,21 +36,13 @@ const StyledTimelineEventsCount = styled('span')(({ theme }) => ({
|
|||||||
|
|
||||||
interface IEventTimelineHeaderProps {
|
interface IEventTimelineHeaderProps {
|
||||||
totalEvents: number;
|
totalEvents: number;
|
||||||
timeSpan: TimeSpanOption;
|
|
||||||
setTimeSpan: (timeSpan: TimeSpanOption) => void;
|
|
||||||
environment: IEnvironment | undefined;
|
|
||||||
setEnvironment: (environment: IEnvironment) => void;
|
|
||||||
setOpen: (open: boolean) => void;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const EventTimelineHeader = ({
|
export const EventTimelineHeader = ({
|
||||||
totalEvents,
|
totalEvents,
|
||||||
timeSpan,
|
|
||||||
setTimeSpan,
|
|
||||||
environment,
|
|
||||||
setEnvironment,
|
|
||||||
setOpen,
|
|
||||||
}: IEventTimelineHeaderProps) => {
|
}: IEventTimelineHeaderProps) => {
|
||||||
|
const { timeSpan, environment, setOpen, setTimeSpan, setEnvironment } =
|
||||||
|
useEventTimelineContext();
|
||||||
const { environments } = useEnvironments();
|
const { environments } = useEnvironments();
|
||||||
|
|
||||||
const activeEnvironments = useMemo(
|
const activeEnvironments = useMemo(
|
||||||
|
@ -1,13 +1,33 @@
|
|||||||
|
import type { ReactNode } from 'react';
|
||||||
|
import { EventTimelineContext } from './EventTimelineContext';
|
||||||
import { useLocalStorageState } from 'hooks/useLocalStorageState';
|
import { useLocalStorageState } from 'hooks/useLocalStorageState';
|
||||||
import type { IEnvironment } from 'interfaces/environments';
|
import type { IEnvironment } from 'interfaces/environments';
|
||||||
|
|
||||||
export type TimeSpanOption = {
|
type TimeSpanOption = {
|
||||||
key: string;
|
key: string;
|
||||||
label: string;
|
label: string;
|
||||||
value: Duration;
|
value: Duration;
|
||||||
markers: string[];
|
markers: string[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type EventTimelineState = {
|
||||||
|
open: boolean;
|
||||||
|
timeSpan: TimeSpanOption;
|
||||||
|
environment?: IEnvironment;
|
||||||
|
signalsAlertSeen?: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
type EventTimelineStateSetters = {
|
||||||
|
setOpen: (open: boolean) => void;
|
||||||
|
setTimeSpan: (timeSpan: TimeSpanOption) => void;
|
||||||
|
setEnvironment: (environment: IEnvironment) => void;
|
||||||
|
setSignalsAlertSeen: (seen: boolean) => void;
|
||||||
|
};
|
||||||
|
|
||||||
|
export interface IEventTimelineContext
|
||||||
|
extends EventTimelineState,
|
||||||
|
EventTimelineStateSetters {}
|
||||||
|
|
||||||
export const timeSpanOptions: TimeSpanOption[] = [
|
export const timeSpanOptions: TimeSpanOption[] = [
|
||||||
{
|
{
|
||||||
key: '30m',
|
key: '30m',
|
||||||
@ -57,18 +77,18 @@ export const timeSpanOptions: TimeSpanOption[] = [
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
type EventTimelineState = {
|
|
||||||
open: boolean;
|
|
||||||
timeSpan: TimeSpanOption;
|
|
||||||
environment?: IEnvironment;
|
|
||||||
};
|
|
||||||
|
|
||||||
const defaultState: EventTimelineState = {
|
const defaultState: EventTimelineState = {
|
||||||
open: false,
|
open: false,
|
||||||
timeSpan: timeSpanOptions[0],
|
timeSpan: timeSpanOptions[0],
|
||||||
};
|
};
|
||||||
|
|
||||||
export const useEventTimeline = () => {
|
interface IEventTimelineProviderProps {
|
||||||
|
children: ReactNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const EventTimelineProvider = ({
|
||||||
|
children,
|
||||||
|
}: IEventTimelineProviderProps) => {
|
||||||
const [state, setState] = useLocalStorageState<EventTimelineState>(
|
const [state, setState] = useLocalStorageState<EventTimelineState>(
|
||||||
'event-timeline:v1',
|
'event-timeline:v1',
|
||||||
defaultState,
|
defaultState,
|
||||||
@ -81,12 +101,20 @@ export const useEventTimeline = () => {
|
|||||||
setState((prevState) => ({ ...prevState, [key]: value }));
|
setState((prevState) => ({ ...prevState, [key]: value }));
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
const contextValue: IEventTimelineContext = {
|
||||||
...state,
|
...state,
|
||||||
setOpen: (open: boolean) => setField('open', open),
|
setOpen: (open: boolean) => setField('open', open),
|
||||||
setTimeSpan: (timeSpan: TimeSpanOption) =>
|
setTimeSpan: (timeSpan: TimeSpanOption) =>
|
||||||
setField('timeSpan', timeSpan),
|
setField('timeSpan', timeSpan),
|
||||||
setEnvironment: (environment: IEnvironment) =>
|
setEnvironment: (environment: IEnvironment) =>
|
||||||
setField('environment', environment),
|
setField('environment', environment),
|
||||||
|
setSignalsAlertSeen: (seen: boolean) =>
|
||||||
|
setField('signalsAlertSeen', seen),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<EventTimelineContext.Provider value={contextValue}>
|
||||||
|
{children}
|
||||||
|
</EventTimelineContext.Provider>
|
||||||
|
);
|
||||||
};
|
};
|
@ -17,8 +17,8 @@ import { DraftBanner } from './DraftBanner/DraftBanner';
|
|||||||
import { ThemeMode } from 'component/common/ThemeMode/ThemeMode';
|
import { ThemeMode } from 'component/common/ThemeMode/ThemeMode';
|
||||||
import { NavigationSidebar } from './NavigationSidebar/NavigationSidebar';
|
import { NavigationSidebar } from './NavigationSidebar/NavigationSidebar';
|
||||||
import { useUiFlag } from 'hooks/useUiFlag';
|
import { useUiFlag } from 'hooks/useUiFlag';
|
||||||
import { useEventTimeline } from 'component/events/EventTimeline/useEventTimeline';
|
|
||||||
import { MainLayoutEventTimeline } from './MainLayoutEventTimeline';
|
import { MainLayoutEventTimeline } from './MainLayoutEventTimeline';
|
||||||
|
import { EventTimelineProvider } from 'component/events/EventTimeline/EventTimelineProvider';
|
||||||
|
|
||||||
interface IMainLayoutProps {
|
interface IMainLayoutProps {
|
||||||
children: ReactNode;
|
children: ReactNode;
|
||||||
@ -112,20 +112,11 @@ const MainLayoutContentContainer = styled('div')(({ theme }) => ({
|
|||||||
|
|
||||||
export const MainLayout = forwardRef<HTMLDivElement, IMainLayoutProps>(
|
export const MainLayout = forwardRef<HTMLDivElement, IMainLayoutProps>(
|
||||||
({ children }, ref) => {
|
({ children }, ref) => {
|
||||||
const { uiConfig, isOss } = useUiConfig();
|
const { uiConfig } = useUiConfig();
|
||||||
const projectId = useOptionalPathParam('projectId');
|
const projectId = useOptionalPathParam('projectId');
|
||||||
const { isChangeRequestConfiguredInAnyEnv } = useChangeRequestsEnabled(
|
const { isChangeRequestConfiguredInAnyEnv } = useChangeRequestsEnabled(
|
||||||
projectId || '',
|
projectId || '',
|
||||||
);
|
);
|
||||||
const eventTimeline = useUiFlag('eventTimeline') && !isOss();
|
|
||||||
const {
|
|
||||||
open: showTimeline,
|
|
||||||
timeSpan,
|
|
||||||
environment,
|
|
||||||
setOpen: setShowTimeline,
|
|
||||||
setTimeSpan,
|
|
||||||
setEnvironment,
|
|
||||||
} = useEventTimeline();
|
|
||||||
|
|
||||||
const sidebarNavigationEnabled = useUiFlag('navigationSidebar');
|
const sidebarNavigationEnabled = useUiFlag('navigationSidebar');
|
||||||
const StyledMainLayoutContent = sidebarNavigationEnabled
|
const StyledMainLayoutContent = sidebarNavigationEnabled
|
||||||
@ -135,22 +126,12 @@ export const MainLayout = forwardRef<HTMLDivElement, IMainLayoutProps>(
|
|||||||
const isSmallScreen = useMediaQuery(theme.breakpoints.down('lg'));
|
const isSmallScreen = useMediaQuery(theme.breakpoints.down('lg'));
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<EventTimelineProvider>
|
||||||
<SkipNavLink />
|
<SkipNavLink />
|
||||||
<ConditionallyRender
|
<ConditionallyRender
|
||||||
condition={sidebarNavigationEnabled}
|
condition={sidebarNavigationEnabled}
|
||||||
show={
|
show={<Header />}
|
||||||
<Header
|
elseShow={<OldHeader />}
|
||||||
showTimeline={showTimeline}
|
|
||||||
setShowTimeline={setShowTimeline}
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
elseShow={
|
|
||||||
<OldHeader
|
|
||||||
showTimeline={showTimeline}
|
|
||||||
setShowTimeline={setShowTimeline}
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<SkipNavTarget />
|
<SkipNavTarget />
|
||||||
@ -185,14 +166,7 @@ export const MainLayout = forwardRef<HTMLDivElement, IMainLayoutProps>(
|
|||||||
minWidth: 0,
|
minWidth: 0,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<MainLayoutEventTimeline
|
<MainLayoutEventTimeline />
|
||||||
open={eventTimeline && showTimeline}
|
|
||||||
setOpen={setShowTimeline}
|
|
||||||
timeSpan={timeSpan}
|
|
||||||
setTimeSpan={setTimeSpan}
|
|
||||||
environment={environment}
|
|
||||||
setEnvironment={setEnvironment}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<StyledMainLayoutContent>
|
<StyledMainLayoutContent>
|
||||||
<MainLayoutContentContainer ref={ref}>
|
<MainLayoutContentContainer ref={ref}>
|
||||||
@ -222,7 +196,7 @@ export const MainLayout = forwardRef<HTMLDivElement, IMainLayoutProps>(
|
|||||||
</MainLayoutContentWrapper>
|
</MainLayoutContentWrapper>
|
||||||
<Footer />
|
<Footer />
|
||||||
</MainLayoutContainer>
|
</MainLayoutContainer>
|
||||||
</>
|
</EventTimelineProvider>
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import { Box, styled } from '@mui/material';
|
import { Box, styled } from '@mui/material';
|
||||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||||
import { EventTimeline } from 'component/events/EventTimeline/EventTimeline';
|
import { EventTimeline } from 'component/events/EventTimeline/EventTimeline';
|
||||||
import type { TimeSpanOption } from 'component/events/EventTimeline/useEventTimeline';
|
import { useEventTimelineContext } from 'component/events/EventTimeline/EventTimelineContext';
|
||||||
import type { IEnvironment } from 'interfaces/environments';
|
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||||
|
import { useUiFlag } from 'hooks/useUiFlag';
|
||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
|
|
||||||
const StyledEventTimelineSlider = styled(Box)(({ theme }) => ({
|
const StyledEventTimelineSlider = styled(Box)(({ theme }) => ({
|
||||||
@ -17,25 +18,14 @@ const StyledEventTimelineWrapper = styled(Box)(({ theme }) => ({
|
|||||||
padding: theme.spacing(1.5, 2),
|
padding: theme.spacing(1.5, 2),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
interface IMainLayoutEventTimelineProps {
|
export const MainLayoutEventTimeline = () => {
|
||||||
open: boolean;
|
const { isOss } = useUiConfig();
|
||||||
timeSpan: TimeSpanOption;
|
const { open: showTimeline } = useEventTimelineContext();
|
||||||
environment: IEnvironment | undefined;
|
const eventTimelineEnabled = useUiFlag('eventTimeline') && !isOss();
|
||||||
setTimeSpan: (timeSpan: TimeSpanOption) => void;
|
|
||||||
setEnvironment: (environment: IEnvironment) => void;
|
|
||||||
setOpen: (open: boolean) => void;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const MainLayoutEventTimeline = ({
|
|
||||||
open,
|
|
||||||
timeSpan,
|
|
||||||
environment,
|
|
||||||
setTimeSpan,
|
|
||||||
setEnvironment,
|
|
||||||
setOpen,
|
|
||||||
}: IMainLayoutEventTimelineProps) => {
|
|
||||||
const [isInitialLoad, setIsInitialLoad] = useState(true);
|
const [isInitialLoad, setIsInitialLoad] = useState(true);
|
||||||
|
|
||||||
|
const open = showTimeline && eventTimelineEnabled;
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setIsInitialLoad(false);
|
setIsInitialLoad(false);
|
||||||
}, []);
|
}, []);
|
||||||
@ -52,15 +42,7 @@ export const MainLayoutEventTimeline = ({
|
|||||||
<StyledEventTimelineWrapper>
|
<StyledEventTimelineWrapper>
|
||||||
<ConditionallyRender
|
<ConditionallyRender
|
||||||
condition={open}
|
condition={open}
|
||||||
show={
|
show={<EventTimeline />}
|
||||||
<EventTimeline
|
|
||||||
timeSpan={timeSpan}
|
|
||||||
environment={environment}
|
|
||||||
setTimeSpan={setTimeSpan}
|
|
||||||
setEnvironment={setEnvironment}
|
|
||||||
setOpen={setOpen}
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
/>
|
/>
|
||||||
</StyledEventTimelineWrapper>
|
</StyledEventTimelineWrapper>
|
||||||
</StyledEventTimelineSlider>
|
</StyledEventTimelineSlider>
|
||||||
|
@ -34,6 +34,7 @@ import InviteLinkButton from './InviteLink/InviteLinkButton/InviteLinkButton';
|
|||||||
import { useUiFlag } from 'hooks/useUiFlag';
|
import { useUiFlag } from 'hooks/useUiFlag';
|
||||||
import { CommandBar } from 'component/commandBar/CommandBar';
|
import { CommandBar } from 'component/commandBar/CommandBar';
|
||||||
import LinearScaleIcon from '@mui/icons-material/LinearScale';
|
import LinearScaleIcon from '@mui/icons-material/LinearScale';
|
||||||
|
import { useEventTimelineContext } from 'component/events/EventTimeline/EventTimelineContext';
|
||||||
|
|
||||||
const HeaderComponent = styled(AppBar)(({ theme }) => ({
|
const HeaderComponent = styled(AppBar)(({ theme }) => ({
|
||||||
backgroundColor: theme.palette.background.paper,
|
backgroundColor: theme.palette.background.paper,
|
||||||
@ -97,12 +98,7 @@ const StyledIconButton = styled(IconButton)<{
|
|||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
interface IHeaderProps {
|
const Header = () => {
|
||||||
showTimeline: boolean;
|
|
||||||
setShowTimeline: (show: boolean) => void;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Header = ({ showTimeline, setShowTimeline }: IHeaderProps) => {
|
|
||||||
const { onSetThemeMode, themeMode } = useThemeMode();
|
const { onSetThemeMode, themeMode } = useThemeMode();
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|
||||||
@ -113,6 +109,8 @@ const Header = ({ showTimeline, setShowTimeline }: IHeaderProps) => {
|
|||||||
const toggleDrawer = () => setOpenDrawer((prev) => !prev);
|
const toggleDrawer = () => setOpenDrawer((prev) => !prev);
|
||||||
const celebatoryUnleash = useUiFlag('celebrateUnleash');
|
const celebatoryUnleash = useUiFlag('celebrateUnleash');
|
||||||
const eventTimeline = useUiFlag('eventTimeline') && !isOss();
|
const eventTimeline = useUiFlag('eventTimeline') && !isOss();
|
||||||
|
const { open: showTimeline, setOpen: setShowTimeline } =
|
||||||
|
useEventTimelineContext();
|
||||||
|
|
||||||
const routes = getRoutes();
|
const routes = getRoutes();
|
||||||
const adminRoutes = useAdminRoutes();
|
const adminRoutes = useAdminRoutes();
|
||||||
|
@ -37,6 +37,7 @@ import { useAdminRoutes } from 'component/admin/useAdminRoutes';
|
|||||||
import InviteLinkButton from './InviteLink/InviteLinkButton/InviteLinkButton';
|
import InviteLinkButton from './InviteLink/InviteLinkButton/InviteLinkButton';
|
||||||
import { useUiFlag } from 'hooks/useUiFlag';
|
import { useUiFlag } from 'hooks/useUiFlag';
|
||||||
import LinearScaleIcon from '@mui/icons-material/LinearScale';
|
import LinearScaleIcon from '@mui/icons-material/LinearScale';
|
||||||
|
import { useEventTimelineContext } from 'component/events/EventTimeline/EventTimelineContext';
|
||||||
|
|
||||||
const HeaderComponent = styled(AppBar)(({ theme }) => ({
|
const HeaderComponent = styled(AppBar)(({ theme }) => ({
|
||||||
backgroundColor: theme.palette.background.paper,
|
backgroundColor: theme.palette.background.paper,
|
||||||
@ -131,12 +132,7 @@ const StyledIconButton = styled(IconButton)<{
|
|||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
interface IOldHeaderProps {
|
const OldHeader = () => {
|
||||||
showTimeline: boolean;
|
|
||||||
setShowTimeline: (show: boolean) => void;
|
|
||||||
}
|
|
||||||
|
|
||||||
const OldHeader = ({ showTimeline, setShowTimeline }: IOldHeaderProps) => {
|
|
||||||
const { onSetThemeMode, themeMode } = useThemeMode();
|
const { onSetThemeMode, themeMode } = useThemeMode();
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const adminId = useId();
|
const adminId = useId();
|
||||||
@ -153,6 +149,8 @@ const OldHeader = ({ showTimeline, setShowTimeline }: IOldHeaderProps) => {
|
|||||||
const onConfigureClose = () => setConfigRef(null);
|
const onConfigureClose = () => setConfigRef(null);
|
||||||
const celebatoryUnleash = useUiFlag('celebrateUnleash');
|
const celebatoryUnleash = useUiFlag('celebrateUnleash');
|
||||||
const eventTimeline = useUiFlag('eventTimeline') && !isOss();
|
const eventTimeline = useUiFlag('eventTimeline') && !isOss();
|
||||||
|
const { open: showTimeline, setOpen: setShowTimeline } =
|
||||||
|
useEventTimelineContext();
|
||||||
|
|
||||||
const routes = getRoutes();
|
const routes = getRoutes();
|
||||||
const adminRoutes = useAdminRoutes();
|
const adminRoutes = useAdminRoutes();
|
||||||
|
Loading…
Reference in New Issue
Block a user