Palash Gupta 2cdafa0564
feat: pipeline page (#2168) (#3185)
* feat: pipeline page (#2168)

* feat: Added POC of drag row table

* fix: resolved eslint issue

* fix: resolved webpack issue

* fix: config changes

* fix: removed unwanted code of antd table

* feat: added icon on expand row

* feat: ui of modal, alertbox & drag table

* feat: added DraggableTableRow component

* fix: issue on row reorder alert message

* fix: styling & dynamic name when delete pipeline

* feat: added edit modal ui

* fix: modal on create or edit open issue

* fix: types issue

* fix: text change & styled component

* fix: added react-i18next to translate constant

* fix: removed webpack change

* fix: webpack change

* feat: added processor expand row poc

* fix: linting issue

* fix: sonar gate issues

* fix: processor expand ui break issue

* fix: added missing types

* feat: added create & delete logic

* fix: types issue

* feat: added edit pipeline & processor logic

* fix: added diff. local file for pipeline

* fix: suggested changes for pipeline

* fix: order of key name on useTranslation

* test: added test cases

* fix: code level changes

* fix: code level changes

* fix: edit tags issue

* fix: changed inline function to handler

* test: resolved test cases issue

* fix: code level changes

* fix: changed file structure

* fix: added required styled component

* feat: added common utils functions

* fix: code level changes

* test: added test cases

* test: added more test cases

* fix: abstracted code of pipeline column

* fix: added utils for DraggableTableRow

* fix: issue on drag at DraggableTableRow

* test: added more test case

* fix: abstracted code of processor column

* fix: removed playwrite test

* fix: abstracted code render method

* fix: text correction pipline -> pipeline

* test: added more test cases

* fix: add pipeline form restructure

* fix: add processor form restructure

* fix: processor type issue

* fix: forms abstraction

* fix: on finish form abstraction

* test: additional test cases of utils

* feat: added new ui as per save config

* fix: test cases issue

* feat: added redux for data set managment

* fix: updated logic of redux

* fix: removed unused code

* fix: modified pipeline data onchangeof processor data

* fix: removed redux from pipeline

* fix: test cases prop issue resolved

* fix: reset field on add data

* fix: sonar gate code smell

* fix: sonar gate code duplicated issue

* fix: code level changes

* fix: add processor issue

* fix: code level changes

* chore: some of the types are updated

* fix: inline css into styled component

* fix: jsx element & type

* fix: username, email object issue

* fix: username, email object issue

* fix: types issues

* fix: inline condition removed

* fix: code level changes

* feat: integrated listing of pipeline & processor api

* feat: integrated post api of pipeline & processor poc

* feat: integrated delete api of pipeline & processor

* fix: create pipeline api payload issue

* fix: updated jest test cases

* fix: processor order id ui issue

* fix: create pipeline issue on payload

* fix: add processor payload issue resolved

* fix: added missing field on add pipeline

* fix: processor type selection issue

* fix: test cases updated

* fix: sonar gate failed issue

* fix: removed inline function

* fix: enable switch logic at pipeline & processor level

* fix: retain removed from type list

* fix: build issue on jest

* fix: test cases updated

* chore: config is updated

* chore: test snapshot is updated

* fix: test cases updated

* chore: test snapshot is updated

* chore: test snapshot is updated

* fix: api & ui integration of change history tab

* chore: webpack is updated

* test: test is updated

* chore: build is fixed

* chore: react-dnd is downgraded

* chore: process is added

* chore: build is fixed

* chore: react-dnd is updated

* fix: suggested changes

* fix: tab pane issue

* fix: build issue

* fix: code level changes

* fix: code level changes

* fix: added types in def file

* fix: code level changes

* fix: test cases updated

* fix: error message notification

* fix: after reorder pipeline expand is not working

* fix: on add of processor added optional field

* feat: added search pipeline feature

* fix: sonar gate failed issue

* fix: processor reorder issue

* fix: processor reorder output property issue

* feat: added json_parser processor

* fix: scalable code of component of column

* fix: processor reorder issue

* fix: search pipeline issue

* fix: creating a pipeline description is an optional field

* fix: nitya's suggested changes

* fix: test cases updated

* fix: edit data pipeline & processor

* fix: pipeline cancel issue

* fix: edit processor wrong payload

* fix: processor reorder issue at payload

* fix: pipeline undefined handle

* fix: pipeline no data case

* fix: updated test case

* fix: resolved pipeline undefined issue

* fix: processor data case

* feat: added submenu system for pipeline

* fix: pipeline suggested changes

* fix: updated test case

* fix: pipeline suggested changes

* fix: test cases updated

* test: updated test cases

* chore: build issue

* fix: pipeline level changes

* fix: pipeline page access issue

* fix: resolved issue on add operator when pipeline is empty

* test: jest test cases updated

* chore: try signoz cloud link is updated (#2928)

* fix: solve history page issue

---------

Co-authored-by: Palash Gupta <palashgdev@gmail.com>
Co-authored-by: Vishal Sharma <makeavish786@gmail.com>
Co-authored-by: Pranay Prateek <pranay@signoz.io>

* chore: merge conflicts is resolved

* test: snaps are updated

* fix: remove unused dependency on process^0.11.10

---------

Co-authored-by: Chintan Sudani <46838508+techchintan@users.noreply.github.com>
Co-authored-by: Vishal Sharma <makeavish786@gmail.com>
Co-authored-by: Pranay Prateek <pranay@signoz.io>
Co-authored-by: Raj <rkssisodiya@gmail.com>
2023-08-02 11:22:24 +05:30

151 lines
3.7 KiB
TypeScript

import { Button, Divider, Form, Modal } from 'antd';
import React, { useCallback, useEffect, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
import { useSelector } from 'react-redux';
import { AppState } from 'store/reducers';
import { ActionMode, ActionType, PipelineData } from 'types/api/pipeline/def';
import AppReducer from 'types/reducer/app';
import { v4 } from 'uuid';
import { ModalButtonWrapper, ModalTitle } from '../styles';
import { getEditedDataSource, getRecordIndex } from '../utils';
import { renderPipelineForm } from './utils';
function AddNewPipeline({
isActionType,
setActionType,
selectedPipelineData,
setShowSaveButton,
setCurrPipelineData,
currPipelineData,
}: AddNewPipelineProps): JSX.Element {
const [form] = Form.useForm();
const { t } = useTranslation('pipeline');
const { user } = useSelector<AppState, AppReducer>((state) => state.app);
const isEdit = isActionType === 'edit-pipeline';
const isAdd = isActionType === 'add-pipeline';
useEffect(() => {
if (isEdit) {
form.setFieldsValue(selectedPipelineData);
}
if (isAdd) {
form.resetFields();
}
}, [form, isEdit, isAdd, selectedPipelineData]);
const onFinish = (values: PipelineData): void => {
const newPipeLineData: PipelineData = {
id: v4(),
orderId: (currPipelineData?.length || 0) + 1,
createdAt: new Date().toISOString(),
createdBy: user?.name || '',
name: values.name,
alias: values.name.replace(/\s/g, ''),
description: values.description,
filter: values.filter,
config: [],
enabled: true,
};
if (isEdit && selectedPipelineData) {
const findRecordIndex = getRecordIndex(
currPipelineData,
selectedPipelineData,
'id',
);
const updatedPipelineData: PipelineData = {
...currPipelineData[findRecordIndex],
...values,
};
const editedPipelineData = getEditedDataSource(
currPipelineData,
selectedPipelineData,
'id',
updatedPipelineData,
);
setCurrPipelineData(editedPipelineData);
}
if (isAdd) {
setCurrPipelineData((prevState) => {
if (prevState) return [...prevState, newPipeLineData];
return [newPipeLineData];
});
}
setActionType(undefined);
};
const onCancelModalHandler = (): void => {
setActionType(undefined);
};
const modalTitle = useMemo(
(): string =>
isEdit
? `${t('edit_pipeline')} : ${selectedPipelineData?.name}`
: t('create_pipeline'),
[isEdit, selectedPipelineData?.name, t],
);
const onOkModalHandler = useCallback(
() => setShowSaveButton(ActionMode.Editing),
[setShowSaveButton],
);
const isOpen = useMemo(() => isEdit || isAdd, [isAdd, isEdit]);
return (
<Modal
title={<ModalTitle level={4}>{modalTitle}</ModalTitle>}
centered
open={isOpen}
width={800}
footer={null}
onCancel={onCancelModalHandler}
>
<Divider plain />
<Form
name="add-new-pipeline"
layout="vertical"
onFinish={onFinish}
autoComplete="off"
form={form}
>
{renderPipelineForm()}
<Divider plain />
<Form.Item>
<ModalButtonWrapper>
<Button
key="submit"
type="primary"
htmlType="submit"
onClick={onOkModalHandler}
>
{isEdit ? t('update') : t('create')}
</Button>
<Button key="cancel" onClick={onCancelModalHandler}>
{t('cancel')}
</Button>
</ModalButtonWrapper>
</Form.Item>
</Form>
</Modal>
);
}
interface AddNewPipelineProps {
isActionType: string;
setActionType: (actionType?: ActionType) => void;
selectedPipelineData: PipelineData | undefined;
setShowSaveButton: (actionMode: ActionMode) => void;
setCurrPipelineData: (
value: React.SetStateAction<Array<PipelineData>>,
) => void;
currPipelineData: Array<PipelineData>;
}
export default AddNewPipeline;