Ringtone app
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

71 rivejä
1.4 KiB

  1. import {FC, FormEventHandler} from 'react'
  2. import {models} from '@tonality/library-common'
  3. import styled from 'styled-components'
  4. import TextInput from '../../../molecules/forms/TextInput'
  5. import TextArea from '../../../molecules/forms/TextArea'
  6. import ActionButton from '../../../molecules/forms/ActionButton'
  7. const Form = styled('form')({
  8. display: 'grid',
  9. gap: '1rem',
  10. })
  11. type Props = {
  12. onSubmit?: FormEventHandler,
  13. action?: string,
  14. labels: Record<string, string>,
  15. defaultValues?: Partial<models.Ringtone>,
  16. }
  17. const CreateRingtoneForm: FC<Props> = ({
  18. onSubmit,
  19. action,
  20. labels,
  21. defaultValues = {},
  22. }) => {
  23. return (
  24. <Form
  25. onSubmit={onSubmit}
  26. method="post"
  27. action={action}
  28. aria-label={labels['form']}
  29. >
  30. {
  31. typeof (defaultValues.id as unknown) === 'string'
  32. && (
  33. <input
  34. type="hidden"
  35. name="id"
  36. defaultValue={defaultValues.id}
  37. />
  38. )
  39. }
  40. <input
  41. type="hidden"
  42. name="composerId"
  43. defaultValue={defaultValues.composerId}
  44. />
  45. <TextInput
  46. label={labels['name'] || 'Name'}
  47. name="name"
  48. block
  49. defaultValue={defaultValues.name}
  50. />
  51. <TextArea
  52. label={labels['data'] || 'Data'}
  53. name="data"
  54. block
  55. defaultValue={defaultValues.data}
  56. />
  57. <ActionButton
  58. type="submit"
  59. block
  60. >
  61. {labels['cta'] || 'Post'}
  62. </ActionButton>
  63. </Form>
  64. )
  65. }
  66. export default CreateRingtoneForm