export function useDetail()

in seatunnel-ui/src/views/datasource/create/use-detail.ts [29:119]


export function useDetail(
  getFieldsValue: Function,
  setFieldsValue: Function,
  getFormItems: Function,
  detailFormRef: Ref,
  id: string
) {
  const { t } = useI18n()
  const router = useRouter()
  const status = reactive({
    saving: false,
    testing: false,
    loading: false
  })

  const formatParams = () => {
    const values = getFieldsValue()
    return {
      datasourceName: values.datasourceName,
      pluginName: values.pluginName,
      description: values.description,
      datasourceConfig: JSON.stringify(
        omit(values, ['pluginName', 'datasourceName', 'description'])
      )
    }
  }

  const queryById = async () => {
    try {
      const result = await datasourceDetail(id)
      await getFormItems(result.pluginName)
      setFieldsValue({
        datasourceName: result.datasourceName,
        pluginName: result.pluginName,
        description: result.description,
        ...result.datasourceConfig
      })
    } finally {}
  }

  const testConnect = async () => {
    await detailFormRef.value.validate()
    if (status.testing) return
    status.testing = true
    const values = getFieldsValue()
    try {
      const result = await checkConnect({
        pluginName: values.pluginName,
        datasourceConfig: omit(values, ['pluginName', 'datasourceName', 'description'])
      })
      window.$message.success(
        result.msg ? result.msg : `${t('datasource.test_connect_success')}`
      )

      status.testing = false
    } catch (err) {
      status.testing = false
    }
  }

  const createOrUpdate = async () => {
    await detailFormRef.value.validate()

    if (status.saving) return false
    status.saving = true

    try {
      id
        ? await datasourceUpdate(formatParams(), id)
        : await datasourceAdd(formatParams())

      status.saving = false
      router.push({
        name: 'datasource-list',
        query: {}
      })
      return true
    } catch (err) {
      status.saving = false
      return false
    }
  }

  onMounted(() => {
    if (id) {
      queryById()
    }
  })

  return { status, testConnect, createOrUpdate }
}