From de36a46765d7ef57c5f7c37ef2683b0300a08dc0 Mon Sep 17 00:00:00 2001 From: Aishwarya Srivastava Date: Thu, 20 Mar 2025 17:22:45 +0530 Subject: [PATCH] NTP-47538 | all feedback details screen code refactor (#1116) --- android/app/build.gradle | 4 +- buildFlavor/field/buildNumber.txt | 2 +- buildFlavor/field/buildVersion.txt | 2 +- package.json | 4 +- src/action/feedbackActions.ts | 2 +- .../feedback/FeedbackDetailContainer.tsx | 288 +++--------------- .../feedback/FeedbackDetailItem.tsx | 2 +- .../caseDetails/feedback/FeedbackFilters.tsx | 83 +++++ .../feedback/FeedbackListComponent.tsx | 137 +++++++++ src/screens/caseDetails/feedback/types.ts | 32 ++ src/screens/caseDetails/feedback/utils.tsx | 34 +++ 11 files changed, 335 insertions(+), 255 deletions(-) create mode 100644 src/screens/caseDetails/feedback/FeedbackFilters.tsx create mode 100644 src/screens/caseDetails/feedback/FeedbackListComponent.tsx create mode 100644 src/screens/caseDetails/feedback/utils.tsx diff --git a/android/app/build.gradle b/android/app/build.gradle index bb68ecb2..7f4a1723 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -113,8 +113,8 @@ def jscFlavor = 'org.webkit:android-jsc:+' def enableHermes = project.ext.react.get("enableHermes", false); -def VERSION_CODE = 247 -def VERSION_NAME = "2.18.4" +def VERSION_CODE = 249 +def VERSION_NAME = "2.18.6" android { namespace "com.avapp" diff --git a/buildFlavor/field/buildNumber.txt b/buildFlavor/field/buildNumber.txt index 030d25b2..cb16690c 100644 --- a/buildFlavor/field/buildNumber.txt +++ b/buildFlavor/field/buildNumber.txt @@ -1 +1 @@ -248 \ No newline at end of file +249 \ No newline at end of file diff --git a/buildFlavor/field/buildVersion.txt b/buildFlavor/field/buildVersion.txt index 5150594d..ad947d67 100644 --- a/buildFlavor/field/buildVersion.txt +++ b/buildFlavor/field/buildVersion.txt @@ -1 +1 @@ -2.18.5 \ No newline at end of file +2.18.6 \ No newline at end of file diff --git a/package.json b/package.json index 579a53a9..55e3baad 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "AV_APP", - "version": "2.18.4", - "buildNumber": "247", + "version": "2.18.6", + "buildNumber": "249", "private": true, "scripts": { "android:dev": "yarn move:dev && react-native run-android", diff --git a/src/action/feedbackActions.ts b/src/action/feedbackActions.ts index e4cdf8a9..c28ba539 100644 --- a/src/action/feedbackActions.ts +++ b/src/action/feedbackActions.ts @@ -9,7 +9,7 @@ interface IPastFeedbacksPayload { page_size: number; customerRecahble: boolean; addressReferenceIds?: string; // required to fetch past feedback on addresses - isGeolocationFeedback: boolean; + isGeolocationFeedback?: boolean; } export interface IFilterPayload { diff --git a/src/screens/caseDetails/feedback/FeedbackDetailContainer.tsx b/src/screens/caseDetails/feedback/FeedbackDetailContainer.tsx index e6d2dec2..15c996e0 100644 --- a/src/screens/caseDetails/feedback/FeedbackDetailContainer.tsx +++ b/src/screens/caseDetails/feedback/FeedbackDetailContainer.tsx @@ -1,10 +1,7 @@ -import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; -import { Modal, RefreshControl, ScrollView, StyleSheet, View } from 'react-native'; -import Accordion from '../../../../RN-UI-LIB/src/components/accordian/Accordian'; +import React, { useCallback, useEffect, useRef, useState } from 'react'; +import { RefreshControl, ScrollView, View } from 'react-native'; import NavigationHeader from '../../../../RN-UI-LIB/src/components/NavigationHeader'; -import Text from '../../../../RN-UI-LIB/src/components/Text'; -import { GenericStyles, SCREEN_HEIGHT, getShadowStyle } from '../../../../RN-UI-LIB/src/styles'; -import { COLORS } from '../../../../RN-UI-LIB/src/styles/colors'; +import { GenericStyles } from '../../../../RN-UI-LIB/src/styles'; import { IFilterPayload, getPastFeedbacks, @@ -15,10 +12,7 @@ import { logError } from '../../../components/utlis/errorUtils'; import { goBack } from '../../../components/utlis/navigationUtlis'; import { useAppDispatch, useAppSelector } from '../../../hooks'; import useIsOnline from '../../../hooks/useIsOnline'; -import { RootState } from '../../../store/store'; import { IFeedback } from '../../../types/feedback.types'; -import FeedbackDetailAnswerContainer from './FeedbackDetailAnswerContainer'; -import FeedbackDetailItem from './FeedbackDetailItem'; import { addClickstreamEvent } from '../../../services/clickstreamEventService'; import { CLICKSTREAM_EVENT_NAMES } from '../../../common/Constants'; import Pagination from '../../../../RN-UI-LIB/src/components/pagination/Pagination'; @@ -28,47 +22,17 @@ import { ToastMessages } from './../../../screens/allCases/constants'; import { setFeedbackHistoryLoading } from '../../../reducer/feedbackHistorySlice'; import SuspenseLoader from '../../../../RN-UI-LIB/src/components/suspense_loader/SuspenseLoader'; import LineLoader from '../../../../RN-UI-LIB/src/components/suspense_loader/LineLoader'; -import NoPastFeedbackIcon from '../../../assets/icons/NoPastFeedbackIcon'; -import Button from '../../../../RN-UI-LIB/src/components/Button'; -import FilterIcon from '../../../assets/icons/FilterIcon'; -import Filters, { TFilterOptions } from '../../../components/filters/Filters'; -import { _map } from '../../../../RN-UI-LIB/src/utlis/common'; -import ChevronDown from '../../../assets/icons/ChevronDown'; -import ChevronUp from '../../../assets/icons/ChevronUp'; +import { TFilterOptions } from '../../../components/filters/Filters'; import { PAST_FEEDBACK_PAGE_SIZE } from '@screens/caseDetails/feedback/pastFeedbackCommon'; - -const FEEDBACK_PAGE_TITLE = 'All feedbacks'; -const ADDRESS_FEEDBACK_PAGE_TITLE = 'Address feedback'; - -const SCROLL_LAYOUT_OFFSET = 10; - -interface IFeedbackDetailContainer { - route: { - params: { - loanAccountNumber: string; - addressReferenceIds?: string; - addressText?: string; - activeFeedbackReferenceId?: string; - caseId: string; - pageNo?: number; - }; - }; -} - -const getFiltersPayload = (selectedFilters: TFilterOptions) => { - const payload: IFilterPayload = { filters: [] }; - _map(selectedFilters, (filterName: string) => { - const filter = selectedFilters[filterName]; - if (!filter || !filter.filters) { - return; - } - payload.filters.push({ - filterName, - selectedValue: Object.keys(filter.filters), - }); - }); - return payload; -}; +import { IFeedbackDetailContainer } from './types'; +import { + ADDRESS_FEEDBACK_PAGE_TITLE, + FEEDBACK_PAGE_TITLE, + getFiltersPayload, + handlePageChangeClickstream, +} from './utils'; +import FeedbackListComponent from './FeedbackListComponent'; +import FeedbackFilters from './FeedbackFilters'; const FeedbackDetailContainer: React.FC = ({ route: routeParams }) => { const { @@ -83,30 +47,24 @@ const FeedbackDetailContainer: React.FC = ({ route: ro } = routeParams; const isPastFeedbackOnAddress = addressText || addressReferenceIds?.length; - - const [isExpanded, setIsExpanded] = useState(false); const [feedbackFilters, setFeedbackFilters] = useState({}); const isOnline = useIsOnline(); const dispatch = useAppDispatch(); - - const { feedbackListFromCache, feedbackTotalPages, feedbackFiltersTemplate } = useAppSelector( - (state: RootState) => ({ - feedbackListFromCache: state.feedbackHistory?.[loanAccountNumber as string]?.data || [], - feedbackTotalPages: state.feedbackHistory?.[loanAccountNumber as string]?.totalPages || 0, - feedbackFiltersTemplate: state.feedbackFilters?.feedbackFiltersTemplate || {}, - }) + const feedbackListFromCache = useAppSelector( + (state) => state.feedbackHistory?.[loanAccountNumber as string]?.data || [] + ); + const feedbackTotalPages = useAppSelector( + (state) => state.feedbackHistory?.[loanAccountNumber as string]?.totalPages || 0 ); const [feedbackList, setFeedbackList] = useState( !isPastFeedbackOnAddress ? feedbackListFromCache : [] ); const [totalPage, setTotalPage] = useState(!isPastFeedbackOnAddress ? feedbackTotalPages : 0); - const [loading, setLoading] = useState(false); const [currentPage, setCurrentPage] = useState(pageNo); const [dataSourceCord, setDataSourceCord] = useState(0); const ref = useRef(); - const [showFilterModal, setShowFilterModal] = useState(false); const fetchFeedbacks = useCallback( (filtersPayload: IFilterPayload) => { @@ -114,11 +72,6 @@ const FeedbackDetailContainer: React.FC = ({ route: ro ? getPastFeedbacksOnAddresses : getPastFeedbacks; - if (isPastFeedbackOnAddress) { - dispatch( - setFeedbackHistoryLoading({ loanAccountNumbers: [loanAccountNumber], isLoading: true }) - ); - } getPastFeedbackApiFn( { loan_account_number: loanAccountNumber, @@ -173,7 +126,7 @@ const FeedbackDetailContainer: React.FC = ({ route: ro useEffect(() => { setCurrentPage(pageNo ?? 1); - }, [pageNo]) + }, [pageNo]); useEffect(() => { if (isPastFeedbackOnAddress) { @@ -203,16 +156,6 @@ const FeedbackDetailContainer: React.FC = ({ route: ro setCurrentPage(page); }; - const handlePageChangeClickstream = ( - page: number, - eventName: { name: string; description: string } - ) => { - addClickstreamEvent(eventName, { - currentPageNumber: page, - lan: loanAccountNumber, - }); - }; - const handleFilterChange = (filters: TFilterOptions) => { const filtersPayload = getFiltersPayload(filters); if (currentPage === 1) { @@ -224,8 +167,6 @@ const FeedbackDetailContainer: React.FC = ({ route: ro setFeedbackFilters(filters); }; - const feedbackFilterCount = Object.keys(feedbackFilters)?.length; - return ( @@ -233,32 +174,11 @@ const FeedbackDetailContainer: React.FC = ({ route: ro title={!isPastFeedbackOnAddress ? FEEDBACK_PAGE_TITLE : ADDRESS_FEEDBACK_PAGE_TITLE} onBack={goBack} /> - {!isPastFeedbackOnAddress ? ( - -