import React, { useContext } from 'react' import { useLocation } from 'react-router-dom' import { Space, Flex, Card, Typography } from 'antd' import { LoadingOutlined } from '@ant-design/icons' import useCollapseState from '../../hooks/useCollapseState' import NotesPanel from '../../common/NotesPanel' import InfoCollapse from '../../common/InfoCollapse' import ObjectInfo from '../../common/ObjectInfo' import ViewButton from '../../common/ViewButton' import EditObjectForm from '../../common/EditObjectForm' import EditButtons from '../../common/EditButtons' import LockIndicator from '../../Management/Filaments/LockIndicator' import ActionHandler from '../../common/ActionHandler' import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx' import NoteIcon from '../../../Icons/NoteIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import GCodeFileIcon from '../../../Icons/GCodeFileIcon.jsx' import { ApiServerContext } from '../../context/ApiServerContext' import ObjectActions from '../../common/ObjectActions.jsx' import ObjectTable from '../../common/ObjectTable.jsx' import InfoCollapsePlaceholder from '../../common/InfoCollapsePlaceholder.jsx' const { Text } = Typography const GCodeFileInfo = () => { const location = useLocation() const gcodeFileId = new URLSearchParams(location.search).get('gcodeFileId') const { fetchObjectContent } = useContext(ApiServerContext) const [collapseState, updateCollapseState] = useCollapseState( 'gcodeFileInfo', { info: true, preview: true, notes: true, auditLogs: true } ) return ( {({ loading, isEditing, startEditing, cancelEditing, handleUpdate, formValid, objectData, editLoading, lock, fetchObject }) => { // Define actions that can be triggered via URL, now with access to startEditing const actions = { reload: () => { fetchObject() return true }, edit: () => { startEditing() return false }, cancelEdit: () => { cancelEditing() return true }, finishEdit: () => { handleUpdate() return true }, download: () => { if (gcodeFileId) { fetchObjectContent( gcodeFileId, 'gcodeFile', `${objectData.name}.gcode` ) return true } } } return ( {({ callAction }) => ( { callAction('finishEdit') }} cancelEditing={() => { callAction('cancelEdit') }} startEditing={() => { callAction('edit') }} editLoading={editLoading} formValid={formValid} disabled={lock?.locked || loading} loading={editLoading} />
} active={collapseState.info} onToggle={(expanded) => updateCollapseState('info', expanded) } collapseKey='info' > } isEditing={isEditing} objectData={objectData} type='gcodeFile' /> } active={collapseState.preview} onToggle={(expanded) => updateCollapseState('preview', expanded) } collapseKey='preview' > {objectData?.gcodeFileInfo?.thumbnail ? ( GCodeFile ) : ( n/a )} } active={collapseState.notes} onToggle={(expanded) => updateCollapseState('notes', expanded) } collapseKey='notes' > } active={collapseState.auditLogs} onToggle={(expanded) => updateCollapseState('auditLogs', expanded) } collapseKey='auditLogs' > {loading ? ( ) : ( )}
)}
) }}
) } export default GCodeFileInfo