Skip to content

Commit 89fbaad

Browse files
committed
Add edit button in autoSchedule view
1 parent 44641b6 commit 89fbaad

File tree

2 files changed

+57
-18
lines changed

2 files changed

+57
-18
lines changed

frontend/src/pages/FrontPage/AutoScheduleSection/AutoScheduleCalendar.tsx

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@ import { tokens } from '@equinor/eds-tokens'
1111
import { useNavigate } from 'react-router-dom'
1212
import { config } from 'config'
1313
import { useLanguageContext } from 'components/Contexts/LanguageContext'
14-
import { Button, Typography } from '@equinor/eds-core-react'
14+
import { Button, Icon, Typography } from '@equinor/eds-core-react'
1515
import { StyledDialog } from 'components/Styles/StyledComponents'
1616
import { useAssetContext } from 'components/Contexts/AssetContext'
1717
import { useBackendApi } from 'api/UseBackendApi'
18+
import { Icons } from 'utils/icons'
19+
import { MissionSchedulingEditDialog } from 'components/Dialogs/MissionEditDialog'
20+
import { MissionDefinition } from 'models/MissionDefinition'
1821

1922
const locales = { nb }
2023
const localizer = dateFnsLocalizer({ format, parse, startOfWeek, getDay, locales })
@@ -174,6 +177,13 @@ const StyledDialogActions = styled(StyledDialog.Actions)`
174177
gap: 6px;
175178
`
176179

180+
const StyledEditButton = styled(Button)`
181+
position: absolute;
182+
bottom: 4px;
183+
right: 4px;
184+
height: 25px;
185+
`
186+
177187
const legendItems = [
178188
{ color: CalendarColors.Planned, label: 'Planned today' },
179189
{ color: CalendarColors.Future, label: 'Future missions' },
@@ -187,7 +197,8 @@ export const CalendarPro = () => {
187197
const { installationCode } = useAssetContext()
188198
const backendApi = useBackendApi()
189199
const navigate = useNavigate()
190-
const [dialogOpen, setDialogOpen] = useState<boolean>(false)
200+
const [skipDialogOpen, setSkipDialogOpen] = useState<boolean>(false)
201+
const [selectedMissionToEdit, setSelectedMissionToEdit] = useState<MissionDefinition>()
191202
const [selectedEvent, setSelectedEvent] = useState<any>(null)
192203

193204
const getTargetDate = (day: DaysOfWeek, time: string) => {
@@ -239,25 +250,29 @@ export const CalendarPro = () => {
239250
})
240251
}, [missionDefinitions])
241252

