in frontend/src/old-pages/Images/CustomImages/ImageBuildDialog.tsx [57:187]
export default function ImageBuildDialog() {
const {t} = useTranslation()
const open = useState([...imageBuildPath, 'dialog'])
const imageConfig = useState([...imageBuildPath, 'config']) || ''
const errors = useState([...imageBuildPath, 'errors'])
const imageId = useState([...imageBuildPath, 'imageId'])
const pending = useState([...imageBuildPath, 'pending'])
let validated = useState([...buildImageErrorsPath, 'validated'])
let imageIdError = useState([...buildImageErrorsPath, 'imageId'])
const missingImageIdError = t('customImages.dialogs.buildImage.imageIdError')
React.useEffect(() => {
setFlashbarItems(errorsToFlashbarItems(errors, setFlashbarItems))
}, [errors])
const [flashbarItems, setFlashbarItems] = React.useState<
FlashbarProps.MessageDefinition[]
>([])
const handleClose = () => {
setState([...imageBuildPath, 'dialog'], false)
clearState([...imageBuildPath, 'errors'])
}
const handleBuild = async () => {
clearState([...imageBuildPath, 'errors'])
setState([...imageBuildPath, 'pending'], true)
if (buildImageValidate(missingImageIdError)) {
try {
await BuildImage(imageId, imageConfig)
handleClose()
} catch (error: unknown) {
if ((error as AxiosError).response) {
setState(
[...imageBuildPath, 'errors'],
(error as AxiosError).response?.data,
)
}
}
setState([...imageBuildPath, 'pending'], false)
}
}
const setImageId = (newImageId: any) => {
if (newImageId !== imageId) {
setState([...imageBuildPath, 'imageId'], newImageId)
if (validated) buildImageValidate(missingImageIdError)
}
}
const descriptionElementRef = React.useRef(null)
React.useEffect(() => {
if (open) {
const {current: descriptionElement} = descriptionElementRef
if (descriptionElement !== null) {
;(descriptionElement as any).focus()
}
}
}, [open])
return (
<Modal
visible={open || false}
onDismiss={handleClose}
closeAriaLabel={t('customImages.dialogs.buildImage.closeAriaLabel')}
size="large"
header={
<Header
variant="h2"
actions={
<FileUploadButton
className="upload"
handleData={(data: any) => {
setState([...imageBuildPath, 'config'], data)
}}
/>
}
>
{t('customImages.dialogs.buildImage.title')}
</Header>
}
footer={
<Box float="right">
<SpaceBetween direction="horizontal" size="xs">
<Button onClick={handleClose}>
{t('customImages.dialogs.buildImage.cancel')}
</Button>
<Button
disabled={pending}
loading={pending}
variant="primary"
onClick={() => {
buildImageValidate(missingImageIdError) && handleBuild()
}}
>
{t('customImages.dialogs.buildImage.build')}
</Button>
</SpaceBetween>
</Box>
}
>
<SpaceBetween direction="vertical" size="xs">
<FormField
errorText={imageIdError}
label={t('customImages.dialogs.buildImage.imageIdLabel')}
>
<Input
value={imageId}
placeholder={t(
'customImages.dialogs.buildImage.imageIdPlaceholder',
)}
onChange={({detail}) => {
setImageId(detail.value)
}}
/>
</FormField>
<Flashbar items={flashbarItems} />
{
<ConfigView
config={imageConfig}
onChange={({detail}: any) => {
setState([...imageBuildPath, 'config'], detail.value)
}}
/>
}
</SpaceBetween>
</Modal>
)
}