ProfileImageForm.jsx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import AppContainer from '../services/AppContainer';
  5. import { createSubscribedElement } from './UnstatedUtils';
  6. class ProfileImageForm extends React.Component {
  7. render() {
  8. const t = this.props.t;
  9. return (
  10. <div>
  11. <div className="form-group col-md-2 col-sm-offset-1 col-sm-4">
  12. <h4>
  13. <div className="radio radio-primary">
  14. <input type="radio" id="radioGravatar" form="formImageType" name="imagetypeForm[isGravatarEnabled]" value="true" />
  15. <label htmlFor="radioGravatar">
  16. <img src="https://gravatar.com/avatar/00000000000000000000000000000000?s=24" /> Gravatar
  17. </label>
  18. <a href="https://gravatar.com/">
  19. <small><i className="icon-arrow-right-circle" aria-hidden="true"></i></small>
  20. </a>
  21. </div>
  22. </h4>
  23. <img src="{{ user|gravatar }}" width="64" />
  24. </div>
  25. <div className="form-group col-md-4 col-sm-7">
  26. <h4>
  27. <div className="radio radio-primary">
  28. <input type="radio" id="radioUploadPicture" form="formImageType" name="imagetypeForm[isGravatarEnabled]" value="false" />
  29. <label htmlFor="radioUploadPicture">
  30. { t('Upload Image') }
  31. </label>
  32. </div>
  33. </h4>
  34. <div className="form-group">
  35. <div id="pictureUploadFormMessage"></div>
  36. <label htmlFor="" className="col-sm-4 control-label">
  37. { t('Current Image') }
  38. </label>
  39. <div className="col-sm-8">
  40. <p>
  41. <img src="{{ user|uploadedpicture }}" className="picture picture-lg img-circle" id="settingUserPicture" /><br />
  42. </p>
  43. <p>
  44. <form
  45. id="remove-attachment"
  46. action="/_api/attachments.removeProfileImage"
  47. method="post"
  48. className="form-horizontal"
  49. >
  50. <input type="hidden" name="_csrf" value="{{ csrf() }}" />
  51. <button type="submit" className="btn btn-danger">{ t('Delete Image') }</button>
  52. </form>
  53. </p>
  54. </div>
  55. </div>
  56. <div className="form-group">
  57. <label htmlFor="" className="col-sm-4 control-label">
  58. { t('Upload new image') }
  59. </label>
  60. <div className="col-sm-8">
  61. {/* {% if fileUploadService.getIsUploadable() %}
  62. <form action="/_api/attachments.uploadProfileImage" id="pictureUploadForm" method="post" class="form-horizontal" role="form">
  63. <input type="hidden" name="_csrf" value="{{ csrf() }}">
  64. <input type="file" name="profileImage" accept="image/*">
  65. <div id="pictureUploadFormProgress" class="d-flex align-items-center">
  66. </div>
  67. </form>
  68. {% else %} */}
  69. {/* * { t('page_me.form_help.profile_image1') }<br>
  70. * { t('page_me.form_help.profile_image2') }<br> */}
  71. {/* {% endif %} */}
  72. </div>
  73. </div>
  74. </div>
  75. <div className="form-group">
  76. <div className="col-sm-offset-4 col-sm-6">
  77. <button type="submit" form="formImageType" className="btn btn-primary">{ t('Update') }</button>
  78. </div>
  79. </div>
  80. </div>
  81. );
  82. }
  83. }
  84. /**
  85. * Wrapper component for using unstated
  86. */
  87. const ProfileImageFormWrapper = (props) => {
  88. return createSubscribedElement(ProfileImageForm, props, [AppContainer]);
  89. };
  90. ProfileImageForm.propTypes = {
  91. t: PropTypes.func.isRequired, // i18next
  92. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  93. };
  94. export default withTranslation()(ProfileImageFormWrapper);