{"version":3,"file":"UdpQuestionFormOverviewPage.mjs","names":["React","useCallback","useEffect","useMemo","useRef","useState","useTranslation","useHistory","useLocation","useSnackbar","UdpBadge","UdpCard","UdpCounterBadge","UdpTablist","UdpPrimaryActionHeader","UdpTabPanel","ClientSideUdpGrid","ConfigService","apiMutate","useTenant","SubmissionAttachmentsDrawer","downloadSubmissionReport","OverviewTab","QuestionsTab","SUBMISSION_STATUS","IN_PROGRESS","SUBMITTED","CREATED","pageStyle","padding","formatDate","value","Date","toLocaleString","TAB_IDS","overview","submissions","questions","versions","VALID_TAB_IDS","Set","Object","values","parseDescribeLite","raw","sectionsRaw","Array","isArray","udpFormUdpFormSection","questionsRaw","formQuestions","sectionsSorted","sort","a","b","order","qBySectionId","Map","q","formSectionId","list","get","push","set","questionOrder","name","version","sections","map","s","id","title","UdpQuestionFormOverviewPage","formId","onBack","t","history","location","tenant","tenantId","activeTenant","enqueueSnackbar","reportDownloadInProgressRef","reportDownloadInProgress","setReportDownloadInProgress","setVersions","setSubmissions","schema","setSchema","versionsLoading","setVersionsLoading","submissionsLoading","setSubmissionsLoading","schemaLoading","setSchemaLoading","attachmentsDrawerOpen","setAttachmentsDrawerOpen","attachmentsSubmissionId","setAttachmentsSubmissionId","activeTabId","URLSearchParams","search","has","fetchVersions","response","productV1ApiUrl","method","data","eagerLoad","getAll","filterElements","searchField","searchOperator","searchValue","orderElements","sortColumn","sortDirection","pageList","err","console","error","fetchSchema","fetchSubmissions","latest","latestVersion","formName","headerSecondaryActions","actions","label","defaultValue","iconName","iconOnly","onClick","unshift","submissionStatusLabels","submissionStatusMappingConfig","submissionsColumnDefs","headerName","field","sortable","flex","minWidth","width","cellRenderer","cellRendererParams","statusMappingConfig","getStatusValue","params","formSubmission_Status","valueFormatter","p","actionList","handleOnClick","_e","row","formSubmission_Id","rowFormId","formSubmission_FormId","checkDisabled","current","variant","anchorOrigin","vertical","horizontal","submissionsGridFunctions","submissionsGridOptions","pagination","defaultColDef","filter","resizable","versionsColumnDefs","tabList","handleTabChange","e","nextId","detail","delete","qs","toString","replace","pathname","length","tabId"],"sources":["../../../../src/udp/pages/UdpQuestionFormOverviewPage/UdpQuestionFormOverviewPage.jsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport { useSnackbar } from 'notistack';\nimport {\n  UdpBadge,\n  UdpCard,\n  UdpCounterBadge,\n  UdpTablist,\n  UdpPrimaryActionHeader,\n} from '../../../UI/fluent-web-components';\nimport { UdpTabPanel } from '../../../UI/navigation/tabs/UdpTabPanel';\nimport { ClientSideUdpGrid } from '../../../UI/templates/newGrid';\nimport { ConfigService } from '../../../configService';\nimport { apiMutate } from '../../../utilities/useAxiosMutate';\nimport { useTenant } from '../../../utilities/tenant/useTenant';\nimport { SubmissionAttachmentsDrawer } from './SubmissionAttachmentsDrawer';\nimport { downloadSubmissionReport } from './submissionReportDownload';\nimport { OverviewTab } from './OverviewTab';\nimport { QuestionsTab } from './QuestionsTab';\n\nconst SUBMISSION_STATUS = { IN_PROGRESS: 1, SUBMITTED: 2, CREATED: 3 };\n\nconst pageStyle = { padding: '16px 24px 32px' };\n\nconst formatDate = (value) => (value ? new Date(value).toLocaleString() : '');\n\nconst TAB_IDS = {\n  overview: 'overview',\n  submissions: 'submissions',\n  questions: 'questions',\n  versions: 'versions',\n};\n\nconst VALID_TAB_IDS = new Set(Object.values(TAB_IDS));\n\n// Parse the raw /UdpForm/:id/describe response into a thin {name, version,\n// sections: [{ id, name, title, order, questions: [...] }]} shape. The\n// OverviewTab needs sections + questions for the per-question completion\n// preview; the renderer's parseForm is heavier than necessary here.\nconst parseDescribeLite = (raw) => {\n  if (!raw) return null;\n  const sectionsRaw = Array.isArray(raw.udpFormUdpFormSection) ? raw.udpFormUdpFormSection : [];\n  const questionsRaw = Array.isArray(raw.formQuestions) ? raw.formQuestions : [];\n  const sectionsSorted = [...sectionsRaw].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n  const qBySectionId = new Map();\n  for (const q of questionsRaw) {\n    if (!q.formSectionId) continue;\n    const list = qBySectionId.get(q.formSectionId) ?? [];\n    list.push(q);\n    qBySectionId.set(q.formSectionId, list);\n  }\n  for (const list of qBySectionId.values()) {\n    list.sort((a, b) => (a.questionOrder ?? 0) - (b.questionOrder ?? 0));\n  }\n  return {\n    name: raw.name,\n    version: raw.version,\n    sections: sectionsSorted.map((s) => ({\n      id: s.id,\n      name: s.name,\n      title: s.title,\n      order: s.order,\n      questions: qBySectionId.get(s.id) ?? [],\n    })),\n  };\n};\n\nconst UdpQuestionFormOverviewPage = ({ formId, onBack }) => {\n  const { t } = useTranslation();\n  const history = useHistory();\n  const location = useLocation();\n  const tenant = useTenant();\n  const tenantId = tenant?.activeTenant?.tenantId;\n  const { enqueueSnackbar } = useSnackbar();\n\n  // Ref lock guards against rapid double-clicks before React re-renders; the\n  // state copy drives the action's disabled flag.\n  const reportDownloadInProgressRef = useRef(false);\n  const [reportDownloadInProgress, setReportDownloadInProgress] = useState(false);\n\n  const [versions, setVersions] = useState([]);\n  const [submissions, setSubmissions] = useState([]);\n  const [schema, setSchema] = useState(null);\n  const [versionsLoading, setVersionsLoading] = useState(false);\n  const [submissionsLoading, setSubmissionsLoading] = useState(false);\n  const [schemaLoading, setSchemaLoading] = useState(false);\n  const [attachmentsDrawerOpen, setAttachmentsDrawerOpen] = useState(false);\n  const [attachmentsSubmissionId, setAttachmentsSubmissionId] = useState(null);\n\n  // Tab state lives in the URL (`?udpf_tab=...`, alongside the manager's\n  // `?udpf_formid=`) so deep links land on the right tab and back/forward\n  // reflects tab changes.\n  const activeTabId = useMemo(() => {\n    const t = new URLSearchParams(location.search).get('udpf_tab');\n    return t && VALID_TAB_IDS.has(t) ? t : TAB_IDS.overview;\n  }, [location.search]);\n\n  const fetchVersions = useCallback(async () => {\n    if (!formId || !tenantId) return;\n    setVersionsLoading(true);\n    try {\n      const response = await apiMutate(\n        ConfigService.productV1ApiUrl,\n        'UdpForm/search',\n        {\n          method: 'POST',\n          data: {\n            eagerLoad: false,\n            getAll: true,\n            filterElements: [\n              { searchField: 'tenantId', searchOperator: '=', searchValue: tenantId },\n              { searchField: 'id', searchOperator: '=', searchValue: formId },\n            ],\n            orderElements: [{ sortColumn: 'Version', sortDirection: 'DESC' }],\n          },\n        }\n      );\n      setVersions(response?.data?.pageList ?? []);\n    } catch (err) {\n      console.error('Failed to load form versions', err);\n      setVersions([]);\n    } finally {\n      setVersionsLoading(false);\n    }\n  }, [formId, tenantId]);\n\n  const fetchSchema = useCallback(async () => {\n    if (!formId) return;\n    setSchemaLoading(true);\n    try {\n      // No `formVersion` → backend returns the latest. Same convention as\n      // the builder and the renderer.\n      const response = await apiMutate(\n        ConfigService.productV1ApiUrl,\n        `UdpForm/${formId}/describe`,\n        { method: 'GET' },\n      );\n      setSchema(parseDescribeLite(response?.data ?? null));\n    } catch (err) {\n      console.error('Failed to load form schema', err);\n      setSchema(null);\n    } finally {\n      setSchemaLoading(false);\n    }\n  }, [formId]);\n\n  const fetchSubmissions = useCallback(async () => {\n    if (!formId || !tenantId) return;\n    setSubmissionsLoading(true);\n    try {\n      const response = await apiMutate(\n        ConfigService.productV1ApiUrl,\n        'UdpFormWithSubmissionsView/search',\n        {\n          method: 'POST',\n          data: {\n            eagerLoad: false,\n            getAll: true,\n            filterElements: [\n              { searchField: 'formSubmission_formId', searchOperator: '=', searchValue: formId },\n              { searchField: 'form_tenantId', searchOperator: '=', searchValue: tenantId },\n            ],\n            orderElements: [\n              { sortColumn: 'formSubmission_LastModifiedOn', sortDirection: 'DESC' },\n            ],\n          },\n        }\n      );\n      setSubmissions(response?.data?.pageList ?? []);\n    } catch (err) {\n      console.error('Failed to load form submissions', err);\n      setSubmissions([]);\n    } finally {\n      setSubmissionsLoading(false);\n    }\n  }, [formId, tenantId]);\n\n  useEffect(() => {\n    void fetchVersions();\n    void fetchSubmissions();\n    void fetchSchema();\n  }, [fetchVersions, fetchSubmissions, fetchSchema]);\n\n  const latest = versions[0];\n  const latestVersion = latest?.version;\n  const formName = latest?.name;\n\n  const headerSecondaryActions = useMemo(() => {\n    const actions = [\n      {\n        label: t('formOverview.header.openBuilder', { defaultValue: 'Open builder' }),\n        iconName: 'edit',\n        iconOnly: true,\n        // The top bar always opens the latest version. \"No `?v=` param\" is\n        // the canonical \"I'm on latest\" shape, so don't pin the version.\n        onClick: () => history.push(`/forms/${formId}/builder`),\n      },\n      {\n        label: t('formOverview.header.openPrivateForm', { defaultValue: 'Open private form' }),\n        iconName: 'eye',\n        iconOnly: true,\n        onClick: () => history.push(`/forms/${formId}`),\n      },\n    ];\n    // Embedded in the Form Templates manager: a way back to the list.\n    // Rendered as a labelled button — there's no back-arrow in the icon registry.\n    if (onBack) {\n      actions.unshift({\n        label: t('formOverview.header.backToFormTemplates', {\n          defaultValue: 'Back to Form Templates'\n        }),\n        onClick: onBack\n      });\n    }\n    return actions;\n  }, [history, formId, onBack, t]);\n\n  const submissionStatusLabels = useMemo(\n    () => ({\n      [SUBMISSION_STATUS.SUBMITTED]: t('formOverview.status.submitted', {\n        defaultValue: 'Submitted'\n      }),\n      [SUBMISSION_STATUS.IN_PROGRESS]: t('formOverview.status.inProgress', {\n        defaultValue: 'InProgress'\n      }),\n      [SUBMISSION_STATUS.CREATED]: t('formOverview.status.created', {\n        defaultValue: 'Created'\n      }),\n    }),\n    [t]\n  );\n\n  const submissionStatusMappingConfig = useMemo(\n    () => ({\n      [submissionStatusLabels[SUBMISSION_STATUS.SUBMITTED]]: 'success',\n      [submissionStatusLabels[SUBMISSION_STATUS.IN_PROGRESS]]: 'warning',\n      [submissionStatusLabels[SUBMISSION_STATUS.CREATED]]: 'info',\n    }),\n    [submissionStatusLabels]\n  );\n\n  const submissionsColumnDefs = useMemo(\n    () => [\n      {\n        headerName: t('formOverview.grid.columns.name', { defaultValue: 'Name' }),\n        field: 'form_Name',\n        sortable: true,\n        flex: 1,\n        minWidth: 160,\n      },\n      {\n        headerName: t('formOverview.grid.columns.version', { defaultValue: 'Version' }),\n        field: 'formSubmission_FormVersion',\n        sortable: true,\n        width: 110,\n      },\n      {\n        headerName: t('formOverview.grid.columns.submittedBy', { defaultValue: 'Submitted By' }),\n        field: 'formSubmission_UserDisplayName',\n        sortable: true,\n        flex: 1,\n        minWidth: 160,\n      },\n      {\n        headerName: t('formOverview.grid.columns.status', { defaultValue: 'Status' }),\n        field: 'formSubmission_Status',\n        sortable: true,\n        cellRenderer: 'statusRenderer',\n        cellRendererParams: {\n          statusMappingConfig: submissionStatusMappingConfig,\n          getStatusValue: (params) =>\n            submissionStatusLabels[params?.data?.formSubmission_Status] ?? '',\n        },\n      },\n      {\n        headerName: t('formOverview.grid.columns.lastModified', { defaultValue: 'Last Modified' }),\n        field: 'formSubmission_LastModifiedOn',\n        sortable: true,\n        valueFormatter: (p) => formatDate(p.value),\n      },\n      {\n        field: 'actions',\n        cellRenderer: 'actionsRenderer',\n        cellRendererParams: {\n          actionList: [\n            {\n              id: 1,\n              iconName: 'eye',\n              title: t('formOverview.actions.openSubmission', { defaultValue: 'Open submission' }),\n              handleOnClick: (_e, params) => {\n                const row = params?.data;\n                const id = row?.formSubmission_Id;\n                if (!id) return;\n                const rowFormId = row?.formSubmission_FormId ?? formId;\n                history.push(`/forms/${rowFormId}/submissions/${id}`);\n              },\n            },\n            {\n              id: 2,\n              iconName: 'attach',\n              title: t('formOverview.actions.viewAttachments', { defaultValue: 'View attachments' }),\n              handleOnClick: (_e, params) => {\n                const id = params?.data?.formSubmission_Id;\n                if (!id) return;\n                setAttachmentsSubmissionId(id);\n                setAttachmentsDrawerOpen(true);\n              },\n            },\n            {\n              id: 3,\n              iconName: 'documentPdf',\n              title: t('formOverview.actions.downloadReport', { defaultValue: 'Download report' }),\n              checkDisabled: () => reportDownloadInProgress,\n              handleOnClick: async (_e, params) => {\n                const row = params?.data;\n                if (!row?.formSubmission_Id) return;\n                if (reportDownloadInProgressRef.current) return;\n                reportDownloadInProgressRef.current = true;\n                setReportDownloadInProgress(true);\n                try {\n                  await downloadSubmissionReport(row);\n                } catch (error) {\n                  console.error('Error downloading report:', error);\n                  enqueueSnackbar(t('formOverview.errors.downloadReport', { defaultValue: 'Error downloading report' }), {\n                    variant: 'error',\n                    anchorOrigin: { vertical: 'top', horizontal: 'center' },\n                  });\n                } finally {\n                  reportDownloadInProgressRef.current = false;\n                  setReportDownloadInProgress(false);\n                }\n              },\n            },\n          ],\n        },\n      },\n    ],\n    [submissionStatusMappingConfig, submissionStatusLabels, history, formId, reportDownloadInProgress, enqueueSnackbar, t]\n  );\n\n  const submissionsGridFunctions = useMemo(\n    () => [{ name: 'quickFilter' }],\n    []\n  );\n\n  const submissionsGridOptions = useMemo(\n    () => ({\n      pagination: true,\n      defaultColDef: { sortable: true, filter: true, resizable: true },\n    }),\n    []\n  );\n\n  const versionsColumnDefs = useMemo(\n    () => [\n      {\n        headerName: t('formOverview.grid.columns.version', { defaultValue: 'Version' }),\n        field: 'version',\n        sortable: true,\n        sort: 'desc',\n        width: 110,\n      },\n      {\n        headerName: t('formOverview.grid.columns.name', { defaultValue: 'Name' }),\n        field: 'name',\n        sortable: true,\n        flex: 1,\n        minWidth: 200,\n      },\n      {\n        headerName: t('formOverview.grid.columns.created', { defaultValue: 'Created' }),\n        field: 'initialCreatedOn',\n        sortable: true,\n        valueFormatter: (p) => formatDate(p.value),\n        minWidth: 180,\n      },\n      {\n        headerName: t('formOverview.grid.columns.lastModified', { defaultValue: 'Last Modified' }),\n        field: 'lastModifiedOn',\n        sortable: true,\n        valueFormatter: (p) => formatDate(p.value),\n        minWidth: 180,\n      },\n      {\n        field: 'actions',\n        cellRenderer: 'actionsRenderer',\n        cellRendererParams: {\n          actionList: [\n            {\n              id: 1,\n              iconName: 'edit',\n              title: t('formOverview.actions.openInBuilder', { defaultValue: 'Open in builder' }),\n              handleOnClick: (_e, params) => {\n                const version = params?.data?.version;\n                if (version == null) return;\n                history.push(`/forms/${formId}/builder?v=${version}`);\n              },\n            },\n          ],\n        },\n      },\n    ],\n    [history, formId, t]\n  );\n\n  // Counts render as UdpCounterBadge in each tab's `-end` slot (see below)\n  // rather than inline in the label, so the tab list itself is static.\n  const tabList = useMemo(\n    () => [\n      { id: TAB_IDS.overview, label: t('formOverview.tabs.overview', { defaultValue: 'Overview' }) },\n      { id: TAB_IDS.submissions, label: t('formOverview.tabs.submissions', { defaultValue: 'Submissions' }) },\n      { id: TAB_IDS.questions, label: t('formOverview.tabs.questions', { defaultValue: 'Questions' }) },\n      { id: TAB_IDS.versions, label: t('formOverview.tabs.versions', { defaultValue: 'Versions' }) },\n    ],\n    [t]\n  );\n\n  const handleTabChange = useCallback(\n    (e) => {\n      const nextId = e?.detail ?? e;\n      if (!VALID_TAB_IDS.has(nextId)) return;\n      const search = new URLSearchParams(location.search);\n      if (nextId === TAB_IDS.overview) search.delete('udpf_tab');\n      else search.set('udpf_tab', nextId);\n      const qs = search.toString();\n      history.replace(`${location.pathname}${qs ? `?${qs}` : ''}`);\n    },\n    [history, location.pathname, location.search]\n  );\n\n  return (\n    <>\n      <UdpPrimaryActionHeader\n        title={formName ?? t('formOverview.title', { defaultValue: 'Form Overview' })}\n        secondaryActions={headerSecondaryActions}\n      >\n        {latestVersion != null && (\n          <UdpBadge slot='inline' appearance='filled' color='brand' size='medium'>\n            {t('formOverview.header.latestBadge', {\n              defaultValue: 'latest v{{version}}',\n              version: latestVersion\n            })}\n          </UdpBadge>\n        )}\n        <div slot='toolbar'>\n          <UdpTablist\n            tabList={tabList}\n            activeId={activeTabId}\n            onTabChange={handleTabChange}\n          >\n            {/* Counts live in each tab's `-end` slot. Always rendered so the\n                slot exists on first paint; showZero defaults false, so they\n                stay hidden until a count arrives. */}\n            <UdpCounterBadge\n              slot='submissions-end'\n              size='small'\n              color='informative'\n              count={submissions.length}\n            />\n            <UdpCounterBadge\n              slot='versions-end'\n              size='small'\n              color='informative'\n              count={versions.length}\n            />\n          </UdpTablist>\n        </div>\n      </UdpPrimaryActionHeader>\n\n      <div style={pageStyle}>\n        <UdpTabPanel value={activeTabId} id={TAB_IDS.overview}>\n          <OverviewTab\n            submissions={submissions}\n            versions={versions}\n            submissionsLoading={submissionsLoading}\n            onOpenSubmission={(row) => {\n              const id = row?.formSubmission_Id;\n              if (!id) return;\n              const rowFormId = row?.formSubmission_FormId ?? formId;\n              history.push(`/forms/${rowFormId}/submissions/${id}`);\n            }}\n            onTabRequest={(tabId) => handleTabChange(tabId)}\n          />\n        </UdpTabPanel>\n\n        <UdpTabPanel value={activeTabId} id={TAB_IDS.submissions}>\n          <UdpCard bodyPadding={false}>\n            <ClientSideUdpGrid\n              rowData={submissions}\n              loading={submissionsLoading}\n              columnDefs={submissionsColumnDefs}\n              gridFunctions={submissionsGridFunctions}\n              gridOptions={submissionsGridOptions}\n            />\n          </UdpCard>\n        </UdpTabPanel>\n\n        <UdpTabPanel value={activeTabId} id={TAB_IDS.questions}>\n          <QuestionsTab\n            submissions={submissions}\n            schema={schema}\n            versions={versions}\n            submissionsLoading={submissionsLoading}\n            schemaLoading={schemaLoading}\n          />\n        </UdpTabPanel>\n\n        <UdpTabPanel value={activeTabId} id={TAB_IDS.versions}>\n          <ClientSideUdpGrid\n            rowData={versions}\n            loading={versionsLoading}\n            columnDefs={versionsColumnDefs}\n            gridFunctions={submissionsGridFunctions}\n            gridOptions={submissionsGridOptions}\n          />\n        </UdpTabPanel>\n      </div>\n      <SubmissionAttachmentsDrawer\n        open={attachmentsDrawerOpen}\n        submissionId={attachmentsSubmissionId}\n        onClose={() => setAttachmentsDrawerOpen(false)}\n      />\n    </>\n  );\n};\n\nexport default UdpQuestionFormOverviewPage;\n"],"mappings":"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"}