leezng commented on code in PR #8949:
URL: https://github.com/apache/inlong/pull/8949#discussion_r1333801715
##########
inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncTransform/DetailModal.tsx:
##########
@@ -44,41 +45,224 @@ const Comp: React.FC<Props> = ({
const [form] = useForm();
const { t } = useTranslation();
- const { defaultValue } = useDefaultMeta('transform');
+ const [sourceNames, setSourcesNames] = useState([]);
+ const [sinkNames, setSinkNames] = useState([]);
- const [type, setType] = useState(defaultValue);
+ const { data, run: getData } = useRequest(
+ streamId => ({
+ url: `/stream/getBrief`,
+ params: {
+ groupId: inlongGroupId,
+ streamId,
+ },
+ }),
+ {
+ manual: true,
+ },
+ );
- const { loading, Entity } = useLoadMeta<TransformMetaType>('transform',
type);
+ const { data: sourceData, run: getSourceData } = useRequest(
+ inlongStreamId => ({
+ url: `/source/list`,
+ method: 'POST',
+ data: {
+ inlongGroupId,
+ inlongStreamId,
+ },
+ }),
+ {
+ manual: true,
+ onSuccess: result => {
+ const list = result.list.map(item => item.sourceName);
+ setSourcesNames(list);
+ },
+ },
+ );
- const { data, run: getData } = useRequest(
+ const { data: sinkData, run: getSinkData } = useRequest(
+ inlongStreamId => ({
+ url: `/sink/list`,
+ method: 'POST',
+ data: {
+ inlongGroupId,
+ inlongStreamId,
+ },
+ }),
+ {
+ manual: true,
+ onSuccess: result => {
+ const list = result.list.map(item => item.sinkName);
+ setSinkNames(list);
+ },
+ },
+ );
+
+ const { data: transformData, run: getTransformData } = useRequest(
id => ({
url: `/transform/get/${id}`,
}),
{
manual: true,
- formatResult: result => new Entity()?.parse(result) || result,
onSuccess: result => {
- form.setFieldsValue(result);
- setType(result.transform);
+ form.setFieldsValue(JSON.parse(result.transformDefinition));
},
},
);
+ const columns: ColumnsItemProps[] = [
+ {
+ title: i18n.t('pages.SynchronizeDetail.Transform.LogicOperators'),
+ type: 'select',
+ dataIndex: 'relationWithPost',
+ rules: [{ required: true }],
+ props: {
+ options: [
+ {
+ label: 'AND',
+ value: 'AND',
+ },
+ {
+ label: 'OR',
+ value: 'OR',
+ },
+ ],
+ },
+ },
+ {
+ title: i18n.t('pages.SynchronizeDetail.Transform.FilterFields'),
+ type: 'select',
+ dataIndex: 'fieldSource',
+ rules: [{ required: true }],
+ props: (text, record, idx, isNew) => ({
+ options: data?.fieldList.map(item => ({
+ label: item.fieldName,
+ value: item.fieldName,
+ })),
+ onChange: (value, option) => {
+ record.fieldSource = value;
Review Comment:
There should be no need to set `record.fieldSource = ` here
##########
inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncTransform/DetailModal.tsx:
##########
@@ -44,41 +45,224 @@ const Comp: React.FC<Props> = ({
const [form] = useForm();
const { t } = useTranslation();
- const { defaultValue } = useDefaultMeta('transform');
+ const [sourceNames, setSourcesNames] = useState([]);
+ const [sinkNames, setSinkNames] = useState([]);
- const [type, setType] = useState(defaultValue);
+ const { data, run: getData } = useRequest(
+ streamId => ({
+ url: `/stream/getBrief`,
+ params: {
+ groupId: inlongGroupId,
+ streamId,
+ },
+ }),
+ {
+ manual: true,
+ },
+ );
- const { loading, Entity } = useLoadMeta<TransformMetaType>('transform',
type);
+ const { data: sourceData, run: getSourceData } = useRequest(
+ inlongStreamId => ({
+ url: `/source/list`,
+ method: 'POST',
+ data: {
+ inlongGroupId,
+ inlongStreamId,
+ },
+ }),
+ {
+ manual: true,
+ onSuccess: result => {
+ const list = result.list.map(item => item.sourceName);
+ setSourcesNames(list);
+ },
+ },
+ );
- const { data, run: getData } = useRequest(
+ const { data: sinkData, run: getSinkData } = useRequest(
+ inlongStreamId => ({
+ url: `/sink/list`,
+ method: 'POST',
+ data: {
+ inlongGroupId,
+ inlongStreamId,
+ },
+ }),
+ {
+ manual: true,
+ onSuccess: result => {
+ const list = result.list.map(item => item.sinkName);
+ setSinkNames(list);
+ },
+ },
+ );
+
+ const { data: transformData, run: getTransformData } = useRequest(
id => ({
url: `/transform/get/${id}`,
}),
{
manual: true,
- formatResult: result => new Entity()?.parse(result) || result,
onSuccess: result => {
- form.setFieldsValue(result);
- setType(result.transform);
+ form.setFieldsValue(JSON.parse(result.transformDefinition));
},
},
);
+ const columns: ColumnsItemProps[] = [
+ {
+ title: i18n.t('pages.SynchronizeDetail.Transform.LogicOperators'),
+ type: 'select',
+ dataIndex: 'relationWithPost',
+ rules: [{ required: true }],
+ props: {
+ options: [
+ {
+ label: 'AND',
+ value: 'AND',
+ },
+ {
+ label: 'OR',
+ value: 'OR',
+ },
+ ],
+ },
+ },
+ {
+ title: i18n.t('pages.SynchronizeDetail.Transform.FilterFields'),
+ type: 'select',
+ dataIndex: 'fieldSource',
+ rules: [{ required: true }],
+ props: (text, record, idx, isNew) => ({
+ options: data?.fieldList.map(item => ({
+ label: item.fieldName,
+ value: item.fieldName,
+ })),
+ onChange: (value, option) => {
+ record.fieldSource = value;
+ const field = data?.fieldList.find(item => value === item.fieldName);
+ return (record.sourceField = {
Review Comment:
return an object, do not return (var=)
##########
inlong-dashboard/src/ui/pages/SynchronizeDetail/SyncTransform/DetailModal.tsx:
##########
@@ -44,41 +45,224 @@ const Comp: React.FC<Props> = ({
const [form] = useForm();
const { t } = useTranslation();
- const { defaultValue } = useDefaultMeta('transform');
+ const [sourceNames, setSourcesNames] = useState([]);
+ const [sinkNames, setSinkNames] = useState([]);
- const [type, setType] = useState(defaultValue);
+ const { data, run: getData } = useRequest(
+ streamId => ({
+ url: `/stream/getBrief`,
+ params: {
+ groupId: inlongGroupId,
+ streamId,
+ },
+ }),
+ {
+ manual: true,
+ },
+ );
- const { loading, Entity } = useLoadMeta<TransformMetaType>('transform',
type);
+ const { data: sourceData, run: getSourceData } = useRequest(
+ inlongStreamId => ({
+ url: `/source/list`,
+ method: 'POST',
+ data: {
+ inlongGroupId,
+ inlongStreamId,
+ },
+ }),
+ {
+ manual: true,
+ onSuccess: result => {
+ const list = result.list.map(item => item.sourceName);
+ setSourcesNames(list);
+ },
+ },
+ );
- const { data, run: getData } = useRequest(
+ const { data: sinkData, run: getSinkData } = useRequest(
+ inlongStreamId => ({
+ url: `/sink/list`,
+ method: 'POST',
+ data: {
+ inlongGroupId,
+ inlongStreamId,
+ },
+ }),
+ {
+ manual: true,
+ onSuccess: result => {
+ const list = result.list.map(item => item.sinkName);
+ setSinkNames(list);
+ },
+ },
+ );
+
+ const { data: transformData, run: getTransformData } = useRequest(
id => ({
url: `/transform/get/${id}`,
}),
{
manual: true,
- formatResult: result => new Entity()?.parse(result) || result,
onSuccess: result => {
- form.setFieldsValue(result);
- setType(result.transform);
+ form.setFieldsValue(JSON.parse(result.transformDefinition));
},
},
);
+ const columns: ColumnsItemProps[] = [
+ {
+ title: i18n.t('pages.SynchronizeDetail.Transform.LogicOperators'),
+ type: 'select',
+ dataIndex: 'relationWithPost',
+ rules: [{ required: true }],
+ props: {
+ options: [
+ {
+ label: 'AND',
+ value: 'AND',
+ },
+ {
+ label: 'OR',
+ value: 'OR',
+ },
+ ],
+ },
+ },
+ {
+ title: i18n.t('pages.SynchronizeDetail.Transform.FilterFields'),
+ type: 'select',
+ dataIndex: 'fieldSource',
+ rules: [{ required: true }],
+ props: (text, record, idx, isNew) => ({
+ options: data?.fieldList.map(item => ({
+ label: item.fieldName,
+ value: item.fieldName,
+ })),
+ onChange: (value, option) => {
+ record.fieldSource = value;
+ const field = data?.fieldList.find(item => value === item.fieldName);
+ return (record.sourceField = {
+ fieldName: field.fieldName,
+ fieldType: field.fieldType,
+ });
+ },
+ }),
+ },
+ {
+ title: i18n.t('pages.SynchronizeDetail.Transform.Operators'),
+ type: 'select',
+ dataIndex: 'operationType',
+ rules: [{ required: true }],
+ props: {
+ options: [
+ {
+ label: '<',
+ value: 'lt',
+ },
+ {
+ label: '>',
+ value: 'gt',
+ },
+ {
+ label: '<=',
+ value: 'le',
+ },
+ {
+ label: '>=',
+ value: 'ge',
+ },
+ {
+ label: '=',
+ value: 'eq',
+ },
+ {
+ label: '!=',
+ value: 'ne',
+ },
+ {
+ label:
i18n.t('pages.SynchronizeDetail.Transform.Operators.IsNull'),
+ value: 'is_null',
+ },
+ {
+ label:
i18n.t('pages.SynchronizeDetail.Transform.Operators.NotNull'),
+ value: 'not_null',
+ },
+ ],
+ },
+ },
+ {
+ title: i18n.t('pages.SynchronizeDetail.Transform.Type'),
+ type: 'select',
+ dataIndex: 'type',
+ rules: [{ required: true }],
+ props: {
+ options: [
+ {
+ label: i18n.t('pages.SynchronizeDetail.Transform.Type.Field'),
+ value: 'field',
+ },
+ {
+ label:
i18n.t('pages.SynchronizeDetail.Transform.Type.CustomValue'),
+ value: 'customize',
+ },
+ ],
+ },
+ },
+ {
+ title: i18n.t('pages.SynchronizeDetail.Transform.ComparisonValue'),
+ type: 'autocomplete',
+ dataIndex: 'fieldSink',
+ initialValue: '',
+ rules: [{ required: true }],
+ props: (text, record, idx, isNew) => ({
+ options:
+ record.type === 'field'
+ ? sinkData?.list[0]?.sinkFieldList.map(item => ({
+ label: item.fieldName,
+ value: item.fieldName,
+ }))
+ : null,
+ onChange: (value, option) => {
+ record.fieldSink = value;
Review Comment:
Same as above
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]