Untitled

 avatar
unknown
plain_text
a year ago
15 kB
5
Indexable
update the below code to filter the answer that are provided only by the state that was clicked and display the answer inplace of the sstate list(if no answer is provided by that state then keem that column empty).
also update the datacollection used for the dadaTable with the state/answer value so that it will rerender the data table and value of answer will get displayed.

therefore, on click of  any state should display the answer provided by that state for all the respective questions, and if no response then keep them empty.






import ConstantKeys from '@/Constants/ConstantKeys';
import { Para, Header, DataTable } from '@d-lift/uxcomponents';
import React, { useEffect } from 'react';
import { Lift, useAppState, Util } from '@d-lift/core';
import webService from '@/Services/WebService';
import _ from 'lodash';

const QuestionResponse = ({}) => {
    const [selectedStateDesc, setSelectedStateDesc] = useAppState('selectedStateDesc', '');
    const [collectionData, setCollectionData] = useAppState('collectionData', undefined);
    const [expandedCard, setExpandedCard] = useAppState('expandedCard', null);
    const [selectedAnswers, setSelectedAnswers] = useAppState('selectedAnswers', '');

    useEffect(() => {
        getRfiCollection();
    }, [selectedAnswers]);

    const getRfiCollection = async () => {
        try {
            Lift.spinner.show();

            //let response= await webService.fetchRfiCollection();

            let response = {
                catalogId: 551,
                title: 'dfsdf',
                description: 'gsdfgsdfgdsfg',
                rfiDetails: [
                    {
                        id: 23451,
                        questionsList: [
                            {
                                rfiId: 23451,
                                id: 36003,
                                question: 'Question 1 for AK RFI for testing attention needed',
                                description: '',
                                answers: [
                                    {
                                        id: 93755,
                                        quesnId: 36003,
                                        answer: 'IL RESPONDED ',
                                        respondDt: '2024-07-25T17:40:48.69381',
                                        state: 'IL',
                                    },
                                    {
                                        id: 93750,
                                        quesnId: 36003,
                                        answer: 'IL RESPONDED 2',
                                        respondDt: '2024-07-25T17:40:48.69381',
                                        state: 'AK',
                                    },
                                ],
                            },
                            {
                                rfiId: 23451,
                                id: 36004,
                                question: 'Question 2 AK RFI for testing attention needed',
                                description: '',
                                answers: [
                                    {
                                        id: 93753,
                                        quesnId: 36004,
                                        answer: 'Responded as Michigan',
                                        respondDt: '2024-07-25T15:50:54.130178',
                                        state: 'MI',
                                    },
                                ],
                            },
                            {
                                rfiId: 23451,
                                id: 36005,
                                question: 'Question 3 AK RFI for testing attention needed',
                                description: '',
                                answers: [
                                    {
                                        id: 93802,
                                        quesnId: 36005,
                                        answer: 'gdfgdsfg',
                                        respondDt: '2024-07-26T11:42:54.20372',
                                        state: 'NH',
                                    },
                                ],
                            },
                            {
                                rfiId: 23451,
                                id: 36006,
                                question: 'Question 4 AK RFI for testing attention needed',
                                description: '',
                                answers: [
                                    {
                                        id: 93803,
                                        quesnId: 36006,
                                        answer: 'gsdfgsdfgsdfg',
                                        respondDt: '2024-07-26T11:43:03.513999',
                                        state: 'NV',
                                    },
                                ],
                            },
                        ],
                        title: 'AK RFI for testing attention needed',
                        description: 'Description for AK RFI for testing attention needed',
                        reqDT: '2024-07-25T15:46:59.142912',
                        state: 'AR',
                        programs: 'ALL',
                        category: 'ALL',
                        status: 'OP',
                        dueDT: '07-26-2024',
                        offering: 'EE',
                    },
                    {
                        id: 23501,
                        questionsList: [
                            {
                                rfiId: 23501,
                                id: 36007,
                                question: 'Question MI',
                                description: '',
                                answers: [
                                    {
                                        id: 93754,
                                        quesnId: 36007,
                                        answer: 'IL RESPONDED ',
                                        respondDt: '2024-07-25T17:39:23.427467',
                                        state: 'IL',
                                    },
                                ],
                            },
                        ],
                        title: 'MI RFI Created Title',
                        description: '',
                        reqDT: '2024-07-25T17:05:21.534463',
                        state: 'MI',
                        programs: 'ALL',
                        category: 'ALL',
                        status: 'OP',
                        dueDT: '07-26-2024',
                        offering: 'EE',
                    },
                    {
                        id: 23551,
                        questionsList: [
                            {
                                rfiId: 23551,
                                id: 36008,
                                question: 'QUES1',
                                description: '',
                            },
                        ],
                        title: 'IL RFI',
                        description: '',
                        reqDT: '2024-07-25T17:38:19.4079',
                        state: 'IL',
                        programs: 'ALL',
                        category: 'ALL',
                        status: 'OP',
                        dueDT: '07-26-2024',
                        offering: 'EE',
                    },
                ],
            };

            processCollectionData(response);
        } catch (error) {
            Lift.Application.Notification.error(
                ConstantKeys.NOTIFICATION.MSG.ERR.FETCH_RFI_COLLECTIONS_ERR,
            );
        } finally {
            Lift.spinner.hide();
        }
    };

    const processCollectionData = (responseData) => {
        const formattedCollectionData = [];
        if (!_.isEmpty(responseData) && !_.isEmpty(responseData.rfiDetails)) {
            responseData.rfiDetails.forEach((data) => {
                let table = [];
                table = data.questionsList?.map((question) => ({
                    id: question.id,
                    question: question.question,
                    answers: question.answers,
                }));

                formattedCollectionData.push(table);
            });
        }

        setCollectionData({
            ...responseData,
            ...{ formattedCollectionData: formattedCollectionData },
        });

        console.log('collectionData', collectionData);
        console.log('formattedCollectionData', formattedCollectionData);
    };

    const renderResponse = (colData, rowData, index) => {
        const currentAnswer = selectedAnswers[rowData.id];

        return (
            <div>
                {currentAnswer === undefined ? (
                    rowData.answers?.map((answer, idx) => (
                        <React.Fragment key={answer.id}>
                            <a
                                href="#"
                                onClick={(e) => {
                                    e.preventDefault();
                                    setSelectedAnswers((prev) => ({
                                        ...prev,
                                        [rowData.id]: answer.answer,
                                    }));
                                    console.log('inside setSelectedAnswers()');
                                }}>
                                {answer.state}
                            </a>
                            {idx < rowData.answers.length - 1 && ', '}
                        </React.Fragment>
                    ))
                ) : (
                    <Para>{selectedAnswers[rowData.id]}</Para>
                )}
            </div>
        );
    };

    const toggleCard = (index) => {
        setExpandedCard(expandedCard === index ? null : index);
    };

    return (
        <>
            {collectionData ? (
                <>
                    <div className="ux-rfi-green-bg">
                        <Header
                            className="pt-1 ux-rfi-white-header"
                            size="1"
                            showIf={selectedStateDesc}>
                            {selectedStateDesc}
                        </Header>
                        <Header header-size="4" className="pt-1 ux-rfi-white-header">
                            {collectionData.title}
                        </Header>
                        <Para className="ux-rfi-white-font">{collectionData.description}</Para>
                    </div>

                    {collectionData.rfiDetails.map((rfiDetail, index) => (
                        <div key={index} className="ux-rfi-light-green-border mt-3">
                            <div>
                                <div className="main-component">
                                    <div onClick={() => toggleCard(index)} className="p-1">
                                        <Header
                                            header-size="4"
                                            preIconClass={`${
                                                expandedCard == index
                                                    ? 'fa fa-angle-up'
                                                    : 'fa fa-angle-down'
                                            }`}>
                                            {rfiDetail.title}
                                        </Header>
                                    </div>

                                    {expandedCard === index ? (
                                        <div className="col-9 pb-3">
                                            <Para
                                                labelKey="offering"
                                                className="ux-rfi-label-normal font-weight-bold"></Para>
                                            {' ' +
                                                Util.getRefTableDescriptionByCode(
                                                    ConstantKeys.REF_TABLE_NAMES.OFFERING,
                                                    rfiDetail.offering,
                                                )}
                                            <br />
                                            <Para
                                                labelKey="program"
                                                className="ux-rfi-label-normal font-weight-bold"></Para>
                                            {' ' +
                                                Util.getRefTableDescriptionByCode(
                                                    ConstantKeys.REF_TABLE_NAMES.PROGRAM,
                                                    rfiDetail.programs,
                                                )}
                                            <br />
                                            <Para
                                                labelKey="category"
                                                className="ux-rfi-label-normal font-weight-bold"></Para>
                                            {' ' +
                                                Util.getRefTableDescriptionByCode(
                                                    ConstantKeys.REF_TABLE_NAMES.CATEGORY,
                                                    rfiDetail.category,
                                                )}
                                        </div>
                                    ) : null}

                                    <DataTable
                                        col-data-keys="question,response"
                                        col-default-headers="Question,Response"
                                        customContent={{
                                            Response: renderResponse,
                                        }}
                                        datacollection={
                                            'collectionData.formattedCollectionData[' + index + ']'
                                        }
                                        keyField="id"
                                        hover="false"
                                        bordered="true"
                                        striped="false"
                                        emptymsg-key="no_records_found"
                                        className="va-contacts-table"
                                    />
                                </div>
                            </div>
                        </div>
                    ))}
                </>
            ) : null}
        </>
    );
};

export default QuestionResponse;
Editor is loading...
Leave a Comment