All files / modules/75-cf/components/CreateNewFlagRepoDialog CreateNewFlagRepoDialog.tsx

72.41% Statements 21/29
7.41% Branches 2/27
40% Functions 2/5
72.41% Lines 21/29

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85              2x 2x   2x 2x 2x 2x 2x 2x               2x                 4x   4x 4x 4x               4x                       4x                               4x 3x 1x   2x       4x     2x  
/*
 * Copyright 2021 Harness Inc. All rights reserved.
 * Use of this source code is governed by the PolyForm Shield 1.0.0 license
 * that can be found in the licenses directory at the root of this repository, also available at
 * https://polyformproject.org/wp-content/uploads/2020/06/PolyForm-Shield-1.0.0.txt.
 */
 
import React, { ReactElement, useEffect } from 'react'
import { useParams } from 'react-router-dom'
import type { ProjectPathProps, ModulePathParams } from '@common/interfaces/RouteInterfaces'
import { useStrings } from 'framework/strings'
import { GitRepoRequestRequestBody, useCreateGitRepo } from 'services/cf'
import useCreateGitSyncModal from '@gitsync/modals/useCreateGitSyncModal'
import { useToaster } from '@common/exports'
import { getErrorMessage } from '@cf/utils/CFUtils'
import { DEFAULT_FLAG_GIT_REPO_PATH } from '@cf/constants'
 
interface CreateNewFlagRepoDialogProps {
  gitRepoRefetch: () => void
  isOpen: boolean
  closeModal: () => void
}
 
const CreateNewFlagRepoDialog = ({
  gitRepoRefetch,
  isOpen,
  closeModal
}: CreateNewFlagRepoDialogProps): ReactElement => {
  const {
    projectIdentifier,
    accountId: accountIdentifier,
    orgIdentifier
  } = useParams<ProjectPathProps & ModulePathParams>()
 
  const { showError } = useToaster()
  const { getString } = useStrings()
  const { mutate: createGitRepo } = useCreateGitRepo({
    identifier: projectIdentifier,
    queryParams: {
      accountIdentifier,
      orgIdentifier
    }
  })
 
  const handleCreateGitRepo = async (values: GitRepoRequestRequestBody): Promise<void> => {
    try {
      await createGitRepo({
        ...values
      })
 
      hideGitSyncModal()
      gitRepoRefetch()
    } catch (error) {
      showError(getErrorMessage(error), 0, getString('cf.selectFlagRepo.createRepoError'))
    }
  }
  const { openGitSyncModal, hideGitSyncModal } = useCreateGitSyncModal({
    onSuccess: async data => {
      if (data?.branch && data?.identifier && data?.gitSyncFolderConfigDTOs?.[0]?.rootFolder) {
        handleCreateGitRepo({
          branch: data.branch,
          repoIdentifier: data.identifier,
          filePath: DEFAULT_FLAG_GIT_REPO_PATH,
          rootFolder: data.gitSyncFolderConfigDTOs[0].rootFolder
        })
      }
    },
    onClose: () => {
      closeModal()
    }
  })
 
  useEffect(() => {
    if (isOpen) {
      openGitSyncModal(false, false, undefined)
    } else {
      hideGitSyncModal()
    }
  }, [isOpen])
 
  return <></>
}
 
export default CreateNewFlagRepoDialog