clone-project-modal.stories.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import React from 'react'
  2. import fetchMock from 'fetch-mock'
  3. import PropTypes from 'prop-types'
  4. import CloneProjectModal from '../js/features/clone-project-modal/components/clone-project-modal'
  5. export const Interactive = ({
  6. mockResponse = 200,
  7. mockResponseDelay = 500,
  8. ...args
  9. }) => {
  10. fetchMock.restore().post(
  11. 'express:/project/:projectId/clone',
  12. () => {
  13. switch (mockResponse) {
  14. case 400:
  15. return { status: 400, body: 'The project name is not valid' }
  16. default:
  17. return mockResponse
  18. }
  19. },
  20. { delay: mockResponseDelay }
  21. )
  22. return <CloneProjectModal {...args} />
  23. }
  24. Interactive.propTypes = {
  25. mockResponse: PropTypes.number,
  26. mockResponseDelay: PropTypes.number
  27. }
  28. export default {
  29. title: 'Modals / Clone Project',
  30. component: CloneProjectModal,
  31. args: {
  32. projectId: 'original-project',
  33. projectName: 'Project Title',
  34. show: true
  35. },
  36. argTypes: {
  37. handleHide: { action: 'close modal' },
  38. openProject: { action: 'open project' },
  39. mockResponse: {
  40. name: 'Mock Response Status',
  41. type: { name: 'number', required: false },
  42. description: 'The status code that should be returned by the mock server',
  43. defaultValue: 200,
  44. control: {
  45. type: 'radio',
  46. options: [200, 500, 400]
  47. }
  48. },
  49. mockResponseDelay: {
  50. name: 'Mock Response Delay',
  51. type: { name: 'number', required: false },
  52. description: 'The delay before returning a response from the mock server',
  53. defaultValue: 500,
  54. control: {
  55. type: 'range',
  56. min: 0,
  57. max: 2500,
  58. step: 250
  59. }
  60. }
  61. }
  62. }