Gets the name of a number, even if it's stupidly big. Supersedes TheoryOfNekomata/number-name.
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 

96 wiersze
2.3 KiB

  1. import * as React from 'react'
  2. import getFormValues from '@theoryofnekomata/formxtra/dist/index';
  3. import getNumberName from '../../core/src';
  4. import enGB from '../../core/src/locales/variants/en-GB';
  5. import enPH from '../../core/src/locales/variants/en-PH';
  6. import deDE from '../../core/src/locales/variants/de-DE';
  7. const App = () => {
  8. const [numberName, setNumberName] = React.useState('')
  9. const computeNumberName = (form: HTMLFormElement) => {
  10. const { number: x, locale: localeStr } = getFormValues(form) as { number: string, locale: string }
  11. const { [localeStr]: locale = enPH } = {
  12. 'en-PH': enPH,
  13. 'en-GB': enGB,
  14. 'de-DE': deDE,
  15. } as Record<string, (...args: unknown[]) => string>
  16. let numberName: string
  17. try {
  18. numberName = getNumberName(
  19. x
  20. .replaceAll(' ', '')
  21. .replaceAll('_', '')
  22. .replaceAll(',', ''),
  23. {
  24. locale,
  25. }
  26. )
  27. } catch {
  28. numberName = ''
  29. }
  30. setNumberName(numberName)
  31. }
  32. const handleSubmit: React.FormEventHandler = e => {
  33. computeNumberName(e.target as HTMLFormElement)
  34. }
  35. const handleChange: React.ChangeEventHandler<HTMLTextAreaElement | HTMLSelectElement> = e => {
  36. computeNumberName(e.target.form as HTMLFormElement)
  37. }
  38. return (
  39. <form
  40. onSubmit={handleSubmit}
  41. >
  42. <select
  43. name="locale"
  44. className="locale"
  45. aria-label="Locale"
  46. onChange={handleChange}
  47. >
  48. <optgroup
  49. label="English (English)"
  50. >
  51. <option
  52. value="en-PH"
  53. >
  54. Philippines
  55. </option>
  56. <option
  57. value="en-GB"
  58. >
  59. United Kingdom
  60. </option>
  61. </optgroup>
  62. <optgroup
  63. label="Deutsch (German)"
  64. >
  65. <option
  66. value="de-DE"
  67. >
  68. Germany
  69. </option>
  70. </optgroup>
  71. </select>
  72. <textarea
  73. name="number"
  74. onChange={handleChange}
  75. placeholder="Enter a number, e.g. 1000, 1e+45"
  76. className="input"
  77. aria-label="Input"
  78. />
  79. <textarea
  80. placeholder="Its name goes here"
  81. readOnly
  82. value={numberName}
  83. className="output"
  84. aria-label="Output"
  85. />
  86. </form>
  87. )
  88. }
  89. export default App