mirror of
https://github.com/datahub-project/datahub.git
synced 2025-10-20 13:35:12 +00:00
141 lines
5.4 KiB
TypeScript
141 lines
5.4 KiB
TypeScript
import { Icon, Input, SimpleSelect, TextArea } from '@src/alchemy-components';
|
|
import { AllowedValue, PropertyCardinality, SearchResult, StructuredPropertyEntity } from '@src/types.generated';
|
|
import { Form, FormInstance } from 'antd';
|
|
import { Tooltip } from '@components';
|
|
import React from 'react';
|
|
import AdvancedOptions from './AdvancedOptions';
|
|
import RequiredAsterisk from './RequiredAsterisk';
|
|
import DisplayPreferences from './DisplayPreferences';
|
|
import StructuredPropsFormSection from './StructuredPropsFormSection';
|
|
import { FieldLabel, FlexContainer, GridFormItem, RowContainer } from './styledComponents';
|
|
import useStructuredProp from './useStructuredProp';
|
|
import { PropValueField, StructuredProp, valueTypes } from './utils';
|
|
|
|
interface Props {
|
|
selectedProperty: SearchResult | undefined;
|
|
form: FormInstance;
|
|
formValues: StructuredProp | undefined;
|
|
setFormValues: React.Dispatch<React.SetStateAction<StructuredProp | undefined>>;
|
|
setCardinality: React.Dispatch<React.SetStateAction<PropertyCardinality>>;
|
|
isEditMode: boolean;
|
|
selectedValueType: string;
|
|
setSelectedValueType: React.Dispatch<React.SetStateAction<string>>;
|
|
allowedValues: AllowedValue[] | undefined;
|
|
valueField: PropValueField;
|
|
setShowAllowedValuesDrawer: React.Dispatch<React.SetStateAction<boolean>>;
|
|
refetchProperties: () => void;
|
|
badgeProperty?: StructuredPropertyEntity;
|
|
}
|
|
|
|
const StructuredPropsForm = ({
|
|
selectedProperty,
|
|
form,
|
|
formValues,
|
|
setFormValues,
|
|
isEditMode,
|
|
setCardinality,
|
|
selectedValueType,
|
|
setSelectedValueType,
|
|
allowedValues,
|
|
valueField,
|
|
setShowAllowedValuesDrawer,
|
|
refetchProperties,
|
|
badgeProperty,
|
|
}: Props) => {
|
|
const { handleTypeUpdate, handleDisplaySettingChange } = useStructuredProp({
|
|
selectedProperty,
|
|
form,
|
|
setFormValues,
|
|
setCardinality,
|
|
setSelectedValueType,
|
|
});
|
|
|
|
return (
|
|
<Form form={form}>
|
|
<Form.Item
|
|
name="displayName"
|
|
rules={[
|
|
{
|
|
required: true,
|
|
message: 'Please enter the name',
|
|
},
|
|
]}
|
|
>
|
|
<Input label="Name" placeholder="Provide a name" isRequired data-testid="structured-props-input-name" />
|
|
</Form.Item>
|
|
<Form.Item name="description">
|
|
<TextArea
|
|
label="Description"
|
|
placeholder="Provide a description"
|
|
data-testid="structured-props-input-description"
|
|
/>
|
|
</Form.Item>
|
|
<RowContainer>
|
|
<FieldLabel>
|
|
<FlexContainer>
|
|
Property Type
|
|
<RequiredAsterisk />
|
|
<Tooltip title="The allowed value type of the property" showArrow={false}>
|
|
<Icon icon="Info" color="violet" size="lg" />
|
|
</Tooltip>
|
|
</FlexContainer>
|
|
</FieldLabel>
|
|
|
|
<Tooltip
|
|
title={isEditMode && 'Once a property is created, its type cannot be changed'}
|
|
showArrow={false}
|
|
>
|
|
<GridFormItem
|
|
name="valueType"
|
|
rules={[
|
|
{
|
|
required: true,
|
|
message: 'Please select the property type',
|
|
},
|
|
]}
|
|
>
|
|
<SimpleSelect
|
|
onUpdate={(values: any) => {
|
|
handleTypeUpdate(values[0]);
|
|
}}
|
|
placeholder="Select Property Type"
|
|
options={valueTypes}
|
|
values={formValues?.valueType ? [formValues?.valueType] : undefined}
|
|
isDisabled={isEditMode}
|
|
showDescriptions
|
|
data-testid="structured-props-select-input-type"
|
|
optionListTestId="structured-props-property-type-options-list"
|
|
width="full"
|
|
/>
|
|
</GridFormItem>
|
|
</Tooltip>
|
|
</RowContainer>
|
|
|
|
<StructuredPropsFormSection
|
|
selectedProperty={selectedProperty}
|
|
form={form}
|
|
formValues={formValues}
|
|
setFormValues={setFormValues}
|
|
isEditMode={isEditMode}
|
|
setCardinality={setCardinality}
|
|
selectedValueType={selectedValueType}
|
|
setSelectedValueType={setSelectedValueType}
|
|
allowedValues={allowedValues}
|
|
valueField={valueField}
|
|
setShowAllowedValuesDrawer={setShowAllowedValuesDrawer}
|
|
/>
|
|
<DisplayPreferences
|
|
formValues={formValues}
|
|
handleDisplaySettingChange={handleDisplaySettingChange}
|
|
selectedValueType={selectedValueType}
|
|
refetchProperties={refetchProperties}
|
|
badgeProperty={badgeProperty}
|
|
allowedValues={allowedValues}
|
|
/>
|
|
<AdvancedOptions isEditMode={isEditMode} />
|
|
</Form>
|
|
);
|
|
};
|
|
|
|
export default StructuredPropsForm;
|