InvitedForm.tsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import React from 'react';
  2. import { useTranslation } from 'next-i18next';
  3. import { useCsrfToken, useCurrentUser } from '../stores/context';
  4. export type InvitedFormProps = {
  5. invitedFormUsername: string,
  6. invitedFormName: string,
  7. }
  8. export const InvitedForm = (props: InvitedFormProps): JSX.Element => {
  9. const { t } = useTranslation();
  10. const { data: csrfToken } = useCsrfToken();
  11. const { data: user } = useCurrentUser();
  12. const { invitedFormUsername, invitedFormName } = props;
  13. if (user == null) {
  14. return <></>;
  15. }
  16. return (
  17. <div className="noLogin-dialog p-3 mx-auto" id="noLogin-dialog">
  18. <p className="alert alert-success">
  19. <strong>{ t('invited.discription_heading') }</strong><br></br>
  20. <small>{ t('invited.discription') }</small>
  21. </p>
  22. <form role="form" action="/invited/activateInvited" method="post" id="invited-form">
  23. {/* Email Form */}
  24. <div className="input-group">
  25. <div className="input-group-prepend">
  26. <span className="input-group-text">
  27. <i className="icon-envelope"></i>
  28. </span>
  29. </div>
  30. <input
  31. type="text"
  32. className="form-control"
  33. disabled
  34. placeholder={t('Email')}
  35. name="invitedForm[email]"
  36. defaultValue={user.email}
  37. required
  38. />
  39. </div>
  40. {/* UserID Form */}
  41. <div className="input-group" id="input-group-username">
  42. <div className="input-group-prepend">
  43. <span className="input-group-text">
  44. <i className="icon-user"></i>
  45. </span>
  46. </div>
  47. <input
  48. type="text"
  49. className="form-control"
  50. placeholder={t('User ID')}
  51. name="invitedForm[username]"
  52. value={invitedFormUsername}
  53. required
  54. />
  55. </div>
  56. {/* Name Form */}
  57. <div className="input-group">
  58. <div className="input-group-prepend">
  59. <span className="input-group-text">
  60. <i className="icon-tag"></i>
  61. </span>
  62. </div>
  63. <input
  64. type="text"
  65. className="form-control"
  66. placeholder={t('Name')}
  67. name="invitedForm[name]"
  68. value={invitedFormName}
  69. required
  70. />
  71. </div>
  72. {/* Password Form */}
  73. <div className="input-group">
  74. <div className="input-group-prepend">
  75. <span className="input-group-text">
  76. <i className="icon-lock"></i>
  77. </span>
  78. </div>
  79. <input
  80. type="password"
  81. className="form-control"
  82. placeholder={t('Password')}
  83. name="invitedForm[password]"
  84. required
  85. />
  86. </div>
  87. {/* Create Button */}
  88. <div className="input-group justify-content-center d-flex mt-5">
  89. <input type="hidden" name="_csrf" value={csrfToken} />
  90. <button type="submit" className="btn btn-fill" id="register">
  91. <div className="eff"></div>
  92. <span className="btn-label"><i className="icon-user-follow"></i></span>
  93. <span className="btn-label-text">{t('Create')}</span>
  94. </button>
  95. </div>
  96. </form>
  97. <div className="input-group mt-5 d-flex justify-content-center">
  98. <a href="https://growi.org" className="link-growi-org">
  99. <span className="growi">GROWI</span>.<span className="org">ORG</span>
  100. </a>
  101. </div>
  102. </div>
  103. );
  104. };