// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import { I18n, Logger } from '@aws-amplify/core'; import React, { FormEvent, useState } from 'react'; import Alert from 'react-bootstrap/Alert'; import Button from 'react-bootstrap/Button'; import ButtonGroup from 'react-bootstrap/ButtonGroup'; import Breadcrumb from 'react-bootstrap/Breadcrumb'; import Card from 'react-bootstrap/Card'; import Col from 'react-bootstrap/Col'; import Container from 'react-bootstrap/Container'; import Form from 'react-bootstrap/Form'; import Row from 'react-bootstrap/Row'; import { LinkContainer } from 'react-router-bootstrap'; import GreengrassCoreDeviceInputForm from './GreengrassCoreDeviceInputForm'; import { handleValueChange } from './greengrass-core-device-form-utils'; import MessageModal from '../../components/MessageModal'; import EmptyCol from '../../components/EmptyCol'; import EmptyRow from '../../components/EmptyRow'; import { LoadingSpinner } from '../../components/Loading'; import { UserGreengrassCoreDevicesHook } from '../../hooks/GreengrassCoreDeviceHook'; import { requestApi } from '../../util/apis'; import { CreatedBy, OsPlatform, FormControlElement, GreengrassCoreDeviceControl, GreengrassCoreDeviceDomIds, GreengrassCoreDevicePostResponse, MessageModalType } from '../../util/types'; import { getErrorMessage } from '../../util/utils'; const logger = new Logger('GreengrassCoreDeviceForm'); const domIds: GreengrassCoreDeviceDomIds = { category: 'category', greengrassCoreDeviceName: 'greengrassCoreDeviceName', osPlatform: 'osPlatform' }; /** * Renders the Greengrass core device registration form. * @returns The Greengrass core device modal */ export default function GreengrassCoreDeviceForm(): JSX.Element { const [confirmMessage, setConfirmMessage] = useState(''); const [createdBy, setCreatedBy] = useState(CreatedBy.SYSTEM); const [greengrassCoreDeviceName, setGreengrassCoreDeviceName] = useState(''); const [greengrassCoreDeviceStatus, setGreengrassCoreDeviceStatus] = useState(''); const [greengrassCoreDeviceOSPlatform, setGreengrassCoreDeviceOSPlatform] = useState(OsPlatform.LINUX); const [hasConfirmActionError, setHasConfirmActionError] = useState(false); const [isGreengrassCoreDeviceNameValid, setIsGreengrassCoreDeviceNameValid] = useState(false); const [loading, setLoading] = useState(false); const [message, setMessage] = useState(''); const [showConfirmMessageModal, setShowConfirmMessageModal] = useState(false); const [showMessageModal, setShowMessageModal] = useState(false); const { close, greengrassCoreDevices, statusMap } = UserGreengrassCoreDevicesHook({ setHasConfirmActionError, setMessage, setShowMessageModal }); const change = (event: React.ChangeEvent) => { handleValueChange({ domIds, event, greengrassCoreDevices, setCreatedBy, setGreengrassCoreDeviceName, setGreengrassCoreDeviceStatus, setIsGreengrassCoreDeviceNameValid, setGreengrassCoreDeviceOSPlatform, statusMap }); }; /** * Handles the Greengrass core device registration. It shows the confirmation modal. * @param event The Greengrass core device handle form event */ function handleGreengrassCoreDevice(event: FormEvent): void { event.preventDefault(); setConfirmMessage(I18n.get('info.message.register.greengrass.core.device').replace('{}', greengrassCoreDeviceName)); if (createdBy === CreatedBy.USER && greengrassCoreDeviceStatus !== 'HEALTHY') { setConfirmMessage( I18n.get('warning.message.unhealthy.greengrass.core.device').replace('{}', greengrassCoreDeviceName) ); } setShowConfirmMessageModal(true); } /** * Registers a Greengrass core device. */ async function registerGreengrassCoreDevice(): Promise { setLoading(true); try { const response = (await requestApi({ method: 'post', path: '/greengrass', options: { body: { name: greengrassCoreDeviceName, osPlatform: greengrassCoreDeviceOSPlatform, control: GreengrassCoreDeviceControl.CREATE, createdBy } } })) as GreengrassCoreDevicePostResponse; setMessage({response.message}); setHasConfirmActionError(false); } catch (error) { const errorMessage = getErrorMessage(error); logger.error(errorMessage); setShowConfirmMessageModal(false); setHasConfirmActionError(true); setMessage( {I18n.get('error.message.register.greengrass.core.device')}
{I18n.get('error')}: {JSON.stringify(errorMessage)}
); } setLoading(false); setShowMessageModal(true); } return ( {I18n.get('manage.greengrass.core.devices')} {I18n.get('register.greengrass.core.device')}
{I18n.get('category')} * {I18n.get('description.category')} {I18n.get('os.platform')} *
setShowConfirmMessageModal(false)} message={confirmMessage} modalType={MessageModalType.CONFIRM} confirmAction={() => registerGreengrassCoreDevice()} /> setShowMessageModal(false)} message={message} modalType={MessageModalType.MESSAGE} confirmAction={hasConfirmActionError ? () => undefined : () => close()} />
); }