new-project-button.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { useState } from 'react'
  2. import { Dropdown, MenuItem } from 'react-bootstrap'
  3. import { useTranslation } from 'react-i18next'
  4. import { ExposedSettings } from '../../../../../types/exposed-settings'
  5. import ControlledDropdown from '../../../shared/components/controlled-dropdown'
  6. import getMeta from '../../../utils/meta'
  7. import NewProjectButtonModal, {
  8. NewProjectButtonModalVariant,
  9. } from './new-project-button/new-project-button-modal'
  10. function NewProjectButton({ buttonText }: { buttonText?: string }) {
  11. const { t } = useTranslation()
  12. const { templateLinks } = getMeta('ol-ExposedSettings') as ExposedSettings
  13. const [modal, setModal] =
  14. useState<Nullable<NewProjectButtonModalVariant>>(null)
  15. return (
  16. <>
  17. <ControlledDropdown id="new-project-button">
  18. <Dropdown.Toggle
  19. noCaret
  20. className="new-project-button"
  21. bsStyle="primary"
  22. >
  23. {buttonText || t('new_project')}
  24. </Dropdown.Toggle>
  25. <Dropdown.Menu>
  26. <MenuItem onClick={() => setModal('blank_project')}>
  27. {t('blank_project')}
  28. </MenuItem>
  29. <MenuItem onClick={() => setModal('example_project')}>
  30. {t('example_project')}
  31. </MenuItem>
  32. <MenuItem onClick={() => setModal('upload_project')}>
  33. {t('upload_project')}
  34. </MenuItem>
  35. <MenuItem onClick={() => setModal('import_from_github')}>
  36. {t('import_from_github')}
  37. </MenuItem>
  38. <MenuItem divider />
  39. <MenuItem header>{t('templates')}</MenuItem>
  40. {templateLinks.map((templateLink, index) => (
  41. <MenuItem
  42. key={`new-project-button-template-${index}`}
  43. href={templateLink.url}
  44. >
  45. {templateLink.name === 'view_all'
  46. ? t('view_all')
  47. : templateLink.name}
  48. </MenuItem>
  49. ))}
  50. </Dropdown.Menu>
  51. </ControlledDropdown>
  52. <NewProjectButtonModal modal={modal} onHide={() => setModal(null)} />
  53. </>
  54. )
  55. }
  56. export default NewProjectButton