From 4f9f939a799ebf3925671d017544ec74e4afbb20 Mon Sep 17 00:00:00 2001 From: Dysto coder Date: Thu, 26 Sep 2024 16:44:51 +0300 Subject: [PATCH 1/3] throw validation error when adding existing filed list value --- .../reportFields/ReportFieldsAddListValuePage.tsx | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/pages/workspace/reportFields/ReportFieldsAddListValuePage.tsx b/src/pages/workspace/reportFields/ReportFieldsAddListValuePage.tsx index 0d85fca800bb..6cbd2628b224 100644 --- a/src/pages/workspace/reportFields/ReportFieldsAddListValuePage.tsx +++ b/src/pages/workspace/reportFields/ReportFieldsAddListValuePage.tsx @@ -1,5 +1,5 @@ import type {StackScreenProps} from '@react-navigation/stack'; -import React, {useCallback} from 'react'; +import React, {useCallback, useMemo} from 'react'; import {Keyboard} from 'react-native'; import {useOnyx} from 'react-native-onyx'; import FormProvider from '@components/Form/FormProvider'; @@ -14,6 +14,7 @@ import useThemeStyles from '@hooks/useThemeStyles'; import * as ReportField from '@libs/actions/Policy/ReportField'; import Navigation from '@libs/Navigation/Navigation'; import * as PolicyUtils from '@libs/PolicyUtils'; +import * as ReportUtils from '@libs/ReportUtils'; import * as WorkspaceReportFieldUtils from '@libs/WorkspaceReportFieldUtils'; import type {SettingsNavigatorParamList} from '@navigation/types'; import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper'; @@ -37,10 +38,18 @@ function ReportFieldsAddListValuePage({ const {inputCallbackRef} = useAutoFocusInput(); const [formDraft] = useOnyx(ONYXKEYS.FORMS.WORKSPACE_REPORT_FIELDS_FORM_DRAFT); + let listValues: string[]; + if (reportFieldID) { + const reportFieldKey = ReportUtils.getReportFieldKey(reportFieldID); + listValues = Object.values(policy?.fieldList?.[reportFieldKey]?.values ?? {}); + } else { + listValues = formDraft?.[INPUT_IDS.LIST_VALUES] ?? []; + } + const validate = useCallback( (values: FormOnyxValues) => - WorkspaceReportFieldUtils.validateReportFieldListValueName(values[INPUT_IDS.VALUE_NAME].trim(), '', formDraft?.[INPUT_IDS.LIST_VALUES] ?? [], INPUT_IDS.VALUE_NAME), - [formDraft], + WorkspaceReportFieldUtils.validateReportFieldListValueName(values[INPUT_IDS.VALUE_NAME].trim(), '', listValues, INPUT_IDS.VALUE_NAME), + [listValues], ); const createValue = useCallback( From 839b0718fa31160264105fe10b6f3d7aa18f2a24 Mon Sep 17 00:00:00 2001 From: Dysto coder Date: Thu, 26 Sep 2024 16:49:15 +0300 Subject: [PATCH 2/3] fix lint error --- .../workspace/reportFields/ReportFieldsAddListValuePage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/workspace/reportFields/ReportFieldsAddListValuePage.tsx b/src/pages/workspace/reportFields/ReportFieldsAddListValuePage.tsx index 6cbd2628b224..d3298d570036 100644 --- a/src/pages/workspace/reportFields/ReportFieldsAddListValuePage.tsx +++ b/src/pages/workspace/reportFields/ReportFieldsAddListValuePage.tsx @@ -1,5 +1,5 @@ import type {StackScreenProps} from '@react-navigation/stack'; -import React, {useCallback, useMemo} from 'react'; +import React, {useCallback} from 'react'; import {Keyboard} from 'react-native'; import {useOnyx} from 'react-native-onyx'; import FormProvider from '@components/Form/FormProvider'; From f9e60dc099aab7d8b30822b32fc61d4b5a590182 Mon Sep 17 00:00:00 2001 From: Dysto coder Date: Fri, 27 Sep 2024 21:13:16 +0300 Subject: [PATCH 3/3] use useMemo to calculate listValues --- .../ReportFieldsAddListValuePage.tsx | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/pages/workspace/reportFields/ReportFieldsAddListValuePage.tsx b/src/pages/workspace/reportFields/ReportFieldsAddListValuePage.tsx index d3298d570036..f404a6fbae4f 100644 --- a/src/pages/workspace/reportFields/ReportFieldsAddListValuePage.tsx +++ b/src/pages/workspace/reportFields/ReportFieldsAddListValuePage.tsx @@ -1,5 +1,5 @@ import type {StackScreenProps} from '@react-navigation/stack'; -import React, {useCallback} from 'react'; +import React, {useCallback, useMemo} from 'react'; import {Keyboard} from 'react-native'; import {useOnyx} from 'react-native-onyx'; import FormProvider from '@components/Form/FormProvider'; @@ -38,13 +38,16 @@ function ReportFieldsAddListValuePage({ const {inputCallbackRef} = useAutoFocusInput(); const [formDraft] = useOnyx(ONYXKEYS.FORMS.WORKSPACE_REPORT_FIELDS_FORM_DRAFT); - let listValues: string[]; - if (reportFieldID) { - const reportFieldKey = ReportUtils.getReportFieldKey(reportFieldID); - listValues = Object.values(policy?.fieldList?.[reportFieldKey]?.values ?? {}); - } else { - listValues = formDraft?.[INPUT_IDS.LIST_VALUES] ?? []; - } + const listValues = useMemo(() => { + let reportFieldListValues: string[]; + if (reportFieldID) { + const reportFieldKey = ReportUtils.getReportFieldKey(reportFieldID); + reportFieldListValues = Object.values(policy?.fieldList?.[reportFieldKey]?.values ?? {}); + } else { + reportFieldListValues = formDraft?.[INPUT_IDS.LIST_VALUES] ?? []; + } + return reportFieldListValues; + }, [formDraft, policy?.fieldList, reportFieldID]); const validate = useCallback( (values: FormOnyxValues) =>