{"version":3,"file":"SupportCaseForm.mjs","names":["React","useState","useEffect","useCallback","FluentTextField","FluentTextFieldAutoComplete","LayoutUnit","DragDropFileUpload","Form","FormButtons","SubmitButton","Field","useUser","useTranslation","useSnackbar","Button","apiMutate","AmbientCard","LinearProgress","useHistory","ConfigService","SupportCaseForm","onSubmit","initialValues","handleCloseSupportCaseSideSheet","t","user","enqueueSnackbar","closeSnackbar","severityOptions","setSeverityOptions","environmentOptions","setEnvironmentOptions","brandOptions","setBrandOptions","uploadedFiles","setUploadedFiles","unityState","setUnityState","loadingState","setLoadingState","baseUrl","productV1ApiUrl","unityUrl","supportV1ApiUrl","unityEnv","config","UNITY_ENVIRONMENT","uploadKey","setUploadKey","restrictedFiles","setRestrictedFiles","history","getFileRestrictions","method","headers","currentTenantId","getFileRestrictionsUnity","getSeverityUnity","getEnvironmentUnity","getSeverity","getEnvironment","getTenantCaseAccount","getTenantCaseBrand","tenantV2ApiUrl","getTenantSubscribedProducts","tenantV1ApiUrl","getCasesEnv","Development","Build","Staging","Production","getCaseEnvironment","brandId","postCaseAttachment","values","data","FormData","forEach","file","append","title","description","severity","value","matchingProduct","find","product","productId","UNITY_PRODUCT_ID","postCaseAttachmentUnity","fetchData","getFileRestrictionsResponse","severityResponse","environmentResponse","fileRestrictionsData","map","item","externalUUID","toString","label","name","evergrnCaseEnvironmentValue","evergrnCaseEnvironmentLabel","brandResponse","tenantSubscribedProductsResponse","brandArray","filter","brandItem","externalUuid","subscribedArray","subscribedProduct","foundProduct","Boolean","error","console","handleUploadFile","files","identifiedRestrictedExtensions","identifiedRestrictedFileSizes","fileExtension","includes","split","pop","toLowerCase","restrictedExtensions","push","size","maxFileSize","isAcceptableExtensions","length","isAcceptableSizes","uniqueExtensions","Set","errorText","defaultValue","extensions","join","variant","anchorOrigin","vertical","horizontal","prevKey","handleSubmit","response","apiError","action","key","submitError","message","evergrnCaseId","window","dispatchEvent","CustomEvent","closeError","caseId","url","UNITY_URL","location","href","navError","onSubmitError","width"],"sources":["../../../src/UI/support/SupportCaseForm.jsx"],"sourcesContent":["import React, { useState, useEffect, useCallback } from 'react';\nimport { FluentTextField } from '../inputs/textField/FluentTextField';\nimport { FluentTextFieldAutoComplete } from '../inputs/textField/FluentTextFieldAutoComplete';\nimport { LayoutUnit } from '../../layout/LayoutUnit';\nimport { DragDropFileUpload } from '../../uploader/DragDropFileUpload';\nimport { Form, FormButtons, SubmitButton, Field } from '../../utilities/form';\nimport { useUser } from '../../utilities/auth/useUser';\nimport { useTranslation } from 'react-i18next';\nimport { useSnackbar } from 'notistack';\nimport { Button } from '@material-ui/core';\nimport { apiMutate } from '../../utilities/useAxiosMutate';\nimport { AmbientCard } from '../surfaces/cards/AmbientCard';\nimport { LinearProgress } from '../../UI/loading/LinearProgress';\nimport { useHistory } from 'react-router-dom';\nimport { ConfigService } from '../../configService';\n\nconst SupportCaseForm = ({\n  onSubmit,\n  initialValues = {},\n  handleCloseSupportCaseSideSheet\n}) => {\n  const { t } = useTranslation();\n  const user = useUser();\n  const { enqueueSnackbar, closeSnackbar } = useSnackbar();\n  const [severityOptions, setSeverityOptions] = useState([]);\n  const [environmentOptions, setEnvironmentOptions] = useState([]);\n  const [brandOptions, setBrandOptions] = useState([]);\n  const [uploadedFiles, setUploadedFiles] = useState([]);\n  const [unityState, setUnityState] = useState();\n  const [loadingState, setLoadingState] = useState(false);\n  const baseUrl = ConfigService.productV1ApiUrl; // backend base url\n  const unityUrl = ConfigService.supportV1ApiUrl; // unity support bypass\n  const unityEnv = ConfigService.config.UNITY_ENVIRONMENT; // unity environment\n  const [uploadKey, setUploadKey] = useState(0);\n  const [restrictedFiles, setRestrictedFiles] = useState({});\n  const history = useHistory();\n\n  const getFileRestrictions = useCallback(\n    async () =>\n      apiMutate(baseUrl, `udpunitysupport/supportFileUploadRestrictions`, {\n        method: 'get',\n        headers: {\n          currentTenantId: user?.currentTenantId\n        }\n      }),\n    [baseUrl, user?.currentTenantId]\n  );\n\n  const getFileRestrictionsUnity = useCallback(\n    async () =>\n      apiMutate(unityUrl, `evergrncaseattachment/get-attachment-restrictions`, {\n        method: 'get',\n        headers: {\n          currentTenantId: user?.currentTenantId\n        }\n      }),\n    [unityUrl, user?.currentTenantId]\n  );\n\n  const getSeverityUnity = useCallback(\n    async () =>\n      apiMutate(unityUrl, `caseseverity/get-case-severity`, {\n        method: 'get',\n        headers: {\n          currentTenantId: user?.currentTenantId\n        }\n      }),\n    [unityUrl, user?.currentTenantId]\n  );\n\n  const getEnvironmentUnity = useCallback(\n    async () =>\n      apiMutate(unityUrl, `evergrncaseenvironment/get-case-environments`, {\n        method: 'get',\n        headers: {\n          currentTenantId: user?.currentTenantId\n        }\n      }),\n    [unityUrl, user?.currentTenantId]\n  );\n\n  const getSeverity = useCallback(\n    async () =>\n      apiMutate(baseUrl, `udpunitysupport/severities`, {\n        method: 'get',\n        headers: {\n          currentTenantId: user?.currentTenantId\n        }\n      }),\n    [baseUrl, user?.currentTenantId]\n  );\n\n  const getEnvironment = useCallback(\n    async () =>\n      apiMutate(baseUrl, `udpunitysupport/environments`, {\n        method: 'get',\n        headers: {\n          currentTenantId: user?.currentTenantId\n        }\n      }),\n    [baseUrl, user?.currentTenantId]\n  );\n\n  // externalUuid will be needed part of the post request to submit ticket\n  const getTenantCaseAccount = useCallback(\n    async () =>\n      apiMutate(\n        baseUrl,\n        `udpunitysupport/tenantCaseAccount/` + user?.currentTenantId,\n        {\n          method: 'get',\n          headers: {\n            currentTenantId: user?.currentTenantId\n          }\n        }\n      ),\n    [baseUrl, user?.currentTenantId]\n  );\n\n  // list of products to choose from when in Support Portal, if cooresponsding externalUuid is null, default to devops support GUID\n  const getTenantCaseBrand = useCallback(\n    async () =>\n      apiMutate(ConfigService.tenantV2ApiUrl, `tenant/products`, {\n        method: 'get',\n        headers: {\n          currentTenantId: user?.currentTenantId\n        }\n      }),\n    [user?.currentTenantId]\n  );\n\n  const getTenantSubscribedProducts = useCallback(\n    async () =>\n      apiMutate(\n        ConfigService.tenantV1ApiUrl,\n        `tenantProducts?tenantId=${user?.currentTenantId}`,\n        {\n          method: 'get',\n          headers: {\n            currentTenantId: user?.currentTenantId\n          }\n        }\n      ),\n    [user?.currentTenantId]\n  );\n\n  // TODO: this data should come from Unity table -> Unity UEM -> Unity Support\n  const getCasesEnv = {\n    Development: '100000003',\n    Build: '100000003',\n    Staging: '100000001',\n    Production: '100000000'\n  };\n\n  function getCaseEnvironment() {\n    return getCasesEnv[unityEnv] || '100000003'; // default to dev\n  }\n\n  let brandId = '416b0ca8-e679-ef11-ac20-6045bdcd3d86'; // Default to devops support ID, should come from API\n\n  const postCaseAttachment = useCallback(\n    (values) => {\n      const data = new FormData();\n      uploadedFiles.forEach((file) => {\n        data.append('files', file);\n      });\n      data.append('EvergrnCaseName', values.title);\n      data.append('EvergrnDescription', values.description);\n      data.append('EvergrnCaseEnvironment', getCaseEnvironment());\n      data.append('EvergrnSeverity', values.severity.value);\n      // Find the corresponding brand ID using environment variable's product ID\n      const matchingProduct = brandOptions.find(\n        (product) => product.productId == ConfigService.config.UNITY_PRODUCT_ID\n      );\n      if (matchingProduct && matchingProduct.value) {\n        brandId = matchingProduct.value;\n      }\n      data.append('EvergrnBrandId', brandId);\n      data.append(\n        'UDPDriveUnityProductId',\n        ConfigService.config.UNITY_PRODUCT_ID\n      );\n\n      return apiMutate(\n        baseUrl,\n        `udpunitysupport/case`,\n        {\n          method: 'post',\n          headers: {\n            'Content-Type': 'multipart/form-data'\n          }\n        },\n        { data: data }\n      );\n    },\n    [baseUrl, uploadedFiles, getCaseEnvironment, brandOptions, brandId]\n  );\n\n  const postCaseAttachmentUnity = useCallback(\n    (values) => {\n      const data = new FormData();\n      uploadedFiles.forEach((file) => {\n        data.append('files', file);\n      });\n      data.append('EvergrnCaseName', values.title);\n      data.append('EvergrnDescription', values.description);\n      data.append('EvergrnCaseEnvironment', getCaseEnvironment());\n      data.append('EvergrnSeverity', values.severity.value);\n      data.append('EvergrnBrandId', values.product?.value || brandId);\n      data.append(\n        'UDPDriveUnityProductId',\n        ConfigService.config.UNITY_PRODUCT_ID\n      );\n\n      return apiMutate(\n        unityUrl,\n        `evergrncase/post-case`,\n        {\n          method: 'post',\n          headers: {\n            'Content-Type': 'multipart/form-data'\n          }\n        },\n        { data: data }\n      );\n    },\n    [unityUrl, uploadedFiles, getCaseEnvironment, brandId]\n  );\n\n  useEffect(() => {\n    const fetchData = async () => {\n      try {\n        if (ConfigService.config.UNITY_PRODUCT_ID === '1') {\n          setUnityState(true);\n        } else {\n          setUnityState(false);\n        }\n\n        let getFileRestrictionsResponse = unityState\n          ? await getFileRestrictionsUnity()\n          : await getFileRestrictions();\n\n        let severityResponse = unityState\n          ? await getSeverityUnity()\n          : await getSeverity();\n\n        let environmentResponse = unityState\n          ? await getEnvironmentUnity()\n          : await getEnvironment();\n\n        if (getFileRestrictionsResponse) {\n          const fileRestrictionsData = getFileRestrictionsResponse.data;\n          setRestrictedFiles(fileRestrictionsData);\n        }\n\n        if (severityResponse) {\n          const severityOptions = severityResponse.data.map((item) => ({\n            value: item.externalUUID.toString(),\n            label: item.name\n          }));\n          setSeverityOptions(severityOptions);\n        }\n\n        if (environmentResponse) {\n          const environmentOptions = environmentResponse.data.map((item) => ({\n            value: item.evergrnCaseEnvironmentValue.toString(),\n            label: item.evergrnCaseEnvironmentLabel\n          }));\n          setEnvironmentOptions(environmentOptions);\n        }\n\n        // fetch brand data\n        const brandResponse = await getTenantCaseBrand();\n        const tenantSubscribedProductsResponse =\n          await getTenantSubscribedProducts();\n\n        if (brandResponse && tenantSubscribedProductsResponse) {\n          const brandArray = brandResponse.data.filter(\n            (brandItem) => brandItem.externalUuid != null\n          );\n          const subscribedArray = tenantSubscribedProductsResponse.data;\n\n          const brandOptions = subscribedArray\n            .map((subscribedProduct) => {\n              const foundProduct = brandArray.find(\n                (brandItem) =>\n                  brandItem.productId === subscribedProduct.productId\n              );\n\n              if (!foundProduct) {\n                return null;\n              }\n\n              return {\n                ...subscribedProduct,\n                value: foundProduct.externalUuid?.toString(), // Cases Brand ID\n                label: foundProduct.name.toString()\n              };\n            })\n            .filter(Boolean);\n\n          setBrandOptions(brandOptions);\n        }\n      } catch (error) {\n        console.error('Error fetching data:', error);\n      }\n    };\n\n    fetchData();\n  }, [\n    unityState,\n    getSeverityUnity,\n    getEnvironmentUnity,\n    getFileRestrictionsUnity,\n    getFileRestrictions,\n    getSeverity,\n    getEnvironment,\n    getTenantCaseBrand,\n    getTenantSubscribedProducts\n  ]);\n\n  const handleUploadFile = (files) => {\n    const identifiedRestrictedExtensions = [];\n    const identifiedRestrictedFileSizes = [];\n\n    files.forEach((file) => {\n      const fileExtension = file.name.includes('.')\n        ? '.' + file.name.split('.').pop().toLowerCase()\n        : '';\n\n      if (restrictedFiles.restrictedExtensions.includes(fileExtension)) {\n        identifiedRestrictedExtensions.push(fileExtension);\n      }\n\n      if (file.size > restrictedFiles.maxFileSize) {\n        identifiedRestrictedFileSizes.push(file.name);\n      }\n    });\n\n    const isAcceptableExtensions = identifiedRestrictedExtensions.length === 0;\n    const isAcceptableSizes = identifiedRestrictedFileSizes.length === 0;\n\n    if (!(isAcceptableExtensions && isAcceptableSizes)) {\n      if (!isAcceptableExtensions) {\n        const uniqueExtensions = [...new Set(identifiedRestrictedExtensions)];\n        const errorText = t('support.case.restrictedFileTypes', {\n          defaultValue: 'Restricted file type(s). {{extensions}}',\n          extensions: uniqueExtensions.join(', ')\n        });\n        enqueueSnackbar(errorText, {\n          variant: 'error',\n          anchorOrigin: { vertical: 'top', horizontal: 'center' }\n        });\n      }\n\n      if (!isAcceptableSizes) {\n        const errorText = t('support.case.filesTooLarge', {\n          defaultValue: 'File(s) are too large (5MB limit). {{files}}',\n          files: identifiedRestrictedFileSizes.join(', ')\n        });\n        enqueueSnackbar(errorText, {\n          variant: 'error',\n          anchorOrigin: { vertical: 'top', horizontal: 'center' }\n        });\n      }\n\n      setUploadKey((prevKey) => prevKey + 1);\n      return;\n    }\n\n    setUploadedFiles(files);\n  };\n\n  const handleSubmit = async (values) => {\n    setLoadingState(true);\n\n    let response;\n    try {\n      response = unityState\n        ? await postCaseAttachmentUnity(values)\n        : await postCaseAttachment(values);\n    } catch (apiError) {\n      console.error('post Case API call failed:', apiError);\n      enqueueSnackbar(\n        t('support.case.submissionFailed', {\n          defaultValue: 'Submission failed'\n        }),\n        {\n        variant: 'error',\n        anchorOrigin: {\n          vertical: 'top',\n          horizontal: 'center'\n        },\n        action: (key) => (\n          <Button\n            color='primary'\n            size='small'\n            id='udpRecord-SupportCaseForm-close'\n            onClick={() => {\n              closeSnackbar(key);\n            }}\n          >\n            {t('support.case.close', { defaultValue: 'close' })}\n          </Button>\n        )\n      });\n      setLoadingState(false);\n      return { submitError: apiError.message };\n    }\n\n    // Check for valid response\n    if (!response?.data?.evergrnCaseId) {\n      console.error('API call succeeded but no case ID returned');\n      enqueueSnackbar(\n        t('support.case.submissionFailedNoCaseId', {\n          defaultValue: 'Submission failed - No case ID returned'\n        }),\n        {\n        variant: 'error',\n        anchorOrigin: {\n          vertical: 'top',\n          horizontal: 'center'\n        },\n        action: (key) => (\n          <Button\n            color='primary'\n            size='small'\n            id='udpRecord-SupportCaseForm-close'\n            onClick={() => {\n              closeSnackbar(key);\n            }}\n          >\n            {t('support.case.close', { defaultValue: 'close' })}\n          </Button>\n        )\n      });\n      setLoadingState(false);\n      return {\n        submitError: t('support.case.noCaseIdError', {\n          defaultValue: 'No case ID was returned from the server'\n        })\n      };\n    }\n\n    window.dispatchEvent(new CustomEvent('support-case-created'));\n\n    try {\n      handleCloseSupportCaseSideSheet();\n    } catch (closeError) {\n      console.error('Error closing sheet:', closeError);\n    }\n\n    enqueueSnackbar(\n      t('support.case.createdViewCases', {\n        defaultValue: 'Support Case Created. View your cases'\n      }),\n      {\n      variant: 'success',\n      anchorOrigin: {\n        vertical: 'top',\n        horizontal: 'center'\n      },\n      action: (key) => (\n        <Button\n          color='primary'\n          size='small'\n          id='udpRecord-SupportCaseForm-here'\n          onClick={() => {\n            try {\n              const caseId = response.data.evergrnCaseId;\n              let url;\n              if (unityState) {\n                url = `/support/cases/${caseId}`;\n                history.push(url);\n              } else {\n                url = `${ConfigService.config.UNITY_URL}/support/cases/${caseId}`;\n                window.location.href = url;\n              }\n              closeSnackbar(key);\n            } catch (navError) {\n              console.error('Navigation error:', navError);\n              closeSnackbar(key);\n            }\n          }}\n        >\n          {t('support.case.here', { defaultValue: 'here' })}\n        </Button>\n      )\n    });\n\n    try {\n      await onSubmit(values);\n    } catch (onSubmitError) {\n      console.error('Error in onSubmit:', onSubmitError);\n    }\n    setLoadingState(false);\n  };\n\n  return (\n    <>\n      {loadingState && <LinearProgress />}\n      <Form onSubmit={handleSubmit}>\n        <AmbientCard fullWidth>\n          <Field\n            component={FluentTextField}\n            name='title'\n            label={t('support.case.title', { defaultValue: 'Title' })}\n            placeholder={t('support.case.titlePlaceholder', {\n              defaultValue: 'Enter a brief title for your issue'\n            })}\n            variant='outlined'\n            fullWidth\n            autoFocus\n            required={true}\n          />\n          {unityState && (\n            <Field\n              component={FluentTextFieldAutoComplete}\n              name='product'\n              label={t('support.case.product', { defaultValue: 'Product' })}\n              variant='outlined'\n              margin='normal'\n              size='small'\n              options={brandOptions}\n              optionKey='label'\n              style={{ width: '100%' }}\n              disableClearable\n              id='udpRecord-CreateSupportCaseForm-product'\n              udprecordid='udpRecord-CreateSupportCaseForm-product'\n            />\n          )}\n          <Field\n            component={FluentTextFieldAutoComplete}\n            name='severity'\n            label={t('support.case.severity', { defaultValue: 'Severity' })}\n            variant='outlined'\n            margin='normal'\n            size='small'\n            options={severityOptions}\n            optionKey='label'\n            style={{ width: '100%' }}\n            disableClearable\n            id='udpRecord-CreateSupportCaseForm-severity'\n            udprecordid='udpRecord-CreateSupportCaseForm-severity'\n            required={true}\n          />\n        </AmbientCard>\n\n        <LayoutUnit unit='xxs' />\n\n        <AmbientCard fullWidth>\n          <Field\n            name='description'\n            component={FluentTextField}\n            multiline={true}\n            rows={10}\n            minRows={3}\n            maxRows={20}\n            required={true}\n            label={t('support.case.description', {\n              defaultValue: 'Description'\n            })}\n            placeholder={t('support.case.descriptionPlaceholder', {\n              defaultValue: 'Please describe your issue in detail'\n            })}\n          />\n        </AmbientCard>\n\n        <LayoutUnit unit='xxs' />\n\n        <AmbientCard fullWidth>\n          <DragDropFileUpload\n            key={uploadKey}\n            title={t('support.case.attachments', {\n              defaultValue: 'Attachments'\n            })}\n            multiple={true}\n            minHeight='100px'\n            maxHeight='400px'\n            acceptedFiles='.pdf,.doc,.docx,.png,.jpg,.jpeg'\n            handleUploadFile={handleUploadFile}\n          />\n        </AmbientCard>\n\n        <LayoutUnit unit='xxs' />\n\n        <FormButtons>\n          <SubmitButton\n            color='primary'\n            variant='contained'\n            disablePristine={false}\n          >\n            {t('support.case.submitTicket', {\n              defaultValue: 'Submit Ticket'\n            })}\n          </SubmitButton>\n        </FormButtons>\n      </Form>\n    </>\n  );\n};\n\nexport default SupportCaseForm;\n"],"mappings":"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"}