1- import { Metadata } from 'next'
1+ 'use client'
2+
3+ import { useEffect , useState } from 'react'
4+ import { useParams } from 'next/navigation'
25
36import AppLayout from 'components/app/AppLayout'
47import { ErrCode } from 'components/ui/ErrCode'
58import { getSurveys , getSurveySessions } from 'lib/api'
69import { Survey , SurveySessionsLimit } from 'lib/types'
710import { SurveyResponsesPage } from 'components/app/SurveyResponsesPage'
811
9- export const metadata : Metadata = {
10- title : 'Survey Responses' ,
11- }
12+ export default function ResponsesPage ( ) {
13+ const params = useParams ( )
14+ const [ currentSurvey , setCurrentSurvey ] = useState < Survey | undefined > (
15+ undefined
16+ )
17+ const [ errMsg , setErrMsg ] = useState ( '' )
18+ const [ loading , setLoading ] = useState ( true )
1219
13- export default async function ResponsesPage ( {
14- params,
15- } : {
16- params : { survey_uuid : string }
17- } ) {
18- let errMsg = ''
20+ useEffect ( ( ) => {
21+ const fetchData = async ( ) => {
22+ if ( ! params . survey_uuid ) return
1923
20- let currentSurvey = undefined
21- const surveysResp = await getSurveys ( )
22- if ( surveysResp . error ) {
23- errMsg = 'Unable to fetch surveys'
24- } else {
25- const surveys = surveysResp . data . data
26- const survey = surveys . find (
27- ( survey : Survey ) => survey . uuid === params . survey_uuid
28- )
29- if ( ! survey ) {
30- errMsg = 'Survey not found'
31- } else {
32- currentSurvey = survey
24+ const surveysResp = await getSurveys ( )
25+ if ( surveysResp . error ) {
26+ setErrMsg ( 'Unable to fetch surveys' )
27+ setLoading ( false )
28+ return
29+ }
30+
31+ const surveys = surveysResp . data . data
32+ const survey = surveys . find (
33+ ( survey : Survey ) => survey . uuid === params . survey_uuid
34+ )
35+
36+ if ( ! survey ) {
37+ setErrMsg ( 'Survey not found' )
38+ setLoading ( false )
39+ return
40+ }
3341
3442 const surveySessionsResp = await getSurveySessions (
35- currentSurvey . uuid ,
36- `limit=${ SurveySessionsLimit } &offset=0&sort_by=created_at&order=desc` ,
37- ''
43+ survey . uuid ,
44+ `limit=${ SurveySessionsLimit } &offset=0&sort_by=created_at&order=desc`
3845 )
46+
3947 if ( surveySessionsResp . error ) {
40- errMsg = 'Unable to fetch survey sessions'
48+ setErrMsg ( 'Unable to fetch survey sessions' )
4149 } else {
42- currentSurvey = surveySessionsResp . data . data . survey
43- currentSurvey . sessions = surveySessionsResp . data . data . sessions
44- currentSurvey . pages_count = surveySessionsResp . data . data . pages_count
50+ const updatedSurvey = surveySessionsResp . data . data . survey
51+ updatedSurvey . sessions = surveySessionsResp . data . data . sessions
52+ updatedSurvey . pages_count = surveySessionsResp . data . data . pages_count
53+ setCurrentSurvey ( updatedSurvey )
4554 }
55+
56+ setLoading ( false )
4657 }
58+
59+ fetchData ( )
60+ } , [ params . survey_uuid ] )
61+
62+ if ( loading ) {
63+ return (
64+ < AppLayout >
65+ < div > Loading...</ div >
66+ </ AppLayout >
67+ )
4768 }
4869
4970 if ( errMsg ) {
@@ -54,11 +75,9 @@ export default async function ResponsesPage({
5475 )
5576 }
5677
57- const apiURL = process . env . CONSOLE_API_ADDR || ''
58-
5978 return (
6079 < AppLayout >
61- < SurveyResponsesPage currentSurvey = { currentSurvey } apiURL = { apiURL } />
80+ < SurveyResponsesPage currentSurvey = { currentSurvey ! } />
6281 </ AppLayout >
6382 )
6483}
0 commit comments