From 922a3a43db246ae8d793d0bdedef5f619841710d Mon Sep 17 00:00:00 2001 From: Vitali Pinchuk Date: Thu, 8 Feb 2024 13:04:32 +0300 Subject: [PATCH 1/5] fixed - prevent add existed items --- .../DatasetEditor/DatasetEditor.tsx | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/components/DatasetEditor/DatasetEditor.tsx b/src/components/DatasetEditor/DatasetEditor.tsx index 0602c4a..71b5777 100644 --- a/src/components/DatasetEditor/DatasetEditor.tsx +++ b/src/components/DatasetEditor/DatasetEditor.tsx @@ -99,17 +99,21 @@ export const DatasetEditor: React.FC = ({ value, onChange, data }) => { * Available Field Options */ const availableFieldOptions = useMemo(() => { - return data.reduce((acc: SelectableValue[], dataFrame) => { - return acc.concat( - dataFrame.fields.map((field) => ({ - value: `${dataFrame.refId}:${field.name}`, - fieldName: field.name, - label: `${dataFrame.refId ? `${dataFrame.refId}:` : ''}${field.name}`, - source: dataFrame.refId, - })) - ); - }, []); - }, [data]); + return data + .reduce((acc: SelectableValue[], dataFrame) => { + return acc.concat( + dataFrame.fields.map((field) => ({ + value: `${dataFrame.refId}:${field.name}`, + fieldName: field.name, + label: `${dataFrame.refId ? `${dataFrame.refId}:` : ''}${field.name}`, + source: dataFrame.refId, + })) + ); + }, []) + .filter((field) => { + return !items.find((item) => item.name === field.fieldName && item.source === field.source); + }); + }, [items, data]); /** * Add New Item From a469826dea5f5712a4e375ae8ca52a0123e8157e Mon Sep 17 00:00:00 2001 From: Vitali Pinchuk Date: Thu, 8 Feb 2024 13:18:51 +0300 Subject: [PATCH 2/5] fix - change .find to .some --- src/components/DatasetEditor/DatasetEditor.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/DatasetEditor/DatasetEditor.tsx b/src/components/DatasetEditor/DatasetEditor.tsx index 71b5777..d86e373 100644 --- a/src/components/DatasetEditor/DatasetEditor.tsx +++ b/src/components/DatasetEditor/DatasetEditor.tsx @@ -111,7 +111,7 @@ export const DatasetEditor: React.FC = ({ value, onChange, data }) => { ); }, []) .filter((field) => { - return !items.find((item) => item.name === field.fieldName && item.source === field.source); + return !items.some((item) => item.name === field.fieldName && item.source === field.source); }); }, [items, data]); From 0324b7217dca463c1e385207f22ce4a3e7c1760a Mon Sep 17 00:00:00 2001 From: Vitali Pinchuk Date: Thu, 8 Feb 2024 13:59:14 +0300 Subject: [PATCH 3/5] fix - add test to Select --- src/__mocks__/@grafana/ui.tsx | 3 ++- .../DatasetEditor/DatasetEditor.test.tsx | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/__mocks__/@grafana/ui.tsx b/src/__mocks__/@grafana/ui.tsx index a9e1276..c14b4d2 100644 --- a/src/__mocks__/@grafana/ui.tsx +++ b/src/__mocks__/@grafana/ui.tsx @@ -12,7 +12,8 @@ const Select = jest.fn(({ options, onChange, value, isMulti, isClearable, ...res if (isMulti) { onChange(options.filter((option: any) => event.target.values.includes(option.value))); } else { - onChange(options.find((option: any) => option.value === event.target.value)); + const option = options.find((option: any) => option.value === event.target.value); + option && onChange(option); } } }} diff --git a/src/components/DatasetEditor/DatasetEditor.test.tsx b/src/components/DatasetEditor/DatasetEditor.test.tsx index f53ffbe..b65190d 100644 --- a/src/components/DatasetEditor/DatasetEditor.test.tsx +++ b/src/components/DatasetEditor/DatasetEditor.test.tsx @@ -159,6 +159,30 @@ describe('Dataset Editor', () => { expect(selectors.item(true, 'A:Value')).not.toBeInTheDocument(); }); + it('Should not allow selecting already selected fields', () => { + const { value, onChange } = createOnChangeHandler([{ name: 'Time', source: 'A' }]); + + /** + * Render + */ + render( + getComponent({ + value, + onChange, + }) + ); + + const newItemNameInput = selectors.newItemName(); + + /** + * Simulate select option doesn't exist + */ + + fireEvent.change(newItemNameInput, { target: { value: 'A:Time' } }); + + expect(selectors.buttonAddNew()).toBeDisabled(); + }); + /** * Items order */ From 9f4ee4b017b8b8c6bdf897439f5d3ca679d5f609 Mon Sep 17 00:00:00 2001 From: Vitali Pinchuk Date: Thu, 8 Feb 2024 14:09:25 +0300 Subject: [PATCH 4/5] fix PR feedback --- src/components/DatasetEditor/DatasetEditor.test.tsx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/components/DatasetEditor/DatasetEditor.test.tsx b/src/components/DatasetEditor/DatasetEditor.test.tsx index b65190d..2588ad3 100644 --- a/src/components/DatasetEditor/DatasetEditor.test.tsx +++ b/src/components/DatasetEditor/DatasetEditor.test.tsx @@ -172,14 +172,10 @@ describe('Dataset Editor', () => { }) ); - const newItemNameInput = selectors.newItemName(); - /** * Simulate select option doesn't exist */ - - fireEvent.change(newItemNameInput, { target: { value: 'A:Time' } }); - + fireEvent.change(selectors.newItemName(), { target: { value: 'A:Time' } }); expect(selectors.buttonAddNew()).toBeDisabled(); }); From 9109f5faf10344501a1d5836e522df44aa8bfe59 Mon Sep 17 00:00:00 2001 From: Mikhail Volkov Date: Thu, 8 Feb 2024 22:44:08 -0500 Subject: [PATCH 5/5] Update CHANGELOG.md --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index caf73d1..179a39a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log -## 5.2.0 (2024-02-05) +## 5.2.0 (2024-02-08) ### Features / Enhancements @@ -9,6 +9,8 @@ - Update ESLint configuration and refactoring (#237) - Update dependencies and Actions (#238) - Add context parameter to non-visual mode (#245) +- Add refresh function using Application Event Bus (#247) +- Update to disallow to choose already selected fields (#251) ## 5.1.0 (2023-08-11)