| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- import React, { useMemo, useState } from 'react'
- import {
- Modal,
- Alert,
- Button,
- FormGroup,
- ControlLabel,
- FormControl
- } from 'react-bootstrap'
- import PropTypes from 'prop-types'
- import { useTranslation } from 'react-i18next'
- function CloneProjectModalContent({
- cloneProject,
- projectName = '',
- error,
- cancel,
- inFlight
- }) {
- const { t } = useTranslation()
- const [clonedProjectName, setClonedProjectName] = useState(
- `${projectName} (Copy)`
- )
- const valid = useMemo(() => !!clonedProjectName, [clonedProjectName])
- function handleSubmit(event) {
- event.preventDefault()
- if (valid) {
- cloneProject(clonedProjectName)
- }
- }
- return (
- <>
- <Modal.Header closeButton>
- <Modal.Title>{t('copy_project')}</Modal.Title>
- </Modal.Header>
- <Modal.Body>
- <form id="clone-project-form" onSubmit={handleSubmit}>
- <FormGroup>
- <ControlLabel htmlFor="cloned-project-name">
- {t('new_name')}
- </ControlLabel>
- <FormControl
- id="cloned-project-name"
- type="text"
- placeholder="New Project Name"
- required
- value={clonedProjectName}
- onChange={event => setClonedProjectName(event.target.value)}
- />
- </FormGroup>
- </form>
- {error && (
- <Alert bsStyle="danger">
- {error.message || t('generic_something_went_wrong')}
- </Alert>
- )}
- </Modal.Body>
- <Modal.Footer>
- <Button type="button" disabled={inFlight} onClick={cancel}>
- {t('cancel')}
- </Button>
- <Button
- form="clone-project-form"
- type="submit"
- bsStyle="primary"
- disabled={inFlight || !valid}
- >
- {inFlight ? <span>{t('copying')}…</span> : <span>{t('copy')}</span>}
- </Button>
- </Modal.Footer>
- </>
- )
- }
- CloneProjectModalContent.propTypes = {
- cloneProject: PropTypes.func.isRequired,
- error: PropTypes.oneOfType([
- PropTypes.bool,
- PropTypes.shape({
- message: PropTypes.string
- })
- ]),
- cancel: PropTypes.func.isRequired,
- inFlight: PropTypes.bool.isRequired,
- projectName: PropTypes.string
- }
- export default CloneProjectModalContent
|