diff --git a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Datasource/components/DataSourceBasicForm.tsx b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Datasource/components/DataSourceBasicForm.tsx index e53016dd4..726920e46 100644 --- a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Datasource/components/DataSourceBasicForm.tsx +++ b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Datasource/components/DataSourceBasicForm.tsx @@ -1,8 +1,9 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { Form, Input, Spin, Select, message } from 'antd'; import type { FormInstance } from 'antd/lib/form'; -import { getDbNames, getTables } from '../../service'; +import { getDbNames, getTables, getDimensionList } from '../../service'; import { ISemantic } from '../../data'; +import FormItemTitle from '@/components/FormHelper/FormItemTitle'; import { isString } from 'lodash'; const FormItem = Form.Item; @@ -11,15 +12,45 @@ const { TextArea } = Input; type Props = { isEdit?: boolean; databaseConfigList: ISemantic.IDatabaseItemList; + modelItem: ISemantic.IModelItem; form: FormInstance; mode?: 'normal' | 'fast'; }; -const DataSourceBasicForm: React.FC = ({ isEdit, databaseConfigList, mode = 'normal' }) => { +const DataSourceBasicForm: React.FC = ({ + isEdit, + modelItem, + databaseConfigList, + mode = 'normal', +}) => { const [currentDbLinkConfigId, setCurrentDbLinkConfigId] = useState(); const [dbNameList, setDbNameList] = useState([]); const [tableNameList, setTableNameList] = useState([]); const [loading, setLoading] = useState(false); + const [dimensionOptions, setDimensionOptions] = useState<{ label: string; value: number }[]>([]); + + useEffect(() => { + if (modelItem?.id) { + queryDimensionList(); + } + }, [modelItem]); + + const queryDimensionList = async () => { + const { code, data, msg } = await getDimensionList({ modelId: modelItem?.id }); + if (code === 200 && Array.isArray(data?.list)) { + setDimensionOptions( + data.list.map((item: ISemantic.IDimensionItem) => { + return { + label: item.name, + value: item.id, + }; + }), + ); + } else { + message.error(msg); + } + }; + const queryDbNameList = async (databaseId: number) => { setLoading(true); const { code, data, msg } = await getDbNames(databaseId); @@ -129,7 +160,7 @@ const DataSourceBasicForm: React.FC = ({ isEdit, databaseConfigList, mode }} getValueProps={(value) => { return { - value: isString(value) ? value.split(',') : [], + value: value && isString(value) ? value.split(',') : [], }; }} > @@ -140,6 +171,23 @@ const DataSourceBasicForm: React.FC = ({ isEdit, databaseConfigList, mode maxTagCount={9} /> + + } + hidden={!modelItem?.id} + > +