in dolphinscheduler-ui/src/views/datasource/list/use-form.ts [31:363]
export function useForm(id?: number) {
const { t } = useI18n()
const initialValues = {
type: 'MYSQL',
label: 'MYSQL',
name: '',
note: '',
host: '',
port: datasourceType['MYSQL'].defaultPort,
principal: '',
javaSecurityKrb5Conf: '',
loginUserKeytabUsername: '',
loginUserKeytabPath: '',
mode: '',
userName: '',
password: '',
database: '',
connectType: '',
other: '',
endpoint: '',
MSIClientId: '',
dbUser: '',
datawarehouse: ''
} as IDataSourceDetail
const state = reactive({
detailFormRef: ref(),
detailForm: { ...initialValues },
requiredDataBase: true,
showHost: true,
showPort: true,
showAwsRegion: false,
showRestEndpoint: false,
showCompatibleMode: false,
showConnectType: false,
showPrincipal: false,
showMode: false,
showDataBaseName: true,
showJDBCConnectParameters: true,
showPublicKey: false,
showNamespace: false,
showKubeConfig: false,
showAccessKeyId: false,
showAccessKeySecret: false,
showRegionId: false,
showEndpoint: false,
rules: {
name: {
trigger: ['input'],
validator() {
if (!state.detailForm.name) {
return new Error(t('datasource.datasource_name_tips'))
}
}
},
host: {
trigger: ['input'],
validator() {
if (!state.detailForm.host && state.showHost) {
return new Error(t('datasource.ip_tips'))
}
}
},
port: {
trigger: ['input'],
validator() {
if (state.showMode && state.detailForm.mode === 'IAM-accessKey') {
return
}
if (!state.detailForm.port && state.showPort) {
return new Error(t('datasource.port_tips'))
}
}
},
principal: {
trigger: ['input'],
validator() {
if (!state.detailForm.principal && state.showPrincipal) {
return new Error(t('datasource.principal_tips'))
}
}
},
mode: {
trigger: ['blur'],
validator() {
if (!state.detailForm.mode && state.showMode) {
return new Error(t('datasource.mode_tips'))
}
}
},
userName: {
trigger: ['input'],
validator() {
if (
!state.detailForm.userName &&
state.detailForm.type !== 'AZURESQL' &&
state.detailForm.type !== 'K8S' &&
state.detailForm.type !== 'ALIYUN_SERVERLESS_SPARK'
) {
return new Error(t('datasource.user_name_tips'))
}
}
},
awsRegion: {
trigger: ['input'],
validator() {
if (!state.detailForm.awsRegion && state.showAwsRegion) {
return new Error(t('datasource.aws_region_tips'))
}
}
},
database: {
trigger: ['input'],
validator() {
if (!state.detailForm.database && state.requiredDataBase) {
return new Error(t('datasource.database_name_tips'))
}
}
},
datawarehouse: {
trigger: ['input'],
validator() {
if (!state.detailForm.datawarehouse) {
return new Error(t('datasource.datawarehouse_tips'))
}
}
},
connectType: {
trigger: ['update'],
validator() {
if (!state.detailForm.connectType && state.showConnectType) {
return new Error(t('datasource.oracle_connect_type_tips'))
}
}
},
other: {
trigger: ['input', 'blur'],
validator() {
if (state.detailForm.other && !utils.isJson(state.detailForm.other)) {
return new Error(t('datasource.jdbc_format_tips'))
}
}
},
endpoint: {
trigger: ['input'],
validator() {
if (
!state.detailForm.endpoint &&
state.detailForm.type === 'AZURESQL' &&
state.detailForm.mode === 'accessToken'
) {
return new Error(t('datasource.endpoint_tips'))
}
}
},
dbUser: {
trigger: ['input'],
validator() {
if (
!state.detailForm.dbUser &&
state.showMode &&
state.detailForm.mode === 'IAM-accessKey' &&
state.detailForm.type != 'SAGEMAKER'
) {
return new Error(t('datasource.IAM-accessKey'))
}
}
}
// databaseUserName: {
// trigger: ['input'],
// validator() {
// if (!state.detailForm.userName) {
// return new Error(t('datasource.user_name_tips'))
// }
// }
// },
} as FormRules,
modeOptions: [
{
label: 'SqlPassword',
value: 'SqlPassword'
},
{
label: 'ActiveDirectoryPassword',
value: 'ActiveDirectoryPassword'
},
{
label: 'ActiveDirectoryMSI',
value: 'ActiveDirectoryMSI'
},
{
label: 'ActiveDirectoryServicePrincipal',
value: 'ActiveDirectoryServicePrincipal'
},
{
label: 'accessToken',
value: 'accessToken'
}
],
redShiftModeOptions: [
{
label: 'password',
value: 'password'
},
{
label: 'IAM-accessKey',
value: 'IAM-accessKey'
}
],
sagemakerModeOption: [
{
label: 'IAM-accessKey',
value: 'IAM-accessKey'
}
]
})
const changeType = async (type: IDataBase, options: IDataBaseOption) => {
state.detailForm.port = options.previousPort || options.defaultPort
state.detailForm.type = type
state.requiredDataBase = type !== 'POSTGRESQL' && type !== 'ATHENA'
state.showHost = type !== 'ATHENA'
state.showPort = type !== 'ATHENA'
state.showAwsRegion = type === 'ATHENA' || type === 'SAGEMAKER'
state.showMode = ['AZURESQL', 'REDSHIFT', 'SAGEMAKER'].includes(type)
if (type === 'ORACLE' && !id) {
state.detailForm.connectType = 'ORACLE_SERVICE_NAME'
}
state.showConnectType = type === 'ORACLE'
state.showCompatibleMode = type == 'OCEANBASE'
if (type === 'HIVE' || type === 'SPARK') {
state.showPrincipal = await getKerberosStartupState()
} else {
state.showPrincipal = false
}
if (
type === 'SSH' ||
type === 'ZEPPELIN' ||
type === 'SAGEMAKER' ||
type === 'K8S' ||
type === 'ALIYUN_SERVERLESS_SPARK'
) {
state.showDataBaseName = false
state.requiredDataBase = false
state.showJDBCConnectParameters = false
state.showPublicKey = false
if (type === 'SSH') {
state.showPublicKey = true
}
if (type === 'ZEPPELIN') {
state.showHost = false
state.showPort = false
state.showRestEndpoint = true
} else {
state.showRestEndpoint = false
}
if (
type === 'SAGEMAKER' ||
type === 'K8S' ||
type == 'ALIYUN_SERVERLESS_SPARK'
) {
state.showHost = false
state.showPort = false
}
if (type === 'K8S') {
state.showNamespace = true
state.showKubeConfig = true
} else {
state.showNamespace = false
state.showKubeConfig = false
}
if (type === 'ALIYUN_SERVERLESS_SPARK') {
state.showAccessKeyId = true
state.showAccessKeySecret = true
state.showRegionId = true
state.showEndpoint = true
} else {
state.showAccessKeyId = false
state.showAccessKeySecret = false
state.showRegionId = false
state.showEndpoint = false
}
} else {
state.showDataBaseName = true
state.requiredDataBase = true
state.showJDBCConnectParameters = true
state.showPublicKey = false
state.showRestEndpoint = false
state.showNamespace = false
state.showKubeConfig = false
state.showAccessKeyId = false
state.showAccessKeySecret = false
state.showRegionId = false
state.showEndpoint = false
}
}
const changePort = async () => {
if (!state.detailForm.type) return
const currentDataBaseOption = datasourceType[state.detailForm.type]
currentDataBaseOption.previousPort = state.detailForm.port
}
const resetFieldsValue = () => {
state.detailForm = { ...initialValues }
}
const setFieldsValue = (values: IDataSource) => {
state.detailForm = {
...state.detailForm,
...values,
other: values.other ? JSON.stringify(values.other) : values.other
}
}
const getFieldsValue = () => state.detailForm
return {
state,
changeType,
changePort,
resetFieldsValue,
setFieldsValue,
getFieldsValue
}
}