diff --git a/scaleph-api/src/main/java/cn/sliew/scaleph/api/controller/ws/WsSeaTunnelController.java b/scaleph-api/src/main/java/cn/sliew/scaleph/api/controller/ws/WsSeaTunnelController.java new file mode 100644 index 000000000..8fe0fecb6 --- /dev/null +++ b/scaleph-api/src/main/java/cn/sliew/scaleph/api/controller/ws/WsSeaTunnelController.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.scaleph.api.controller.ws; + +import cn.sliew.scaleph.api.annotation.Logging; +import cn.sliew.scaleph.common.dict.seatunnel.SeaTunnelEngineType; +import cn.sliew.scaleph.dag.xflow.dnd.DndDTO; +import cn.sliew.scaleph.engine.seatunnel.service.SeaTunnelDagService; +import cn.sliew.scaleph.plugin.framework.exception.PluginException; +import cn.sliew.scaleph.system.model.ResponseVO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@Tag(name = "SeaTunnel") +@RestController +@RequestMapping(path = {"/api/seatunnel", "/api/seatunnel"}) +public class WsSeaTunnelController { + + @Autowired + private SeaTunnelDagService seaTunnelDagService; + + @Logging + @GetMapping("/dag/dnd/{type}") + @Operation(summary = "查询DAG节点元信息", description = "后端统一返回节点信息") + public ResponseEntity>> loadNodeMeta(@PathVariable("type") SeaTunnelEngineType type) throws PluginException { + List dnds = seaTunnelDagService.getDnds(type); + return new ResponseEntity<>(ResponseVO.success(dnds), HttpStatus.OK); + } +} \ No newline at end of file diff --git a/scaleph-engine/scaleph-engine-seatunnel/src/main/java/cn/sliew/scaleph/engine/seatunnel/dag/dnd/SeaTunnelDagDndDTO.java b/scaleph-engine/scaleph-engine-seatunnel/src/main/java/cn/sliew/scaleph/engine/seatunnel/dag/dnd/SeaTunnelDagDndDTO.java new file mode 100644 index 000000000..3aa7214a3 --- /dev/null +++ b/scaleph-engine/scaleph-engine-seatunnel/src/main/java/cn/sliew/scaleph/engine/seatunnel/dag/dnd/SeaTunnelDagDndDTO.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.scaleph.engine.seatunnel.dag.dnd; + +import cn.sliew.scaleph.common.dict.seatunnel.SeaTunnelConnectorFeature; +import cn.sliew.scaleph.common.dict.seatunnel.SeaTunnelConnectorHealth; +import cn.sliew.scaleph.dag.xflow.dnd.DndDTO; +import lombok.Data; + +@Data +public class SeaTunnelDagDndDTO extends DndDTO { + + private SeaTunnelConnectorHealth health; + + private SeaTunnelConnectorFeature[] features; +} diff --git a/scaleph-engine/scaleph-engine-seatunnel/src/main/java/cn/sliew/scaleph/engine/seatunnel/dag/dnd/SeaTunnelDagDndMeta.java b/scaleph-engine/scaleph-engine-seatunnel/src/main/java/cn/sliew/scaleph/engine/seatunnel/dag/dnd/SeaTunnelDagDndMeta.java new file mode 100644 index 000000000..7568ee087 --- /dev/null +++ b/scaleph-engine/scaleph-engine-seatunnel/src/main/java/cn/sliew/scaleph/engine/seatunnel/dag/dnd/SeaTunnelDagDndMeta.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.scaleph.engine.seatunnel.dag.dnd; + +import cn.sliew.scaleph.dag.xflow.dnd.DndMeta; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(name = "SeaTunnel 节点元数据", description = "SeaTunnel 节点元数据") +public class SeaTunnelDagDndMeta extends DndMeta { + + /** + * @see cn.sliew.scaleph.common.dict.seatunnel.SeaTunnelPluginName + */ + @Schema(description = "connector name") + private String name; + + /** + * @see cn.sliew.scaleph.common.dict.seatunnel.SeaTunnelPluginType + */ + @Schema(description = "connector type") + private String type; + + /** + * @see cn.sliew.scaleph.common.dict.seatunnel.SeaTunnelEngineType + */ + @Schema(description = "engine type") + private String engine; +} diff --git a/scaleph-engine/scaleph-engine-seatunnel/src/main/java/cn/sliew/scaleph/engine/seatunnel/service/SeaTunnelDagService.java b/scaleph-engine/scaleph-engine-seatunnel/src/main/java/cn/sliew/scaleph/engine/seatunnel/service/SeaTunnelDagService.java new file mode 100644 index 000000000..90d26ce73 --- /dev/null +++ b/scaleph-engine/scaleph-engine-seatunnel/src/main/java/cn/sliew/scaleph/engine/seatunnel/service/SeaTunnelDagService.java @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.scaleph.engine.seatunnel.service; + +import cn.sliew.scaleph.common.dict.seatunnel.SeaTunnelEngineType; +import cn.sliew.scaleph.dag.service.DagDndService; +import cn.sliew.scaleph.dag.xflow.dnd.DndDTO; + +import java.util.List; + +public interface SeaTunnelDagService extends DagDndService { + + List getDnds(SeaTunnelEngineType engineType); +} diff --git a/scaleph-engine/scaleph-engine-seatunnel/src/main/java/cn/sliew/scaleph/engine/seatunnel/service/impl/SeaTunnelDagServiceImpl.java b/scaleph-engine/scaleph-engine-seatunnel/src/main/java/cn/sliew/scaleph/engine/seatunnel/service/impl/SeaTunnelDagServiceImpl.java new file mode 100644 index 000000000..48299262c --- /dev/null +++ b/scaleph-engine/scaleph-engine-seatunnel/src/main/java/cn/sliew/scaleph/engine/seatunnel/service/impl/SeaTunnelDagServiceImpl.java @@ -0,0 +1,157 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.scaleph.engine.seatunnel.service.impl; + +import cn.sliew.scaleph.common.dict.seatunnel.SeaTunnelEngineType; +import cn.sliew.scaleph.common.dict.seatunnel.SeaTunnelPluginType; +import cn.sliew.scaleph.dag.xflow.dnd.DndDTO; +import cn.sliew.scaleph.dag.xflow.dnd.DndPortDTO; +import cn.sliew.scaleph.dag.xflow.dnd.DndPortGroupEnum; +import cn.sliew.scaleph.engine.seatunnel.dag.dnd.SeaTunnelDagDndDTO; +import cn.sliew.scaleph.engine.seatunnel.dag.dnd.SeaTunnelDagDndMeta; +import cn.sliew.scaleph.engine.seatunnel.service.SeaTunnelDagService; +import cn.sliew.scaleph.engine.seatunnel.service.SeatunnelConnectorService; +import cn.sliew.scaleph.plugin.framework.core.PluginInfo; +import cn.sliew.scaleph.plugin.seatunnel.flink.SeaTunnelConnectorPlugin; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import static cn.sliew.scaleph.common.dict.seatunnel.SeaTunnelEngineType.SEATUNNEL; + +@Service +public class SeaTunnelDagServiceImpl implements SeaTunnelDagService { + + @Autowired + private SeatunnelConnectorService seatunnelConnectorService; + + @Override + public List getDnds() { + return getDnds(SEATUNNEL); + } + + @Override + public List getDnds(SeaTunnelEngineType engineType) { + switch (engineType) { + case SEATUNNEL: + return loadSeaTunnelPanel(); + default: + return Collections.emptyList(); + } + } + + private List loadSeaTunnelPanel() { + List dnds = new ArrayList(); + for (SeaTunnelPluginType pluginType : SeaTunnelPluginType.values()) { + dnds.add(buildSeaTunnelPluginType(pluginType)); + } + return dnds; + } + + private SeaTunnelDagDndDTO buildSeaTunnelPluginType(SeaTunnelPluginType pluginType) { + SeaTunnelDagDndDTO category = new SeaTunnelDagDndDTO(); + category.setKey(pluginType.getValue()); + category.setTitle(pluginType.getLabel()); + category.setDocString(pluginType.getRemark()); + category.setIsLeaf(false); + List children = new ArrayList(); + Set plugins = seatunnelConnectorService.getAvailableConnectors(pluginType); + for (SeaTunnelConnectorPlugin plugin : plugins) { + SeaTunnelDagDndDTO child = buildSeaTunnelConnector(category, plugin); + SeaTunnelDagDndMeta meta = buildPluginInfo(plugin); + child.setMeta(meta); + List ports; + switch (pluginType) { + case SOURCE: + ports = getSourcePorts(child.getKey()); + break; + case SINK: + ports = getSinkPorts(child.getKey()); + break; + case TRANSFORM: + ports = getTransformPorts(child.getKey()); + break; + default: + ports = Collections.emptyList(); + } + child.setPorts(ports); + children.add(child); + } + category.setChildren(children); + return category; + } + + private SeaTunnelDagDndDTO buildSeaTunnelConnector(SeaTunnelDagDndDTO category, SeaTunnelConnectorPlugin plugin) { + PluginInfo pluginInfo = plugin.getPluginInfo(); + SeaTunnelDagDndDTO node = new SeaTunnelDagDndDTO(); + node.setCategory(category.getKey()); + node.setKey(pluginInfo.getName()); + node.setTitle(plugin.getPluginName().getLabel()); + node.setDocString(pluginInfo.getDescription()); + node.setIsLeaf(true); + node.setHealth(plugin.getPluginHealth()); + node.setFeatures(plugin.getPluginFeatures()); + return node; + } + + private SeaTunnelDagDndMeta buildPluginInfo(SeaTunnelConnectorPlugin connector) { + SeaTunnelDagDndMeta meta = new SeaTunnelDagDndMeta(); + meta.setName(connector.getPluginName().getValue()); + meta.setType(connector.getPluginType().getValue()); + meta.setEngine(connector.getEngineType().getValue()); + return meta; + } + + + private List getSourcePorts(String key) { + List ports = new ArrayList<>(); + DndPortDTO portDTO = new DndPortDTO(); + portDTO.setId(key + "-" + DndPortGroupEnum.bottom.name()); + portDTO.setGroup(DndPortGroupEnum.bottom.name()); + ports.add(portDTO); + return ports; + } + + private List getSinkPorts(String key) { + List ports = new ArrayList<>(); + DndPortDTO portDTO = new DndPortDTO(); + portDTO.setId(key + "-" + DndPortGroupEnum.top.name()); + portDTO.setGroup(DndPortGroupEnum.top.name()); + ports.add(portDTO); + return ports; + } + + private List getTransformPorts(String key) { + List ports = new ArrayList<>(); + DndPortDTO sourcePort = new DndPortDTO(); + sourcePort.setId(key + "-" + DndPortGroupEnum.top.name()); + sourcePort.setGroup(DndPortGroupEnum.top.name()); + ports.add(sourcePort); + + DndPortDTO sinkPort = new DndPortDTO(); + sinkPort.setId(key + "-" + DndPortGroupEnum.bottom.name()); + sinkPort.setGroup(DndPortGroupEnum.bottom.name()); + ports.add(sinkPort); + return ports; + } +} diff --git a/scaleph-support/scaleph-dag/src/main/java/cn/sliew/scaleph/dag/service/DagDndService.java b/scaleph-support/scaleph-dag/src/main/java/cn/sliew/scaleph/dag/service/DagDndService.java new file mode 100644 index 000000000..6d570f546 --- /dev/null +++ b/scaleph-support/scaleph-dag/src/main/java/cn/sliew/scaleph/dag/service/DagDndService.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.scaleph.dag.service; + +import cn.sliew.scaleph.dag.xflow.dnd.DndDTO; + +import java.util.List; + +public interface DagDndService { + + List getDnds(); +} diff --git a/scaleph-support/scaleph-dag/src/main/java/cn/sliew/scaleph/dag/xflow/dnd/DndDTO.java b/scaleph-support/scaleph-dag/src/main/java/cn/sliew/scaleph/dag/xflow/dnd/DndDTO.java new file mode 100644 index 000000000..090642be3 --- /dev/null +++ b/scaleph-support/scaleph-dag/src/main/java/cn/sliew/scaleph/dag/xflow/dnd/DndDTO.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.scaleph.dag.xflow.dnd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Data +@Schema(name = "折叠面板节点", description = "折叠面板节点") +public class DndDTO { + + @Schema(description = "分组") + private String category; + + @Schema(description = "唯一标识") + private String key; + + @Schema(description = "标题") + private String title; + + @Schema(description = "描述") + private String docString; + + @Schema(description = "是否是叶子节点") + private Boolean isLeaf; + + @Schema(description = "元信息") + private DndMeta meta; + + @Schema(description = "连接桩 Port") + private List ports; + + @Schema(description = "子节点") + private List children; +} diff --git a/scaleph-support/scaleph-dag/src/main/java/cn/sliew/scaleph/dag/xflow/dnd/DndMeta.java b/scaleph-support/scaleph-dag/src/main/java/cn/sliew/scaleph/dag/xflow/dnd/DndMeta.java new file mode 100644 index 000000000..b7d201937 --- /dev/null +++ b/scaleph-support/scaleph-dag/src/main/java/cn/sliew/scaleph/dag/xflow/dnd/DndMeta.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.scaleph.dag.xflow.dnd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(name = "节点元数据", description = "节点元数据") +public class DndMeta { + +} diff --git a/scaleph-support/scaleph-dag/src/main/java/cn/sliew/scaleph/dag/xflow/dnd/DndPortDTO.java b/scaleph-support/scaleph-dag/src/main/java/cn/sliew/scaleph/dag/xflow/dnd/DndPortDTO.java new file mode 100644 index 000000000..0cb946059 --- /dev/null +++ b/scaleph-support/scaleph-dag/src/main/java/cn/sliew/scaleph/dag/xflow/dnd/DndPortDTO.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.scaleph.dag.xflow.dnd; + +import lombok.Data; + +@Data +public class DndPortDTO { + + private String id; + private String group; +} diff --git a/scaleph-support/scaleph-dag/src/main/java/cn/sliew/scaleph/dag/xflow/dnd/DndPortGroupEnum.java b/scaleph-support/scaleph-dag/src/main/java/cn/sliew/scaleph/dag/xflow/dnd/DndPortGroupEnum.java new file mode 100644 index 000000000..8ef4a8fa2 --- /dev/null +++ b/scaleph-support/scaleph-dag/src/main/java/cn/sliew/scaleph/dag/xflow/dnd/DndPortGroupEnum.java @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.scaleph.dag.xflow.dnd; + +/** + * https://x6.antv.vision/zh/docs/tutorial/basic/port + */ +public enum DndPortGroupEnum { + + /** + * 节点顶部 + */ + top, + + /** + * 节点底部 + */ + bottom + ; +} diff --git a/scaleph-ui-react/public/images/DataSource/BigQuery.png b/scaleph-ui-react/public/images/DataSource/BigQuery.png new file mode 100644 index 000000000..0c496e542 Binary files /dev/null and b/scaleph-ui-react/public/images/DataSource/BigQuery.png differ diff --git a/scaleph-ui-react/public/images/DataSource/ClickHouse.png b/scaleph-ui-react/public/images/DataSource/ClickHouse.png index 48fe97c41..cc1e2f929 100644 Binary files a/scaleph-ui-react/public/images/DataSource/ClickHouse.png and b/scaleph-ui-react/public/images/DataSource/ClickHouse.png differ diff --git a/scaleph-ui-react/public/images/DataSource/DataFusion.png b/scaleph-ui-react/public/images/DataSource/DataFusion.png new file mode 100644 index 000000000..b4c9d460f Binary files /dev/null and b/scaleph-ui-react/public/images/DataSource/DataFusion.png differ diff --git a/scaleph-ui-react/public/images/DataSource/DuckDB.png b/scaleph-ui-react/public/images/DataSource/DuckDB.png new file mode 100644 index 000000000..2412f73d3 Binary files /dev/null and b/scaleph-ui-react/public/images/DataSource/DuckDB.png differ diff --git a/scaleph-ui-react/public/images/DataSource/Impala.png b/scaleph-ui-react/public/images/DataSource/Impala.png index 646a31d50..5165796ec 100644 Binary files a/scaleph-ui-react/public/images/DataSource/Impala.png and b/scaleph-ui-react/public/images/DataSource/Impala.png differ diff --git a/scaleph-ui-react/public/images/DataSource/S3.png b/scaleph-ui-react/public/images/DataSource/S3.png index dacd2b979..41897af99 100644 Binary files a/scaleph-ui-react/public/images/DataSource/S3.png and b/scaleph-ui-react/public/images/DataSource/S3.png differ diff --git a/scaleph-ui-react/public/images/DataSource/SQLServer.png b/scaleph-ui-react/public/images/DataSource/SQLServer.png index 6b27c257e..a1f9b64fb 100644 Binary files a/scaleph-ui-react/public/images/DataSource/SQLServer.png and b/scaleph-ui-react/public/images/DataSource/SQLServer.png differ diff --git a/scaleph-ui-react/public/images/DataSource/SQLite.png b/scaleph-ui-react/public/images/DataSource/SQLite.png new file mode 100644 index 000000000..8e7279097 Binary files /dev/null and b/scaleph-ui-react/public/images/DataSource/SQLite.png differ diff --git a/scaleph-ui-react/public/images/DataSource/SnowFlake.png b/scaleph-ui-react/public/images/DataSource/SnowFlake.png new file mode 100644 index 000000000..838df30d1 Binary files /dev/null and b/scaleph-ui-react/public/images/DataSource/SnowFlake.png differ diff --git a/scaleph-ui-react/public/images/DataSource/TiDB.png b/scaleph-ui-react/public/images/DataSource/TiDB.png index 5a4d97de7..561047282 100644 Binary files a/scaleph-ui-react/public/images/DataSource/TiDB.png and b/scaleph-ui-react/public/images/DataSource/TiDB.png differ diff --git a/scaleph-ui-react/public/images/DataSource/Trino.png b/scaleph-ui-react/public/images/DataSource/Trino.png new file mode 100644 index 000000000..a4b466744 Binary files /dev/null and b/scaleph-ui-react/public/images/DataSource/Trino.png differ diff --git a/scaleph-ui-react2/package.json b/scaleph-ui-react2/package.json index 880a4e311..55029a4ca 100644 --- a/scaleph-ui-react2/package.json +++ b/scaleph-ui-react2/package.json @@ -6,6 +6,7 @@ "scripts": { "analyze": "cross-env ANALYZE=1 max build", "build": "max build", + "dist-build": "cross-env REACT_APP_ENV=dist max build", "deploy": "npm run build && npm run gh-pages", "dev": "npm run start:dev", "gh-pages": "gh-pages -d dist", @@ -48,6 +49,9 @@ "@ant-design/icons": "^4.7.0", "@ant-design/pro-components": "^2.3.47", "@antv/xflow": "^2.0.3", + "@antv/xflow-diff": "^1.0.0", + "@antv/layout": "^0.3.2", + "@antv/x6-react-components": "^2.0.8", "@ant-design/pro-layout": "^7.10.3", "@ant-design/use-emotion-css": "1.0.4", "@monaco-editor/react": "^4.4.6", @@ -57,6 +61,7 @@ "ag-grid-react": "^29.2.0", "antd": "^5.0.0", "classnames": "^2.3.2", + "highlight.js": "^10.7.3", "lodash": "^4.17.21", "moment": "^2.29.4", "monaco-editor": "^0.37.0", @@ -79,6 +84,7 @@ "@types/classnames": "^2.3.1", "@types/express": "^4.17.14", "@types/history": "^4.7.11", + "@types/highlight.js": "^9.12.4", "@types/jest": "^29.2.1", "@types/lodash": "^4.14.186", "@types/react": "^17.0.0", diff --git a/scaleph-ui-react2/public/images/DataSource/BigQuery.png b/scaleph-ui-react2/public/images/DataSource/BigQuery.png new file mode 100644 index 000000000..0c496e542 Binary files /dev/null and b/scaleph-ui-react2/public/images/DataSource/BigQuery.png differ diff --git a/scaleph-ui-react2/public/images/DataSource/ClickHouse.png b/scaleph-ui-react2/public/images/DataSource/ClickHouse.png index 48fe97c41..cc1e2f929 100644 Binary files a/scaleph-ui-react2/public/images/DataSource/ClickHouse.png and b/scaleph-ui-react2/public/images/DataSource/ClickHouse.png differ diff --git a/scaleph-ui-react2/public/images/DataSource/DataFusion.png b/scaleph-ui-react2/public/images/DataSource/DataFusion.png new file mode 100644 index 000000000..b4c9d460f Binary files /dev/null and b/scaleph-ui-react2/public/images/DataSource/DataFusion.png differ diff --git a/scaleph-ui-react2/public/images/DataSource/DuckDB.png b/scaleph-ui-react2/public/images/DataSource/DuckDB.png new file mode 100644 index 000000000..2412f73d3 Binary files /dev/null and b/scaleph-ui-react2/public/images/DataSource/DuckDB.png differ diff --git a/scaleph-ui-react2/public/images/DataSource/Impala.png b/scaleph-ui-react2/public/images/DataSource/Impala.png index 646a31d50..5165796ec 100644 Binary files a/scaleph-ui-react2/public/images/DataSource/Impala.png and b/scaleph-ui-react2/public/images/DataSource/Impala.png differ diff --git a/scaleph-ui-react2/public/images/DataSource/S3.png b/scaleph-ui-react2/public/images/DataSource/S3.png index dacd2b979..41897af99 100644 Binary files a/scaleph-ui-react2/public/images/DataSource/S3.png and b/scaleph-ui-react2/public/images/DataSource/S3.png differ diff --git a/scaleph-ui-react2/public/images/DataSource/SQLServer.png b/scaleph-ui-react2/public/images/DataSource/SQLServer.png index 6b27c257e..a1f9b64fb 100644 Binary files a/scaleph-ui-react2/public/images/DataSource/SQLServer.png and b/scaleph-ui-react2/public/images/DataSource/SQLServer.png differ diff --git a/scaleph-ui-react2/public/images/DataSource/SQLite.png b/scaleph-ui-react2/public/images/DataSource/SQLite.png new file mode 100644 index 000000000..8e7279097 Binary files /dev/null and b/scaleph-ui-react2/public/images/DataSource/SQLite.png differ diff --git a/scaleph-ui-react2/public/images/DataSource/SnowFlake.png b/scaleph-ui-react2/public/images/DataSource/SnowFlake.png new file mode 100644 index 000000000..838df30d1 Binary files /dev/null and b/scaleph-ui-react2/public/images/DataSource/SnowFlake.png differ diff --git a/scaleph-ui-react2/public/images/DataSource/TiDB.png b/scaleph-ui-react2/public/images/DataSource/TiDB.png index 5a4d97de7..561047282 100644 Binary files a/scaleph-ui-react2/public/images/DataSource/TiDB.png and b/scaleph-ui-react2/public/images/DataSource/TiDB.png differ diff --git a/scaleph-ui-react2/public/images/DataSource/Trino.png b/scaleph-ui-react2/public/images/DataSource/Trino.png new file mode 100644 index 000000000..a4b466744 Binary files /dev/null and b/scaleph-ui-react2/public/images/DataSource/Trino.png differ diff --git a/scaleph-ui-react2/src/app.tsx b/scaleph-ui-react2/src/app.tsx index d094ceca2..1358d4573 100644 --- a/scaleph-ui-react2/src/app.tsx +++ b/scaleph-ui-react2/src/app.tsx @@ -102,7 +102,7 @@ export const layout: RunTimeLayoutConfig = ({initialState, setInitialState}) => return (<>{defaultDom}); }, rightContentRender: () => , - menuDataRender: () => defaultMenus, + // menuDataRender: () => defaultMenus, menuItemRender: (menuItemProps: any, defaultDom: any) => { return ( diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/graph-cut.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/graph-cut.tsx deleted file mode 100644 index dc803d609..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/graph-cut.tsx +++ /dev/null @@ -1,120 +0,0 @@ -import type { Cell } from '@antv/x6'; -import { HookHub, IArgsBase, ICommandHandler, IHooks, NsGraph } from '@antv/xflow'; -import { ICommandContextProvider } from '@antv/xflow-core/es/command/interface'; -import { Disposable } from '@antv/xflow-core/es/common/disposable'; -import { cellsToJson } from '@antv/xflow-core/es/common/graph-utils'; -import { LOCAL_STORAGE_KEY } from '@antv/xflow-core/es/constants'; -import { inject, injectable } from 'mana-syringe'; -import { CustomCommands } from '../constant'; - -type ICommand = ICommandHandler< - NsGraphCutSelection.IArgs, - NsGraphCutSelection.IResult, - NsGraphCutSelection.ICmdHooks ->; - -export namespace NsGraphCutSelection { - /** command : register name facotry */ - export const command = CustomCommands.GRAPH_CUT; - /** hookName*/ - export const hookKey = 'graphCutSelection'; - /** hook parameter type */ - export type IArgs = IArgsBase; - /** hook handler return data type */ - export interface IResult { - err: null | string; - } - /**hook type */ - export interface ICmdHooks extends IHooks { - graphCopySelection: HookHub; - } -} - -@injectable({ - token: { token: ICommandHandler, named: NsGraphCutSelection.command.id }, -}) -export class GraphCutSelectionCommand implements ICommand { - @inject(ICommandContextProvider) contextProvider: ICommand['contextProvider']; - - parseCells = (cells: Cell[]) => { - // if groupNode add its group children - cells.forEach((cell) => { - const data = cell.getData(); - if (cell.isNode() && data.isGroup) { - const children = cell.getChildren(); - children?.forEach((child) => { - cells.push(child); - }); - } - }); - // filter edges target not in selections - const nodeIds = cells.filter((cell) => cell.isNode()).map((cell) => cell.id); - const map = cells.reduce((acc, cell) => { - if (cell.isEdge()) { - const source = cell.getSourceCellId(); - const target = cell.getTargetCellId(); - if (source && target) { - if (nodeIds.includes(source) && nodeIds.includes(target)) { - acc.set(cell.id, cell); - } - } - } else { - acc.set(cell.id, cell); - } - return acc; - }, new Map()); - const uniqeList = Array.from(map.values()); - return cellsToJson(uniqeList); - }; - - execute = async () => { - const ctx = this.contextProvider(); - const { args, hooks: runtimeHook } = ctx.getArgs(); - const hooks = ctx.getHooks(); - const result = await hooks.graphCopySelection.call( - args, - async () => { - const graph = await ctx.getX6Graph(); - const cells = graph.getSelectedCells(); - graph.removeCells(cells); - // 处理 Group cells/过滤无效的edges - const jsonObject: NsGraph.IGraphData = this.parseCells(cells); - const oldJsonString = window.localStorage.getItem(LOCAL_STORAGE_KEY); - // 写cache - window.localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(jsonObject)); - // undo 写cache - ctx.addUndo( - Disposable.create(async () => { - window.localStorage.setItem(LOCAL_STORAGE_KEY, oldJsonString + ''); - }), - ); - return { err: null }; - }, - runtimeHook, - ); - result ? ctx.setResult(result) : null; - return this; - }; - - /** undo cmd */ - undo = async () => { - const ctx = this.contextProvider(); - if (this.isUndoable()) { - ctx.undo(); - } - return this; - }; - - /** redo cmd */ - redo = async () => { - if (!this.isUndoable()) { - await this.execute(); - } - return this; - }; - - isUndoable(): boolean { - const ctx = this.contextProvider(); - return ctx.isUndoable(); - } -} diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/graph-help.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/graph-help.tsx deleted file mode 100644 index e5278d1d4..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/graph-help.tsx +++ /dev/null @@ -1,176 +0,0 @@ -import enUS from 'antd/es/locale/en_US'; -import zhCN from 'antd/es/locale/zh_CN'; -import React, { useEffect } from 'react'; -import { ConfigProvider, Descriptions, Form, Input, message, Modal } from 'antd'; -import { getIntl, getLocale } from '@umijs/max'; -import { ModalFormProps } from '@/typings'; -import { WsDiJobService } from '@/services/project/WsDiJobService'; -import { - IArgsBase, - ICmdHooks as IHooks, - ICommandContextProvider, - ICommandHandler, - ManaSyringe, - NsGraph, -} from '@antv/xflow'; -import type { HookHub } from '@antv/xflow-hook'; -import { render, unmount } from 'rc-util/lib/React/render'; -import { CustomCommands } from '../constant'; - -const { inject, injectable, postConstruct } = ManaSyringe; - -type ICommand = ICommandHandler; - -export namespace NsGraphHelp { - /** Command: 用于注册named factory */ - export const command = CustomCommands.GRAPH_HELP; - /** hook name */ - export const hookKey = 'graphHelp'; - - /** hook 参数类型 */ - export interface IArgs extends IArgsBase {} - - /** hook handler 返回类型 */ - export interface IResult { - err: any; - } - - /** hooks 类型 */ - export interface ICmdHooks extends IHooks { - graphHelp: HookHub; - } -} - -@injectable({ - token: { token: ICommandHandler, named: NsGraphHelp.command.id }, -}) -/** 创建节点命令 */ -export class GraphHelpCommand implements ICommand { - /** api */ - @inject(ICommandContextProvider) contextProvider: ICommand['contextProvider']; - - @postConstruct() - init() {} - - /** 执行Cmd */ - execute = async () => { - const ctx = this.contextProvider(); - const hooks = ctx.getHooks(); - const { args, hooks: runtimeHook } = ctx.getArgs(); - const result = await hooks.graphHelp.call( - args, - async () => { - const graphMeta = await ctx.getGraphMeta(); - this.showModal(graphMeta); - return { err: null }; - }, - runtimeHook, - ); - ctx.setResult(result || { err: null }); - return this; - }; - - /** undo cmd */ - undo = async () => { - if (this.isUndoable()) { - const ctx = this.contextProvider(); - ctx.undo(); - } - return this; - }; - - /** redo cmd */ - redo = async () => { - if (!this.isUndoable()) { - await this.execute(); - } - return this; - }; - - isUndoable(): boolean { - const ctx = this.contextProvider(); - return ctx.isUndoable(); - } - - getCurrentLocale = () => { - const local: string = getLocale() as string; - switch (local) { - case 'zh-CN': - return zhCN; - case 'en-US': - return enUS; - default: - return zhCN; - } - }; - - showModal = (graphMeta: NsGraph.IGraphMeta) => { - const container = document.createDocumentFragment(); - const data = { graphMeta: graphMeta, container: container }; - return render( - - this.onCancel(container)} - > - , - container, - ); - }; - - onCancel = (container: DocumentFragment) => { - unmount(container); - }; -} - -const GraphHelpModal: React.FC< - ModalFormProps<{ graphMeta: NsGraph.IGraphMeta; container: DocumentFragment }> -> = ({ data, visible, onCancel }) => { - const intl = getIntl(getLocale(), true); - - return ( - - - - Ctrl + C / Command + C - - - Ctrl + V / Command + V - - - Ctrl + X / Command + X - - - DELETE / BACKSPACE - - - Ctrl + Y / Command + Y - - - Ctrl + Z / Command + Z - - - - ); -}; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/graph-params-modal.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/graph-params-modal.tsx deleted file mode 100644 index 5e628138f..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/graph-params-modal.tsx +++ /dev/null @@ -1,195 +0,0 @@ -import enUS from 'antd/es/locale/en_US'; -import zhCN from 'antd/es/locale/zh_CN'; -import React, {useEffect} from 'react'; -import {ConfigProvider, Form, Input, message, Modal} from 'antd'; -import {getIntl, getLocale} from '@umijs/max'; -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import { - IArgsBase, - ICmdHooks as IHooks, - ICommandContextProvider, - ICommandHandler, - ManaSyringe, - NsGraph, -} from '@antv/xflow'; -import type {HookHub} from '@antv/xflow-hook'; -import {render, unmount} from 'rc-util/lib/React/render'; -import {CustomCommands} from '../constant'; - -const {inject, injectable, postConstruct} = ManaSyringe; - -type ICommand = ICommandHandler; - -export namespace NsGraphParamsSetting { - /** Command: 用于注册named factory */ - export const command = CustomCommands.GRAPH_PARAMS_SETTING; - /** hook name */ - export const hookKey = 'graphParamsSetting'; - - /** hook 参数类型 */ - export interface IArgs extends IArgsBase { - } - - /** hook handler 返回类型 */ - export interface IResult { - err: any; - } - - /** hooks 类型 */ - export interface ICmdHooks extends IHooks { - graphParamsSetting: HookHub; - } -} - -@injectable({ - token: {token: ICommandHandler, named: NsGraphParamsSetting.command.id}, -}) -/** 创建节点命令 */ -export class GraphParamsSettingCommand implements ICommand { - /** api */ - @inject(ICommandContextProvider) contextProvider: ICommand['contextProvider']; - - @postConstruct() - init() { - } - - /** 执行Cmd */ - execute = async () => { - const ctx = this.contextProvider(); - const hooks = ctx.getHooks(); - const {args, hooks: runtimeHook} = ctx.getArgs(); - const result = await hooks.graphParamsSetting.call( - args, - async () => { - const graphMeta = await ctx.getGraphMeta(); - this.showModal(graphMeta); - return {err: null}; - }, - runtimeHook, - ); - ctx.setResult(result || {err: null}); - return this; - }; - - /** undo cmd */ - undo = async () => { - if (this.isUndoable()) { - const ctx = this.contextProvider(); - ctx.undo(); - } - return this; - }; - - /** redo cmd */ - redo = async () => { - if (!this.isUndoable()) { - await this.execute(); - } - return this; - }; - - isUndoable(): boolean { - const ctx = this.contextProvider(); - return ctx.isUndoable(); - } - - getCurrentLocale = () => { - const local: string = getLocale() as string; - switch (local) { - case 'zh-CN': - return zhCN; - case 'en-US': - return enUS; - default: - return zhCN; - } - }; - - showModal = (graphMeta: NsGraph.IGraphMeta) => { - const container = document.createDocumentFragment(); - const data = {graphMeta: graphMeta, container: container}; - return render( - - this.onCancel(container)} - > - , - container, - ); - }; - - onCancel = (container: DocumentFragment) => { - unmount(container); - }; -} - -const GraphParamsSettingForm: React.FC> = ({ - data, - visible, - onCancel - }) => { - const jobId = data.graphMeta.origin.id; - const [form] = Form.useForm(); - const intl = getIntl(getLocale(), true); - useEffect(() => { - WsDiJobService.listJobAttr(jobId).then((d) => { - form.setFieldsValue(d); - }); - }, []); - return ( - { - form.validateFields().then((values) => { - WsDiJobService.saveJobAttr(values).then((resp) => { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onCancel(); - }); - }); - }} - > -
- - - - - - - - - - -
-
- ); -}; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/graph-preview.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/graph-preview.tsx deleted file mode 100644 index 84b84798f..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/graph-preview.tsx +++ /dev/null @@ -1,189 +0,0 @@ -import enUS from 'antd/es/locale/en_US'; -import zhCN from 'antd/es/locale/zh_CN'; -import React, {useEffect, useRef, useState} from 'react'; -import {ConfigProvider, Modal} from 'antd'; -import {getLocale} from '@umijs/max'; -import {ModalFormProps} from '@/typings'; -import { - IArgsBase, - ICmdHooks as IHooks, - ICommandContextProvider, - ICommandHandler, - ManaSyringe, - NsGraph, -} from '@antv/xflow'; -import type {HookHub} from '@antv/xflow-hook'; -import {render, unmount} from 'rc-util/lib/React/render'; -import {CustomCommands} from '../constant'; -import {WsDiJobService} from "@/services/project/WsDiJobService"; -import Editor, {useMonaco} from "@monaco-editor/react"; - -const {inject, injectable, postConstruct} = ManaSyringe; - -type ICommand = ICommandHandler; - -export namespace NsGraphPreview { - /** Command: 用于注册named factory */ - export const command = CustomCommands.GRAPH_PREVIEW; - /** hook name */ - export const hookKey = 'graphPreview'; - - /** hook 参数类型 */ - export interface IArgs extends IArgsBase { - } - - /** hook handler 返回类型 */ - export interface IResult { - err: any; - } - - /** hooks 类型 */ - export interface ICmdHooks extends IHooks { - graphPreview: HookHub; - } -} - -@injectable({ - token: {token: ICommandHandler, named: NsGraphPreview.command.id} -}) -/** 创建节点命令 */ -export class GraphPreviewCommand implements ICommand { - /** api */ - @inject(ICommandContextProvider) contextProvider: ICommand['contextProvider']; - - @postConstruct() - init() { - } - - /** 执行Cmd */ - execute = async () => { - const ctx = this.contextProvider(); - const hooks = ctx.getHooks(); - const {args, hooks: runtimeHook} = ctx.getArgs(); - const result = await hooks.graphPreview.call( - args, - async () => { - const graphMeta = await ctx.getGraphMeta(); - this.showModal(graphMeta); - return {err: null}; - }, - runtimeHook, - ); - ctx.setResult(result || {err: null}); - return this; - }; - - /** undo cmd */ - undo = async () => { - if (this.isUndoable()) { - const ctx = this.contextProvider(); - ctx.undo(); - } - return this; - }; - - /** redo cmd */ - redo = async () => { - if (!this.isUndoable()) { - await this.execute(); - } - return this; - }; - - isUndoable(): boolean { - const ctx = this.contextProvider(); - return ctx.isUndoable(); - } - - getCurrentLocale = () => { - const local: string = getLocale() as string; - switch (local) { - case 'zh-CN': - return zhCN; - case 'en-US': - return enUS; - default: - return zhCN; - } - }; - - showModal = (graphMeta: NsGraph.IGraphMeta) => { - const container = document.createDocumentFragment(); - const data = {graphMeta: graphMeta, container: container}; - return render( - - this.onCancel(container)} - /> - , - container, - ); - }; - - onCancel = (container: DocumentFragment) => { - unmount(container); - }; -} - -const GraphPreviewForm: React.FC> = ({ - data, - visible, - onCancel - }) => { - const jobId = data.graphMeta.origin.id; - const [conf, setConf] = useState(); - - const editorRef = useRef(null); - const monaco = useMonaco(); - - useEffect(() => { - // do conditional chaining - monaco?.languages.typescript.javascriptDefaults.setEagerModelSync(true); - // or make sure that it exists by other ways - if (monaco) { - // console.log("here is the monaco instance:", monaco); - } - }, [monaco]); - - useEffect(() => { - WsDiJobService.previewJob(jobId).then((reponse) => { - setConf(reponse.data) - }) - }, []); - - const handleEditorDidMount = (editor, monaco) => { - editorRef.current = editor; - } - - return ( - - - - ); -}; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/graph-publish.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/graph-publish.tsx deleted file mode 100644 index ec8503798..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/graph-publish.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import { WsDiJobService } from '@/services/project/WsDiJobService'; -import { - IArgsBase, - ICmdHooks as IHooks, - ICommandContextProvider, - ICommandHandler, - ManaSyringe, -} from '@antv/xflow'; -import type { HookHub } from '@antv/xflow-hook'; -import { message } from 'antd'; -import { getIntl, getLocale } from '@umijs/max'; -import { CustomCommands } from '../constant'; -const { inject, injectable, postConstruct } = ManaSyringe; - -type ICommand = ICommandHandler< - NsGraphPublish.IArgs, - NsGraphPublish.IResult, - NsGraphPublish.ICmdHooks ->; - -export namespace NsGraphPublish { - /** Command: 用于注册named factory */ - export const command = CustomCommands.GRAPH_PUBLISH; - /** hook name */ - export const hookKey = 'graphPublish'; - /** hook 参数类型 */ - export interface IArgs extends IArgsBase {} - - /** hook handler 返回类型 */ - export interface IResult { - err: any; - } - /** hooks 类型 */ - export interface ICmdHooks extends IHooks { - graphPublish: HookHub; - } -} - -@injectable({ - token: { token: ICommandHandler, named: NsGraphPublish.command.id }, -}) -/** 创建节点命令 */ -export class GraphPublishCommand implements ICommand { - @inject(ICommandContextProvider) contextProvider: ICommand['contextProvider']; - - @postConstruct() - init() {} - - /** 执行Cmd */ - execute = async () => { - const intl = getIntl(getLocale(), true); - const ctx = this.contextProvider(); - const hooks = ctx.getHooks(); - const { args, hooks: runtimeHook } = ctx.getArgs(); - const result = await hooks.graphPublish.call( - args, - async () => { - const graphMeta = await ctx.getGraphMeta(); - WsDiJobService.publishJob(graphMeta.origin.id).then((resp) => { - if (resp.success) { - message.info(intl.formatMessage({ id: 'app.common.operate.success' })); - } - }); - return { err: null }; - }, - runtimeHook, - ); - ctx.setResult(result || { err: null }); - return this; - }; - - /** undo cmd */ - undo = async () => { - if (this.isUndoable()) { - const ctx = this.contextProvider(); - ctx.undo(); - } - return this; - }; - - /** redo cmd */ - redo = async () => { - if (!this.isUndoable()) { - await this.execute(); - } - return this; - }; - - isUndoable(): boolean { - const ctx = this.contextProvider(); - return ctx.isUndoable(); - } -} diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/graph-submit.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/graph-submit.tsx deleted file mode 100644 index 49004b93e..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/graph-submit.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import {IArgsBase, ICmdHooks as IHooks, ICommandContextProvider, ICommandHandler, ManaSyringe,} from '@antv/xflow'; -import type {HookHub} from '@antv/xflow-hook'; -import {CustomCommands} from '../constant'; -import {history} from '@umijs/max'; - -const {inject, injectable, postConstruct} = ManaSyringe; - -type ICommand = ICommandHandler; - -export namespace NsGraphSubmit { - /** Command: 用于注册named factory */ - export const command = CustomCommands.GRAPH_SUBMIT; - /** hook name */ - export const hookKey = 'graphSubmit'; - - /** hook 参数类型 */ - export interface IArgs extends IArgsBase { - } - - /** hook handler 返回类型 */ - export interface IResult { - err: any; - } - - /** hooks 类型 */ - export interface ICmdHooks extends IHooks { - graphSubmit: HookHub; - } -} - -@injectable({ - token: {token: ICommandHandler, named: NsGraphSubmit.command.id} -}) -/** 创建节点命令 */ -export class GraphSubmitCommand implements ICommand { - /** api */ - @inject(ICommandContextProvider) contextProvider: ICommand['contextProvider']; - - @postConstruct() - init() { - } - - /** 执行Cmd */ - execute = async () => { - - const ctx = this.contextProvider(); - const hooks = ctx.getHooks(); - const {args, hooks: runtimeHook} = ctx.getArgs(); - const result = await hooks.graphSubmit.call( - args, - async () => { - const graphMeta = await ctx.getGraphMeta(); - history.push('/workspace/dev/job/seatunnel/options', graphMeta.origin); - return {err: null}; - }, - runtimeHook, - ); - ctx.setResult(result || {err: null}); - return this; - }; - - /** undo cmd */ - undo = async () => { - if (this.isUndoable()) { - const ctx = this.contextProvider(); - ctx.undo(); - } - return this; - }; - - /** redo cmd */ - redo = async () => { - if (!this.isUndoable()) { - await this.execute(); - } - return this; - }; - - isUndoable(): boolean { - const ctx = this.contextProvider(); - return ctx.isUndoable(); - } - -} diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/index.js b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/index.js deleted file mode 100644 index b285056e9..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/index.js +++ /dev/null @@ -1,39 +0,0 @@ -import { GraphCutSelectionCommand, NsGraphCutSelection } from './graph-cut'; -import { GraphParamsSettingCommand, NsGraphParamsSetting } from './graph-params-modal'; -import { GraphPublishCommand, NsGraphPublish } from './graph-publish'; -import { EditNodeCommand, NsEditNode } from './step-edit-modal'; -import { GraphPreviewCommand, NsGraphPreview } from './graph-preview'; -import { GraphSubmitCommand, NsGraphSubmit } from './graph-submit'; -import { GraphHelpCommand, NsGraphHelp } from './graph-help'; - -/** 注册成为可以执行的命令 */ -export const commandContributions = [ - { - ...NsGraphCutSelection, - CommandHandler: GraphCutSelectionCommand, - }, - { - ...NsEditNode, - CommandHandler: EditNodeCommand, - }, - { - ...NsGraphParamsSetting, - CommandHandler: GraphParamsSettingCommand, - }, - { - ...NsGraphPreview, - CommandHandler: GraphPreviewCommand, - }, - { - ...NsGraphPublish, - CommandHandler: GraphPublishCommand, - }, - { - ...NsGraphSubmit, - CommandHandler: GraphSubmitCommand, - }, - { - ...NsGraphHelp, - CommandHandler: GraphHelpCommand, - }, -]; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/step-edit-modal.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/step-edit-modal.tsx deleted file mode 100644 index 7d4f3a8c6..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/cmd-extensions/step-edit-modal.tsx +++ /dev/null @@ -1,428 +0,0 @@ -import enUS from 'antd/es/locale/en_US'; -import zhCN from 'antd/es/locale/zh_CN'; - -import { - IArgsBase, - ICmdHooks as IHooks, - ICommandContextProvider, - ICommandHandler, - ManaSyringe, - NsGraph, - XFlowGraphCommands, -} from '@antv/xflow'; -import type {HookHub} from '@antv/xflow-hook'; -import {ConfigProvider} from 'antd'; -import {render, unmount} from 'rc-util/lib/React/render'; -import {getLocale} from '@umijs/max'; -import {CustomCommands} from '../constant'; -import {DagService} from '../service'; -import SinkJdbcStepForm from '../steps/sink/sink-jdbc-step'; -import SourceJdbcStepForm from '../steps/source/source-jdbc-step'; -import SourceHudiStepForm from "../steps/source/source-hudi-step"; -import SourceIcebergStepForm from "../steps/source/source-iceberg-step"; -import SourceLocalFileStepForm from "../steps/source/source-local-file-step"; -import SourceHdfsFileStepForm from "../steps/source/source-hdfs-file-step"; -import SinkLocalFileStepForm from '../steps/sink/sink-local-file-step'; -import SourceFakeStepForm from "../steps/source/source-fake-step"; -import SourceFtpFileStepForm from "../steps/source/source-ftp-file-step"; -import SinkFtpFileStepForm from "../steps/sink/sink-ftp-file-step"; -import SinkHdfsFileStepForm from "../steps/sink/sink-hdfs-file-step"; -import SourceOSSFileStepForm from "../steps/source/source-oss-file-step"; -import SinkOSSFileStepForm from "../steps/sink/sink-oss-file-step"; -import SinkConsoleStepForm from '../steps/sink/sink-console-step'; -import SinkHttpFileStepForm from "../steps/sink/sink-http-step"; -import SourceHttpFileStepForm from "../steps/source/source-http-step"; -import SourceSocketStepForm from '../steps/source/source-socket-step'; -import SinkSocketStepForm from '../steps/sink/sink-socket-step'; -import SinkClickHouseStepForm from '../steps/sink/sink-clickhouse-step'; -import SourceClickHouseStepForm from "../steps/source/source-clickhouse-step"; -import SinkWeChatStepForm from "../steps/sink/sink-wechat-step"; -import SinkFeishuStepForm from "../steps/sink/sink-feishu-step"; -import SinkDingTalkStepForm from "../steps/sink/sink-dingtalk-step"; -import SinkEmailStepForm from "../steps/sink/sink-email-step"; -import SourceHiveStepForm from '../steps/source/source-hive-step'; -import SinkHiveStepForm from '../steps/sink/sink-hive-step'; -import SourceKuduStepForm from '../steps/source/source-kudu-step'; -import SinkKuduStepForm from '../steps/sink/sink-kudu-step'; -import SourceKafkaStepForm from '../steps/source/source-kafka-step'; -import SourceIoTDBStepForm from "../steps/source/source-iotdb-step"; -import SinkIoTDBStepForm from "../steps/sink/sink-iotdb-step"; -import SourceMongoDBStepForm from "../steps/source/source-mongodb-step"; -import SinkMongoDBStepForm from "../steps/sink/sink-mongodb-step"; -import SourceRedisStepForm from "../steps/source/source-redis-step"; -import SinkRedisStepForm from "../steps/sink/sink-redis-step"; -import SourcePulsarStepForm from "../steps/source/source-pulsar-step"; -import SinkDatahubStepForm from "../steps/sink/sink-datahub-step"; -import SinkElasticsearchStepForm from "../steps/sink/sink-elasticsearch-step"; -import SinkNeo4jStepForm from "../steps/sink/sink-neo4j-step"; -import SinkSentryStepForm from "../steps/sink/sink-sentry-step"; -import SourceS3FileStepForm from "../steps/source/source-s3-file-step"; -import SinkS3FileStepForm from "../steps/sink/sink-s3-file-step"; -import SinkKafkaStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-kafka-step"; -import SourceNeo4jStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-neo4j-step"; -import SourceInfluxDBStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-influxdb-step"; -import SourceSftpFileStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-sftp-file-step"; -import SinkSftpFileStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-sftp-file-step"; -import SourceOSSJindoFileStepForm - from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-ossjindo-file-step"; -import SinkOSSJindoFileStepForm - from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-ossjindo-file-step"; -import SourceCassandraStepForm - from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-cassandra-step"; -import SinkCassandraStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-cassandra-step"; -import SinkDorisStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-doris-step"; -import SinkStarRocksStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-starrocks-step"; -import SourceMaxComputeStepForm - from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-maxcompute-step"; -import SinkMaxComputeStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-maxcompute-step"; -import SinkInfluxDBStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-influxdb-step"; -import SourceAmazonDynamodbStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-dynamodb-step"; -import SinkAmazonDynamodbStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-dynamodb-step"; -import SinkS3RedshiftStepForm - from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-s3redshift-file-step"; -import SourceOpenMLDBStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-openmldb-step"; -import SourceCDCMySQLStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-cdc-mysql-step"; -import TransformCopyStepForm from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-copy-step'; -import TransformFieldMapperStepForm - from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-field-mapper-step"; -import TransformFilterRowKindStepForm - from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-filter-row-kind-step"; -import TransformFilterStepForm - from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-filter-step"; -import TransformReplaceStepForm - from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-replace-step"; -import TransformSplitStepForm - from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-split-step"; -import TransformSqlStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-sql-step"; -import SourceElasticsearchStepForm - from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-elasticsearch-step"; -import SourceCDCSqlServerStepForm - from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-cdc-sqlserver-step"; -import SourceStarRocksStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-starrocks-step"; -import SinkHbaseStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-hbase-step"; -import SourceCDCMongoDBStepForm - from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-cdc-mongodb-step"; -import SourcePaimonStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-paimon-step"; -import SinkPaimonStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-paimon-step"; -import SourceRocketMQStepForm - from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-rocketmq-step"; -import SinkRocketMQStepForm from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-rocketmq-step"; - -const {inject, injectable, postConstruct} = ManaSyringe; -type ICommand = ICommandHandler; - -export namespace NsEditNode { - /** Command: 用于注册named factory */ - export const command = CustomCommands.NODE_EDIT; - /** hook name */ - export const hookKey = 'editNode'; - - /** hook 参数类型 */ - export interface IArgs extends IArgsBase { - nodeConfig: NsGraph.INodeConfig; - } - - /** hook handler 返回类型 */ - export interface IResult { - err: any; - } - - /** hooks 类型 */ - export interface ICmdHooks extends IHooks { - editNode: HookHub; - } -} - -@injectable({ - token: {token: ICommandHandler, named: NsEditNode.command.id}, -}) -/** 创建节点命令 */ -export class EditNodeCommand implements ICommand { - /** api */ - @inject(ICommandContextProvider) contextProvider: ICommand['contextProvider']; - - @postConstruct() - init() { - } - - /** 执行Cmd */ - execute = async () => { - const ctx = this.contextProvider(); - const hooks = ctx.getHooks(); - const {args, hooks: runtimeHook} = ctx.getArgs(); - const {nodeConfig} = args; - const result = await hooks.editNode.call( - args, - async () => { - // const { nodeConfig, callback } = handlerArgs; - const graphMeta = await ctx.getGraphMeta(); - const x6Graph = await ctx.getX6Graph(); - const x6Nodes = x6Graph.getNodes(); - const x6Edges = x6Graph.getEdges(); - - const nodes = x6Nodes.map((node) => { - const data = node.getData(); - const position = node.position(); - const size = node.size(); - const model = { - ...data, - ...position, - ...size, - }; - return model; - }); - const edges = x6Edges.map((edge) => { - const data = edge.getData(); - const model = { - ...data, - }; - return model; - }); - const graphData = {nodes, edges}; - this.showModal(nodeConfig, graphData, graphMeta); - return {err: null}; - }, - runtimeHook, - ); - ctx.setResult(result || {err: null}); - return this; - }; - - /** undo cmd */ - undo = async () => { - if (this.isUndoable()) { - const ctx = this.contextProvider(); - ctx.undo(); - } - return this; - }; - - /** redo cmd */ - redo = async () => { - if (!this.isUndoable()) { - await this.execute(); - } - return this; - }; - - isUndoable(): boolean { - const ctx = this.contextProvider(); - return ctx.isUndoable(); - } - - getCurrentLocale = () => { - const local: string = getLocale() as string; - switch (local) { - case 'zh-CN': - return zhCN; - case 'en-US': - return enUS; - default: - return zhCN; - } - }; - - showModal = ( - node: NsGraph.INodeConfig, - graphData: NsGraph.IGraphData, - graphMeta: NsGraph.IGraphMeta, - ) => { - const container = document.createDocumentFragment(); - return render( - - {this.switchStep({node, graphData, graphMeta}, container)} - , - container, - ); - }; - - onCancel = (container: DocumentFragment) => { - unmount(container); - }; - - onOk = ( - data: { - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }, - container: DocumentFragment, - ) => { - const jobId = data.graphMeta.origin.id; - const ctx = this.contextProvider(); - DagService.loadJobInfo(jobId).then((d) => { - ctx.getCommands().executeCommand(XFlowGraphCommands.GRAPH_RENDER.id, { - graphData: d, - }); - }); - unmount(container); - }; - - switchStep = ( - data: { - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }, - container: DocumentFragment, - ) => { - const {name, type} = data.node.data.data; - if (type === 'source' && name === 'LocalFile') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'sink' && name === 'LocalFile') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'source' && name === 'FtpFile') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'sink' && name === 'FtpFile') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'source' && name === 'SftpFile') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'sink' && name === 'SftpFile') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'source' && name === 'HdfsFile') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'sink' && name === 'HdfsFile') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'source' && name === 'OssFile') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'sink' && name === 'OssFile') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'source' && name === 'OssJindoFile') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'sink' && name === 'OssJindoFile') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'source' && name === 'S3File') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'sink' && name === 'S3File') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'source' && name === 'Jdbc') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'sink' && name === 'Jdbc') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'source' && name === 'Hudi') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'source' && name === 'Iceberg') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'source' && name === 'Paimon') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'sink' && name === 'Paimon') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if (type === 'source' && name === 'FakeSource') { - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type==='sink' && name ==='Console'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type==='source' && name ==='Http'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type==='sink' && name ==='Http'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type==='sink' && name ==='Feishu'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type==='sink' && name ==='WeChat'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type==='sink' && name ==='DingTalk'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type==='sink' && name ==='EmailSink'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'Socket'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'Socket'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'Doris'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'StarRocks'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'StarRocks'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'Clickhouse'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'Clickhouse'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'Hive'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'Hive'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'Kudu'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'Kudu'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'Maxcompute'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'Maxcompute'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'Kafka'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'Kafka'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'Rocketmq'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'Rocketmq'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'IoTDB'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'IoTDB'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'MongoDB'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'MongoDB'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'Cassandra'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'Cassandra'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'Redis'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'Redis'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'Pulsar'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'DataHub'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'Elasticsearch'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'Elasticsearch'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'Neo4j'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'Neo4j'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'Sentry'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'InfluxDB'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'InfluxDB'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'AmazonDynamodb'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'AmazonDynamodb'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'S3Redshift'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'OpenMldb'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'MySQL-CDC'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'SqlServer-CDC'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'source' && name === 'MongoDB-CDC'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'sink' && name === 'Hbase'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'transform' && name === 'Copy'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'transform' && name === 'FieldMapper'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'transform' && name === 'FilterRowKind'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'transform' && name === 'Filter'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'transform' && name === 'Replace'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'transform' && name === 'Split'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else if(type === 'transform' && name === 'Sql'){ - return ( this.onCancel(container)} onOK={() => this.onOk(data, container)}/>); - } else { - return <>; - } - }; -} diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/config-cmd.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/config-cmd.tsx deleted file mode 100644 index a49e4905d..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/config-cmd.tsx +++ /dev/null @@ -1,130 +0,0 @@ -import { - createCmdConfig, - DisposableCollection, - IApplication, - NsEdgeCmd, - NsNodeCmd, - uuidv4, - XFlowEdgeCommands, - XFlowGraphCommands, -} from '@antv/xflow'; -import { WsDiJob } from '@/services/project/typings'; -import { XFlowEdge } from '@antv/xflow-extension/es/canvas-dag-extension/x6-extension/edge'; -import { XFlowNode } from '@antv/xflow-extension/es/canvas-dag-extension/x6-extension/node'; -import { commandContributions } from './cmd-extensions'; -import { NsAddEdgeEvent } from './config-graph'; -import { DND_RENDER_ID, NODE_HEIGHT, NODE_WIDTH } from './constant'; -import { DagService } from './service'; - -export const useCmdConfig = createCmdConfig((config) => { - // 注册全局Command扩展 - config.setCommandContributions(() => commandContributions); - // 设置hook - config.setRegisterHookFn((hooks) => { - const list = [ - hooks.graphMeta.registerHook({ - name: 'get graph meta', - handler: async (args) => {}, - }), - hooks.saveGraphData.registerHook({ - name: 'save graph data', - handler: async (args) => { - if (!args.saveGraphDataService) { - args.saveGraphDataService = DagService.saveGraphData; - } - }, - }), - hooks.addNode.registerHook({ - name: 'add node', - handler: async (args) => { - const cellFactory: NsNodeCmd.AddNode.IArgs['cellFactory'] = async (nodeConfig) => { - const node = new XFlowNode({ - ...nodeConfig, - }); - return node; - }; - args.cellFactory = cellFactory; - args.createNodeService = async (args) => { - const { id } = args.nodeConfig; - const nodeId = id || uuidv4(); - const node: NsNodeCmd.AddNode.IArgs['nodeConfig'] = { - ...args.nodeConfig, - id: nodeId, - width: NODE_WIDTH, - height: NODE_HEIGHT, - renderKey: DND_RENDER_ID, - ports: DagService.createPorts(args.nodeConfig.data.type), - }; - return node; - }; - }, - }), - hooks.addEdge.registerHook({ - name: 'dag-add-edge', - handler: async (args) => { - const cellFactory: NsEdgeCmd.AddEdge.IArgs['cellFactory'] = async (edgeConfig) => { - const cell = new XFlowEdge({ - ...edgeConfig, - id: edgeConfig.id, - source: { - cell: edgeConfig.source, - port: edgeConfig.sourcePortId, - }, - target: { - cell: edgeConfig.target, - port: edgeConfig.targetPortId, - }, - data: { ...edgeConfig }, - }); - return cell; - }; - args.cellFactory = cellFactory; - }, - }), - hooks.afterGraphInit.registerHook({ - name: 'call add edge to replace temp edge', - handler: async (handlerArgs) => { - const { commandService, graph } = handlerArgs; - graph.on(NsAddEdgeEvent.EVENT_NAME, (args: NsAddEdgeEvent.IArgs) => { - commandService.executeCommand(XFlowEdgeCommands.ADD_EDGE.id, { - edgeConfig: { - id: uuidv4(), - source: args.source, - target: args.target, - sourcePortId: args.sourcePortId, - targetPortId: args.targetPortId, - }, - } as NsEdgeCmd.AddEdge.IArgs); - args.edge.remove(); - }); - }, - }), - hooks.addEdge.registerHook({ - name: 'get edge config from backend api', - handler: async (args) => { - args.createEdgeService = async (args) => { - const { edgeConfig } = args; - return edgeConfig; - }; - }, - }), - ]; - const toDispose = new DisposableCollection(); - toDispose.pushAll(list); - return toDispose; - }); -}); - -/** 查询图的节点和边的数据 */ -export const initGraphCmds = (app: IApplication, job: WsDiJob) => { - app.executeCommandPipeline([ - { - commandId: XFlowGraphCommands.GRAPH_ZOOM.id, - getCommandOption: async () => { - return { - args: { factor: 'fit', zoomOptions:{ maxScale: 0.9 }}, - }; - }, - }, - ]); -}; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/config-dnd-panel.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/config-dnd-panel.tsx deleted file mode 100644 index f419de97f..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/config-dnd-panel.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { NsNodeCmd, NsNodeCollapsePanel, uuidv4, XFlowNodeCommands } from '@antv/xflow'; -import { DagService } from './service'; - -export const onNodeDrop: NsNodeCollapsePanel.IOnNodeDrop = async ( - nodeConfig, - commandService, - modelService, -) => { - const args: NsNodeCmd.AddNode.IArgs = { - nodeConfig: { ...nodeConfig, id: uuidv4() }, - }; - commandService.executeCommand(XFlowNodeCommands.ADD_NODE.id, args); -}; - -export const nodeDataService: NsNodeCollapsePanel.INodeDataService = async (meta, modelService) => { - const data = await DagService.loadNodeMeta(meta.origin); - return data; -}; - -export const searchService: NsNodeCollapsePanel.ISearchService = async ( - nodes: NsNodeCollapsePanel.IPanelNode[] = [], - keyword: string, -) => { - const list = nodes.filter((node) => node.label?.includes(keyword)); - return list; -}; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/config-graph.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/config-graph.tsx deleted file mode 100644 index dbbc936ba..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/config-graph.tsx +++ /dev/null @@ -1,239 +0,0 @@ -import type { Edge } from '@antv/x6'; -import type { EventArgs } from '@antv/x6/lib/graph/events'; -import { - createGraphConfig, - createHookConfig, - DisposableCollection, IEvent, - NsGraph, - NsNodeCmd, - XFlowNodeCommands, -} from '@antv/xflow'; -import { XFlowEdge } from '@antv/xflow-extension/es/canvas-dag-extension/x6-extension/edge'; -import { CustomCommands, DND_RENDER_ID, ZOOM_OPTIONS } from './constant'; -import { BaseNode } from './react-node/base-node'; - -export namespace NsAddEdgeEvent { - export const EVENT_NAME = 'ADD_EDGE_CMD_EVENT'; - export interface IArgs { - targetPortId: string; - sourcePortId: string; - source: string; - target: string; - edge: Edge; - } -} - -/** graph hook config */ -export const useGraphHookConfig = createHookConfig((config, proxy) => { - // 获取 Props - const props = proxy.getValue(); - - config.setRegisterHook((hooks) => { - const disposableList = [ - // register react Node Render - hooks.reactNodeRender.registerHook({ - name: 'add react node', - handler: async (renderMap) => { - renderMap.set(DND_RENDER_ID, BaseNode); - }, - }), - - // 注册增加 graph event - hooks.x6Events.registerHook({ - name: 'node_moved', - handler: async (events) => { - events.push({ - eventName: 'node:moved', - callback: (e, cmds) => { - const { node } = e; - cmds.executeCommand(XFlowNodeCommands.MOVE_NODE.id, { - id: node.id, - position: node.getPosition(), - }); - }, - } as NsGraph.IEvent<'node:moved'>); - }, - }), - hooks.x6Events.registerHook({ - name: 'edge_delete', - handler: async (events) => { - events.push({ - eventName: 'edge:removed', - callback: (e, cmds) => {}, - }); - }, - }), - hooks.x6Events.registerHook({ - name: 'node_dbclick', - handler: async (events) => { - events.push({ - eventName: 'node:dblclick', - callback: (e, cmds) => { - const { node } = e; - cmds.executeCommand(CustomCommands.NODE_EDIT.id, { nodeConfig: node }); - }, - }); - }, - }), - ]; - const toDispose = new DisposableCollection(); - toDispose.pushAll(disposableList); - return toDispose; - }); -}); - -export const useGraphConfig = createGraphConfig((config) => { - config.setX6Config({ - grid: { - size: 10, - visible: true, - type: 'doubleMesh', - args: [ - { - color: '#E7E8EA', - thickness: 1, - }, - { - color: '#CBCED3', - thickness: 1, - factor: 4, - }, - ], - }, - scaling: { min: ZOOM_OPTIONS.minScale, max: ZOOM_OPTIONS.maxScale }, - mousewheel: { enabled: true, zoomAtMousePosition: true }, - history: { - enabled: true, - }, - background: { - color: '#F8F8FA', // 设置画布背景颜色 - }, - clipboard: { - enabled: true, - }, - panning: { - enabled: true, - modifiers: 'shift', - }, - selecting: { - enabled: true, - rubberband: true, - multiple: true, - movable: true, - strict: true, - showNodeSelectionBox: true, - showEdgeSelectionBox: true, - }, - connecting: { - snap: true, - allowBlank: false, - allowMulti: false, - allowLoop: false, - allowNode: false, - allowEdge: false, - connector: 'smooth', - highlight: true, - createEdge(this, args) { - const graph = this; - const edge = new XFlowEdge({}); - const addEdge = (args: EventArgs['edge:connected']) => { - const { isNew } = args; - const edgeCell = args.edge; - if (isNew && edgeCell.isEdge() && edgeCell === edge) { - const portId = edgeCell.getTargetPortId(); - const targetNode = edgeCell.getTargetCell(); - if (targetNode && targetNode.isNode()) { - targetNode.setPortProp(portId + '', 'connected', false); - const targetPortId = edgeCell.getTargetPortId(); - const sourcePortId = edgeCell.getSourcePortId(); - const sourceCellId = edgeCell.getSourceCellId(); - const targetCellId = edgeCell.getTargetCellId(); - graph.trigger(NsAddEdgeEvent.EVENT_NAME, { - targetPortId, - sourcePortId, - source: sourceCellId, - target: targetCellId, - edge: edge, - } as NsAddEdgeEvent.IArgs); - } - } - }; - graph.once('edge:connected', addEdge); - return edge; - }, - validateEdge: (args) => { - const { edge } = args; - return !!(edge?.target as any)?.port; - }, - validateConnection({ - edge, - edgeView, - sourceView, - targetView, - sourcePort, - targetPort, - sourceMagnet, - targetMagnet, - sourceCell, - targetCell, - type, - }) { - if (sourceView === targetView) { - return false; - } else if (!sourceMagnet || !targetMagnet) { - return false; - } else { - const sourceNode = sourceView?.cell as any; - const sourcePortId = sourceMagnet.getAttribute('port'); - if (!sourcePortId) { - return false; - } - const sPort = sourceNode.getPort(sourcePortId); - if (sPort.type !== NsGraph.AnchorType.OUTPUT) { - return false; - } - const targetNode = targetView?.cell as any; - const targetPortId = targetMagnet.getAttribute('port'); - if (!targetPortId) { - return false; - } - const tPort = targetNode.getPort(targetPortId); - if (tPort.type !== NsGraph.AnchorType.INPUT) { - return false; - } - return true; - } - }, - }, - }); - - // 配置不同组件的 node 和 edge 组件 - config.setNodeRender(DND_RENDER_ID, BaseNode) - - // 节点事件 - const edgeAdded: IEvent<'edge:added'> = { - eventName: 'edge:added', - callback: (eventArgs, command, modelService) => { - console.log('edge:added', eventArgs) - }, - } - const edgeRemoved: IEvent<'edge:removed'> = { - eventName: 'edge:removed', - callback: (eventArgs, command, modelService) => { - console.log('edge:removed', eventArgs) - }, - } - const nodeAdded: IEvent<'node:added'> = { - eventName: 'node:added', - callback: (eventArgs, command, modelService) => { - console.log('node:added', eventArgs) - }, - } - const nodeRemoved: IEvent<'node:removed'> = { - eventName: 'node:removed', - callback: (eventArgs, command, modelService) => { - console.log('node:removed', eventArgs) - }, - } - config.setEvents([edgeAdded, edgeRemoved, nodeAdded, nodeRemoved]) -}); diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/config-keybinding.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/config-keybinding.tsx deleted file mode 100644 index f00626ace..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/config-keybinding.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { - createKeybindingConfig, - MODELS, - XFlowEdgeCommands, - XFlowGraphCommands, - XFlowNodeCommands, -} from '@antv/xflow'; -import { CustomCommands } from './constant'; - -export const useKeybindingConfig = createKeybindingConfig((config) => { - config.setKeybindingFunc((register) => { - return register.registerKeybinding([ - { - id: 'delete', - keybinding: ['delete', 'backspace'], - callback: async function (item, modelService, cmd, e) { - e.preventDefault(); - const cells = await MODELS.SELECTED_CELLS.useValue(modelService); - await Promise.all( - cells.map((cell) => { - if (cell.isEdge()) { - return cmd.executeCommand(XFlowEdgeCommands.DEL_EDGE.id, { - edgeConfig: { ...cell.getData(), id: cell.id }, - }); - } else if (cell.isNode()) { - return cmd.executeCommand(XFlowNodeCommands.DEL_NODE.id, { - nodeConfig: { ...cell.getData(), id: cell.id }, - }); - } else { - return null; - } - }), - ); - }, - }, - { - id: 'copy', - keybinding: ['command+c', 'ctrl+c'], - callback: async function (item, modelService, cmd, e) { - e.preventDefault(); - cmd.executeCommand(XFlowGraphCommands.GRAPH_COPY.id, {}); - }, - }, - { - id: 'cut', - keybinding: ['command+x', 'ctrl+x'], - callback: async function (item, modelService, cmd, e) { - e.preventDefault(); - cmd.executeCommand(CustomCommands.GRAPH_CUT.id, {}); - }, - }, - { - id: 'paste', - keybinding: ['command+v', 'ctrl+v'], - callback: async function (item, modelService, cmd, e) { - e.preventDefault(); - cmd.executeCommand(XFlowGraphCommands.GRAPH_PASTE.id, {}); - }, - }, - { - id: 'redo', - keybinding: ['command+y', 'ctrl+y'], - callback: async function (item, modelService, cmd, e) { - e.preventDefault(); - cmd.executeCommand(XFlowGraphCommands.GRAPH_HISTORY_REDO.id, {}); - }, - }, - { - id: 'undo', - keybinding: ['command+z', 'ctrl+z'], - callback: async function (item, modelService, cmd, e) { - e.preventDefault(); - cmd.executeCommand(XFlowGraphCommands.GRAPH_HISTORY_UNDO.id, {}); - }, - }, - ]); - }); -}); diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/config-menu.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/config-menu.tsx deleted file mode 100644 index fe8c7941c..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/config-menu.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import { - createCtxMenuConfig, - MenuItemType, - NsEdgeCmd, - NsGraph, - XFlowEdgeCommands, - XFlowNodeCommands, -} from '@antv/xflow'; -import { getIntl, getLocale } from '@umijs/max'; -import { CustomCommands } from './constant'; - -/** - * menu config - */ -export const useMenuConfig = createCtxMenuConfig((config) => { - const intl = getIntl(getLocale(), true); - config.setMenuModelService(async (target, model, modelService, toDispose) => { - switch (target?.type) { - /** 节点菜单 */ - case 'node': - model.setValue({ - id: 'root', - type: MenuItemType.Root, - submenu: [ - { - id: XFlowNodeCommands.UPDATE_NODE.id, - type: MenuItemType.Submenu, - label: intl.formatMessage({ id: 'app.common.operate.edit.label' }), - iconName: 'EditOutlined', - onClick: async ({ target, commandService }) => { - commandService.executeCommand(CustomCommands.NODE_EDIT.id, { - nodeConfig: target, - }); - }, - }, - { - id: XFlowNodeCommands.DEL_NODE.id, - type: MenuItemType.Submenu, - label: intl.formatMessage({ id: 'app.common.operate.delete.label' }), - iconName: 'DeleteOutlined', - onClick: async ({ target, commandService }) => { - commandService.executeCommand(XFlowNodeCommands.DEL_NODE.id, { - nodeConfig: { id: target.data?.id + '' }, - }); - }, - }, - ], - }); - break; - /** 边菜单 */ - case 'edge': - model.setValue({ - id: 'root', - type: MenuItemType.Root, - submenu: [ - { - id: XFlowEdgeCommands.DEL_EDGE.id, - label: intl.formatMessage({ id: 'app.common.operate.delete.label' }), - iconName: 'DeleteOutlined', - onClick: async ({ target, commandService }) => { - commandService.executeCommand( - XFlowEdgeCommands.DEL_EDGE.id, - { - edgeConfig: target.data as NsGraph.IEdgeConfig, - }, - ); - }, - }, - ], - }); - break; - /** 画布菜单 */ - case 'blank': - model.setValue({ - id: 'root', - type: MenuItemType.Root, - submenu: [ - { - id: 'job_params_conf', - type: MenuItemType.Submenu, - label: intl.formatMessage({ id: 'pages.project.di.flow.dag.prop' }), - iconName: 'ProfileOutlined', - onClick: async ({ target, commandService }) => { - commandService.executeCommand(CustomCommands.GRAPH_PARAMS_SETTING.id, {}); - }, - }, - ], - }); - break; - /** 默认菜单 */ - default: - model.setValue({ - id: 'root', - type: MenuItemType.Root, - submenu: [], - }); - break; - } - }); -}); diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/config-toolbar.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/config-toolbar.tsx deleted file mode 100644 index 33f055777..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/config-toolbar.tsx +++ /dev/null @@ -1,236 +0,0 @@ -import { - createToolbarConfig, - IModelService, - IToolbarGroupOptions, - MODELS, - NsGraphCmd, - XFlowGraphCommands, -} from '@antv/xflow'; -import {message} from 'antd'; -import {getIntl, getLocale} from '@umijs/max'; -import {CustomCommands, ZOOM_OPTIONS} from './constant'; -import {DagService} from './service'; -import {NsGraphPreview} from './cmd-extensions/graph-preview'; - -export const useToolbarConfig = createToolbarConfig((toolbarConfig) => { - /** toolbar item */ - toolbarConfig.setToolbarModelService(async (toolbarModel, modelService, toDispose) => { - //init toolbar - toolbarModel.setValue((toolbar) => { - toolbar.mainGroups = getMainToolbarConfig(); - toolbar.extraGroups = getExtraToolbarConfig(); - }); - }); -}); - -export const useScaleToolbarConfig = createToolbarConfig((toolbarConfig) => { - /** toolbar item */ - toolbarConfig.setToolbarModelService(async (toolbarModel, modelService, toDispose) => { - const graphScale = await MODELS.GRAPH_SCALE.useValue(modelService); - //init toolbar - toolbarModel.setValue((toolbar) => { - toolbar.mainGroups = getScaleToolbarConfig({ - zoomFactor: graphScale.zoomFactor, - fullScreen: false, - }); - }); - // fullscreen - const graphFullScreenModel = await MODELS.GRAPH_FULLSCREEN.getModel(modelService); - graphFullScreenModel.setValue(false); - graphFullScreenModel.watch((fullScreen) => { - toolbarModel.setValue((toolbar) => { - toolbar.mainGroups = getScaleToolbarConfig({ - zoomFactor: graphScale.zoomFactor, - fullScreen, - }); - }); - }); - // graph scale - const graphScaleModel = await MODELS.GRAPH_SCALE.getModel(modelService); - graphScaleModel.watch(async ({zoomFactor}) => { - const fullScreen = await MODELS.GRAPH_FULLSCREEN.useValue(modelService); - toolbarModel.setValue((toolbar) => { - toolbar.mainGroups = getScaleToolbarConfig({zoomFactor: zoomFactor, fullScreen}); - }); - }); - }); -}); - -/** - * toolbar config - * todo disable stop button when job is not running - */ -const getMainToolbarConfig = () => { - const intl = getIntl(getLocale(), true); - return [ - { - name: 'main', - items: [ - { - id: 'save', - iconName: 'SaveOutlined', - tooltip: intl.formatMessage({id: 'pages.project.di.flow.dag.save'}), - onClick: async ({commandService, modelService}) => { - commandService.executeCommand( - XFlowGraphCommands.SAVE_GRAPH_DATA.id, - { - saveGraphDataService: (meta, graphData) => - DagService.saveGraphData(meta, graphData).then((resp) => { - if (resp.success) { - message.info(intl.formatMessage({id: 'app.common.operate.success'})); - DagService.loadJobInfo(meta.origin.id).then((d) => { - commandService.executeCommand(XFlowGraphCommands.GRAPH_RENDER.id, { - graphData: d, - }); - }); - } - }), - }, - ); - }, - }, - { - id: 'preview', - iconName: 'EyeOutlined', - tooltip: intl.formatMessage({id: 'pages.project.di.flow.dag.preview'}), - onClick: async ({commandService}) => { - commandService.executeCommand( - CustomCommands.GRAPH_PREVIEW.id, - {}, - ); - }, - }, - // { - // id: 'publish', - // iconName: 'SendOutlined', - // tooltip: intl.formatMessage({id: 'pages.project.di.flow.dag.publish'}), - // onClick: async ({commandService}) => { - // commandService.executeCommand( - // CustomCommands.GRAPH_PUBLISH.id, - // {}, - // ); - // }, - // }, - // { - // id: 'submit', - // iconName: 'FundProjectionScreenOutlined', - // tooltip: intl.formatMessage({id: 'pages.project.di.flow.dag.submit'}), - // onClick: async ({commandService}) => { - // commandService.executeCommand( - // CustomCommands.GRAPH_SUBMIT.id, - // {}, - // ); - // }, - // }, - ], - }, - ] as IToolbarGroupOptions[]; -}; - -const getExtraToolbarConfig = () => { - const intl = getIntl(getLocale(), true); - return [ - { - name: 'extra', - items: [ - { - id: 'prop', - iconName: 'ProfileOutlined', - text: intl.formatMessage({id: 'pages.project.di.flow.dag.prop'}), - tooltip: intl.formatMessage({id: 'pages.project.di.flow.dag.prop'}), - onClick: ({commandService}) => { - commandService.executeCommand(CustomCommands.GRAPH_PARAMS_SETTING.id, {}); - }, - }, - { - id: 'help', - iconName: 'InfoCircleOutlined', - text: intl.formatMessage({id: 'pages.project.di.flow.dag.help'}), - tooltip: intl.formatMessage({id: 'pages.project.di.flow.dag.help'}), - onClick: ({commandService}) => { - commandService.executeCommand(CustomCommands.GRAPH_HELP.id, {}); - }, - } - ], - }, - ] as IToolbarGroupOptions[]; -}; -const getScaleToolbarConfig = ({zoomFactor, fullScreen}: { zoomFactor?: Number; fullScreen?: boolean; }) => { - const intl = getIntl(getLocale(), true); - return [ - { - name: 'scale', - items: [ - { - id: 'zoomIn', - tooltip: intl.formatMessage({id: 'pages.project.di.flow.dag.zoomIn'}), - iconName: 'ZoomInOutlined', - onClick: ({commandService, modelService}) => { - commandService - .executeCommand(XFlowGraphCommands.GRAPH_ZOOM.id, { - factor: 0.25, - zoomOptions: ZOOM_OPTIONS, - }) - .then(() => { - scaleMessage(modelService); - }); - }, - }, - { - id: 'zoomOut', - tooltip: intl.formatMessage({id: 'pages.project.di.flow.dag.zoomOut'}), - iconName: 'ZoomOutOutlined', - onClick: ({commandService, modelService}) => { - commandService - .executeCommand(XFlowGraphCommands.GRAPH_ZOOM.id, { - factor: -0.25, - zoomOptions: ZOOM_OPTIONS, - }) - .then(() => { - scaleMessage(modelService); - }); - }, - }, - { - id: 'zoomFit', - tooltip: intl.formatMessage({id: 'pages.project.di.flow.dag.zoomFit'}), - iconName: 'CompressOutlined', - onClick: ({commandService, modelService}) => { - commandService - .executeCommand(XFlowGraphCommands.GRAPH_ZOOM.id, { - factor: 'fit', - zoomOptions: ZOOM_OPTIONS, - }) - .then(() => { - scaleMessage(modelService); - }); - }, - }, - { - id: 'fullScreen', - iconName: !fullScreen ? 'FullscreenOutlined' : 'FullscreenExitOutlined', - tooltip: !fullScreen - ? intl.formatMessage({id: 'pages.project.di.flow.dag.fullScreen'}) - : intl.formatMessage({id: 'pages.project.di.flow.dag.fullScreenExit'}), - onClick: ({commandService}) => { - commandService.executeCommand( - XFlowGraphCommands.GRAPH_FULLSCREEN.id, - {}, - ); - }, - }, - ], - }, - ] as IToolbarGroupOptions[]; -}; - -const scaleMessage = async (modelService: IModelService) => { - const intl = getIntl(getLocale(), true); - const graphScale = await MODELS.GRAPH_SCALE.useValue(modelService); - message.info( - intl.formatMessage( - {id: 'pages.project.di.flow.dag.zoomTo'}, - {factor: graphScale.zoomFactor}, - ), - ); -}; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/constant.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/constant.tsx deleted file mode 100644 index d8bfb7ae6..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/constant.tsx +++ /dev/null @@ -1,770 +0,0 @@ -import {IGraphCommand, XFlowGraphCommands, XFlowNodeCommands} from '@antv/xflow'; - -export const DND_RENDER_ID = 'DND_NODE'; -export const GROUP_NODE_RENDER_ID = 'GROUP_NODE_RENDER_ID'; -export const EDGE_NODE_RENDER_ID = 'EDGE_NODE_RENDER_ID'; -export const NODE_WIDTH = 180; -export const NODE_HEIGHT = 32; -export const ZOOM_OPTIONS = {maxScale: 2, minScale: 0.5}; -export const CONNECTION_PORT_TYPE = {source: 'outPort', target: 'inPort'}; - -/** custom commands */ -export namespace CustomCommands { - export const GRAPH_CUT: IGraphCommand = { - id: 'xflow:graph-cut-selection', - label: 'cut', - category: XFlowGraphCommands.GRAPH_COPY.category, - }; - - export const NODE_EDIT: IGraphCommand = { - id: 'xflow:node-edit', - label: 'edit', - category: XFlowNodeCommands.UPDATE_NODE.category, - }; - - export const GRAPH_PARAMS_SETTING: IGraphCommand = { - id: 'xflow:graph-params-setting', - label: 'graph-params', - category: XFlowGraphCommands.GRAPH_COPY.category, - }; - - export const GRAPH_HELP: IGraphCommand = { - id: 'xflow:graph-help', - label: 'graph-help', - category: XFlowGraphCommands.GRAPH_COPY.category, - }; - - export const GRAPH_PREVIEW: IGraphCommand = { - id: 'xflow:graph-preview', - label: 'graph-preview', - category: XFlowGraphCommands.GRAPH_COPY.category, - }; - - export const GRAPH_PUBLISH: IGraphCommand = { - id: 'xflow:graph-publish', - label: 'publish', - category: XFlowGraphCommands.GRAPH_COPY.category, - }; - - export const GRAPH_SUBMIT: IGraphCommand = { - id: 'xflow:graph-submit', - label: 'graph-submit', - category: XFlowGraphCommands.GRAPH_COPY.category, - }; -} - -export const STEP_ATTR_TYPE = { - jobGraph: 'jobGraph', - jobId: 'jobId', - stepCode: 'stepCode', - stepTitle: 'stepTitle', - stepAttrs: 'stepAttrs', - dataSourceType: 'dataSourceType', - dataSource: 'dataSource', - bulkSize: 'bulk_size', - table: 'table', - maxRetries: 'max_retries', - fields: 'fields', - datasourceName: 'datasourceName', - host: 'host', - port: 'port', -}; - -export const SchemaParams = { - schema: 'schema', - fields: 'fields', - fieldArray: 'fieldArray', - field: 'field', - type: 'type', - delimiter: 'delimiter', - skipHeaderRowNumber: 'skip_header_row_number', - sheetName: 'sheet_name', -} - -export const ColumnParams = { - readColumns: 'read_columns', - readColumnArray: 'readColumnArray', - readColumn: 'readColumn' -} - -export const FakeParams = { - rows: 'rows', - rowNum: 'row.num', - splitNum: 'split.num', - splitReadInterval: 'split.read-interval', - mapSize: 'map.size', - arraySize: 'array.size', - bytesLength: 'bytes.length', - stringLength: 'string.length', - - stringFakeMode: 'string.fake.mode', - stringTemplate: 'string.template', - - tinyintFakeMode: 'tinyint.fake.mode', - tinyintMin: 'tinyint.min', - tinyintMax: 'tinyint.max', - tinyintTemplate: 'tinyint.template', - - smallintFakeMode: 'smallint.fake.mode', - smallintMin: 'smallint.min', - smallintMax: 'smallint.max', - smallintTemplate: 'smallint.template', - - intFakeMode: 'int.fake.mode', - intMin: 'int.min', - intMax: 'int.max', - intTemplate: 'int.template', - - bigintFakeMode: 'bigint.fake.mode', - bigintMin: 'bigint.min', - bigintMax: 'bigint.max', - bigintTemplate: 'bigint.template', - - floatFakeMode: 'float.fake.mode', - floatMin: 'float.min', - floatMax: 'float.max', - floatTemplate: 'float.template', - - doubleFakeMode: 'double.fake.mode', - doubleMin: 'double.min', - doubleMax: 'double.max', - doubleTemplate: 'double.template', - - dateYearTemplate: 'date.year.template', - dateMonthTemplate: 'date.month.template', - dateDayTemplate: 'date.day.template', - timeHourTemplate: 'time.hour.template', - timeMinuteTemplate: 'time.minute.template', - timeSecondTemplate: 'time.second.template' -} - -export const JdbcParams = { - connectionCheckTimeoutSec: 'connection_check_timeout_sec', - compatibleMode: 'compatible_mode', - database: 'database', - table: 'table', - supportUpsert: 'support_upsert_by_query_primary_key_exist', - generateSinkSql: 'generate_sink_sql', - primaryKeys: 'primary_keys', - primaryKeyArray: 'primaryKeyArray', - primaryKey: 'key', - query: 'query', - partitionColumn: 'partition_column', - partitionLowerBound: 'partition_lower_bound', - partitionUpperBound: 'partition_upper_bound', - partitionNum: 'partition_num', - fetchSize: 'fetch_size', - batchSize: 'batch_size', - maxRetries: 'max_retries', - isExactlyOnce: 'is_exactly_once', - xaDataSourceClassName: 'xa_data_source_class_name', - maxCommitAttempts: 'max_commit_attempts', - transactionTimeoutSec: 'transaction_timeout_sec', - autoCommit: 'auto_commit' -} - -export const BaseFileParams = { - path: 'path', - fileFilterPattern: 'file_filter_pattern', - fileFormatType: 'file_format_type', - readColumns: 'read_columns', - schema: 'schema', - delimiter: 'delimiter', - parsePartitionFromPath: 'parse_partition_from_path', - dateFormat: 'date_format', - timeFormat: 'time_format', - datetimeFormat: 'datetime_format', - customFilename: 'custom_filename', - fileNameExpression: 'file_name_expression', - filenameTimeFormat: 'filename_time_format', - fieldDelimiter: 'field_delimiter', - rowDelimiter: 'row_delimiter', - havePartition: 'have_partition', - partitionBy: 'partition_by', - partitionDirExpression: 'partition_dir_expression', - isPartitionFieldWriteInFile: 'is_partition_field_write_in_file', - sinkColumns: 'sink_columns', - isEnableTransaction: 'is_enable_transaction', - batchSize: 'batch_size', - compressCodec: 'compress_codec', - maxRowsInMemory: 'max_rows_in_memory', - sheetName: 'sheet_name' -}; - -export const HDFSFileParams = { - defaultFS: 'fs.defaultFS', -}; - -export const FtpFileParams = { - host: 'host', - port: 'port', - username: 'username', - password: 'password', -}; - -export const OSSFileParams = { - endpoint: 'endpoint', - bucket: 'bucket', - accessKey: 'access_key', - accessSecret: 'access_secret', -}; - -export const S3FileParams = { - bucket: 'bucket', - accessKey: 'access_key', - accessSecret: 'access_secret', - hadoopS3Properties: 'hadoopS3Properties', - key: 'key', - value: 'value', -}; - -export const HttpParams = { - method: 'method', - url: 'url', - headerArray: 'headerArray', - header: 'header', - headerValue: 'headerValue', - paramArray: 'paramArray', - param: 'param', - paramValue: 'paramValue', - body: 'body', - format: 'format', - enableMultiLines: 'enable_multi_lines', - schema: 'schema', - contentField: 'content_field', - jsonField: 'jsonField', - key: 'key', - path: 'path', - pollIntervalMs: 'poll_interval_ms', - retry: 'retry', - retryBackoffMultiplierMs: 'retry_backoff_multiplier_ms', - retryBackoffMaxMs: 'retry_backoff_max_ms', -}; - -export const WeChatParams = { - url: 'url', - mentionedArray: 'mentionedArray', - mentionedList: 'mentioned_list', - userId: 'userId', - mentionedMobileArray: 'mentionedMobileArray', - mentionedMobileList: 'mentioned_mobile_list', - mobile: 'mobile', -}; - -export const FeishuParams = { - url: 'url', - headerArray: 'headerArray', - headers: 'headers', - header: 'header', - headerValue: 'headerValue' -}; - -export const DingTalkParams = { - url: 'url', - secret: 'secret', -}; - -export const EmailParams = { - emailHost: 'email_host', - emailTransportProtocol: 'email_transport_protocol', - emailFromAddress: 'email_from_address', - emailSmtpAuth: 'email_smtp_auth', - emailAuthorizationCode: 'email_authorization_code', - emailToAddress: 'email_to_address', - emailMessageHeadline: 'email_message_headline', - emailMessageContent: 'email_message_content', -}; - -export const HudiParams = { - tablePath: 'table.path', - tableType: 'table.type', - confFiles: 'conf.files', - useKerberos: 'use.kerberos', - kerberosPrincipal: 'kerberos.principal', - kerberosPrincipalFile: 'kerberos.principal.file', -}; - -export const IcebergParams = { - catalogType: 'catalog_type', - catalogName: 'catalog_name', - namespace: 'namespace', - table: 'table', - uri: 'uri', - warehouse: 'warehouse', - caseSensitive: 'case_sensitive', - fields: 'fields', - useSnapshotId: 'use_snapshot_id', - startSnapshotId: 'start_snapshot_id', - endSnapshotId: 'end_snapshot_id', - startSnapshotTimestamp: 'start_snapshot_timestamp', - useSnapshotTimestamp: 'use_snapshot_timestamp', - streamScanStrategy: 'stream_scan_strategy', -}; - -export const ClickHouseParams = { - dataSourceType: 'ClickHouse', - splitMode: 'split_mode', - shardingKey: 'sharding_key', - primaryKey: 'primary_key', - supportUpsert: 'support_upsert', - allowExperimentalLightweightDelete: 'allow_experimental_lightweight_delete', - clickhouseConf: 'clickhouse.config', - clickhouseConfArray: 'clickhouseConfArray', - key: 'key', - value: 'value', - sql: 'sql', - serverTimeZone: 'server_time_zone', -}; - -export const HiveParams = { - tableName: 'table_name', - metastoreUri: 'metastore_uri', - readPartitions: 'read_partitions', - readPartitionArray: 'read_partitions', - readPartition: 'read_partition', -}; - -export const KuduParams = { - kuduMaster: 'kudu_master', - kuduTable: 'kudu_table', - columnsList: 'columnsList' -}; - -export const KafkaParams = { - topic: 'topic', - pattern: 'pattern', - partitionDiscoveryIntervalMillis: 'partition-discovery.interval-millis', - kafkaConfig: 'kafka.config', - kafkaConf: 'kafkaConf', - key: 'key', - value: 'value', - consumerGroup: 'consumer.group', - commit_on_checkpoint: 'commit_on_checkpoint', - format: 'format', - formatErrorHandleWay: 'format_error_handle_way', - schema: 'schema', - fieldDelimiter: 'field_delimiter', - semantic: 'semantic', - partitionKeyFields: 'partition_key_fields', - partitionKeyArray: 'partitionKeyArray', - partitionKey: 'partitionKey', - partition: 'partition', - assignPartitions: 'assign_partitions', - assignPartitionArray: 'assignPartitionArray', - assignPartition: 'assignPartition', - transactionPrefix: 'transaction_prefix', - startModeTimestamp: 'start_mode.timestamp', - startModeOffsets: 'start_mode.offsets', -}; - -export const IoTDBParams = { - nodeUrls: 'node_urls', - username: 'username', - password: 'password', - sql: 'sql', - fields: 'fields', - fetchSize: 'fetch_size', - thriftDefaultBufferSize: 'thrift_default_buffer_size', - enableCacheLeader: 'enable_cache_leader', - version: 'version', - numPartitions: 'num_partitions', - lowerBound: 'lower_bound', - upperBound: 'upper_bound', - batchSize: 'batch_size', - batchIntervalMs: 'batch_interval_ms', - maxRetries: 'max_retries', - retryBackoffMultiplierMs: 'retry_backoff_multiplier_ms', - maxRetryBackoffMs: 'max_retry_backoff_ms', - defaultThriftBufferSize: 'default_thrift_buffer_size', - maxThriftFrameSize: 'max_thrift_frame_size', - zoneId: 'zone_id', - enableRpcCompression: 'enable_rpc_compression', - connectionTimeoutInMs: 'connection_timeout_in_ms', - keyDevice: 'key_device', - keyTimestamp: 'key_timestamp', - keyMeasurementFields: 'key_measurement_fields', - keyMeasurementFieldArray: 'keyMeasurementFieldArray', - keyMeasurementField: 'keyMeasurementField', - storageGroup: 'storage_group', -}; - -export const MongoDBParams = { - uri: 'uri', - database: 'database', - collection: 'collection', - matchQuery: 'match.query', - matchProjection: 'match.projection', - partitionSplitKey: 'partition.split-key', - partitionSplitSize: 'partition.split-size', - cursorNoTimeout: 'cursor.no-timeout', - fetchSize: 'fetch.size', - maxTimeMin: 'max.time-min', - flatSyncString: 'flat.sync-string', - bufferFlushMaxRows: 'buffer-flush.max-rows', - bufferFlushInterval: 'buffer-flush.interval', - retryMax: 'retry.max', - retryInterval: 'retry.interval', - upsertEnable: 'upsert-enable', - transaction: 'transaction', - primaryKey: 'primary-key' -}; - -export const RedisParams = { - host: 'host', - port: 'port', - auth: 'auth', - keys: 'keys', - dataType: 'data_type', - hashKeyParseMode: 'hash_key_parse_mode', - format: 'format', - schema: 'schema', - key: 'key', - expire: 'expire' -}; - -export const PulsarParams = { - clientServiceUrl: 'client.service-url', - adminServiceUrl: 'admin.service-url', - authPluginClass: 'auth.plugin-class', - authParams: 'auth.params', - subscriptionName: 'subscription.name', - topic: 'topic', - topicPattern: 'topicPattern', - topicDiscoveryInterval: 'topic-discovery.interval', - pollTimeout: 'poll.timeout', - pollInterval: 'poll.interval', - pollBatchSize: 'poll.batch.size', - cursorStartupMode: 'cursor.startup.mode', - cursorStartupTimestamp: 'cursor.startup.timestamp', - cursorResetMode: 'cursor.reset.mode', - cursorStopMode: 'cursor.stop.mode', - cursorStopTimestamp: 'cursor.stop.timestamp', - format: 'format', - fieldDelimiter: 'field_delimiter' -}; - -export const DatahubParams = { - endpoint: 'endpoint', - accessId: 'accessId', - accessKey: 'accessKey', - project: 'project', - topic: 'topic', - timeout: 'timeout', - retryTimes: 'retryTimes' -}; - -export const RocketMQParams = { - nameSrvAddr: 'name.srv.addr', - aclEnabled: 'acl.enabled', - aclEnabledField: 'acl_enabled', - accessKey: 'access.key', - secretKey: 'secret.key', - format: 'format', - fieldDelimiter: 'field.delimiter', - - topics: 'topics', - partitionDiscoveryIntervalMillis: 'partition.discovery.interval.millis', - consumerGroup: 'consumer.group', - commitOnCheckpoint: 'commit.on.checkpoint', - schema: 'schema', - startMode: 'start.mode', - startModeField: 'startModeField', - startModeTimestamp: 'start.mode.timestamp', - startModeOffsets: 'start.mode.offsets', - startModeOffsetsList: 'startModeOffsetsList', - specificPartition: 'specificPartition', - specificPartitionOffset: 'specificPartitionOffset', - batchSize: 'batch.size', - consumerPollTimeoutMillis: 'consumer.poll.timeout.millis', - - topic: 'topic', - semantic: 'semantic', - producerGroup: 'producer.group', - partitionKeyFields: 'partition.key.fields', - exactlyOnce: 'exactly.once', - producerSendSync: 'producer.send.sync', - maxMessageSize: 'max.message.size', - sendMessageTimeout: 'send.message.timeout' -}; - -export const ElasticsearchParams = { - hosts: 'hosts', - username: 'username', - password: 'password', - index: 'index', - primaryKeys: 'primary_keys', - primaryKeyArray: 'primaryKeyArray', - primaryKey: 'primaryKey', - keyDelimiter: 'key_delimiter', - maxRetryCount: 'max_retry_count', - maxBatchSize: 'max_batch_size', - query: "query", - scrollTime: "scroll_time", - scrollSize: "scroll_size", - source: "source", - sourceArray: "sourceArray", - sourceField: "sourceField", - schema: "schema" -}; - -export const Neo4jParams = { - uri: 'uri', - username: 'username', - password: 'password', - bearerToken: 'bearer_token', - kerberosTicket: 'kerberos_ticket', - database: 'database', - query: 'query', - queryParamPosition: 'queryParamPosition', - maxTransactionRetryTime: 'max_transaction_retry_time', - maxConnectionTimeout: 'max_connection_timeout', - queryParamPositionArray: 'queryParamPositionArray', - field: 'field', - position: 'position', -}; - -export const SentryParams = { - dsn: 'dsn', - env: 'env', - release: 'release', - enableExternalConfiguration: 'enableExternalConfiguration', - cacheDirPath: 'cacheDirPath', - maxCacheItems: 'maxCacheItems', - flushTimeoutMillis: 'flushTimeoutMillis', - maxQueueSize: 'maxQueueSize' -}; - -export const InfluxDBParams = { - url: 'url', - username: 'username', - password: 'password', - database: 'database', - sql: 'sql', - schema: 'schema', - fieldArray: 'fieldArray', - splitColumn: 'split_column', - lowerBound: 'lower_bound', - upperBound: 'upper_bound', - partitionNum: 'partition_num', - epoch: 'epoch', - queryTimeoutSec: 'query_timeout_sec', - connectTimeoutMs: 'connect_timeout_ms', - measurement: 'measurement', - keyKime: 'key_time', - keyTagArray: 'keyTagArray', - keyTags: 'key_tags', - batchSize: 'batch_size', - batchIntervalMs: 'batch_interval_ms', - maxRetries: 'max_retries', - retryBackoffMultiplierMs: 'retry_backoff_multiplier_ms' -}; - -export const CassandraParams = { - consistencyLevel: 'consistency_level', - cql: 'cql', - table: 'table', - fields: 'fields', - fieldArray: 'fieldArray', - field: 'field', - batchSize: 'batch_size', - batchType: 'batch_type', - asyncWrite: 'async_write' -}; - -export const DorisParams = { - database: 'database', - tableIdentifier: 'table.identifier', - sinkLabelPrefix: 'sink.label-prefix', - sinkEnable2PC: 'sink.enable-2pc', - sinkEnableDelete: 'sink.enable-delete', - sinkCheckInterval: 'sink.check-interval', - sinkMaxRetries: 'sink.max-retries', - sinkBufferSize: 'sink.buffer-size', - sinkBufferCount: 'sink.buffer-count', - dorisConfig: 'doris.config', - dorisConfigArray: 'dorisConfigArray', - dorisConfigProperty: 'property', - dorisConfigValue: 'value', -}; - -export const StarRocksParams = { - baseUrl: 'base-url', - database: 'database', - table: 'table', - labelPrefix: 'labelPrefix', - batchMaxRows: 'batch_max_rows', - batchMaxBytes: 'batch_max_bytes', - batchIntervalMs: 'batch_interval_ms', - maxRetries: 'max_retries', - retryBackoffMultiplierMs: 'retry_backoff_multiplier_ms', - maxRetryBackoffMs: 'max_retry_backoff_ms', - enableUpsertDelete: 'enable_upsert_delete', - saveModeCreateTemplate: 'save_mode_create_template', - starrocksConfig: 'starrocks.config', - starrocksConfigMap: 'starrocksConfigMap', - starrocksConfigKey: 'starrocksConfigKey', - starrocksConfigValue: 'starrocksConfigValue', - scanFilter: 'scan_filter', - scanConnectTimeoutMs: 'scan_connect_timeout_ms', - scanQueryTimeoutSec: 'scan_query_timeout_sec', - scanKeepAliveMin: 'scan_keep_alive_min', - scanBatchRows: 'scan_batch_rows', - scanMemLimit: 'scan_mem_limit', - requestTabletSize: 'request_tablet_size', -}; - -export const MaxComputeParams = { - project: 'project', - tableName: 'table_name', - partitionSpec: 'partition_spec', - splitRow: 'split_row', - overwrite: 'overwrite' -}; - -export const AmazonDynamoDBParams = { - url: 'url', - region: 'region', - accessKeyId: 'access_key_id', - secretAccessKey: 'secret_access_key', - table: 'table', - schema: 'schema', - batchSize: 'batch_size', - batchIntervalMs: 'batch_interval_ms' -}; - -export const S3RedshiftParams = { - jdbcUrl: 'jdbc_url', - jdbcUser: 'jdbc_user', - jdbcPassword: 'jdbc_password', - executeSql: 'execute_sql' -}; - -export const OpenMLDBParams = { - clusterMode: 'cluster_mode', - host: 'host', - port: 'port', - zkHost: 'zk_host', - zkPath: 'zk_path', - database: 'database', - sql: 'sql', - sessionTimeout: 'session_timeout', - requestTimeout: 'request_timeout', -}; - -export const CDCParams = { - baseUrl: 'base-url', - username: 'username', - password: 'password', - databases: 'database-names', - tables: 'table-names', - startupMode: 'startup.mode', - startupTimestamp: 'startup.timestamp', - startupSpecificOffsetFile: 'startup.specific-offset.file', - startupSpecificOffsetPos: 'startup.specific-offset.pos', - stopMode: 'stop.mode', - stopTimestamp: 'stop.timestamp', - stopSpecificOffsetFile: 'stop.specific-offset.file', - stopSpecificOffsetPos: 'stop.specific-offset.pos', - incrementalParallelism: 'incremental.parallelism', - snapshotSplitSize: 'snapshot.split.size', - snapshotFetchSize: 'snapshot.fetch.size', - serverId: 'server-id', - serverTimeZone: 'server-time-zone', - connectTimeout: 'connect.timeout', - connectMaxRetries: 'connect.max-retries', - connectionPoolSize: 'connection.pool.size', - chunkKeyEvenDistributionFactorUpperBound: 'chunk-key.even-distribution.factor.upper-bound', - chunkKeyEvenDistributionFactorLowerBound: 'chunk-key.even-distribution.factor.lower-bound', - sampleShardingThreshold: 'sample-sharding.threshold', - inverseSamplingRate: 'inverse-sampling.rate', - exactlyOnce: 'exactly_once', - debeziums: 'debezium', - debeziumProperties: 'debeziumProperties', - debeziumProperty: 'debeziumProperty', - debeziumValue: 'debeziumValue', - format: 'format', -}; - -export const MongoDBCDCParams = { - hosts: 'hosts', - username: 'username', - password: 'password', - database: 'database', - collection: 'collection', - connectionOptions: 'connection.options', - batchSize: 'batch.size', - pollMaxBatchSize: 'poll.max.batch.size', - pollAwaitTimeMs: 'poll.await.time.ms', - heartbeatIntervalMs: 'heartbeat.interval.ms', - incrementalSnapshotChunkSizeMb: 'incremental.snapshot.chunk.size.mb' -}; - -export const HbaseParams = { - zookeeperQuorum: 'zookeeper_quorum', - table: 'table', - familyName: 'family_name', - rowkeyColumn: 'rowkey_column', - rowkeyColumnArray: 'rowkeyColumnArray', - rowkeyColumnValue: 'rowkeyColumnArray', - rowkeyDelimiter: 'rowkey_delimiter', - versionColumn: 'version_column', - nullMode: 'null_mode', - walWrite: 'wal_write', - writeBufferSize: 'write_buffer_size', - encoding: 'encoding', - hbaseExtraConfig: 'hbase_extra_config', - hbaseExtraConfigMap: 'hbaseExtraConfigMap', - hbaseExtraConfigKey: 'hbaseExtraConfigKey', - hbaseExtraConfigValue: 'hbaseExtraConfigValue' -} - -export const PaimonParams = { - warehouse: 'warehouse', - database: 'database', - table: 'table', - hdfsSitePath: 'hdfs_site_path' -} - -export const CopyParams = { - srcField: 'src_field', - destField: 'dest_field' -} - -export const FieldMapperParams = { - fieldMapper: 'field_mapper', - fieldMapperGroup: 'fieldMapperGroup', - srcField: 'src_field', - destField: 'dest_field' -} - -export const FilterRowKindParams = { - includeKinds: 'include_kinds', - excludeKinds: 'exclude_kinds' -} - -export const FilterParams = { - fields: 'fields', - fieldArray: 'fieldArray', - field: 'field', -} - -export const ReplaceParams = { - replaceField: 'replace_field', - pattern: 'pattern', - replacement: 'replacement', - isRegex: 'is_regex', - replaceFirst: 'replace_first' -} - -export const SplitParams = { - separator: 'separator', - splitField: 'split_field', - outputFields: 'output_fields', - outputFieldArray: 'outputFieldArray', - outputField: 'outputField' -} - - -export const SqlParams = { - query: 'query' -} diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/dnd/dnd.less b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/dnd/dnd.less new file mode 100644 index 000000000..c37834017 --- /dev/null +++ b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/dnd/dnd.less @@ -0,0 +1,106 @@ +.components { + width: 240px; + height: 100%; + flex-shrink: 0; + border-right: 1px solid #d4d7da; + background-color: #f7f8fa; + + .action { + padding: 8px 12px; + + .search { + height: 28px; + margin: 0; + + &:hover { + border-color: #0068fa; + } + } + + :global(.ant-input-affix-wrapper-focused) { + border-color: #0068fa; + } + } + + .tree { + overflow: auto; + height: 100%; + padding: 0 4px; + background-color: #f7f8fa; + + :global { + .ant-tree-treenode { + &:hover { + background-color: unset; + } + + .ant-tree-node-content-wrapper-normal { + &:hover { + background-color: #f7f8fa; + } + } + } + + .ant-tree-indent, + .ant-tree-switcher-noop { + display: none; + } + + .ant-tree-node-selected { + background-color: unset !important; + } + + .ant-tree-treenode-selected::before { + background: transparent !important; + } + + .ant-tree-switcher-icon { + color: rgb(135 136 137 / 100%); + } + } + + .dir { + margin-left: -4px; + color: rgb(0 10 26 / 68%); + font-size: 12px; + } + + .node { + display: flex; + width: 200px; + height: 32px; + align-items: center; + padding: 0 8px; + border: 1px solid #d4d7da; + border-radius: 4px; + margin: 0 4px; + background-color: #fff; + color: rgb(0 10 26 / 68%); + font-size: 12px; + + &:hover { + border: 1px solid #0068fa; + background-color: #fff; + box-shadow: 0 0 0 2px rgb(0 104 250 / 15%); + + .nodeDragHolder { + display: block; + } + } + + .nodeTitle { + flex: 1; + } + + .nodeDragHolder { + display: none; + width: 10px; + } + + .icon { + margin-right: 8px; + color: #bbbcbc; + } + } + } +} diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/dnd/dnd.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/dnd/dnd.tsx new file mode 100644 index 000000000..a3993e2a3 --- /dev/null +++ b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/dnd/dnd.tsx @@ -0,0 +1,82 @@ +import React, {useEffect, useState} from 'react'; +import {Tree} from 'antd'; +import SearchInput from './search'; +import {Props} from "@/typings"; +import {WsDiJob} from "@/services/project/typings"; +import {WsSeaTunnelService} from "@/services/project/SeaTunnelService"; +import styles from './dnd.less'; +import {BaseNode} from "../node/base-node"; + +const {DirectoryTree} = Tree; + +type ComponentTreeItem = { + category: string; + docString: string; + isLeaf: boolean; + key: string; + title: string; + children?: ComponentTreeItem[]; + ports?: { + id: string; + group: string; + }[]; +}; + +const Dnd: React.FC> = ({data}) => { + const [treeItems, setTreeItems] = useState([]); + const [searchComponents, setSearchComponents] = useState([]); + + useEffect(() => { + WsSeaTunnelService.getDnds(data.jobEngine?.value).then((response) => { + if (response.success) { + setTreeItems(response.data) + } + }) + }, []); + + const handleSearchComponent = (keyword?: string) => { + if (!keyword) { + setSearchComponents([]); + return; + } + const searchResult = treeItems.flatMap((group) => + group.children.filter((child) => + child.title.toLowerCase().includes(keyword.toLowerCase()), + ), + ); + setSearchComponents(searchResult); + }; + + const treeNodeRender = (treeNode: ComponentTreeItem) => { + const {isLeaf, docString, title} = treeNode; + if (isLeaf) { + return + } else { + return {title}; + } + }; + + return ( +
+
+ handleSearchComponent(key)} + /> +
+ {treeItems.length && ( + treeNodeRender(node)} + treeData={searchComponents.length ? searchComponents : treeItems} + /> + )} +
+ ); +}; + +export {Dnd}; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/dnd/search/index.less b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/dnd/search/index.less new file mode 100644 index 000000000..24d808f59 --- /dev/null +++ b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/dnd/search/index.less @@ -0,0 +1,17 @@ +.search { + width: 100%; + height: 24px; + border-radius: 5px; + margin: 4px 8px; + background-color: white; + color: rgb(0 0 0 / 25%); + + .searchIcon { + color: rgb(0 0 0 / 45%); + font-size: 16px; + } + + :global(.ant-input) { + font-size: 12px; + } +} diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/dnd/search/index.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/dnd/search/index.tsx new file mode 100644 index 000000000..d77132c50 --- /dev/null +++ b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/dnd/search/index.tsx @@ -0,0 +1,43 @@ +import { useRef, useState } from 'react'; +import { Input } from 'antd'; +import { SearchOutlined } from '@ant-design/icons'; +import classnames from 'classnames'; + +import styles from './index.less'; + +interface IProps { + className?: string; + placeholder: string; + onSearch: (key: string) => void; +} + +export const SearchInput = (props: IProps) => { + const inputRef = useRef(null); + const searchTimeout = useRef(0); + const [value, setValue] = useState(''); + + const handleSearch = (evt: React.FocusEvent) => { + const key = evt.target.value; + setValue(key); + if (searchTimeout.current) clearTimeout(searchTimeout.current); + searchTimeout.current = window.setTimeout(() => { + props.onSearch(key); + searchTimeout.current = 0; + }, 200); + }; + + return ( + } + allowClear + value={value} + onChange={handleSearch} + size="small" + placeholder={props.placeholder} + /> + ); +}; + +export default SearchInput; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/json/json.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/json/json.tsx new file mode 100644 index 000000000..518818557 --- /dev/null +++ b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/json/json.tsx @@ -0,0 +1,37 @@ +import { useGraphStore } from '@antv/xflow'; +import hljs from 'highlight.js/lib/core'; +import json from 'highlight.js/lib/languages/json'; +import { useEffect, useRef } from 'react'; + +import 'highlight.js/styles/github.css'; +import styles from '../../index.less'; + +hljs.registerLanguage('json', json); + +const JSONCode = () => { + const ref = useRef(null); + const nodes = useGraphStore((state) => state.nodes); + const edges = useGraphStore((state) => state.edges); + + const parse = () => { + if (ref.current) { + ref.current.innerText = JSON.stringify({ nodes, edges }, null, 2); + hljs.highlightBlock(ref.current); + } + }; + + useEffect(() => { + parse(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [nodes, edges]); + + return ( +
+
+        
+      
+
+ ); +}; + +export { JSONCode }; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/react-node/base-node.less b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/node/base-node.less similarity index 100% rename from scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/react-node/base-node.less rename to scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/node/base-node.less diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/node/base-node.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/node/base-node.tsx new file mode 100644 index 000000000..ab57c0af6 --- /dev/null +++ b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/node/base-node.tsx @@ -0,0 +1,87 @@ +import {Button, Descriptions, Popover, Space, Tag, Typography} from 'antd'; +import {HolderOutlined, InfoCircleOutlined, MenuOutlined} from '@ant-design/icons'; +import {useIntl} from "@umijs/max"; +import {useDnd} from "@antv/xflow"; +import './base-node.less'; +import {Props} from "@/typings"; +import styles from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/dnd/dnd.less"; +import React from "react"; +import {DAG_NODE} from "../shape/connector-shape"; + +export const BaseNode: React.FC>> = ({data}) => { + const intl = useIntl(); + const {startDrag} = useDnd(); + let id = 0; + + const handleMouseDown = ( + e: React.MouseEvent, + ) => { + id += 1; + startDrag( + { + id: id.toString(), + shape: DAG_NODE, + data: { + id: id.toString(), + label: data.title, + status: 'default', + }, + ports: data.ports, + }, + e, + ); + }; + + const nodeStyle = () => { + switch (data.meta?.type) { + case 'source': + // return '#e6f4ff'; + case 'transform': + // return '#e6fffb'; + case 'sink': + // return '#fff7e6'; + default: + return ''; + } + }; + + return ( + + + {data.docString} + + {data.health && {data.health?.label}} + {data.features && + data.features.map((item) => { + return {item.label}; + })} + + } + title={ +
+ {data.title} + +
+ } + placement="rightTop" + > +
handleMouseDown(e)}> + + + + + + {data.title} + + +
+ +
+
+
+ ); +}; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/react-node/base-node.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/react-node/base-node.tsx deleted file mode 100644 index fda5ff791..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/react-node/base-node.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import { Button, Descriptions, Popover, Space, Tag, Typography } from 'antd'; -import { InfoCircleOutlined, MenuOutlined } from '@ant-design/icons'; -import { getIntl, getLocale } from '@umijs/max'; -import './base-node.less'; - -export const BaseNode = (props: any) => { - const intl = getIntl(getLocale(), true); - - const nodeStyle = () => { - switch (props.data.data.type) { - case 'source': - return '#e6f4ff'; - case 'transform': - return '#e6fffb'; - case 'sink': - return '#fff7e6'; - default: - return ''; - } - }; - - return ( - - - {props.data.data.jobId ? ( - <> - - {props.data.label} - - - {props.data.x} - - - {props.data.y} - - - {props.data.data.createTime} - - - {props.data.data.updateTime} - - - ) : ( - {props.data.description} - )} - - {props.data?.health && {props.data?.health?.label}} - {props.data?.features && - props.data.features.map((item) => { - return {item.label}; - })} - - } - title={ -
- {props.data.data.displayName} - - - -
- } - placement="rightTop" - > -
- - - - - - {props.data.label} - - -
-
- ); -}; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/service.ts b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/service.ts deleted file mode 100644 index fc5439d0a..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/service.ts +++ /dev/null @@ -1,141 +0,0 @@ -import { getIntl, getLocale, request } from '@umijs/max'; -import { WsDiJobService } from '@/services/project/WsDiJobService'; -import { NsGraph } from '@antv/xflow'; -import { NsNodeCollapsePanel } from '@antv/xflow-extension/es'; -import { CONNECTION_PORT_TYPE, DND_RENDER_ID, NODE_HEIGHT, NODE_WIDTH } from './constant'; -import {WsDiJob, WsDiJobGraphParam} from "@/services/project/typings"; - -export const DagService = { - url: '/api/di/job', - - loadNodeMeta: async (job: WsDiJob) => { - return request(`${DagService.url}/node/meta/${job.jobEngine.value}`, { - method: 'GET' - }); - }, - - saveGraphData: async (meta: NsGraph.IGraphMeta, graphData: NsGraph.IGraphData) => { - let param: WsDiJobGraphParam = { - jobId: meta.origin.id, - jobGraph: graphData - } - return WsDiJobService.saveJobDetail(param); - }, - - loadJobInfo: async (id: number) => { - let result: NsGraph.IGraphData = { nodes: [], edges: [] }; - await WsDiJobService.selectJobById(id).then((resp) => { - let jobInfo = resp; - let nodes: NsGraph.INodeConfig[] = []; - let edges: NsGraph.IEdgeConfig[] = []; - jobInfo.jobStepList?.map((step) => { - nodes.push({ - id: step.stepCode, - x: step.positionX, - y: step.positionY, - label: step.stepTitle, - renderKey: DND_RENDER_ID, - width: NODE_WIDTH, - height: NODE_HEIGHT, - ports: DagService.createPorts(step.stepType.value as string), - data: { - jobId: step.jobId, - name: step.stepName.value, - type: step.stepType.value, - displayName: DagService.titleCase(step.stepName.label + ' ' + step.stepType.value), - createTime: step.createTime, - updateTime: step.updateTime, - attrs:step.stepAttrs - }, - }); - }); - jobInfo.jobLinkList?.map((link) => { - edges.push({ - id: link.linkCode, - source: link.fromStepCode, - target: link.toStepCode, - sourcePortId: CONNECTION_PORT_TYPE.source, - targetPortId: CONNECTION_PORT_TYPE.target, - }); - }); - result = { nodes: nodes, edges: edges }; - }); - return result; - }, - - createPorts: (type: string) => { - const intl = getIntl(getLocale(), true); - const group = { - top: { - position: 'top', - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - }, - }, - }, - bottom: { - position: 'bottom', - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#31d0c6', - strokeWidth: 2, - fill: '#fff', - }, - }, - }, - }; - if (type === 'source') { - const items: NsGraph.INodeAnchor[] = [ - { - id: CONNECTION_PORT_TYPE.source, - group: NsGraph.AnchorGroup.BOTTOM, - type: NsGraph.AnchorType.OUTPUT, - tooltip: intl.formatMessage({ id: 'pages.project.di.flow.dag.port.out' }), - }, - ]; - return { groups: group, items: items }; - } else if (type === 'transform') { - const items: NsGraph.INodeAnchor[] = [ - { - id: CONNECTION_PORT_TYPE.source, - group: NsGraph.AnchorGroup.BOTTOM, - type: NsGraph.AnchorType.OUTPUT, - tooltip: intl.formatMessage({ id: 'pages.project.di.flow.dag.port.out' }), - }, - { - id: CONNECTION_PORT_TYPE.target, - group: NsGraph.AnchorGroup.TOP, - type: NsGraph.AnchorType.INPUT, - tooltip: intl.formatMessage({ id: 'pages.project.di.flow.dag.port.in' }), - }, - ]; - return { groups: group, items: items }; - } else if (type === 'sink') { - const items: NsGraph.INodeAnchor[] = [ - { - id: CONNECTION_PORT_TYPE.target, - group: NsGraph.AnchorGroup.TOP, - type: NsGraph.AnchorType.INPUT, - tooltip: intl.formatMessage({ id: 'pages.project.di.flow.dag.port.in' }), - }, - ]; - return { groups: group, items: items }; - } else { - return { groups: group, items: [] }; - } - }, - titleCase: (title: string) => { - let tmpStrArr: string[] = title.split(' '); - for (let i = 0; i < tmpStrArr.length; i++) { - tmpStrArr[i] = tmpStrArr[i].slice(0, 1).toUpperCase() + tmpStrArr[i].slice(1).toLowerCase(); - } - return tmpStrArr.join(' '); - }, -}; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/shape/connector-shape.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/shape/connector-shape.tsx new file mode 100644 index 000000000..ce5fb086b --- /dev/null +++ b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/shape/connector-shape.tsx @@ -0,0 +1,156 @@ +import {useState} from 'react'; +import {Input, Modal} from 'antd'; +import {CopyOutlined, DeleteOutlined, EditOutlined,} from '@ant-design/icons'; +import type {Node} from '@antv/xflow'; +import {Graph, Path, register, XFlow} from '@antv/xflow'; +import {Dropdown, Menu} from '@antv/x6-react-components'; +import './node.less'; +import '@antv/x6-react-components/dist/index.css'; + +const {Item: MenuItem, Divider} = Menu; + +const DAG_NODE = 'seatunnel-dag-node'; +const DAG_EDGE = 'seatunnel-dag-edge'; +const DAG_CONNECTOR = 'seatunnel-dag-connector'; + +const SeaTunnelConnectorDagNode = ({node}: { node: Node }) => { + const [open, setOpen] = useState(false); + const [value, setValue] = useState(); + + const onMenuItemClick = (key: string) => { + const graph = node?.model?.graph; + if (!graph) { + return; + } + switch (key) { + case 'delete': + node.remove(); + break; + case 'copy': + graph.copy([graph.getCellById(node.id)]); + break; + case 'paste': + graph.paste(); + break; + case 'rename': + setOpen(true); + break; + default: + break; + } + }; + + const menu = ( + onMenuItemClick(key)}> + } text="重命名"/> + } text="复制"/> + } text="粘贴"/> + } text="删除"/> + + ); + + return ( + + setOpen(false)} + onOk={() => { + node.setData({ + ...node.data, + label: value, + }); + setOpen(false); + }} + > + setValue(e.target.value)}/> + + +
+ 节点信息 +
+
+
+ ); +}; + +register({ + shape: DAG_NODE, + width: 180, + height: 36, + component: SeaTunnelConnectorDagNode, + effect: ['data'], + ports: { + groups: { + top: { + position: 'top', + attrs: { + circle: { + r: 4, + magnet: true, + stroke: '#C2C8D5', + strokeWidth: 1, + fill: '#fff', + }, + }, + }, + bottom: { + position: 'bottom', + attrs: { + circle: { + r: 4, + magnet: true, + stroke: '#C2C8D5', + strokeWidth: 1, + fill: '#fff', + }, + }, + }, + }, + }, +}); + +Graph.registerConnector( + DAG_CONNECTOR, + (s, e) => { + const offset = 4; + const deltaY = Math.abs(e.y - s.y); + const control = Math.floor((deltaY / 3) * 2); + + const v1 = {x: s.x, y: s.y + offset + control}; + const v2 = {x: e.x, y: e.y - offset - control}; + + return Path.normalize( + `M ${s.x} ${s.y} + L ${s.x} ${s.y + offset} + C ${v1.x} ${v1.y} ${v2.x} ${v2.y} ${e.x} ${e.y - offset} + L ${e.x} ${e.y} + `, + ); + }, + true, +); + +Graph.registerEdge( + DAG_EDGE, + { + inherit: 'edge', + attrs: { + line: { + stroke: '#C2C8D5', + strokeWidth: 1, + targetMarker: null, + }, + }, + zIndex: -1, + }, + true, +); + +export {DAG_NODE, DAG_EDGE, DAG_CONNECTOR}; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/shape/node.less b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/shape/node.less new file mode 100644 index 000000000..7c9af9691 --- /dev/null +++ b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/shape/node.less @@ -0,0 +1,88 @@ +.node { + display: flex; + width: 100%; + height: 100%; + align-items: center; + border: 1px solid #c2c8d5; + border-radius: 4px; + border-left: 4px solid #5f95ff; + background-color: #fff; + box-shadow: 0 2px 5px 1px rgb(0 0 0 / 6%); +} + +.node img { + width: 20px; + height: 20px; + flex-shrink: 0; + margin-left: 8px; +} + +.node .label { + display: inline-block; + width: 104px; + flex-shrink: 0; + margin-left: 8px; + color: #666; + font-size: 12px; +} + +.node .status { + height: 20px; + flex-shrink: 0; +} + +.node.success { + border-left: 4px solid #52c41a; +} + +.node.failed { + border-left: 4px solid #ff4d4f; +} + +.node.running .status img { + animation: spin 1s linear infinite; +} + +.x6-node-selected .node { + border-color: #1890ff; + border-radius: 2px; + box-shadow: 0 0 0 4px #d4e8fe; +} + +.x6-node-selected .node.success { + border-color: #52c41a; + border-radius: 2px; + box-shadow: 0 0 0 4px #ccecc0; +} + +.x6-node-selected .node.failed { + border-color: #ff4d4f; + border-radius: 2px; + box-shadow: 0 0 0 4px #fedcdc; +} + +.x6-edge:hover path:nth-child(2) { + stroke: #1890ff; + stroke-width: 1px; +} + +.x6-edge-selected path:nth-child(2) { + stroke: #1890ff; + stroke-width: 1.5px !important; +} + +@keyframes running-line { + to { + stroke-dashoffset: -1000; + } +} + +@keyframes spin { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } +} diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/shape/node.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/shape/node.tsx new file mode 100644 index 000000000..a8e2b2327 --- /dev/null +++ b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/shape/node.tsx @@ -0,0 +1,108 @@ +import React, {useEffect, useState} from 'react'; +import {useIntl} from '@umijs/max'; +import {useGraphStore} from '@antv/xflow'; +import {EdgeOptions, NodeOptions} from "@antv/xflow/src/types"; +import {Props} from "@/typings"; +import {WsDiJob} from "@/services/project/typings"; +import {WsDiJobService} from "@/services/project/WsDiJobService"; + +import {DAG_EDGE, DAG_NODE} from './connector-shape'; + +const InitShape: React.FC> = ({data}) => { + const intl = useIntl() + const addNodes = useGraphStore((state) => state.addNodes); + const addEdges = useGraphStore((state) => state.addEdges); + const updateNode = useGraphStore((state) => state.updateNode); + const updateEdge = useGraphStore((state) => state.updateEdge); + + const [wsDiJob, setWsDiJob] = useState() + + useEffect(() => { + WsDiJobService.selectJobById(data.id).then((response) => { + let jobInfo = response; + let nodes: NodeOptions[] = []; + let edges: EdgeOptions[] = []; + jobInfo.jobStepList?.map((step) => { + nodes.push({ + id: step.stepCode, + shape: DAG_NODE, + x: step.positionX, + y: step.positionY, + label: step.stepTitle, + ports: createPorts(step.stepType.value as string, step.stepName.value as string), + data: { + meta: { + jobId: step.jobId, + name: step.stepName.value, + type: step.stepType.value, + displayName: titleCase(step.stepName.label + ' ' + step.stepType.value), + createTime: step.createTime, + updateTime: step.updateTime + }, + attrs: step.stepAttrs + }, + }); + }); + addNodes(nodes) + + jobInfo.jobLinkList?.map((link) => { + edges.push({ + id: link.linkCode, + shape: DAG_EDGE, + source: { + cell: link.fromStepCode, + port: link.fromStepCode + '-bottom' + }, + target: { + cell: link.toStepCode, + port: link.fromStepCode + '-top' + }, + data: { + foo: 'bar' + } + }); + }); + addEdges(edges) + }); + }, []); + + const createPorts = (type: string, stepCode: string) => { + if (type === 'source') { + return [{ + id: stepCode + '-bottom', + group: 'bottom' + }] + } else if (type === 'sink') { + return [{ + id: stepCode + '-top', + group: 'top' + }] + } else if (type === 'transform') { + [ + { + id: stepCode + '-top', + group: 'top' + }, + { + id: stepCode + '-bottom', + group: 'bottom' + } + ] + } else { + return [] + } + } + + const titleCase = (title: string) => { + let tmpStrArr: string[] = title.split(' '); + for (let i = 0; i < tmpStrArr.length; i++) { + tmpStrArr[i] = tmpStrArr[i].slice(0, 1).toUpperCase() + tmpStrArr[i].slice(1).toLowerCase(); + } + return tmpStrArr.join(' '); + } + + return null; + } +; + +export {InitShape}; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/column.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/column.tsx deleted file mode 100644 index f14e6feea..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/column.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import {InfoCircleOutlined} from "@ant-design/icons"; -import {ProFormGroup, ProFormList, ProFormText} from "@ant-design/pro-components"; -import {getIntl, getLocale} from "@umijs/max"; -import {ColumnParams} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/constant"; - -const ColumnItem: React.FC = () => { - const intl = getIntl(getLocale(), true); - return ( - , - }} - > - - - - - - - ); -} - -export default ColumnItem; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource.tsx deleted file mode 100644 index e87686967..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import {ProFormGroup, ProFormSelect} from "@ant-design/pro-components"; -import {getIntl, getLocale} from "@umijs/max"; -import {DictDataService} from "@/services/admin/dictData.service"; -import {DICT_TYPE} from "@/constants/dictType"; -import {STEP_ATTR_TYPE} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/constant"; -import {DsInfoParam} from "@/services/datasource/typings"; -import {DsInfoService} from "@/services/datasource/info.service"; - -const DataSourceItem: React.FC<{ dataSource: string }> = ({dataSource}) => { - const intl = getIntl(getLocale(), true); - return ( - - DictDataService.listDictDataByType2(DICT_TYPE.datasourceType)} - /> - { - const param: DsInfoParam = { - name: params.keyWords, - dsType: params.dataSourceType - }; - return DsInfoService.list(param).then((response) => { - return response.data.map((item) => { - return {label: item.name, value: item.id, item: item}; - }); - }); - })} - /> - - ); -} - -export default DataSourceItem; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/fields.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/fields.tsx deleted file mode 100644 index 4de961382..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/fields.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import {InfoCircleOutlined} from "@ant-design/icons"; -import {ProFormGroup, ProFormList, ProFormText} from "@ant-design/pro-components"; -import {getIntl, getLocale} from "@umijs/max"; -import {SchemaParams} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/constant"; - -const FieldItem: React.FC = () => { - const intl = getIntl(getLocale(), true); - return ( - , - }} - > - - - - - - - - ); -} - -export default FieldItem; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper.ts b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper.ts deleted file mode 100644 index b88d43ceb..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper.ts +++ /dev/null @@ -1,284 +0,0 @@ -import { - CassandraParams, - CDCParams, - ClickHouseParams, - ColumnParams, - DorisParams, - ElasticsearchParams, - FieldMapperParams, - FilterParams, - HbaseParams, - HiveParams, - InfluxDBParams, - IoTDBParams, - JdbcParams, - KafkaParams, RocketMQParams, - SchemaParams, - SplitParams, - StarRocksParams -} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/constant"; - -export const StepSchemaService = { - - formatSchema: (values: Record) => { - const fields: Record = {} - values[SchemaParams.fieldArray]?.forEach(function (item: Record) { - fields[item[SchemaParams.field]] = item[SchemaParams.type]; - }); - const schema: Record = {} - schema[SchemaParams.fields] = fields; - values[SchemaParams.schema] = JSON.stringify(schema) - return values - }, - - formatColumns: (values: Record) => { - const columns: Array = [] - values[ColumnParams.readColumnArray]?.forEach(function (item: Record) { - columns.push(item[ColumnParams.readColumn]) - }); - values[ColumnParams.readColumns] = JSON.stringify(columns) - return values - }, - - formatHeader: (values: Record) => { - const headers: Record = {} - values.headerArray?.forEach(function (item: Record) { - headers[item.header] = item.headerValue; - }); - values.headers = JSON.stringify(headers) - return values - }, - - formatParam: (values: Record) => { - const params: Record = {} - values.paramArray?.forEach(function (item: Record) { - params[item.param] = item.paramValue; - }); - values.params = JSON.stringify(params) - return values - }, - - formatUserIds: (values: Record) => { - const userIds: Array = [] - values.mentionedArray?.forEach(function (item: any) { - userIds.push(item.userId) - }); - values.mentioned_list = JSON.stringify(userIds) - return values - }, - - formatMobiles: (values: Record) => { - const mobiles: Array = [] - values.mentionedMobileArray?.forEach(function (item: any) { - mobiles.push(item.mobile) - }); - values.mentioned_mobile_list = JSON.stringify(mobiles) - return values - }, - - formatPositionMapping: (values: Record) => { - const mappings: Record = {} - values.queryParamPositionArray?.forEach(function (item: Record) { - mappings[item.field] = item.position; - }); - values.queryParamPosition = JSON.stringify(mappings) - return values - }, - - formatKafkaConf: (values: Record) => { - const config: Record = {} - values[KafkaParams.kafkaConf]?.forEach(function (item: Record) { - config[item[KafkaParams.key]] = item[KafkaParams.value]; - }); - values[KafkaParams.kafkaConfig] = JSON.stringify(config) - return values - }, - - formatPartitionKeyFields: (values: Record) => { - const partitionKeyFields: Array = [] - values.partitionKeyArray?.forEach(function (item: Record) { - partitionKeyFields.push(item.partitionKey) - }); - values[KafkaParams.partitionKeyFields] = JSON.stringify(partitionKeyFields) - return values - }, - - formatAssginPartitions: (values: Record) => { - const assignPartitions: Array = [] - values.assignPartitionArray?.forEach(function (item: Record) { - assignPartitions.push(item.assignPartition) - }); - values[KafkaParams.assignPartitions] = JSON.stringify(assignPartitions) - return values - }, - - formatClickHouseConf: (values: Record) => { - const config: Record = {} - values[ClickHouseParams.clickhouseConfArray]?.forEach(function (item: Record) { - config[item[ClickHouseParams.key]] = item[ClickHouseParams.value]; - }); - values[ClickHouseParams.clickhouseConf] = JSON.stringify(config) - return values - }, - - formatHadoopS3Properties: (values: Record) => { - const properties: Record = {} - values.hadoopS3Properties?.forEach(function (item: Record) { - properties[item.key] = item.value; - }); - values.hadoop_s3_properties = JSON.stringify(properties) - return values - }, - - formatJsonField: (values: Record) => { - const jsonFields: Record = {} - values.jsonField?.forEach(function (item: Record) { - jsonFields[item.key] = item.path; - }); - values.json_field = JSON.stringify(jsonFields) - return values - }, - - formatPrimaryKeys: (values: Record) => { - const primaryKeys: Array = [] - values[JdbcParams.primaryKeyArray]?.forEach(function (item: Record) { - primaryKeys.push(item[JdbcParams.primaryKey]) - }); - values[JdbcParams.primaryKeys] = JSON.stringify(primaryKeys) - return values - }, - - formatEsPrimaryKeys: (values: Record) => { - const primaryKeys: Array = [] - values[ElasticsearchParams.primaryKeyArray]?.forEach(function (item: Record) { - primaryKeys.push(item[ElasticsearchParams.primaryKey]) - }); - values[ElasticsearchParams.primaryKeys] = JSON.stringify(primaryKeys) - return values - }, - - formatEsSource: (values: Record) => { - const source: Array = [] - values[ElasticsearchParams.sourceArray]?.forEach(function (item: Record) { - source.push(item[ElasticsearchParams.sourceField]) - }); - values[ElasticsearchParams.source] = JSON.stringify(source) - return values - }, - - formatMeasurementFields: (values: Record) => { - const primaryKeys: Array = [] - values[IoTDBParams.keyMeasurementFieldArray]?.forEach(function (item: Record) { - primaryKeys.push(item[IoTDBParams.keyMeasurementField]) - }); - values[IoTDBParams.keyMeasurementFields] = JSON.stringify(primaryKeys) - return values - }, - - formatCassandraFields: (values: Record) => { - const primaryKeys: Array = [] - values[CassandraParams.fieldArray]?.forEach(function (item: Record) { - primaryKeys.push(item[CassandraParams.field]) - }); - values[CassandraParams.fields] = JSON.stringify(primaryKeys) - return values - }, - - formatDorisConfig: (values: Record) => { - const config: Record = {} - values[DorisParams.dorisConfigArray]?.forEach(function (item: Record) { - config[item[DorisParams.dorisConfigProperty]] = item[DorisParams.dorisConfigValue]; - }); - values[DorisParams.dorisConfig] = JSON.stringify(config) - return values - }, - - formatStarRocksConfig: (values: Record) => { - const config: Record = {} - values[StarRocksParams.starrocksConfigMap]?.forEach(function (item: Record) { - values[item[StarRocksParams.starrocksConfigKey]] = item[StarRocksParams.starrocksConfigValue]; - }); - values[StarRocksParams.starrocksConfig] = JSON.stringify(config) - return values - }, - - formatKeyTags: (values: Record) => { - values[InfluxDBParams.keyTags] = JSON.stringify(values[InfluxDBParams.keyTagArray]) - return values - }, - - formatDebeziumProperties: (values: Record) => { - const properties: Record = {} - values[CDCParams.debeziumProperties]?.forEach(function (item: Record) { - properties[item[CDCParams.debeziumProperty]] = item[CDCParams.debeziumValue]; - }); - values[CDCParams.debeziums] = JSON.stringify(properties) - values[CDCParams.startupMode] = values.startupMode - values[CDCParams.stopMode] = values.stopMode - return values - }, - - formatFieldMapper: (values: Record) => { - const fieldMapper: Record = {} - values[FieldMapperParams.fieldMapperGroup]?.forEach(function (item: Record) { - fieldMapper[item[FieldMapperParams.srcField]] = item[FieldMapperParams.destField]; - }); - values[FieldMapperParams.fieldMapper] = JSON.stringify(fieldMapper) - return values - }, - - formatFilterFields: (values: Record) => { - const fields: Array = [] - values[FilterParams.fieldArray]?.forEach(function (item: Record) { - fields.push(item[FilterParams.field]) - }); - values[FilterParams.fields] = JSON.stringify(fields) - return values - }, - - formatSplitOutputFields: (values: Record) => { - const outputFields: Array = [] - values[SplitParams.outputFieldArray]?.forEach(function (item: Record) { - outputFields.push(item[SplitParams.outputField]) - }); - values[SplitParams.outputFields] = JSON.stringify(outputFields) - return values - }, - - formatPartitions: (values: Record) => { - const partitions: Array = [] - values[HiveParams.readPartitionArray]?.forEach(function (item: Record) { - partitions.push(item[HiveParams.readPartition]) - }); - values[HiveParams.readPartitions] = JSON.stringify(partitions) - return values - }, - - formatRowKeyColumn: (values: Record) => { - const columns: Array = [] - values[HbaseParams.rowkeyColumnArray]?.forEach(function (item: Record) { - columns.push(item[HbaseParams.rowkeyColumnValue]) - }); - values[HbaseParams.rowkeyColumn] = JSON.stringify(columns) - return values - }, - - formatHbaseExtraConfig: (values: Record) => { - const configs: Record = {} - values[HbaseParams.hbaseExtraConfigMap]?.forEach(function (item: Record) { - configs[item[HbaseParams.hbaseExtraConfigKey]] = item[HbaseParams.hbaseExtraConfigValue]; - }); - values[HbaseParams.hbaseExtraConfig] = JSON.stringify(configs) - return values - }, - - formatRocketMQPartitionOffsets: (values: Record) => { - const paritionOffsets: Record = {} - values[RocketMQParams.startModeOffsetsList]?.forEach(function (item: Record) { - paritionOffsets[item[RocketMQParams.specificPartition]] = item[RocketMQParams.specificPartitionOffset]; - }); - values[RocketMQParams.startModeOffsets] = JSON.stringify(paritionOffsets) - return values - }, - -}; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/schema.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/schema.tsx deleted file mode 100644 index b7163571a..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/schema.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import {InfoCircleOutlined} from "@ant-design/icons"; -import { - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormSelect, - ProFormText -} from "@ant-design/pro-components"; -import {getIntl, getLocale} from "@umijs/max"; -import {SchemaParams} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/constant"; - -const SchemaItem: React.FC = () => { - const intl = getIntl(getLocale(), true); - return ( - - - - {({file_format_type}) => { - if (file_format_type == 'json') { - return ( - , - }} - > - - - - - - - - ); - } - if (file_format_type == 'text') { - return - - - ; - } - if (file_format_type == 'csv') { - return - - ; - } - if (file_format_type == 'excel') { - return - - - ; - } - return ; - }} - - - ); -} - -export default SchemaItem; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-cassandra-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-cassandra-step.tsx deleted file mode 100644 index c21a4dfe9..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-cassandra-step.tsx +++ /dev/null @@ -1,141 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import { - ProForm, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormSelect, - ProFormSwitch, - ProFormText, -} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {CassandraParams, STEP_ATTR_TYPE} from '../../constant'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; -import {StepSchemaService} from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper'; - -const SinkCassandraStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatCassandraFields(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - - - - ); -}; - -export default SinkCassandraStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-clickhouse-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-clickhouse-step.tsx deleted file mode 100644 index 580afbcff..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-clickhouse-step.tsx +++ /dev/null @@ -1,186 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {ClickHouseParams, STEP_ATTR_TYPE} from '../../constant'; -import {InfoCircleOutlined} from '@ant-design/icons'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormSwitch, - ProFormText, -} from '@ant-design/pro-components'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; -import {StepSchemaService} from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper'; - -const SinkClickHouseStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id + ''); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - StepSchemaService.formatClickHouseConf(values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - , - }} - /> - - {({split_mode}) => { - if (split_mode) { - return ( - - ); - } - return ; - }} - - - - {({support_upsert}) => { - if (support_upsert) { - return ( - - ); - } - return ; - }} - - - , - }} - > - - - - - - - - - - ); -}; - -export default SinkClickHouseStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-console-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-console-step.tsx deleted file mode 100644 index 55d0650b9..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-console-step.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {NsGraph} from '@antv/xflow'; -import {getIntl, getLocale} from '@umijs/max'; -import {WsDiJob} from '@/services/project/typings'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {ProForm, ProFormText} from '@ant-design/pro-components'; - -const SinkConsoleStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - ); -}; - -export default SinkConsoleStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-datahub-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-datahub-step.tsx deleted file mode 100644 index 100d31962..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-datahub-step.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {ProForm, ProFormDigit, ProFormText} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {DatahubParams, STEP_ATTR_TYPE} from '../../constant'; -import {InfoCircleOutlined} from '@ant-design/icons'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; - -const SinkDatahubStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - , - }} - initialValue={0} - fieldProps={{ - min: 0, - }} - /> - - - ); -}; - -export default SinkDatahubStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-dingtalk-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-dingtalk-step.tsx deleted file mode 100644 index 06dcc9459..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-dingtalk-step.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {DingTalkParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {ProForm, ProFormText, ProFormTextArea} from '@ant-design/pro-components'; -import {useEffect} from 'react'; - -const SinkDingTalkStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - ); -}; - -export default SinkDingTalkStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-doris-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-doris-step.tsx deleted file mode 100644 index b2f718c2d..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-doris-step.tsx +++ /dev/null @@ -1,177 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {NsGraph} from '@antv/xflow'; -import {getIntl, getLocale} from '@umijs/max'; -import {WsDiJob} from '@/services/project/typings'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {DorisParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import { - ProForm, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormSwitch, - ProFormText, -} from '@ant-design/pro-components'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; -import {InfoCircleOutlined} from '@ant-design/icons'; -import {StepSchemaService} from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper'; - -const SinkDorisStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatDorisConfig(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - - - - - - - - - ); -}; - -export default SinkDorisStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-dynamodb-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-dynamodb-step.tsx deleted file mode 100644 index 8aecf88e5..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-dynamodb-step.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {ProForm, ProFormDigit, ProFormText} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {AmazonDynamoDBParams, STEP_ATTR_TYPE} from '../../constant'; - -const SinkAmazonDynamodbStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - ); -}; - -export default SinkAmazonDynamodbStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-elasticsearch-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-elasticsearch-step.tsx deleted file mode 100644 index 86330b948..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-elasticsearch-step.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {ProForm, ProFormDigit, ProFormGroup, ProFormList, ProFormText} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {ElasticsearchParams, STEP_ATTR_TYPE} from '../../constant'; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; -import {StepSchemaService} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper"; - -const SinkElasticsearchStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatEsPrimaryKeys(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - - ); -}; - -export default SinkElasticsearchStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-email-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-email-step.tsx deleted file mode 100644 index a9d58d88a..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-email-step.tsx +++ /dev/null @@ -1,148 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {EmailParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import { - ProForm, - ProFormDependency, - ProFormGroup, - ProFormSelect, - ProFormSwitch, - ProFormText, - ProFormTextArea, -} from '@ant-design/pro-components'; -import {useEffect} from 'react'; - -const SinkEmailStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - {({email_transport_protocol}) => { - if (email_transport_protocol == 'smtp') { - return ( - - - - {({email_smtp_auth}) => { - if (email_smtp_auth) { - return ( - - - - ); - } - return ; - }} - - - ); - } - return ; - }} - - - - - - - - ); -}; - -export default SinkEmailStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-feishu-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-feishu-step.tsx deleted file mode 100644 index 910f1d517..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-feishu-step.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {FeishuParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {ProForm, ProFormGroup, ProFormList, ProFormText} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import {StepSchemaService} from '../helper'; - -const SinkFeishuStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatHeader(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - ); -}; - -export default SinkFeishuStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-ftp-file-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-ftp-file-step.tsx deleted file mode 100644 index 0b28f0420..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-ftp-file-step.tsx +++ /dev/null @@ -1,205 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {BaseFileParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormSelect, - ProFormSwitch, - ProFormText, -} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; - -const SinkFtpFileStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - {({file_format_type}) => { - if (file_format_type == 'text' || file_format_type == 'csv') { - return ( - - - - - ); - } - if (file_format_type == 'excel') { - return ( - - - - - ); - } - return ; - }} - - - - - - - - - - - - - - - ); -}; - -export default SinkFtpFileStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-hbase-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-hbase-step.tsx deleted file mode 100644 index f05b7b8ff..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-hbase-step.tsx +++ /dev/null @@ -1,172 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {NsGraph} from '@antv/xflow'; -import {getIntl, getLocale} from '@umijs/max'; -import {WsDiJob} from '@/services/project/typings'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {HbaseParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import { - ProForm, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormSelect, - ProFormSwitch, - ProFormText -} from '@ant-design/pro-components'; -import {StepSchemaService} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper"; -import {InfoCircleOutlined} from "@ant-design/icons"; - -const SinkHbaseStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatRowKeyColumn(values) - StepSchemaService.formatHbaseExtraConfig(values) - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - - - - , - }} - copyIconProps={false} - creatorButtonProps={{ - creatorButtonText: intl.formatMessage({id: 'pages.project.di.step.hbase.hbaseExtraConfigMap'}), - type: 'text', - }} - > - - - - - - - - ); -}; - -export default SinkHbaseStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-hdfs-file-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-hdfs-file-step.tsx deleted file mode 100644 index d4258326e..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-hdfs-file-step.tsx +++ /dev/null @@ -1,193 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {BaseFileParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormSelect, - ProFormSwitch, - ProFormText, -} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; - -const SinkHdfsFileStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, form.getFieldsValue()); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - {({file_format_type}) => { - if (file_format_type == 'text' || file_format_type == 'csv') { - return ( - - - - - ); - } - if (file_format_type == 'excel') { - return ( - - - - - ); - } - return ; - }} - - - - - - - - - - - - - - ); -}; - -export default SinkHdfsFileStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-hive-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-hive-step.tsx deleted file mode 100644 index ae7f41cbd..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-hive-step.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {BaseFileParams, HiveParams, STEP_ATTR_TYPE} from '../../constant'; -import {ProForm, ProFormText} from '@ant-design/pro-components'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; - -const SinkHiveStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - ); -}; - -export default SinkHiveStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-http-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-http-step.tsx deleted file mode 100644 index b2a5db65a..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-http-step.tsx +++ /dev/null @@ -1,150 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {HttpParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {ProForm, ProFormDigit, ProFormGroup, ProFormList, ProFormText,} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import {StepSchemaService} from '../helper'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; - -const SinkHttpFileStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatHeader(values); - StepSchemaService.formatParam(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - - - - - - - - ); -}; - -export default SinkHttpFileStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-influxdb-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-influxdb-step.tsx deleted file mode 100644 index 390d780a9..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-influxdb-step.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {ProForm, ProFormDigit, ProFormSelect, ProFormText} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {InfluxDBParams, STEP_ATTR_TYPE} from '../../constant'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; -import {StepSchemaService} from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper'; - -const SinkInfluxDBStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatKeyTags(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - - ); -}; - -export default SinkInfluxDBStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-iotdb-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-iotdb-step.tsx deleted file mode 100644 index 8667a00f0..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-iotdb-step.tsx +++ /dev/null @@ -1,186 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {IoTDBParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {useEffect} from 'react'; -import { - ProForm, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormSwitch, - ProFormText, -} from '@ant-design/pro-components'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; -import {StepSchemaService} from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper'; - -const SinkIoTDBStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatMeasurementFields(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - - - - - - - - - - - ); -}; - -export default SinkIoTDBStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-jdbc-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-jdbc-step.tsx deleted file mode 100644 index 426ea69df..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-jdbc-step.tsx +++ /dev/null @@ -1,283 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {DICT_TYPE} from '@/constants/dictType'; -import {DictDataService} from '@/services/admin/dictData.service'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {JdbcParams, STEP_ATTR_TYPE} from '../../constant'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormSelect, - ProFormSwitch, - ProFormText, - ProFormTextArea -} from "@ant-design/pro-components"; -import {InfoCircleOutlined} from "@ant-design/icons"; -import {DsInfoParam} from "@/services/datasource/typings"; -import {DsInfoService} from "@/services/datasource/info.service"; -import {StepSchemaService} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper"; - -const SinkJdbcStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatPrimaryKeys(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - { - return DictDataService.listDictDataByType2(DICT_TYPE.datasourceType); - })} - /> - { - const param: DsInfoParam = { - name: params.keyWords, - dsType: params.dataSourceType - }; - return DsInfoService.list(param).then((response) => { - return response.data.map((item) => { - return {label: item.name, value: item.id, item: item}; - }); - }); - })} - /> - - , - }} - /> - , - }} - colProps={{span: 12}} - /> - , - }} - colProps={{span: 12}} - /> - , - }} - /> - - {({support_upsert_by_query_primary_key_exist}) => { - if (support_upsert_by_query_primary_key_exist) { - return ( - , - }} - > - - - - - ); - } - return ; - }} - - - , - }} - initialValue={true} - /> - - {({generate_sink_sql}) => { - if (!generate_sink_sql) { - return ( - - ); - } - return ; - }} - - - , - }} - colProps={{span: 8}} - initialValue={300} - fieldProps={{ - min: 0, - step: 100 - }} - /> - - - , - }} - initialValue={false} - /> - - {({is_exactly_once}) => { - if (is_exactly_once) { - return ( - - - - - , - }} - colProps={{span: 12}} - initialValue={-1} - fieldProps={{ - min: -1 - }} - /> - - ); - } - return ; - }} - - - - ); -}; - -export default SinkJdbcStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-kafka-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-kafka-step.tsx deleted file mode 100644 index b7a22937c..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-kafka-step.tsx +++ /dev/null @@ -1,210 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormSelect, - ProFormText, -} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {KafkaParams, STEP_ATTR_TYPE} from '../../constant'; -import {InfoCircleOutlined} from '@ant-design/icons'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; -import {StepSchemaService} from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper'; - -const SinkKafkaStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values); - StepSchemaService.formatKafkaConf(values); - StepSchemaService.formatPartitionKeyFields(values); - StepSchemaService.formatAssginPartitions(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - {({semantic}) => { - if (semantic == 'EXACTLY_ONCE') { - return ( - - - - ); - } - return ; - }} - - - - - - - - - - - - - - - {({format}) => { - if (format == 'text') { - return ( - - ); - } - return ; - }} - - , - }} - > - - - - - - - - - - ); -}; - -export default SinkKafkaStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-kudu-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-kudu-step.tsx deleted file mode 100644 index 74de6fded..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-kudu-step.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {NsGraph} from '@antv/xflow'; -import {getIntl, getLocale} from '@umijs/max'; -import {WsDiJob} from '@/services/project/typings'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {KuduParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {ProForm, ProFormSelect, ProFormText} from '@ant-design/pro-components'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; - -const SinkKuduStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - ); -}; - -export default SinkKuduStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-local-file-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-local-file-step.tsx deleted file mode 100644 index 362d39f4b..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-local-file-step.tsx +++ /dev/null @@ -1,196 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormSelect, - ProFormSwitch, - ProFormText, -} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import {BaseFileParams, STEP_ATTR_TYPE} from '../../constant'; - -const SinkLocalFileStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - {({file_format_type}) => { - if (file_format_type == 'text' || file_format_type == 'csv') { - return ( - - - - - ); - } - if (file_format_type == 'excel') { - return ( - - - - - ); - } - return ; - }} - - - - - - - - - - - - - - ); -}; - -export default SinkLocalFileStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-maxcompute-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-maxcompute-step.tsx deleted file mode 100644 index 108853314..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-maxcompute-step.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {MaxComputeParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {ProForm, ProFormSwitch, ProFormText} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; - -const SinkMaxComputeStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - ); -}; - -export default SinkMaxComputeStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-mongodb-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-mongodb-step.tsx deleted file mode 100644 index 028c748a4..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-mongodb-step.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {MongoDBParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {useEffect} from 'react'; -import {ProForm, ProFormDigit, ProFormSwitch, ProFormText} from '@ant-design/pro-components'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; -import FieldItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/fields"; -import {StepSchemaService} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper"; - -const SinkMongoDBStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values) - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - - - ); -}; - -export default SinkMongoDBStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-neo4j-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-neo4j-step.tsx deleted file mode 100644 index 8b8dbd054..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-neo4j-step.tsx +++ /dev/null @@ -1,145 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import { - ProForm, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormText, - ProFormTextArea, -} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {Neo4jParams, STEP_ATTR_TYPE} from '../../constant'; -import {InfoCircleOutlined} from '@ant-design/icons'; -import {StepSchemaService} from '../helper'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; - -const SinkNeo4jStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatPositionMapping(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - , - }} - > - - - - - - - - - - - - ); -}; - -export default SinkNeo4jStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-oss-file-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-oss-file-step.tsx deleted file mode 100644 index f5ec65da5..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-oss-file-step.tsx +++ /dev/null @@ -1,193 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {BaseFileParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormSelect, - ProFormSwitch, - ProFormText, -} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; - -const SinkOSSFileStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - {({file_format_type}) => { - if (file_format_type == 'text' || file_format_type == 'csv') { - return ( - - - - - ); - } - if (file_format_type == 'excel') { - return ( - - - - - ); - } - return ; - }} - - - - - - - - - - - - - - ); -}; - -export default SinkOSSFileStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-ossjindo-file-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-ossjindo-file-step.tsx deleted file mode 100644 index 16985c4d3..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-ossjindo-file-step.tsx +++ /dev/null @@ -1,193 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {BaseFileParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormSelect, - ProFormSwitch, - ProFormText, -} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; - -const SinkOSSJindoFileStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - {({file_format_type}) => { - if (file_format_type == 'text' || file_format_type == 'csv') { - return ( - - - - - ); - } - if (file_format_type == 'excel') { - return ( - - - - - ); - } - return ; - }} - - - - - - - - - - - - - - ); -}; - -export default SinkOSSJindoFileStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-paimon-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-paimon-step.tsx deleted file mode 100644 index b3c10ddf9..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-paimon-step.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {ProForm, ProFormText} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {PaimonParams, STEP_ATTR_TYPE} from '../../constant'; - -const SinkPaimonStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - ); -}; - -export default SinkPaimonStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-redis-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-redis-step.tsx deleted file mode 100644 index fc51597b2..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-redis-step.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {RedisParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {useEffect} from 'react'; -import {ProForm, ProFormDigit, ProFormSelect, ProFormText} from '@ant-design/pro-components'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; - -const SinkRedisStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - ); -}; - -export default SinkRedisStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-rocketmq-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-rocketmq-step.tsx deleted file mode 100644 index 3071098bf..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-rocketmq-step.tsx +++ /dev/null @@ -1,175 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {NsGraph} from '@antv/xflow'; -import {getIntl, getLocale} from '@umijs/max'; -import {WsDiJob} from '@/services/project/typings'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {RocketMQParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormSelect, - ProFormSwitch, - ProFormText -} from '@ant-design/pro-components'; - -const SinkRocketMQStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - values[RocketMQParams.aclEnabled] = values[RocketMQParams.aclEnabledField] - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - {({acl_enabled}) => { - if (acl_enabled) { - return - - - ; - } - - return ; - }} - - - - - - - - - - - - {({format}) => { - if (format == 'text') { - return - - ; - } - return ; - }} - - - - ); -}; - -export default SinkRocketMQStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-s3-file-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-s3-file-step.tsx deleted file mode 100644 index f5b9fb3b4..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-s3-file-step.tsx +++ /dev/null @@ -1,240 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {BaseFileParams, S3FileParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormSelect, - ProFormSwitch, - ProFormText, -} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; -import {InfoCircleOutlined} from '@ant-design/icons'; -import {StepSchemaService} from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper'; - -const SinkS3FileStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatHadoopS3Properties(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - , - }} - > - - - - - - - - - - - {({file_format_type}) => { - if (file_format_type == 'text' || file_format_type == 'csv') { - return ( - - - - - ); - } - if (file_format_type == 'excel') { - return ( - - - - - ); - } - return ; - }} - - - - - - - - - - - - - - ); -}; - -export default SinkS3FileStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-s3redshift-file-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-s3redshift-file-step.tsx deleted file mode 100644 index cc0519fef..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-s3redshift-file-step.tsx +++ /dev/null @@ -1,226 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {BaseFileParams, S3FileParams, S3RedshiftParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormSelect, - ProFormSwitch, - ProFormText, -} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; -import {InfoCircleOutlined} from "@ant-design/icons"; -import {StepSchemaService} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper"; - -const SinkS3RedshiftStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatHadoopS3Properties(values) - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - , - }} - > - - - - - - - - - - - {({file_format_type}) => { - if (file_format_type == 'text' || file_format_type == 'csv') { - return ( - - - - - ); - } - return ; - }} - - - - - - - - - - - - ); -}; - -export default SinkS3RedshiftStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-sentry-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-sentry-step.tsx deleted file mode 100644 index 7acd22129..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-sentry-step.tsx +++ /dev/null @@ -1,120 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {ProForm, ProFormDigit, ProFormSwitch, ProFormText} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {SentryParams, STEP_ATTR_TYPE} from '../../constant'; - -const SinkSentryStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - ); -}; - -export default SinkSentryStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-sftp-file-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-sftp-file-step.tsx deleted file mode 100644 index f6572252d..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-sftp-file-step.tsx +++ /dev/null @@ -1,198 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {BaseFileParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormSelect, - ProFormSwitch, - ProFormText, -} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; - -const SinkSftpFileStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - {({file_format_type}) => { - if (file_format_type == 'text' || file_format_type == 'csv') { - return ( - - - - - ); - } - if (file_format_type == 'excel') { - return ( - - - - - ); - } - return ; - }} - - - - - - - - - - - - - - ); -}; - -export default SinkSftpFileStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-socket-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-socket-step.tsx deleted file mode 100644 index 300491c27..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-socket-step.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {ProForm, ProFormDigit, ProFormText} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {STEP_ATTR_TYPE} from '../../constant'; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; - -const SinkSocketStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - ); -}; - -export default SinkSocketStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-starrocks-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-starrocks-step.tsx deleted file mode 100644 index f60d1591e..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-starrocks-step.tsx +++ /dev/null @@ -1,206 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {NsGraph} from '@antv/xflow'; -import {getIntl, getLocale} from '@umijs/max'; -import {WsDiJob} from '@/services/project/typings'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {StarRocksParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import { - ProForm, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormSwitch, - ProFormText, - ProFormTextArea, -} from '@ant-design/pro-components'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; -import {InfoCircleOutlined} from '@ant-design/icons'; -import {StepSchemaService} from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper'; - -const SinkStarRocksStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatStarRocksConfig(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - - - - , - }} - > - - - - - - - - - - ); -}; - -export default SinkStarRocksStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-wechat-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-wechat-step.tsx deleted file mode 100644 index 3b1a3393b..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/sink/sink-wechat-step.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {STEP_ATTR_TYPE, WeChatParams} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {ProForm, ProFormGroup, ProFormList, ProFormText} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import {InfoCircleOutlined} from '@ant-design/icons'; -import {StepSchemaService} from '../helper'; - -const SinkWeChatStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatUserIds(values); - StepSchemaService.formatMobiles(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - , - }} - copyIconProps={false} - creatorButtonProps={{ - creatorButtonText: intl.formatMessage({id: 'pages.project.di.step.wechat.userId'}), - type: 'text', - }} - > - - - - - - , - }} - copyIconProps={false} - creatorButtonProps={{ - creatorButtonText: intl.formatMessage({id: 'pages.project.di.step.wechat.mobile'}), - type: 'text', - }} - > - - - - - - - ); -}; - -export default SinkWeChatStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-cassandra-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-cassandra-step.tsx deleted file mode 100644 index 748ec32bd..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-cassandra-step.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {CassandraParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {ProForm, ProFormSelect, ProFormText, ProFormTextArea} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; - -const SourceCassandraStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - ); -}; - -export default SourceCassandraStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-cdc-mongodb-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-cdc-mongodb-step.tsx deleted file mode 100644 index 81fad6f11..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-cdc-mongodb-step.tsx +++ /dev/null @@ -1,156 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {MongoDBCDCParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {ProForm, ProFormDigit, ProFormText,} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import {InfoCircleOutlined} from "@ant-design/icons"; - -const SourceCDCMongoDBStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - , - }} - initialValue={0} - fieldProps={{ - step: 1000, - min: 0, - }} - /> - - - - ); -}; - -export default SourceCDCMongoDBStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-cdc-mysql-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-cdc-mysql-step.tsx deleted file mode 100644 index 7d61b3318..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-cdc-mysql-step.tsx +++ /dev/null @@ -1,364 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {CDCParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormSelect, ProFormSwitch, - ProFormText, -} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import {InfoCircleOutlined} from "@ant-design/icons"; -import {StepSchemaService} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper"; -import {DictDataService} from "@/services/admin/dictData.service"; -import {DICT_TYPE} from "@/constants/dictType"; - -const SourceCDCMySQLStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatDebeziumProperties(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - {({startupMode}) => { - if (startupMode == 'timestamp') { - return ( - - - - ); - } else if (startupMode == 'specific') { - return ( - - - - - ); - } - return ; - }} - - - - - {({stopMode}) => { - if (stopMode == 'timestamp') { - return ( - - - - ); - } else if (stopMode == 'specific') { - return ( - - - - - ); - } - return ; - }} - - - - - - - - - - - - - - - - , - }} - > - - - - - - - - { - return DictDataService.listDictDataByType2(DICT_TYPE.seatunnelCDCFormat) - }} - /> - - - ); -}; - -export default SourceCDCMySQLStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-cdc-sqlserver-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-cdc-sqlserver-step.tsx deleted file mode 100644 index fdd721bf6..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-cdc-sqlserver-step.tsx +++ /dev/null @@ -1,358 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {CDCParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormSelect, ProFormSwitch, - ProFormText, -} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import {InfoCircleOutlined} from "@ant-design/icons"; -import {StepSchemaService} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper"; -import {DictDataService} from "@/services/admin/dictData.service"; -import {DICT_TYPE} from "@/constants/dictType"; - -const SourceCDCSqlServerStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatDebeziumProperties(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - {({startupMode}) => { - if (startupMode == 'timestamp') { - return ( - - - - ); - } else if (startupMode == 'specific') { - return ( - - - - - ); - } - return ; - }} - - - - - {({stopMode}) => { - if (stopMode == 'timestamp') { - return ( - - - - ); - } else if (stopMode == 'specific') { - return ( - - - - - ); - } - return ; - }} - - - - - - - - - - - - - - - , - }} - > - - - - - - - - { - return DictDataService.listDictDataByType2(DICT_TYPE.seatunnelCDCFormat) - }} - /> - - - ); -}; - -export default SourceCDCSqlServerStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-clickhouse-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-clickhouse-step.tsx deleted file mode 100644 index d5e32a5c9..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-clickhouse-step.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {ProForm, ProFormText, ProFormTextArea} from '@ant-design/pro-components'; -import {ClickHouseParams, STEP_ATTR_TYPE} from '../../constant'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; -import {InfoCircleOutlined} from "@ant-design/icons"; - -const SourceClickHouseStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - , - }} - /> - - - ); -}; - -export default SourceClickHouseStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-dynamodb-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-dynamodb-step.tsx deleted file mode 100644 index c50eecfbb..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-dynamodb-step.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {ProForm, ProFormGroup, ProFormList, ProFormText} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {AmazonDynamoDBParams, SchemaParams, STEP_ATTR_TYPE} from '../../constant'; -import {StepSchemaService} from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper'; -import {InfoCircleOutlined} from '@ant-design/icons'; - -const SourceAmazonDynamodbStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - , - }} - > - - - - - - - - - - ); -}; - -export default SourceAmazonDynamodbStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-elasticsearch-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-elasticsearch-step.tsx deleted file mode 100644 index 510478a55..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-elasticsearch-step.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import { - ProForm, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormText, - ProFormTextArea -} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {ElasticsearchParams, SchemaParams, STEP_ATTR_TYPE} from '../../constant'; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; -import {StepSchemaService} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper"; -import {InfoCircleOutlined} from "@ant-design/icons"; - -const SourceElasticsearchStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatEsSource(values) - StepSchemaService.formatSchema(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onCancel(); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - , - }} - > - - - - - - - - - - ); -}; - -export default SourceElasticsearchStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-fake-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-fake-step.tsx deleted file mode 100644 index 3760f14ae..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-fake-step.tsx +++ /dev/null @@ -1,423 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {InfoCircleOutlined} from '@ant-design/icons'; -import {useEffect} from 'react'; -import { - ProForm, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormSelect, - ProFormText, - ProFormTextArea, -} from '@ant-design/pro-components'; -import {FakeParams, SchemaParams, STEP_ATTR_TYPE} from '../../constant'; -import {StepSchemaService} from '../helper'; -import {DictDataService} from "@/services/admin/dictData.service"; -import {DICT_TYPE} from "@/constants/dictType"; - -const SourceFakeStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - , - }} - colProps={{span: 8}} - initialValue={1} - fieldProps={{ - step: 1, - min: 1, - }} - /> - , - }} - colProps={{span: 8}} - initialValue={1} - fieldProps={{ - step: 1, - min: 1, - }} - /> - - - - - { - return DictDataService.listDictDataByType2(DICT_TYPE.seatunnelFakeMode) - }} - /> - - { - return DictDataService.listDictDataByType2(DICT_TYPE.seatunnelFakeMode) - }} - /> - - - - { - return DictDataService.listDictDataByType2(DICT_TYPE.seatunnelFakeMode) - }} - /> - - - - { - return DictDataService.listDictDataByType2(DICT_TYPE.seatunnelFakeMode) - }} - /> - - - - { - return DictDataService.listDictDataByType2(DICT_TYPE.seatunnelFakeMode) - }} - /> - - - - { - return DictDataService.listDictDataByType2(DICT_TYPE.seatunnelFakeMode) - }} - /> - - - - { - return DictDataService.listDictDataByType2(DICT_TYPE.seatunnelFakeMode) - }} - /> - - - - - - - - - - - - , - }} - > - - - - - - - - - - ); -}; - -export default SourceFakeStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-ftp-file-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-ftp-file-step.tsx deleted file mode 100644 index 0206fef58..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-ftp-file-step.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {ProForm, ProFormSelect, ProFormSwitch, ProFormText, ProFormTextArea} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import {BaseFileParams, STEP_ATTR_TYPE} from '../../constant'; -import {StepSchemaService} from '../helper'; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; -import SchemaItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/schema"; - -const SourceFtpFileStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - ); -}; - -export default SourceFtpFileStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-hdfs-file-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-hdfs-file-step.tsx deleted file mode 100644 index af960a586..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-hdfs-file-step.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import {NsGraph} from "@antv/xflow"; -import {ModalFormProps} from '@/typings'; -import {BaseFileParams, STEP_ATTR_TYPE} from "../../constant"; -import {WsDiJobService} from "@/services/project/WsDiJobService"; -import {Button, Drawer, Form, message} from "antd"; -import {WsDiJob} from "@/services/project/typings"; -import {getIntl, getLocale} from "@umijs/max"; -import {ProForm, ProFormSelect, ProFormSwitch, ProFormText, ProFormTextArea} from "@ant-design/pro-components"; -import {useEffect} from "react"; -import {StepSchemaService} from "../helper"; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; -import SchemaItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/schema"; - -const SourceHdfsFileStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - ); -}; - -export default SourceHdfsFileStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-hive-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-hive-step.tsx deleted file mode 100644 index edf9513ab..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-hive-step.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {HiveParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {useEffect} from 'react'; -import {ProForm, ProFormGroup, ProFormList, ProFormText} from '@ant-design/pro-components'; -import {StepSchemaService} from '../helper'; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; -import ColumnItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/column"; - -const SourceHiveStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatColumns(values); - StepSchemaService.formatPartitions(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - - - ); -}; - -export default SourceHiveStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-http-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-http-step.tsx deleted file mode 100644 index 751605354..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-http-step.tsx +++ /dev/null @@ -1,232 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {HttpParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormSelect, ProFormSwitch, - ProFormText, - ProFormTextArea, -} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import {StepSchemaService} from '../helper'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; -import FieldItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/fields"; - -const SourceHttpFileStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values); - StepSchemaService.formatHeader(values); - StepSchemaService.formatParam(values); - StepSchemaService.formatJsonField(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - - - - - - {({format}) => { - if (format == 'json') { - return ; - } - return ; - }} - - - - - - - - - - - - - - - - - - ); -}; - -export default SourceHttpFileStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-hudi-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-hudi-step.tsx deleted file mode 100644 index 2086d09ba..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-hudi-step.tsx +++ /dev/null @@ -1,127 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {HudiParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import { - ProForm, - ProFormDependency, - ProFormGroup, - ProFormSelect, - ProFormSwitch, - ProFormText, -} from '@ant-design/pro-components'; -import {useEffect} from 'react'; - -const SourceHudiStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - values[HudiParams.useKerberos] = values.useKerberos; - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - {({useKerberos}) => { - if (useKerberos) { - return ( - - - - - ); - } - return ; - }} - - - - ); -}; - -export default SourceHudiStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-iceberg-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-iceberg-step.tsx deleted file mode 100644 index e0e5e449d..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-iceberg-step.tsx +++ /dev/null @@ -1,189 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {IcebergParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormSelect, - ProFormSwitch, - ProFormText, -} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import SchemaItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/schema"; -import {StepSchemaService} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper"; - -const SourceIcebergStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - {({catalog_type}) => { - if (catalog_type == 'hive') { - return ( - - - - ); - } - return ; - }} - - - - - - - - - - - - {({use_snapshot_id}) => { - if (use_snapshot_id) { - return ( - - - - - ); - } - return ; - }} - - - - - - ); -}; - -export default SourceIcebergStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-influxdb-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-influxdb-step.tsx deleted file mode 100644 index 2834a7623..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-influxdb-step.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {ProForm, ProFormDigit, ProFormSelect, ProFormText, ProFormTextArea} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {InfluxDBParams, STEP_ATTR_TYPE} from '../../constant'; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; -import {StepSchemaService} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper"; -import FieldItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/fields"; - -const SourceInfluxDBStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values) - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - - - ); -}; - -export default SourceInfluxDBStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-iotdb-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-iotdb-step.tsx deleted file mode 100644 index 0f86be90a..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-iotdb-step.tsx +++ /dev/null @@ -1,134 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {IoTDBParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {useEffect} from 'react'; -import { - ProForm, - ProFormDigit, - ProFormSelect, - ProFormSwitch, - ProFormText, - ProFormTextArea, -} from '@ant-design/pro-components'; -import {StepSchemaService} from '../helper'; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; -import FieldItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/fields"; - -const SourceIoTDBStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - - ); -}; - -export default SourceIoTDBStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-jdbc-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-jdbc-step.tsx deleted file mode 100644 index 4b0a40f3b..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-jdbc-step.tsx +++ /dev/null @@ -1,165 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {DICT_TYPE} from '@/constants/dictType'; -import {DictDataService} from '@/services/admin/dictData.service'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {InfoCircleOutlined} from '@ant-design/icons'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {JdbcParams, STEP_ATTR_TYPE} from '../../constant'; -import {ProForm, ProFormDigit, ProFormSelect, ProFormText, ProFormTextArea} from "@ant-design/pro-components"; -import {DsInfoService} from "@/services/datasource/info.service"; -import {DsInfoParam} from "@/services/datasource/typings"; - -const SourceJdbcStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - DictDataService.listDictDataByType2(DICT_TYPE.datasourceType)} - /> - { - const param: DsInfoParam = { - name: params.keyWords, - dsType: params.dataSourceType - }; - return DsInfoService.list(param).then((response) => { - return response.data.map((item) => { - return {label: item.name, value: item.id, item: item}; - }); - }); - })} - /> - - , - }} - /> - , - }} - colProps={{span: 6}} - /> - , - }} - colProps={{span: 6}} - /> - , - }} - colProps={{span: 6}} - /> - , - }} - colProps={{span: 6}} - /> - , - }} - initialValue={0} - /> - - - - - ); -}; - -export default SourceJdbcStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-kafka-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-kafka-step.tsx deleted file mode 100644 index 8fdf6b327..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-kafka-step.tsx +++ /dev/null @@ -1,225 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormSelect, - ProFormSwitch, - ProFormText -} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {KafkaParams, STEP_ATTR_TYPE} from '../../constant'; -import {InfoCircleOutlined} from "@ant-design/icons"; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; -import {StepSchemaService} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper"; -import FieldItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/fields"; - -const SourceKafkaStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values) - StepSchemaService.formatKafkaConf(values) - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - , - }} - initialValue={false} - /> - - {({pattern}) => { - if (pattern) { - return ( - , - }} - initialValue={-1} - /> - ); - } - return ; - }} - - - , - }} - initialValue={"SeaTunnel-Consumer-Group"} - /> - , - }} - initialValue={true} - /> - - - - - {({format}) => { - if (format == 'json') { - return - } else if (format == 'text') { - return ( - - ); - } - return ; - }} - - - - - {({start_mode}) => { - if (start_mode == 'timestamp') { - return ( - - ); - } else if (start_mode == 'specific_offsets') { - return ( - - ); - } - return <>; - }} - - - , - }} - > - - - - - - - - - - ); -}; - -export default SourceKafkaStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-kudu-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-kudu-step.tsx deleted file mode 100644 index 6b577f247..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-kudu-step.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {ProForm, ProFormText, ProFormTextArea} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {KuduParams, STEP_ATTR_TYPE} from '../../constant'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; - -const SourceKuduStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - ); -}; - -export default SourceKuduStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-local-file-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-local-file-step.tsx deleted file mode 100644 index 0b1dd8344..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-local-file-step.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {BaseFileParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {ProForm, ProFormSelect, ProFormSwitch, ProFormText, ProFormTextArea} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import {StepSchemaService} from '../helper'; -import SchemaItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/schema"; - -const SourceLocalFileStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - ); -}; - -export default SourceLocalFileStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-maxcompute-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-maxcompute-step.tsx deleted file mode 100644 index c607dfc85..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-maxcompute-step.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {MaxComputeParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {ProForm, ProFormDigit, ProFormText} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; - -const SourceMaxComputeStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - ); -}; - -export default SourceMaxComputeStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-mongodb-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-mongodb-step.tsx deleted file mode 100644 index ce3cc4abd..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-mongodb-step.tsx +++ /dev/null @@ -1,140 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {MongoDBParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {useEffect} from 'react'; -import {ProForm, ProFormDigit, ProFormSwitch, ProFormText, ProFormTextArea} from '@ant-design/pro-components'; -import {StepSchemaService} from '../helper'; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; -import FieldItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/fields"; - -const SourceMongoDBStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - - - - - ); -}; - -export default SourceMongoDBStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-neo4j-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-neo4j-step.tsx deleted file mode 100644 index b2de9dc2a..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-neo4j-step.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {ProForm, ProFormDigit, ProFormText, ProFormTextArea} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {Neo4jParams, STEP_ATTR_TYPE} from '../../constant'; -import {StepSchemaService} from '../helper'; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; -import FieldItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/fields"; - -const SourceNeo4jStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values) - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - ); -}; - -export default SourceNeo4jStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-openmldb-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-openmldb-step.tsx deleted file mode 100644 index 14bb5ffc8..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-openmldb-step.tsx +++ /dev/null @@ -1,147 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {OpenMLDBParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormSwitch, - ProFormText, - ProFormTextArea, -} from '@ant-design/pro-components'; -import {useEffect} from 'react'; - -const SourceOpenMLDBStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - {({cluster_mode}) => { - if (cluster_mode) { - return ( - - - - - ); - } - return - - - ; - }} - - - - - - - - ); -}; - -export default SourceOpenMLDBStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-oss-file-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-oss-file-step.tsx deleted file mode 100644 index 3acb3af36..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-oss-file-step.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {BaseFileParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {ProForm, ProFormSelect, ProFormSwitch, ProFormText, ProFormTextArea} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import {StepSchemaService} from '../helper'; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; -import SchemaItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/schema"; - -const SourceOSSFileStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - ); -}; - -export default SourceOSSFileStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-ossjindo-file-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-ossjindo-file-step.tsx deleted file mode 100644 index 63af7f2f9..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-ossjindo-file-step.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {BaseFileParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {ProForm, ProFormSelect, ProFormSwitch, ProFormText, ProFormTextArea} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import {StepSchemaService} from '../helper'; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; -import SchemaItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/schema"; - -const SourceOSSJindoFileStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - ); -}; - -export default SourceOSSJindoFileStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-paimon-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-paimon-step.tsx deleted file mode 100644 index 4071faa5a..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-paimon-step.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {ProForm, ProFormText} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {PaimonParams, STEP_ATTR_TYPE} from '../../constant'; - -const SourcePaimonStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - ); -}; - -export default SourcePaimonStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-pulsar-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-pulsar-step.tsx deleted file mode 100644 index d60086b84..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-pulsar-step.tsx +++ /dev/null @@ -1,234 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormSelect, - ProFormText, -} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {PulsarParams, STEP_ATTR_TYPE} from '../../constant'; -import {InfoCircleOutlined} from '@ant-design/icons'; -import {StepSchemaService} from '../helper'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; -import FieldItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/fields"; - -const SourcePulsarStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values); - values[PulsarParams.cursorStartupMode] = values.startMode; - values[PulsarParams.cursorStopMode] = values.stopMode; - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - , - }} - /> - - , - }} - /> - - - {({format}) => { - if (format == 'json') { - return - } else if (format == 'text') { - return ( - - ); - } - return ; - }} - - - - - - - - {({startMode}) => { - if (startMode == 'TIMESTAMP') { - return ( - - - - ); - } else if (startMode == 'SUBSCRIPTION') { - return ( - - - - ); - } - return ; - }} - - , - }} - allowClear={false} - initialValue={'NEVER'} - options={['NEVER', 'LATEST', 'TIMESTAMP']} - /> - - {({stopMode}) => { - if (stopMode == 'TIMESTAMP') { - return ( - - - - ); - } - return ; - }} - - - - ); -}; - -export default SourcePulsarStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-redis-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-redis-step.tsx deleted file mode 100644 index 73800a632..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-redis-step.tsx +++ /dev/null @@ -1,125 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {RedisParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {useEffect} from 'react'; -import {ProForm, ProFormDependency, ProFormGroup, ProFormSelect, ProFormText,} from '@ant-design/pro-components'; -import {StepSchemaService} from '../helper'; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; -import FieldItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/fields"; - -const SourceRedisStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - - > - - - - - - - {({data_type}) => { - if (data_type == 'hash') { - return ( - - ); - } - return <>; - }} - - - - {({format}) => { - if (format == 'json') { - return ; - } - return ; - }} - - - - ); -}; - -export default SourceRedisStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-rocketmq-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-rocketmq-step.tsx deleted file mode 100644 index 6c86925c4..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-rocketmq-step.tsx +++ /dev/null @@ -1,248 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import { - ProForm, - ProFormDependency, - ProFormDigit, - ProFormGroup, - ProFormList, - ProFormSelect, - ProFormSwitch, - ProFormText -} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {RocketMQParams, STEP_ATTR_TYPE} from '../../constant'; -import {InfoCircleOutlined} from "@ant-design/icons"; -import FieldItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/fields"; -import {StepSchemaService} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper"; - -const SourceRocketMQStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - values[RocketMQParams.aclEnabled] = values[RocketMQParams.aclEnabledField] - values[RocketMQParams.startMode] = values[RocketMQParams.startModeField] - StepSchemaService.formatSchema(values) - StepSchemaService.formatRocketMQPartitionOffsets(values) - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - {({acl_enabled}) => { - if (acl_enabled) { - return - - - ; - } - - return ; - }} - - - - - , - }} - colProps={{span: 8}} - initialValue={-1} - fieldProps={{ - step: 1000 - }} - /> - - - - , - }} - initialValue={true} - /> - - - - {({format}) => { - if (format == 'text') { - return - - ; - } - if (format == 'json') { - return ; - } - return ; - }} - - - - - - {({startModeField}) => { - if (startModeField == 'CONSUME_FROM_TIMESTAMP') { - return - - ; - } - if (startModeField == 'CONSUME_FROM_SPECIFIC_OFFSETS') { - return , - }} - > - - - - - - - ; - } - return ; - }} - - - - - ); -}; - -export default SourceRocketMQStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-s3-file-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-s3-file-step.tsx deleted file mode 100644 index e562034cf..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-s3-file-step.tsx +++ /dev/null @@ -1,158 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {BaseFileParams, S3FileParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import { - ProForm, - ProFormGroup, - ProFormList, - ProFormSelect, - ProFormSwitch, - ProFormText, - ProFormTextArea, -} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import {StepSchemaService} from '../helper'; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; -import SchemaItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/schema"; -import {InfoCircleOutlined} from "@ant-design/icons"; - -const SourceS3FileStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values); - StepSchemaService.formatHadoopS3Properties(values) - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - , - }} - > - - - - - - - - - - - - - - - - - - ); -}; - -export default SourceS3FileStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-sftp-file-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-sftp-file-step.tsx deleted file mode 100644 index d8562cab7..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-sftp-file-step.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {Button, Drawer, Form, message} from 'antd'; -import {WsDiJob} from '@/services/project/typings'; -import {getIntl, getLocale} from '@umijs/max'; -import {ProForm, ProFormSelect, ProFormSwitch, ProFormText, ProFormTextArea,} from '@ant-design/pro-components'; -import {useEffect} from 'react'; -import {BaseFileParams, STEP_ATTR_TYPE} from '../../constant'; -import {StepSchemaService} from '../helper'; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; -import SchemaItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/schema"; - -const SourceSftpFileStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - ); -}; - -export default SourceSftpFileStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-socket-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-socket-step.tsx deleted file mode 100644 index 499ad31cc..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-socket-step.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {ProForm, ProFormText} from '@ant-design/pro-components'; -import {NsGraph} from '@antv/xflow'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {getIntl, getLocale} from '@umijs/max'; -import {STEP_ATTR_TYPE} from '../../constant'; -import DataSourceItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource"; - -const SourceSocketStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - ); -}; - -export default SourceSocketStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-starrocks-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-starrocks-step.tsx deleted file mode 100644 index a0c335f37..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/source/source-starrocks-step.tsx +++ /dev/null @@ -1,159 +0,0 @@ -import {ModalFormProps} from '@/typings'; -import {NsGraph} from '@antv/xflow'; -import {getIntl, getLocale} from '@umijs/max'; -import {WsDiJob} from '@/services/project/typings'; -import {Button, Drawer, Form, message} from 'antd'; -import {useEffect} from 'react'; -import {StarRocksParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {ProForm, ProFormDigit, ProFormText,} from '@ant-design/pro-components'; -import DataSourceItem from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/dataSource'; -import {StepSchemaService} from '@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper'; -import FieldItem from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/fields"; - -const SourceStarRocksStepForm: React.FC< - ModalFormProps<{ - node: NsGraph.INodeConfig; - graphData: NsGraph.IGraphData; - graphMeta: NsGraph.IGraphMeta; - }> -> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSchema(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - {intl.formatMessage({id: 'app.common.operate.confirm.label'})} - - } - > - - - - - - - - - - - - - - - - - ); -}; - -export default SourceStarRocksStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/step.tsx deleted file mode 100644 index 12de9b0f2..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/step.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import {useEffect} from "react"; -import {Form, message, Modal} from "antd"; -import {ProForm, ProFormText} from "@ant-design/pro-components"; -import {getIntl, getLocale} from "@umijs/max"; -import {NsGraph} from "@antv/xflow"; -import {ModalFormProps} from '@/typings'; -import {WsDiJobService} from "@/services/project/WsDiJobService"; -import {WsDiJob} from "@/services/project/typings"; -import {STEP_ATTR_TYPE} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/constant"; - -const StepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.label); - }, []); - - return ( { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id + ''); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepTitle, values[STEP_ATTR_TYPE.stepTitle]); - map.set(STEP_ATTR_TYPE.stepAttrs, form.getFieldsValue()); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onCancel(); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - - - - - ); -} - -export default StepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-copy-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-copy-step.tsx deleted file mode 100644 index 0c03651f2..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-copy-step.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import {useEffect} from 'react'; -import {Form, message, Modal} from 'antd'; -import {ProForm, ProFormText,} from '@ant-design/pro-components'; -import {getIntl, getLocale} from '@umijs/max'; -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {CopyParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; - -const TransformCopyStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onCancel(); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - - - - - - - ); -}; - -export default TransformCopyStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-field-mapper-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-field-mapper-step.tsx deleted file mode 100644 index 3ac5ec553..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-field-mapper-step.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import {useEffect} from 'react'; -import {Form, message, Modal} from 'antd'; -import {InfoCircleOutlined} from "@ant-design/icons"; -import {ProForm, ProFormGroup, ProFormList, ProFormText,} from '@ant-design/pro-components'; -import {getIntl, getLocale} from '@umijs/max'; -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {FieldMapperParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {StepSchemaService} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper"; - -const TransformFieldMapperStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatFieldMapper(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onCancel(); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - - - , - }} - > - - - - - - - - - - ); -}; - -export default TransformFieldMapperStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-filter-row-kind-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-filter-row-kind-step.tsx deleted file mode 100644 index b6ca112e7..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-filter-row-kind-step.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import {useEffect} from 'react'; -import {Form, message, Modal} from 'antd'; -import {InfoCircleOutlined} from "@ant-design/icons"; -import {ProForm, ProFormSelect, ProFormText,} from '@ant-design/pro-components'; -import {getIntl, getLocale} from '@umijs/max'; -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {FilterRowKindParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {DictDataService} from "@/services/admin/dictData.service"; -import {DICT_TYPE} from "@/constants/dictType"; - -const TransformFilterRowKindStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onCancel(); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - - - , - }} - mode={'multiple'} - request={() => { - return DictDataService.listDictDataByType2(DICT_TYPE.seatunnelRowKind) - }} - /> - , - }} - mode={'multiple'} - request={() => { - return DictDataService.listDictDataByType2(DICT_TYPE.seatunnelRowKind) - }} - /> - - - ); -}; - -export default TransformFilterRowKindStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-filter-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-filter-step.tsx deleted file mode 100644 index 2f2ce14d2..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-filter-step.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import {useEffect} from 'react'; -import {Form, message, Modal} from 'antd'; -import {InfoCircleOutlined} from "@ant-design/icons"; -import {ProForm, ProFormGroup, ProFormList, ProFormText,} from '@ant-design/pro-components'; -import {getIntl, getLocale} from '@umijs/max'; -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {FilterParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {StepSchemaService} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper"; - -const TransformFilterStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatFilterFields(values) - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onCancel(); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - - - , - }} - > - - - - - - - - - ); -}; - -export default TransformFilterStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-replace-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-replace-step.tsx deleted file mode 100644 index eb832ea76..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-replace-step.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import {useEffect} from 'react'; -import {Form, message, Modal} from 'antd'; -import {ProForm, ProFormDependency, ProFormGroup, ProFormSwitch, ProFormText,} from '@ant-design/pro-components'; -import {getIntl, getLocale} from '@umijs/max'; -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {ReplaceParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; - -const TransformReplaceStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onCancel(); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - - - - - - - - {({is_regex}) => { - if (is_regex) { - return ( - - ); - } - return ; - }} - - - - ); -}; - -export default TransformReplaceStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-split-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-split-step.tsx deleted file mode 100644 index dd5e302de..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-split-step.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import {useEffect} from 'react'; -import {Form, message, Modal} from 'antd'; -import {ProForm, ProFormGroup, ProFormList, ProFormText,} from '@ant-design/pro-components'; -import {getIntl, getLocale} from '@umijs/max'; -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {SplitParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; -import {StepSchemaService} from "@/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/helper"; - -const TransformSplitStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - StepSchemaService.formatSplitOutputFields(values); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onCancel(); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - - - - - - - - - - - - - - ); -}; - -export default TransformSplitStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-sql-step.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-sql-step.tsx deleted file mode 100644 index 70560dc99..000000000 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/steps/transform/transform-sql-step.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import {useEffect} from 'react'; -import {Form, message, Modal} from 'antd'; -import {ProForm, ProFormText,} from '@ant-design/pro-components'; -import {getIntl, getLocale} from '@umijs/max'; -import {NsGraph} from '@antv/xflow'; -import {ModalFormProps} from '@/typings'; -import {SqlParams, STEP_ATTR_TYPE} from '../../constant'; -import {WsDiJobService} from '@/services/project/WsDiJobService'; -import {WsDiJob} from '@/services/project/typings'; - -const TransformSqlStepForm: React.FC> = ({data, visible, onCancel, onOK}) => { - const nodeInfo = data.node.data; - const jobInfo = data.graphMeta.origin as WsDiJob; - const jobGraph = data.graphData; - const intl = getIntl(getLocale(), true); - const [form] = Form.useForm(); - - useEffect(() => { - form.setFieldValue(STEP_ATTR_TYPE.stepTitle, nodeInfo.data.displayName); - }, []); - - return ( - { - form.validateFields().then((values) => { - let map: Map = new Map(); - map.set(STEP_ATTR_TYPE.jobId, jobInfo.id); - map.set(STEP_ATTR_TYPE.jobGraph, JSON.stringify(jobGraph)); - map.set(STEP_ATTR_TYPE.stepCode, nodeInfo.id); - map.set(STEP_ATTR_TYPE.stepAttrs, values); - WsDiJobService.saveStepAttr(map).then((resp) => { - if (resp.success) { - message.success(intl.formatMessage({id: 'app.common.operate.success'})); - onCancel(); - onOK ? onOK(values) : null; - } - }); - }); - }} - > - - - - - - ); -}; - -export default TransformSqlStepForm; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/toolbar/index.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/toolbar/index.tsx new file mode 100644 index 000000000..87ffffbf3 --- /dev/null +++ b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/Dag/toolbar/index.tsx @@ -0,0 +1,103 @@ +import React from 'react'; +import {Button, Space} from 'antd'; +import {CopyOutlined, PlayCircleOutlined} from '@ant-design/icons'; +import type {Edge, Node, NodeOptions} from '@antv/xflow'; +import {useClipboard, useGraphEvent, useGraphInstance, useGraphStore, useKeyboard,} from '@antv/xflow'; + +const Toolbar: React.FC = () => { + const graph = useGraphInstance(); + const {copy, paste} = useClipboard(); + const nodes = useGraphStore((state) => state.nodes); + const updateNode = useGraphStore((state) => state.updateNode); + const updateEdge = useGraphStore((state) => state.updateEdge); + const removeNodes = useGraphStore((state) => state.removeNodes); + + useKeyboard('ctrl+c', () => onCopy()); + + useKeyboard('ctrl+v', () => onPaste()); + + useKeyboard('backspace', () => { + const selected = nodes.filter((node) => node.selected); + const ids: string[] = selected.map((node) => node.id || ''); + removeNodes(ids); + }); + + useGraphEvent('node:change:data', ({node}) => { + if (graph) { + const edges = graph.getIncomingEdges(node); + const {status} = node.data; + edges?.forEach((edge: Edge) => { + if (status === 'running') { + updateEdge(edge.id, { + animated: true, + }); + } else { + updateEdge(edge.id, { + animated: false, + }); + } + }); + } + }); + + const handleExcute = () => { + if (graph) { + nodes.forEach((node: Node | NodeOptions, index: number) => { + const edges = graph.getOutgoingEdges(node as Node); + updateNode(node.id!, { + data: { + ...node.data, + status: 'running', + }, + }); + + setTimeout(() => { + updateNode(node.id!, { + data: { + ...node.data, + status: edges + ? 'success' + : Number(node.id!.slice(-1)) % 2 !== 0 + ? 'success' + : 'failed', + }, + }); + }, 1000 * index + 1); + }); + } + }; + + const onCopy = () => { + const selected = nodes.filter((node) => node.selected); + const ids: string[] = selected.map((node) => node.id || ''); + copy(ids); + }; + + const onPaste = () => { + paste(); + }; + + return ( + + + + + + ); +}; + +export {Toolbar}; diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/index.less b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/index.less index 986731ad5..09f44ef7d 100644 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/index.less +++ b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/index.less @@ -1,90 +1,93 @@ -@body-bg: #fafafa; -@primaryColor: #3056e3; -@light-border: 1px solid #d9d9d9; - -.dag-solution { - .__dumi-default-previewer-actions { - border: 0; - } +body { + margin: 0; } -.dag-user-custom-clz { - position: relative; - height: 590px; - border: @light-border; +.page { + overflow: hidden; + width: 100%; + height: 100%; + box-sizing: border-box; - .xflow-x6-canvas { - // background: @body-bg; - } + .container { + display: flex; + overflow: hidden; + width: 100%; + height: 100vh; + box-sizing: border-box; - .x6-edge { - &:hover { - path:nth-child(2) { - stroke: @primaryColor; - stroke-width: 2px; - } - } + .left { + display: flex; + width: 240px; + height: 100%; + flex-direction: column; + background-color: #f7f8fa; - &.x6-edge-selected { - path:nth-child(2) { - stroke: @primaryColor; - stroke-width: 2px; + .leftTop { + display: flex; + width: 100%; + height: 42px; + box-sizing: border-box; + flex-shrink: 0; + align-items: center; + justify-content: center; + padding: 0 16px; + border-bottom: 1px solid #eaebed; + background: #f7f8fa; } } - } - .xflow-node-dnd-panel-node-wrapper { - .xflow-algo-node { - width: 180px; - } - } - - .xflow-canvas-dnd-node-tree { - border-right: @light-border; - } + .center { + position: relative; + width: calc(100% - 240px); + height: 100%; + outline: none; - .xflow-workspace-toolbar-top { - background-image: ~'linear-gradient(180deg, #ffffff 0%, #fafafa 100%)'; - border-bottom: @light-border; - } - - .xflow-workspace-toolbar-bottom { - text-align: center; - background: #fff; - border-top: @light-border; - } + .toolbar { + display: flex; + width: 100%; + height: 42px; + box-sizing: border-box; + align-items: center; + justify-content: space-between; + padding: 0 16px; + background-color: #f6f8fa; + } - .xflow-modal-container { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1000; - } + .graph { + position: relative; + width: 100%; + height: calc(100% - 42px); - .xflow-collapse-panel { - .xflow-collapse-panel-header { - display: flex; - align-items: center; - justify-content: space-evenly; - background: #f7f8fa; + .scaleToolbar { + position: absolute; + right: 24px; + top: 24px; + } - .ant-input-affix-wrapper { - padding: 2px 11px; + .minimap { + position: absolute; + right: 24px; + bottom: 24px; + } } } - .xflow-collapse-panel-body { - background: #f7f8fa; + .content { + display: flex; + height: calc(100% - 80px); + box-shadow: 0 12px 5px -10px rgba(0, 0, 0, 0.1), 0 0 4px 0 rgba(0, 0, 0, 0.1); - .xflow-collapse-header { - padding: 12px 8px; - } - } + .json-code { + width: 400px; + flex-shrink: 0; + height: 100%; + overflow: auto; + border-left: 1px solid #ccc; - .xflow-node-dnd-panel-footer { - display: none; + pre { + margin: 0; + } + } } } } diff --git a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/index.tsx b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/index.tsx index 9cafeebb8..d8c4530c1 100644 --- a/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/index.tsx +++ b/scaleph-ui-react2/src/pages/Project/Workspace/Artifact/DI/DiJobFlow/index.tsx @@ -1,146 +1,77 @@ -import React, {useState} from 'react'; -import { - CompressOutlined, - DeleteOutlined, - EditOutlined, - EyeOutlined, - FullscreenExitOutlined, - FullscreenOutlined, - FundProjectionScreenOutlined, - InfoCircleOutlined, - PlaySquareOutlined, - ProfileOutlined, - SaveOutlined, - SendOutlined, - StopOutlined, - ZoomInOutlined, - ZoomOutOutlined, -} from '@ant-design/icons'; +import React from 'react'; import {PageContainer} from '@ant-design/pro-components'; import {useLocation} from '@umijs/max'; -import { - CanvasContextMenu, - CanvasMiniMap, - CanvasNodePortTooltip, - CanvasScaleToolbar, - CanvasSnapline, - CanvasToolbar, - IApplication, - IAppLoad, - IconStore, - KeyBindings, - NodeCollapsePanel, - NsGraph, - XFlow, - XFlowCanvas, -} from '@antv/xflow'; -/** config graph */ -import {useGraphConfig, useGraphHookConfig} from './Dag/config-graph'; -/** config command */ -import {initGraphCmds, useCmdConfig} from './Dag/config-cmd'; -/** config key bind */ -import {useKeybindingConfig} from './Dag/config-keybinding'; -/** config menu */ -import {useMenuConfig} from './Dag/config-menu'; -/** config toolbar */ -import {useScaleToolbarConfig, useToolbarConfig} from './Dag/config-toolbar'; -/** config dnd panel */ -import './index.less'; -import * as dndPanelConfig from './Dag/config-dnd-panel'; -import {WsDiJob} from '@/services/project/typings'; -import {DagService} from './Dag/service'; +import {Background, Clipboard, Control, Grid, History, Minimap, Snapline, XFlow, XFlowGraph} from "@antv/xflow"; +import styles from './index.less'; +import {DAG_CONNECTOR, DAG_EDGE} from "./Dag/shape/connector-shape"; +import {InitShape} from "./Dag/shape/node"; +import {Dnd} from "./Dag/dnd/dnd"; +import {WsDiJob} from "@/services/project/typings"; +import {Menubar, Toolbar} from '@antv/x6-react-components'; interface DiJobFlowPorps { data: WsDiJob; meta: { flowId?: string; origin?: WsDiJob }; } -const DiJobFlow: React.FC = () => { +const DiJobFlow: React.FC = () => { const props = useLocation().state as DiJobFlowPorps; - const graphConfig = useGraphConfig(props); - const graphHookConfig = useGraphHookConfig(props); - const commandConfig = useCmdConfig(); - const toolbarConfig = useToolbarConfig(); - const scaleToolbarConfig = useScaleToolbarConfig(); - const menuConfig = useMenuConfig(); - const keybindingConfig = useKeybindingConfig(); - const [graphData, setGraphData] = useState({nodes: [], edges: []}); - const {data, meta} = props; - - /**register icons */ - IconStore.set('DeleteOutlined', DeleteOutlined); - IconStore.set('EditOutlined', EditOutlined); - IconStore.set('PlaySquareOutlined', PlaySquareOutlined); - IconStore.set('StopOutlined', StopOutlined); - IconStore.set('SaveOutlined', SaveOutlined); - IconStore.set('SendOutlined', SendOutlined); - IconStore.set('EyeOutlined', EyeOutlined); - IconStore.set('FundProjectionScreenOutlined', FundProjectionScreenOutlined); - IconStore.set('ProfileOutlined', ProfileOutlined); - IconStore.set('FullscreenOutlined', FullscreenOutlined); - IconStore.set('FullscreenExitOutlined', FullscreenExitOutlined); - IconStore.set('ZoomInOutlined', ZoomInOutlined); - IconStore.set('ZoomOutOutlined', ZoomOutOutlined); - IconStore.set('CompressOutlined', CompressOutlined); - IconStore.set('InfoCircleOutlined', InfoCircleOutlined); - - const cache = React.useMemo<{ app: IApplication | null }>( - () => ({ - app: null, - }), - [], - ); - const onLoad: IAppLoad = async (app) => { - cache.app = app; - initGraphCmds(cache.app, meta.origin || {id: data.id}); - }; - - React.useEffect(() => { - if (cache.app) { - initGraphCmds(cache.app, meta.origin || {id: data.id}); - } - refreshJobGraph(); - }, [meta]); - - const refreshJobGraph = async () => { - DagService.loadJobInfo(meta.origin?.id as number).then((resp) => { - setGraphData(resp); - }); - }; return ( - - - - - - - - - - - + +
+
+
+ +
+
+
+ Toolbar按钮
} + /> + Menubar按钮
}/> +
+ +
+ + + + + + + + +
+ +
+
+ +
+
+
+ +
); diff --git a/scaleph-ui-react2/src/services/project/SeaTunnelService.ts b/scaleph-ui-react2/src/services/project/SeaTunnelService.ts new file mode 100644 index 000000000..f994d6e3a --- /dev/null +++ b/scaleph-ui-react2/src/services/project/SeaTunnelService.ts @@ -0,0 +1,12 @@ +import {ResponseBody} from '@/typings'; +import {request} from '@umijs/max'; + +export const WsSeaTunnelService = { + url: '/api/seatunnel', + + getDnds: async (engine: string) => { + return request>>>(`${WsSeaTunnelService.url}/dag/dnd/${engine}`, { + method: 'GET', + }); + }, +};