Files
parcer/src/components/molecules/BrowserNavBar.tsx

124 lines
2.9 KiB
TypeScript
Raw Normal View History

2024-06-14 22:39:02 +05:30
import type {
2024-08-22 23:58:21 +05:30
FC,
2024-06-14 22:39:02 +05:30
} from 'react';
import styled from 'styled-components';
import ReplayIcon from '@mui/icons-material/Replay';
import ArrowBackIcon from '@mui/icons-material/ArrowBack';
import ArrowForwardIcon from '@mui/icons-material/ArrowForward';
import { NavBarButton } from '../atoms/buttons/buttons';
2024-08-22 23:58:21 +05:30
import { UrlForm } from './UrlForm';
2024-06-14 22:39:02 +05:30
import { useCallback, useEffect, useState } from "react";
2024-08-22 23:58:21 +05:30
import { useSocketStore } from "../../context/socket";
2024-06-14 22:39:02 +05:30
import { getCurrentUrl } from "../../api/recording";
import { useGlobalInfoStore } from '../../context/globalInfo';
2024-06-14 22:39:02 +05:30
const StyledNavBar = styled.div<{ browserWidth: number }>`
display: flex;
2024-10-19 04:58:14 +05:30
padding: 12px 0px;
2024-06-14 22:39:02 +05:30
background-color: #f6f6f6;
width: ${({ browserWidth }) => browserWidth}px;
2024-10-23 07:46:26 +05:30
border-radius: 0px 5px 0px 0px;
2024-06-14 22:39:02 +05:30
`;
interface NavBarProps {
2024-08-22 23:58:21 +05:30
browserWidth: number;
handleUrlChanged: (url: string) => void;
2024-06-14 22:39:02 +05:30
};
const BrowserNavBar: FC<NavBarProps> = ({
browserWidth,
handleUrlChanged,
}) => {
const { socket } = useSocketStore();
const { recordingUrl, setRecordingUrl } = useGlobalInfoStore();
2024-06-14 22:39:02 +05:30
2024-08-22 23:58:21 +05:30
const handleRefresh = useCallback((): void => {
2024-06-14 22:39:02 +05:30
socket?.emit('input:refresh');
}, [socket]);
2024-08-22 23:58:21 +05:30
const handleGoTo = useCallback((address: string): void => {
2024-06-14 22:39:02 +05:30
socket?.emit('input:url', address);
}, [socket]);
const handleCurrentUrlChange = useCallback((url: string) => {
handleUrlChanged(url);
setRecordingUrl(url);
}, [handleUrlChanged, recordingUrl]);
2024-06-14 22:39:02 +05:30
useEffect(() => {
getCurrentUrl().then((response) => {
if (response) {
handleUrlChanged(response);
}
}).catch((error) => {
console.log("Fetching current url failed");
})
}, []);
useEffect(() => {
if (socket) {
socket.on('urlChanged', handleCurrentUrlChange);
}
return () => {
if (socket) {
socket.off('urlChanged', handleCurrentUrlChange);
}
}
}, [socket, handleCurrentUrlChange])
2024-08-22 23:58:21 +05:30
const addAddress = (address: string) => {
if (socket) {
handleUrlChanged(address);
setRecordingUrl(address);
2024-08-22 23:58:21 +05:30
handleGoTo(address);
}
};
return (
2024-10-19 20:38:43 +05:30
<StyledNavBar browserWidth={900}>
2024-08-22 23:58:21 +05:30
<NavBarButton
type="button"
onClick={() => {
socket?.emit('input:back');
}}
disabled={false}
>
<ArrowBackIcon />
</NavBarButton>
<NavBarButton
type="button"
onClick={() => {
socket?.emit('input:forward');
}}
disabled={false}
>
<ArrowForwardIcon />
</NavBarButton>
<NavBarButton
type="button"
onClick={() => {
if (socket) {
handleRefresh()
}
}}
disabled={false}
>
<ReplayIcon />
</NavBarButton>
<UrlForm
currentAddress={recordingUrl}
2024-08-22 23:58:21 +05:30
handleRefresh={handleRefresh}
setCurrentAddress={addAddress}
/>
</StyledNavBar>
);
2024-06-14 22:39:02 +05:30
}
export default BrowserNavBar;