Skip to content

Commit 5df2985

Browse files
46110 fix(datasets): fix redundant dataset store subscriptions, unauthorized loadAllDatasets calls, empty dataset tag rendering
1 parent 2992194 commit 5df2985

7 files changed

Lines changed: 48 additions & 27 deletions

File tree

frontend/src/public/components/TemplateEdit/ExtraFields/ExtraField.tsx

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import * as React from 'react';
2-
import { useCallback, useEffect, useMemo } from 'react';
3-
import { useSelector, useDispatch } from 'react-redux';
2+
import { useCallback, useMemo } from 'react';
43
import classnames from 'classnames';
54
import { injectIntl} from 'react-intl';
65

@@ -18,13 +17,11 @@ import { ExtraFieldNumber } from './Number';
1817
import { EExtraFieldType } from '../../../types/template';
1918
import { ExtraFieldDropdown } from './utils/ExtraFieldDropdown';
2019
import { getInputNameBackground } from './utils/getInputNameBackground';
21-
import { getAllDatasetsList, getIsAllDatasetsLoading, getIsAllDatasetsLoaded } from '../../../redux/selectors/datasets';
22-
import { loadAllDatasets } from '../../../redux/datasets/slice';
2320
import { IExtraFieldProps } from './types';
2421

2522
import styles from '../KickoffRedux/KickoffRedux.css';
2623

27-
const DATASET_FIELD_TYPES = [EExtraFieldType.Checkbox, EExtraFieldType.Radio, EExtraFieldType.Creatable];
24+
import { DATASET_FIELD_TYPES } from './constants';
2825

