Untitled
unknown
plain_text
a year ago
8.4 kB
5
Indexable
Update the below code to render elemets properly according to th enew response structure { "timestamp": "2024-06-12T08:12:02.926852Z", "message": { "code": 200, "notify": false }, "data": { "rfiId": 14501, "questions": [ { "rfiId": 14501, "id": 18001, "question": "What is React Router?", "description": "" }, { "rfiId": 14501, "id": 18051, "question": "What are the main components provided by React Router?", "description": "" } ] }, "correlationId": "5108B30F184B480F95EF3EF33EF9D13F" } code: import React, { useState, useEffect } from 'react'; import { withPage, Lift, useAppState } from '@d-lift/core'; import { useLocation } from 'react-router-dom'; import BodySection from '@/Layout/BodySection'; import webService from '@/Services/WebService'; import Questions from './Components/Questions'; import { Button, Label, Column, Page, Header, Row, Para } from '@d-lift/uxcomponents'; import './response.scss'; const RFIResponse = () => { const location = useLocation(); const [responseData, setResponseData] = useAppState('responseData', []); const [rfiObj, setRfiObj] = useAppState('rfiObj', location.state?.model?.rfi || {}); useEffect(() => { loadResponseData(rfiObj); }, [rfiObj]); const loadResponseData = async (rfi) => { try { Lift.spinner.show(); const data = await webService.getFullDetails({ requestBody: { rfiId: rfi?.id }, }); console.log(data); if (data) { const formattedData = data.map((item) => ({ ...item, questions: item.questions.map((question) => ({ ...question, answers: question.answers.map((answer) => ({ ...answer, respondDt: new Date(answer.respondDt).toLocaleDateString('en-US'), })), })), })); setResponseData(formattedData); Lift.Application.Notification.success('Response Data loaded successfully'); } } catch (error) { console.log(error); Lift.Application.Notification.error('Failed to load Response Data'); } finally { Lift.spinner.hide(); } }; return ( <Page> <BodySection> <div className="ux-rfi-grey-border w-100 mt-3"> <Header className="pt-3 ux-rfi-font-header" size="2" labelKey="RFI_Title"></Header> <Row> <Column className="col-9"> <Row className="d-flex flex-wrap"> <Para labelKey="very_much_longer" className="mr-2 mt-2 p-1 ml-3 ux-rfi-label-normal ux-rfi-green-label"></Para> <Para labelKey="selection_1" className="ux-rfi-green-label mt-2 mr-2 p-1 ux-rfi-label-normal"></Para> <Para labelKey="selection_1" className="ux-rfi-green-label mt-2 mr-2 p-1 ux-rfi-label-normal"></Para> <Para labelKey="selection_1" className="ux-rfi-green-label mt-2 mr-2 p-1 ux-rfi-label-normal"></Para> <Para labelKey="selection_1" className="ux-rfi-green-label mt-2 p-1 ux-rfi-label-normal"></Para> </Row> </Column> <Column> <div className="ux-rfi-grey-border"> <Label labelKey="requested_by" className="mt-1 ux-rfi-label-normal ux-rfi-grey-font"></Label> <Para labelKey="massachusetts" className="ux-rfi-bold"></Para> <Label labelKey="due" className="mt-1 ux-rfi-label-normal ux-rfi-grey-font"></Label> <Para labelKey="nov_15" className="ux-rfi-bold"></Para> <Label labelKey="responses" className="mt-1 ux-rfi-label-normal ux-rfi-grey-font"></Label> <Para labelKey="18_of_30" className="ux-rfi-bold"></Para> <div className="m-0 p-1"> <Button id="summarizeBtn" size="small" className="ux-rfi-green-button" // click={} labelKey="summarize_btn"></Button> </div> </div> </Column> </Row> </div> <div className="ux-rfi-grey-border w-100 mt-3"> <Para labelKey="content" className="mt-2 scrollable-content"></Para> </div> <Questions responseData={responseData}></Questions> </BodySection> </Page> ); }; export default withPage( { Description: 'Respond to an RFI page', ContentManager: true, LayoutStyle: 'rfi-dashboard', }, RFIResponse, ); import React from 'react'; import { Accordian, AccordianElement, Label, Button, Para } from '@d-lift/uxcomponents'; import PropTypes from 'prop-types'; import '@/Validations/customValidations'; const Questions = ({ responseData }) => { return ( <div className="ux-rfi-green-border mt-4"> <Label labelKey="Questions"></Label> {responseData?.map((item, index) => item.questions.map((question, qIndex) => ( <Accordian id={`outer-accordian-${index}-${qIndex}`} key={question.id}> <AccordianElement headerText={question.question}> <Label>{question.answers.length}   Responses:</Label> {question.answers.map((answer, aIndex) => ( <Accordian id={`inner-accordian-${index}-${aIndex}`}> <AccordianElement key={answer.id} headerText={answer.state}> <Para>{answer.answer}</Para> <Button id={`edit-btn-${index}-${qIndex}-${aIndex}`} size="small" className="ux-rfi-green-button float-right mt-4 mb-2" labelKey="edit_response" // click={() => Navigate.to('/create-rfi')} ></Button> </AccordianElement> </Accordian> ))} <Button id={`respond-btn-${index}-${qIndex}`} size="small" className="ux-rfi-green-button float-right mt-4 mb-2" labelKey="respond_question" // click={() => Navigate.to('/create-rfi')} ></Button> </AccordianElement> </Accordian> )), )} </div> ); }; Questions.propTypes = { responseData: PropTypes.array.isRequired, }; export default Questions;
Editor is loading...
Leave a Comment