242-
const handleCloseDialog = () => {
243-
setDialogOpen(false)
253+
const handleCloseSkipDialog = () => {
254+
setSkipDialogOpen(false)
244255
}
245256

246-
const handleSelectEvent = (event: any) => {
257+
const handleSelectSkipEvent = (event: any) => {
247258
setSelectedEvent(event)
248-
setDialogOpen(true)
259+
setSkipDialogOpen(true)
260+
}
261+
262+
const handleSelectEditEvent = (event: any) => {
263+
setSelectedMissionToEdit(missionDefinitions.find((m) => m.id === event.metadata.missionId))
249264
}
250265

251266
const handleAutoScheduleSkip = () => {
252267
if (selectedEvent) {
253268
backendApi.skipAutoScheduledMission(selectedEvent.metadata.missionId, selectedEvent.metadata.time)
254269
}
255-
setDialogOpen(false)
270+
setSkipDialogOpen(false)
256271
setSelectedEvent(null)
257272
}
258273

259-
const renderDialog = () => (
260-
<StyledDialog open={dialogOpen} onClose={handleCloseDialog}>
274+
const renderSkipDialog = () => (
275+
<StyledDialog open={skipDialogOpen} onClose={handleCloseSkipDialog}>
261276
<StyledDialog.Header>
262277
<Typography variant="h3">
263278
{TranslateText('SkipAutoMission') + ' ' + TranslateText('Mission')}
@@ -270,7 +285,7 @@ export const CalendarPro = () => {
270285
])}
271286
</StyledDialog.Content>
272287
<StyledDialogActions>
273-
<Button onClick={handleCloseDialog} variant="outlined" color="primary">
288+
<Button onClick={handleCloseSkipDialog} variant="outlined" color="primary">
274289
{TranslateText('Cancel')}
275290
</Button>
276291
<Button onClick={handleAutoScheduleSkip} variant="outlined" color="danger">
@@ -284,8 +299,11 @@ export const CalendarPro = () => {
284299
return (
285300
<StyledEvent>
286301
<span>{event.title}</span>
302+
<StyledEditButton variant="ghost_icon" onClick={() => handleSelectEditEvent(event)}>
303+
<Icon name={Icons.Edit} size={16} />
304+
</StyledEditButton>
287305
{event.skip && (
288-
<StyledSkipButton onClick={() => handleSelectEvent(event)}>
306+
<StyledSkipButton onClick={() => handleSelectSkipEvent(event)}>
289307
{TranslateText('SkipAutoMission')}
290308
</StyledSkipButton>
291309
)}
@@ -352,7 +370,14 @@ export const CalendarPro = () => {
352370
}
353371
/>
354372
</CalendarWrapper>
355-
{dialogOpen && renderDialog()}
373+
{skipDialogOpen && renderSkipDialog()}
374+
{selectedMissionToEdit && (
375+
<MissionSchedulingEditDialog
376+
mission={selectedMissionToEdit}
377+
isOpen={!!selectedMissionToEdit}
378+
onClose={() => setSelectedMissionToEdit(undefined)}
379+
/>
380+
)}
356381
</>
357382
)
358383
}

frontend/src/pages/FrontPage/AutoScheduleSection/AutoScheduleMissionTableRow.tsx

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@ import { Icons } from 'utils/icons'
1212
import { tokens } from '@equinor/eds-tokens'
1313
import { useAssetContext } from 'components/Contexts/AssetContext'
1414
import { useBackendApi } from 'api/UseBackendApi'
15+
import { MissionSchedulingEditDialog } from 'components/Dialogs/MissionEditDialog'
1516

1617
const StyledTableRow = styled.div`
1718
display: grid;
1819
align-items: center;
1920
gap: 1rem;
20-
grid-template-columns: 100px auto 100px;
21+
grid-template-columns: 100px auto 16px 100px;
2122
`
2223

2324
const StyledDialogActions = styled(StyledDialog.Actions)`
@@ -79,7 +80,8 @@ export const AutoScheduleMissionTableRow = ({
7980
const { TranslateText } = useLanguageContext()
8081
const backendApi = useBackendApi()
8182
const { installationCode } = useAssetContext()
82-
const [isDialogOpen, setIsDialogOpen] = useState<boolean>(false)
83+
const [isSkipDialogOpen, setIsSkipDialogOpen] = useState<boolean>(false)
84+
const [isEditDialogOpen, setIsEditDialogOpen] = useState<boolean>(false)
8385
const referenceElement = useRef<HTMLButtonElement>(null)
8486
const [isOpen, setIsOpen] = useState(false)
8587

@@ -99,7 +101,7 @@ export const AutoScheduleMissionTableRow = ({
99101

100102
const handleAutoScheduleSkip = () => {
101103
backendApi.skipAutoScheduledMission(mission.id, time)
102-
setIsDialogOpen(false)
104+
setIsSkipDialogOpen(false)
103105
}
104106

105107
return (
@@ -143,20 +145,27 @@ export const AutoScheduleMissionTableRow = ({
143145
</>
144146
)}
145147
</StyledMissionInfo>
148+
<Button
149+
style={{ maxWidth: '100px' }}
150+
variant="ghost_icon"
151+
onClick={() => setIsEditDialogOpen(true)}
152+
>
153+
<Icon name={Icons.Edit} size={16} color={typographyColor} />
154+
</Button>
146155
{(missionStatusType === MissionStatusType.ScheduledJob ||
147156
missionStatusType === MissionStatusType.SkippedJob) && (
148157
<Button
149158
style={{ maxWidth: '100px' }}
150159
variant="ghost"
151160
disabled={missionStatusType === MissionStatusType.SkippedJob}
152-
onClick={() => setIsDialogOpen(true)}
161+
onClick={() => setIsSkipDialogOpen(true)}
153162
>
154163
{missionStatusType === MissionStatusType.ScheduledJob
155164
? TranslateText('SkipAutoMission')
156165
: TranslateText('Skipped')}
157166
</Button>
158167
)}
159-
<StyledDialog open={isDialogOpen}>
168+
<StyledDialog open={isSkipDialogOpen}>
160169
<StyledDialog.Header>
161170
<StyledDialog.Title>
162171
{TranslateText('SkipAutoMission') + ' ' + TranslateText('Mission')}
@@ -171,14 +180,19 @@ export const AutoScheduleMissionTableRow = ({
171180
</Typography>
172181
</StyledDialog.CustomContent>
173182
<StyledDialogActions>
174-
<Button onClick={() => setIsDialogOpen(false)} variant="outlined" color="primary">
183+
<Button onClick={() => setIsSkipDialogOpen(false)} variant="outlined" color="primary">
175184
{TranslateText('Close')}
176185
</Button>
177186
<Button onClick={handleAutoScheduleSkip} variant="outlined" color="danger">
178187
{TranslateText('SkipAutoMission')}
179188
</Button>
180189
</StyledDialogActions>
181190
</StyledDialog>
191+
<MissionSchedulingEditDialog
192+
mission={mission}
193+
isOpen={isEditDialogOpen}
194+
onClose={() => setIsEditDialogOpen(false)}
195+
/>
182196
</StyledTableRow>
183197
</Table.Cell>
184198
</Table.Row>

0 commit comments

Comments
 (0)