ChangeAvatarComponent.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import {DropzoneArea} from "material-ui-dropzone";
  2. import styled from 'styled-components';
  3. import {connect} from "react-redux";
  4. import {uploadFile} from "../shared/services&utilits/utilits";
  5. import {useState} from "react";
  6. import {gqlSetAvatar} from "../shared/services&utilits/gqlRequest";
  7. import {setActiveUserData, setOwnerData} from "../store/actionCreators/ActionCreators";
  8. import avatar from "../assets/img/avatarGolub.jpg"
  9. import {SendButton} from "../shared/styledComponents";
  10. const DropZone = styled.div`
  11. display: flex;
  12. flex-direction: column;
  13. justify-content: center;
  14. align-items: center;
  15. width: 45%;
  16. margin-right: 7%;
  17. `
  18. const AvatarComponent = styled.div`
  19. display: flex;
  20. width: 70vw;
  21. height: 70vh;
  22. `
  23. const AvatarImg = styled.img`
  24. width: 300px;
  25. height: 300px;
  26. border-radius: 50%;
  27. `
  28. const OldAvatar = styled.div`
  29. width: 50%;
  30. display: flex;
  31. justify-content: center;
  32. align-items: center;
  33. overflow: hidden;
  34. border-radius: 50%;
  35. `
  36. const SaveButton = styled(SendButton)`
  37. margin-top: 50px;
  38. `
  39. function ChangeAvatarComponent({ownerData, closeModal, setOwnerData, setActiveUserData}) {
  40. const [avatarImagePreview, setAvatarImagePreview] = useState(ownerData && ownerData.avatar || null)
  41. const loadFIle = async (file) => {
  42. const img = await uploadFile(file);
  43. setAvatarImagePreview(img)
  44. }
  45. const loadAvatar = async(files) => {
  46. const newPreviewPicures = [];
  47. await files.forEach((file => {
  48. loadFIle(file, newPreviewPicures)
  49. }))
  50. }
  51. const saveAvatar = async () => {
  52. if (avatarImagePreview){
  53. const responce = await gqlSetAvatar(avatarImagePreview._id,ownerData._id)
  54. if (responce.ok) {
  55. setOwnerData(null);
  56. setActiveUserData(null);
  57. closeModal();
  58. }
  59. }
  60. }
  61. return <AvatarComponent>
  62. <OldAvatar>
  63. <AvatarImg src={avatarImagePreview && avatarImagePreview.url || avatar}/>
  64. </OldAvatar>
  65. <DropZone>
  66. <DropzoneArea
  67. key={avatarImagePreview._id}
  68. filesLimit={1}
  69. showPreviews={false}
  70. acceptedFiles={['image/*']}
  71. dropzoneText={"Drag and drop new avatar here or click"}
  72. onChange={(files) => loadAvatar(files)}
  73. showPreviewsInDropzone={false}
  74. />
  75. <SaveButton onClick={saveAvatar}>Save</SaveButton>
  76. </DropZone>
  77. </AvatarComponent>
  78. }
  79. const mapStateToProps = (state) => {
  80. return {
  81. ownerData: state.ownerData,
  82. }
  83. }
  84. const mapDispatchToProps = (dispatch) => {
  85. return {
  86. setOwnerData: (user) => dispatch(setOwnerData(user)),
  87. setActiveUserData: (user) => dispatch(setActiveUserData(user))
  88. }
  89. }
  90. export default connect(mapStateToProps, mapDispatchToProps)(ChangeAvatarComponent);