import { type ChangeEvent, useMemo, useState } from 'react'; import { Grid, TextField, styled } from '@mui/material'; import { useThemeStyles } from 'themes/themeStyles'; import icons from 'component/application/iconNames'; import GeneralSelect from 'component/common/GeneralSelect/GeneralSelect'; import useApplicationsApi from 'hooks/api/actions/useApplicationsApi/useApplicationsApi'; import useToast from 'hooks/useToast'; import type { IApplication } from 'interfaces/application'; import useApplication from 'hooks/api/getters/useApplication/useApplication'; import { formatUnknownError } from 'utils/formatUnknownError'; import { HelpIcon } from 'component/common/HelpIcon/HelpIcon'; interface IApplicationUpdateProps { application: IApplication; } const StyledSelectContainer = styled('div')(({ theme }) => ({ display: 'flex', alignItems: 'center', gap: theme.spacing(1), })); export const ApplicationUpdate = ({ application }: IApplicationUpdateProps) => { const { storeApplicationMetaData } = useApplicationsApi(); const { appName, icon, url, description } = application; const { refetchApplication } = useApplication(appName); const [localUrl, setLocalUrl] = useState(url || ''); const [localDescription, setLocalDescription] = useState(description || ''); const { setToastData, setToastApiError } = useToast(); const { classes: themeStyles } = useThemeStyles(); const onChange = async ( field: string, value: string, event?: ChangeEvent, ) => { event?.preventDefault(); try { await storeApplicationMetaData(appName, field, value); refetchApplication(); setToastData({ type: 'success', title: 'Updated Successfully', text: `${field} successfully updated`, }); } catch (error: unknown) { setToastApiError(formatUnknownError(error)); } }; const options = useMemo(() => icons.map((v) => ({ key: v, label: v })), []); return ( onChange('icon', key)} />

Unleash is using Material Icons


Preview icons on MUI.com } />
setLocalUrl(e.target.value)} label='Application URL' placeholder='https://example.com' type='url' variant='outlined' size='small' onBlur={(e) => onChange('url', localUrl, e)} /> setLocalDescription(e.target.value)} onBlur={(e) => onChange('description', localDescription, e) } />
); };