diff --git a/src/components/Header/SubHeader.tsx b/src/components/Header/SubHeader.tsx index 765933bc..c713113e 100644 --- a/src/components/Header/SubHeader.tsx +++ b/src/components/Header/SubHeader.tsx @@ -132,7 +132,7 @@ const RefreshNow: FC = () => { } = useHeaderContext(); const onRefresh = () => { - if (subLogSelectedTimeRange.get().includes('Past')) { + if (subLogSelectedTimeRange.get().includes('last')) { const now = dayjs(); const timeDiff = subLogQuery.get().endTime.getTime() - subLogQuery.get().startTime.getTime(); subLogQuery.set((state) => { diff --git a/src/components/Navbar/index.tsx b/src/components/Navbar/index.tsx index 496d4f1c..89e538f0 100644 --- a/src/components/Navbar/index.tsx +++ b/src/components/Navbar/index.tsx @@ -1,9 +1,20 @@ import type { NavbarProps as MantineNavbarProps } from '@mantine/core'; -import { Navbar as MantineNavbar, NavLink, Select, Anchor, Card, Box, Modal, Text, Image, Button, TextInput } from '@mantine/core'; +import { + Navbar as MantineNavbar, + NavLink, + Select, + Anchor, + Card, + Box, + Modal, + Text, + Image, + Button, + TextInput, +} from '@mantine/core'; import { IconZoomCode, IconReportAnalytics, - IconCheck, IconFileAlert, IconReload, IconHelpCircle, @@ -14,12 +25,12 @@ import { IconSettings, IconTrash, } from '@tabler/icons-react'; -import { FC, useEffect, useState } from 'react'; +import { FC, useEffect } from 'react'; import docImage from '@/assets/images/doc.webp'; import githubLogo from '@/assets/images/github-logo.webp'; import slackLogo from '@/assets/images/slack-logo.webp'; import { useNavbarStyles } from './styles'; -import { useLocation, useParams } from 'react-router-dom'; +import { useParams } from 'react-router-dom'; import { useGetLogStreamList } from '@/hooks/useGetLogStreamList'; import { notifications } from '@mantine/notifications'; import { useNavigate } from 'react-router-dom'; @@ -40,39 +51,30 @@ const links = [ type NavbarProps = Omit; const Navbar: FC = (props) => { - const [username] = useLocalStorage({ key: 'username', getInitialValueInEffect: false }); const navigate = useNavigate(); - const { data: streams, loading, error, getData, resetData:resetStreamArray} = useGetLogStreamList(); - const [activeStream, setActiveStream] = useState(''); - const [searchValue, setSearchValue] = useState(''); - const { classes } = useNavbarStyles(); - const [currentPage, setCurrentPage] = useState('/logs'); - const [opened, { open, close }] = useDisclosure(false); - const [ deleteStream, setDeleteStream] = useState(''); - const [disableLink, setDisableLink] = useState(false); - const { - container, - linkBtnActive, - linkBtn, - selectStreambtn, - streamsBtn, - lowerContainer, - actionBtn, - helpTitle, - helpDescription, - userBtn, - } = classes; const { streamName } = useParams(); - const nav = useNavigate(); + + const [username] = useLocalStorage({ key: 'username', getInitialValueInEffect: false }); const [, , removeCredentials] = useLocalStorage({ key: 'credentials' }); const [, , removeUsername] = useLocalStorage({ key: 'username' }); + + const { state: { subNavbarTogle }, } = useHeaderContext(); + + const [activeStream, setActiveStream] = useMountedState(''); + const [searchValue, setSearchValue] = useMountedState(''); + const [currentPage, setCurrentPage] = useMountedState('/query'); + const [deleteStream, setDeleteStream] = useMountedState(''); + + const [disableLink, setDisableLink] = useMountedState(false); const [isSubNavbarOpen, setIsSubNavbarOpen] = useMountedState(false); - const [openedDelete, { close:closeDelete, open:openDelete}] = useDisclosure(); - let location = useLocation(); - const {data:deleteData, loading:deleteLoading, error:deleteError, deleteLogStreamFun , resetData: resetDeleteStraeam} = useDeleteLogStream(); + const [opened, { open, close }] = useDisclosure(false); + const [openedDelete, { close: closeDelete, open: openDelete }] = useDisclosure(); + + const { data: streams, error, getData, resetData: resetStreamArray } = useGetLogStreamList(); + const { data: deleteData, deleteLogStreamFun } = useDeleteLogStream(); useEffect(() => { const listener = subNavbarTogle.subscribe(setIsSubNavbarOpen); @@ -84,7 +86,7 @@ const Navbar: FC = (props) => { const onSignOut = () => { removeCredentials(); removeUsername(); - nav( + navigate( { pathname: LOGIN_ROUTE, }, @@ -97,159 +99,89 @@ const Navbar: FC = (props) => { } = useHeaderContext(); useEffect(() => { - if(streams && streams.length!==0 && !streams.find((stream)=>stream.name===streamName)&& streamName && streamName===deleteStream){ - - navigate(`/${streams[0].name}/query`); - return; - } - else if(streamName&&streams && streams.length!==0 && !streams.find((stream)=>stream.name===streamName) ){ - notifications.show({ - id: 'error-data', - color: 'red', - title: 'Error Occured', - message: `${streamName} stream not found`, - icon: , - autoClose: 5000, - }); - - navigate(`/${streams[0].name}/query`); - return; + if (streams && streams.length === 0) { + setActiveStream(''); + setSearchValue(''); + setDisableLink(true); + navigate(`/`); } - else if (streamName && streams?.length!==0 && streams?.find((stream)=>stream.name===streamName)) { - setActiveStream(streamName); - setSearchValue(streamName); - const now = dayjs(); - subLogQuery.set((state) => { - state.streamName = streamName || ''; - state.startTime = now.subtract(DEFAULT_FIXED_DURATIONS.milliseconds, 'milliseconds').toDate(); - state.endTime = now.toDate(); - }); - subLogSelectedTimeRange.set(DEFAULT_FIXED_DURATIONS.name); - subLogSearch.set((state) => { - state.search = ''; - state.filters = {}; + else if (streamName) { + if (streamName === deleteStream && streams) { + setDeleteStream(''); + handleChange(streams[0].name); + } else if (streams && !streams.find((stream) => stream.name === streamName)) { + notifications.show({ + id: 'error-data', + color: 'red', + title: 'Error Occured', + message: `${streamName} stream not found`, + icon: , + autoClose: 5000, }); - subRefreshInterval.set(null); + handleChange(streams[0].name); + } else if (streams?.find((stream) => stream.name === streamName)) { + handleChange(streamName); + } } else if (streams && Boolean(streams.length)) { - navigate(`/${streams[0].name}/query`); + handleChange(streams[0].name); } - }, [streams, location]); + }, [streams]); const handleChange = (value: string) => { setActiveStream(value); setSearchValue(value); + const now = dayjs(); + subLogQuery.set((state) => { + state.streamName = value || ''; + state.startTime = now.subtract(DEFAULT_FIXED_DURATIONS.milliseconds, 'milliseconds').toDate(); + state.endTime = now.toDate(); + }); + subLogSelectedTimeRange.set(DEFAULT_FIXED_DURATIONS.name); + subLogSearch.set((state) => { + state.search = ''; + state.filters = {}; + }); + subRefreshInterval.set(null); + setDisableLink(false); navigate(`/${value}${currentPage}`); }; - useEffect(() => { - if (loading) { - notifications.show({ - id: 'load-data', - loading: true, - color: '#545BEB', - title: 'Fetching Streams', - message: 'Streams will be loaded.', - autoClose: false, - withCloseButton: false, - }); - } - if (streams && Boolean(streams.length)) { - notifications.update({ - id: 'load-data', - color: 'green', - title: 'Streams was loaded', - message: 'Successfully Loaded!!', - icon: , - autoClose: 1000, - }); - } - if (error) { - notifications.update({ - id: 'load-data', - color: 'red', - title: 'Error Occured', - message: 'Error Occured while fetching streams', - icon: , - autoClose: 2000, - }); - } - if(streams && streams.length===0){ - notifications.update({ - id: 'load-data', - color: 'red', - title: 'No Streams', - message: 'No Streams Found in your account', - icon: , - autoClose: 2000, - }); - setActiveStream(''); - setSearchValue(''); - setDisableLink(true); - navigate(`/`); - } - }, [streams, error, loading]); const handleCloseDelete = () => { closeDelete(); setDeleteStream(''); }; + const handleDelete = () => { - deleteLogStreamFun(deleteStream||""); + deleteLogStreamFun(deleteStream); closeDelete(); }; useEffect(() => { - if (deleteLoading) { - notifications.show({ - id: 'delete-data', - loading: true, - color: '#545BEB', - title: 'Deleting Stream', - message: 'Stream will be deleted.', - autoClose: false, - withCloseButton: false, - - }); - return; - } - if (deleteData && !deleteLoading) { - notifications.update({ - id: 'delete-data', - color: 'green', - title: 'Stream was deleted', - message: 'Successfully Deleted!!', - icon: , - autoClose: 1000, - }); - resetDeleteStraeam(); + if (deleteData) { resetStreamArray(); getData(); return; } - if (deleteError) { - notifications.update({ - id: 'delete-data', - color: 'red', - title: 'Error Occured', - message: 'Error Occured while deleting stream', - icon: , - autoClose: 2000, - }); - return; - } - if(streams && streams.length!==0 && deleteStream===streamName){ - navigate(`/${streams[0].name}/query`); - } + }, [deleteData]); - }, [deleteData, deleteError, deleteLoading,streams]); + const { classes } = useNavbarStyles(); + const { + container, + linkBtnActive, + linkBtn, + selectStreambtn, + streamsBtn, + lowerContainer, + actionBtn, + helpTitle, + helpDescription, + userBtn, + } = classes; return (