133 lines
3.6 KiB
TypeScript
133 lines
3.6 KiB
TypeScript
import PluginExtraFields from '@/components/plugin-extra-fields';
|
|
import { PageAction } from '@/config';
|
|
import {
|
|
Input as CInput,
|
|
Password,
|
|
Select as SealSelect,
|
|
useAppUtils
|
|
} from '@gpustack/core-ui';
|
|
import { useIntl } from '@umijs/max';
|
|
import { Form } from 'antd';
|
|
import ProviderLogo from '../components/provider-logo';
|
|
import { useFormContext } from '../config/form-context';
|
|
import { maasProviderOptions } from '../config/providers';
|
|
import { FormData } from '../config/types';
|
|
import providerTypeStyles from '../styles/provider-type.less';
|
|
import ProviderConfigs from './provider-configs';
|
|
|
|
const Basic: React.FC<{
|
|
onAPIKeyBlur?: (e: any) => void;
|
|
}> = ({ onAPIKeyBlur }) => {
|
|
const intl = useIntl();
|
|
const form = Form.useFormInstance<FormData>();
|
|
const { action } = useFormContext();
|
|
const providerType = Form.useWatch(['config', 'type'], form);
|
|
const { getRuleMessage } = useAppUtils();
|
|
|
|
const optionRender = (option: any) => {
|
|
return (
|
|
<div style={{ display: 'flex', alignItems: 'center' }}>
|
|
<ProviderLogo provider={option.value} />
|
|
<span style={{ marginLeft: 8 }}>{option.label}</span>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
const filterOption = (input: string, option?: any) => {
|
|
return (
|
|
option?.label?.toLowerCase().includes(input.toLowerCase()) ||
|
|
option?.value?.toLowerCase().includes(input.toLowerCase())
|
|
);
|
|
};
|
|
|
|
const renderLogoPrefix = () => {
|
|
const hasProvider = maasProviderOptions.some(
|
|
(option) => option.value === providerType
|
|
);
|
|
if (hasProvider) {
|
|
return (
|
|
<div style={{ display: 'flex', alignItems: 'end', height: '100%' }}>
|
|
<ProviderLogo provider={providerType as string} />
|
|
</div>
|
|
);
|
|
}
|
|
return null;
|
|
};
|
|
|
|
return (
|
|
<>
|
|
<Form.Item<FormData>
|
|
name="name"
|
|
data-field="name"
|
|
required
|
|
rules={[
|
|
{
|
|
required: true,
|
|
message: getRuleMessage('input', 'common.table.name')
|
|
}
|
|
]}
|
|
>
|
|
<CInput.Input
|
|
required
|
|
label={intl.formatMessage({
|
|
id: 'common.table.name'
|
|
})}
|
|
/>
|
|
</Form.Item>
|
|
<PluginExtraFields name="CreateOrgScopeField" context={{ action }} />
|
|
<Form.Item<FormData>
|
|
name={['config', 'type']}
|
|
rules={[
|
|
{
|
|
required: true,
|
|
message: getRuleMessage('select', 'common.table.type')
|
|
}
|
|
]}
|
|
>
|
|
<SealSelect
|
|
showSearch={{
|
|
filterOption: filterOption
|
|
}}
|
|
required
|
|
className={providerTypeStyles.providerType}
|
|
prefix={renderLogoPrefix()}
|
|
options={maasProviderOptions}
|
|
optionRender={optionRender}
|
|
label={intl.formatMessage({
|
|
id: 'common.table.type'
|
|
})}
|
|
/>
|
|
</Form.Item>
|
|
<ProviderConfigs />
|
|
<Form.Item<FormData>
|
|
name="api_key"
|
|
rules={[
|
|
{
|
|
required: true,
|
|
message: getRuleMessage('input', 'providers.form.tokens.title')
|
|
}
|
|
]}
|
|
>
|
|
<Password
|
|
required
|
|
visibilityToggle={action !== PageAction.EDIT}
|
|
onBlur={onAPIKeyBlur}
|
|
label={intl.formatMessage({
|
|
id: 'providers.form.tokens.title'
|
|
})}
|
|
/>
|
|
</Form.Item>
|
|
<Form.Item<FormData> name="description">
|
|
<CInput.TextArea
|
|
scaleSize={true}
|
|
label={intl.formatMessage({
|
|
id: 'common.table.description'
|
|
})}
|
|
></CInput.TextArea>
|
|
</Form.Item>
|
|
</>
|
|
);
|
|
};
|
|
|
|
export default Basic;
|