import { ChangeEvent, useRef, useState } from 'react'; import { Button, Input, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, } from '@chakra-ui/react'; import { useQueryClient } from '@tanstack/react-query'; import { getSheetsAuthStatus, getSheetsAuthUrl, postPreviewSheet, uploadSheetClientFile, patchData, postPushSheet, } from '../../../common/api/ontimeApi'; import { OntimeRundown, ProjectData, UserFields } from 'ontime-types'; import PreviewExcel from '../upload-modal/preview/PreviewExcel'; import { projectDataPlaceholder } from '../../../common/models/ProjectData'; import { userFieldsPlaceholder } from '../../../common/models/UserFields'; import { PROJECT_DATA, RUNDOWN_TABLE, USERFIELDS } from '../../../common/api/apiConstants'; import { maybeAxiosError } from '../../../common/api/apiUtils'; interface SheetsModalProps { onClose: () => void; isOpen: boolean; } export default function SheetsModal(props: SheetsModalProps) { const { isOpen, onClose } = props; const fileInputRef = useRef(null); const [file, setFile] = useState(null); const [authState, setAuthState] = useState(true); const [rundown, setRundown] = useState(null); const [userFields, setUserFields] = useState(null); const [project, setProject] = useState(null); const queryClient = useQueryClient(); const sheetid = useRef(null); const worksheet = useRef(null); const handleClose = () => { setRundown(null); setProject(null); setUserFields(null); onClose(); }; const handleClick = () => { fileInputRef.current?.click(); }; const handleFile = (event: ChangeEvent) => { const selectedFile = event?.target?.files?.[0]; if (!selectedFile) { setFile(null); return; } else { uploadSheetClientFile(selectedFile); } setFile(selectedFile); }; //TODO: do smoething better here getSheetsAuthStatus().then((data) => { setAuthState(data); }); const handleAuthenticate = () => { getSheetsAuthUrl().then((data) => { console.log(data); if (data == 'bad') { } else { window.open(data, '_blank', 'noreferrer'); } }); }; const handlePullData = () => { postPreviewSheet(sheetid.current?.value ?? '', worksheet.current?.value ?? '').then((data) => { setProject(data.project); setRundown(data.rundown); setUserFields(data.userFields); }); }; const handlePushData = () => { postPushSheet(sheetid.current?.value ?? '', worksheet.current?.value ?? '').then((data) => { console.log(data); }); }; const handleFinalise = async () => { // this step is currently only used for excel files, after preview if (rundown && userFields && project) { let doClose = false; try { await patchData({ rundown, userFields, project }); queryClient.setQueryData(RUNDOWN_TABLE, rundown); queryClient.setQueryData(USERFIELDS, userFields); queryClient.setQueryData(PROJECT_DATA, project); await queryClient.invalidateQueries({ queryKey: [...RUNDOWN_TABLE, ...USERFIELDS, ...PROJECT_DATA], }); doClose = true; } catch (error) { const message = maybeAxiosError(error); console.log(message); // setErrors(`Failed applying changes ${message}`); } finally { if (doClose) { handleClose(); } } } }; return ( Sheets! {rundown && ( <> )} {!rundown && ( <>
Need to add some help here
{authState &&
You are authenticated
} {!authState &&
You are not authenticated
}

)}
{!rundown && ( )} {rundown && ( )}
); }