Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions libs/i18n/locales/en/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,9 @@
"View catalog": "View catalog",
"Edit catalog": "Edit catalog",
"Create catalog": "Create catalog",
"Catalog created": "Catalog created",
"Catalog created successfully": "Catalog created successfully",
"\"{{catalogName}}\" has been created and is ready to use. You can select it from the list of available catalogs.": "\"{{catalogName}}\" has been created and is ready to use. You can select it from the list of available catalogs.",
"Short description": "Short description",
"Icon": "Icon",
"Provider": "Provider",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ import * as React from 'react';
import {
Alert,
Button,
EmptyState,
EmptyStateBody,
EmptyStateStatus,
FormGroup,
Modal,
ModalBody,
Expand Down Expand Up @@ -38,6 +41,7 @@ const CreateCatalogModal = ({ onClose, onSuccess, catalog }: CreateCatalogModalP
const { t } = useTranslation();
const { post, patch } = useFetch();
const [error, setError] = React.useState<unknown>();
const [createdCatalog, setCreatedCatalog] = React.useState<Catalog>();

const isEdit = !!catalog;
const isReadOnly = !!catalog?.metadata?.owner;
Expand Down Expand Up @@ -97,7 +101,7 @@ const CreateCatalogModal = ({ onClose, onSuccess, catalog }: CreateCatalogModalP
}
} else {
const result = await post<Catalog>('catalogs', getCatalogResource(values));
onSuccess(result);
setCreatedCatalog(result);
}
} catch (e) {
setError(e);
Expand All @@ -106,68 +110,91 @@ const CreateCatalogModal = ({ onClose, onSuccess, catalog }: CreateCatalogModalP
>
{({ isSubmitting, isValid, submitForm, dirty }) => (
<>
<ModalHeader title={title} />
<ModalHeader title={createdCatalog ? t('Catalog created') : title} />
<ModalBody>
<FlightCtlForm>
<NameField
name="name"
aria-label={t('Name')}
isRequired
isDisabled={isEdit}
resourceType="catalogs"
validations={getDnsSubdomainValidations(t)}
/>
<FormGroup label={t('Display name')}>
<TextField name="displayName" aria-label={t('Display name')} isDisabled={isReadOnly} />
</FormGroup>
<FormGroup label={t('Short description')}>
<TextAreaField name="shortDescription" aria-label={t('Short description')} isDisabled={isReadOnly} />
</FormGroup>
<FormGroup label={t('Icon')}>
<IconUploadField name="icon" isDisabled={isReadOnly} />
</FormGroup>
<FormGroup label={t('Provider')}>
<TextField name="provider" aria-label={t('Provider')} isDisabled={isReadOnly} />
</FormGroup>
<FormGroup label={t('Support')}>
<TextField
name="support"
aria-label={t('Support')}
placeholder="https://example.com/support"
isDisabled={isReadOnly}
{createdCatalog ? (
<EmptyState status={EmptyStateStatus.success} titleText={t('Catalog created successfully')}>
<EmptyStateBody>
{t(
'"{{catalogName}}" has been created and is ready to use. You can select it from the list of available catalogs.',
{
catalogName: createdCatalog.spec.displayName || createdCatalog.metadata.name,
},
)}
</EmptyStateBody>
</EmptyState>
) : (
<FlightCtlForm>
<NameField
name="name"
aria-label={t('Name')}
isRequired
isDisabled={isEdit}
resourceType="catalogs"
validations={getDnsSubdomainValidations(t)}
/>
</FormGroup>
</FlightCtlForm>
<FormGroup label={t('Display name')}>
<TextField name="displayName" aria-label={t('Display name')} isDisabled={isReadOnly} />
</FormGroup>
<FormGroup label={t('Short description')}>
<TextAreaField
name="shortDescription"
aria-label={t('Short description')}
isDisabled={isReadOnly}
/>
</FormGroup>
<FormGroup label={t('Icon')}>
<IconUploadField name="icon" isDisabled={isReadOnly} />
</FormGroup>
<FormGroup label={t('Provider')}>
<TextField name="provider" aria-label={t('Provider')} isDisabled={isReadOnly} />
</FormGroup>
<FormGroup label={t('Support')}>
<TextField
name="support"
aria-label={t('Support')}
placeholder="https://example.com/support"
isDisabled={isReadOnly}
/>
</FormGroup>
</FlightCtlForm>
)}
</ModalBody>
<ModalFooter>
<Stack hasGutter>
{!!error && (
{createdCatalog ? (
<Button variant="primary" onClick={() => onSuccess(createdCatalog)}>
{t('Close')}
</Button>
) : (
<Stack hasGutter>
{!!error && (
<StackItem>
<Alert variant="danger" isInline title={getErrorMessage(error)} />
</StackItem>
)}
<StackItem>
<Alert variant="danger" isInline title={getErrorMessage(error)} />
</StackItem>
)}
<StackItem>
<Split hasGutter>
{!isReadOnly && (
<Split hasGutter>
{!isReadOnly && (
<SplitItem>
<Button
variant="primary"
onClick={submitForm}
isDisabled={!isValid || isSubmitting || !dirty}
isLoading={isSubmitting}
>
{isEdit ? t('Save') : t('Create')}
</Button>
</SplitItem>
)}
<SplitItem>
<Button
variant="primary"
onClick={submitForm}
isDisabled={!isValid || isSubmitting || !dirty}
isLoading={isSubmitting}
>
{isEdit ? t('Save') : t('Create')}
<Button variant="link" onClick={onClose} isDisabled={isSubmitting}>
{isReadOnly ? t('Close') : t('Cancel')}
</Button>
</SplitItem>
)}
<SplitItem>
<Button variant="link" onClick={onClose} isDisabled={isSubmitting}>
{isReadOnly ? t('Close') : t('Cancel')}
</Button>
</SplitItem>
</Split>
</StackItem>
</Stack>
</Split>
</StackItem>
</Stack>
)}
</ModalFooter>
</>
)}
Expand Down
Loading