import React, { useState, useEffect } from 'react';
|
import { Draggable } from '@hello-pangea/dnd';
|
import { Box, Card, Typography, Avatar, Divider, Stack, Slider, useTheme } from '@mui/material';
|
import { ReferenceField, useRedirect, useTranslate } from 'react-admin';
|
import { blueGrey } from '@mui/material/colors';
|
import { styled } from '@mui/material/styles';
|
|
export const MissionCard = ({ mission, index }) => {
|
if (!mission) return null;
|
|
return (
|
<Draggable draggableId={String(mission.id)} index={index}>
|
{(provided, snapshot) => (
|
<MissionCardContent
|
provided={provided}
|
snapshot={snapshot}
|
mission={mission}
|
/>
|
)}
|
</Draggable>
|
);
|
};
|
|
export const MissionCardContent = ({ provided, snapshot, mission }) => {
|
const theme = useTheme();
|
const translate = useTranslate();
|
const redirect = useRedirect();
|
const handleClick = () => {
|
redirect(`/mission/${mission.id}/show`, undefined, undefined, undefined, {
|
_scrollToTop: false,
|
});
|
};
|
|
const [sliderValue, setSliderValue] = useState(mission.progress || 0);
|
|
useEffect(() => {
|
setSliderValue(mission.progress || 0);
|
}, [mission.progress]);
|
|
const handleSliderChange = (event, newValue) => {
|
setSliderValue(newValue);
|
};
|
|
return (
|
<Box
|
sx={{ marginBottom: 1, cursor: 'pointer' }}
|
{...provided?.draggableProps}
|
{...provided?.dragHandleProps}
|
ref={provided?.innerRef}
|
onClick={handleClick}
|
>
|
<Card
|
style={{
|
opacity: snapshot?.isDragging ? 0.9 : 1,
|
transform: snapshot?.isDragging ? 'rotate(-2deg)' : '',
|
transition: '0.3s',
|
}}
|
elevation={snapshot?.isDragging ? 3 : 1}
|
>
|
<Box padding={2} pb={1} display="flex" flexDirection="column">
|
<Box display="flex" alignItems="center" mb={1.5}>
|
<Avatar
|
sx={{
|
width: 40,
|
height: 28,
|
bgcolor: theme.palette.primary.main,
|
}}
|
variant="rounded"
|
>
|
{mission.agv}
|
</Avatar>
|
<Divider orientation="vertical" flexItem sx={{ margin: '0 8px' }} />
|
<Typography variant="body1" noWrap>
|
{mission.groupNo}
|
</Typography>
|
</Box>
|
<Box>
|
<Stack direction="row" justifyContent="space-between" mb={1}>
|
<Typography variant="caption" color="textSecondary">
|
{translate('table.field.mission.backpack')} : {mission.backpack}
|
</Typography>
|
<Typography variant="caption" color="textPrimary">
|
{translate('table.field.mission.code')}: {mission.currCode}
|
</Typography>
|
</Stack>
|
<Divider orientation="horizontal" flexItem />
|
<Stack direction="row" justifyContent="space-between" >
|
<Typography variant="overline">
|
{translate('table.field.mission.task')}: [{mission.taskNos.join(',')}]
|
</Typography>
|
</Stack>
|
<Stack pl={0.5} pr={0.5} direction="row" spacing={1} alignItems="center" mb={.6}>
|
<Slider
|
aria-label="Progress"
|
// defaultValue={mission.progress}
|
value={sliderValue}
|
onChange={handleSliderChange}
|
getAriaValueText={(value) => {
|
return `${value}%`;
|
}}
|
color="secondary"
|
size="small"
|
marks
|
/>
|
</Stack>
|
</Box>
|
</Box>
|
</Card>
|
</Box>
|
);
|
};
|