2926
function ExtraField(props: IExtraFieldProps) {
3027
const {
@@ -41,29 +38,13 @@ function ExtraField(props: IExtraFieldProps) {
4138
wrapperClassName,
4239
labelBackgroundColor,
4340
innerRef,
41+
datasetOptions,
4442
} = props;
4543

46-
const dispatch = useDispatch();
47-
4844
const isDatasetField = DATASET_FIELD_TYPES.includes(field.type);
4945

50-
const datasetsList = useSelector(getAllDatasetsList);
51-
const isDatasetsLoading = useSelector(getIsAllDatasetsLoading);
52-
const isDatasetsLoaded = useSelector(getIsAllDatasetsLoaded);
53-
54-
useEffect(() => {
55-
if (isDatasetField && !isDatasetsLoaded && !isDatasetsLoading) {
56-
dispatch(loadAllDatasets());
57-
}
58-
}, [isDatasetField, isDatasetsLoaded, isDatasetsLoading, dispatch]);
59-
60-
const datasetOptions = useMemo(
61-
() => datasetsList.map((dataset) => ({ label: dataset.name, value: String(dataset.id) })),
62-
[datasetsList],
63-
);
64-
6546
const datasetName = useMemo(
66-
() => datasetOptions.find((option) => option.value === String(field.dataset))?.label,
47+
() => datasetOptions?.find((option) => option.value === String(field.dataset))?.label,
6748
[datasetOptions, field.dataset],
6849
);
6950

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { EExtraFieldType } from '../../../types/template';
2+
3+
export const DATASET_FIELD_TYPES = [EExtraFieldType.Checkbox, EExtraFieldType.Radio, EExtraFieldType.Creatable];

frontend/src/public/components/TemplateEdit/ExtraFields/types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export interface IWorkflowExtraFieldProps {
88
field: IExtraField;
99
intl: IntlShape;
1010
showDropdown?: boolean;
11-
mode?: EExtraFieldMode;
11+
mode: EExtraFieldMode;
1212
namePlaceholder?: string;
1313
descriptionPlaceholder?: string;
1414
labelBackgroundColor?: EInputNameBackgroundColor;
@@ -26,4 +26,5 @@ export interface IExtraFieldProps extends IWorkflowExtraFieldProps {
2626
wrapperClassName?: string;
2727
fieldsCount?: number;
2828
id?: number;
29+
datasetOptions?: { label: string; value: string }[];
2930
}

frontend/src/public/components/TemplateEdit/ExtraFields/utils/OutputFieldContent/OutputFieldContent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export function OutputFieldContent({
4444
</button>
4545
);
4646

47-
const content = dataset ? (
47+
const content = dataset && datasetName ? (
4848
<div className={styles['output-field-content__content']}>
4949
<div className={styles['output-field-content__info']}>
5050
<div className={styles['output-field-content__info-dataset']}>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { useEffect, useMemo } from 'react';
2+
import { useDispatch, useSelector } from 'react-redux';
3+
4+
import { IExtraField } from '../../../../types/template';
5+
import { getAllDatasetsList, getIsAllDatasetsLoading, getIsAllDatasetsLoaded } from '../../../../redux/selectors/datasets';
6+
import { loadAllDatasets } from '../../../../redux/datasets/slice';
7+
import { DATASET_FIELD_TYPES } from '../constants';
8+
9+
export function useDatasetOptions(fields: IExtraField[]) {
10+
const dispatch = useDispatch();
11+
12+
const hasDatasetFields = fields.some((field) => DATASET_FIELD_TYPES.includes(field.type));
13+
14+
const datasetsList = useSelector(getAllDatasetsList);
15+
const isDatasetsLoading = useSelector(getIsAllDatasetsLoading);
16+
const isDatasetsLoaded = useSelector(getIsAllDatasetsLoaded);
17+
18+
useEffect(() => {
19+
if (hasDatasetFields && !isDatasetsLoaded && !isDatasetsLoading) {
20+
dispatch(loadAllDatasets());
21+
}
22+
}, [hasDatasetFields, isDatasetsLoaded, isDatasetsLoading, dispatch]);
23+
24+
return useMemo(
25+
() => datasetsList.map((dataset) => ({ label: dataset.name, value: String(dataset.id) })),
26+
[datasetsList],
27+
);
28+
}

frontend/src/public/components/TemplateEdit/KickoffRedux/KickoffRedux.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { isKickoffCleared } from './utils/isKickoffCleared';
99
import { KickoffMenu } from './KickoffMenu';
1010
import { IntlMessages } from '../../IntlMessages';
1111
import { EMoveDirections, EInputNameBackgroundColor } from '../../../types/workflow';
12-
import { EExtraFieldType, IKickoff, IExtraField, ITemplate, ETemplateParts } from '../../../types/template';
12+
import { EExtraFieldMode, EExtraFieldType, IKickoff, IExtraField, ITemplate, ETemplateParts } from '../../../types/template';
1313
import { isArrayWithItems } from '../../../utils/helpers';
1414
import { getNormalizeFieldsOrders, moveWorkflowField } from '../../../utils/workflows';
1515
import { ExtraFieldsMap } from '../ExtraFields/utils/ExtraFieldsMap';
@@ -25,6 +25,7 @@ import { useWorkflowNameVariables } from '../TaskForm/utils/getTaskVariables';
2525
import styles from './KickoffRedux.css';
2626
import { patchTemplate } from '../../../redux/actions';
2727
import { InputWithVariables } from '../InputWithVariables';
28+
import { useDatasetOptions } from '../ExtraFields/utils/useDatasetOptions';
2829

2930
export interface IKickoffReduxProps {
3031
template: ITemplate;
@@ -44,6 +45,7 @@ export function KickoffRedux({
4445
const [isOpen, setIsOpen] = React.useState(false);
4546
const containerRef = React.useRef<HTMLDivElement | null>(null);
4647
const variables = useWorkflowNameVariables(kickoff);
48+
const datasetOptions = useDatasetOptions(kickoff.fields);
4749

4850
const editTemplate = (templateFields: Partial<ITemplate>) => {
4951
dispatch(patchTemplate({ changedFields: templateFields }));
@@ -157,6 +159,8 @@ export function KickoffRedux({
157159
moveFieldUp={() => handleMoveField(index, EMoveDirections.Up)}
158160
moveFieldDown={() => handleMoveField(index, EMoveDirections.Down)}
159161
editField={handleEditField(field.apiName)}
162+
mode={EExtraFieldMode.Kickoff}
163+
datasetOptions={datasetOptions}
160164
accountId={accountId}
161165
/>
162166
))}

frontend/src/public/components/TemplateEdit/OutputForm/OutputForm.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { injectIntl, IntlShape } from 'react-intl';
55
import classNames from 'classnames';
66

77
import { EMoveDirections, EInputNameBackgroundColor } from '../../../types/workflow';
8-
import { EExtraFieldType, IExtraField } from '../../../types/template';
8+
import { EExtraFieldMode, EExtraFieldType, IExtraField } from '../../../types/template';
99
import { isArrayWithItems } from '../../../utils/helpers';
1010
import { getNormalizeFieldsOrders, moveWorkflowField } from '../../../utils/workflows';
1111

@@ -17,6 +17,7 @@ import { getEmptyField } from '../KickoffRedux/utils/getEmptyField';
1717

1818
import styles from './OutputForm.css';
1919
import stylesTaskForm from '../TaskForm/TaskForm.css';
20+
import { useDatasetOptions } from '../ExtraFields/utils/useDatasetOptions';
2021

2122
export interface IOutputFormOwnProps {
2223
fields: IExtraField[];
@@ -37,6 +38,7 @@ export function OutputForm({ fields, onOutputChange, intl, isDisabled, show, acc
3738
}, [outputRef]);
3839

3940
const sortedFields = [...fields].sort((a, b) => b.order - a.order);
41+
const datasetOptions = useDatasetOptions(fields);
4042

4143
const isFormEmpty = !isArrayWithItems(fields);
4244

@@ -98,6 +100,8 @@ export function OutputForm({ fields, onOutputChange, intl, isDisabled, show, acc
98100
moveFieldUp={() => handleMoveField(index, EMoveDirections.Up)}
99101
moveFieldDown={() => handleMoveField(index, EMoveDirections.Down)}
100102
editField={handleEditField(field.apiName)}
103+
mode={EExtraFieldMode.Kickoff}
104+
datasetOptions={datasetOptions}
101105
isDisabled={isDisabled}
102106
innerRef={outputRef}
103107
accountId={accountId}

0 commit comments

Comments
 (0)