Show modal for delete squeak (#2125)

* Got delete modal working for squeak card

* Got delete squeak modal working in squeak page

* Update frontend build
This commit is contained in:
Jonathan Zernik 2022-04-12 03:26:05 -04:00 committed by GitHub
parent 78275176d4
commit fd3d4229fb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 155 additions and 40 deletions

View file

@ -10,17 +10,18 @@ import { ICON_REPLY, ICON_RETWEET,
import axios from 'axios'
import {API_URL} from '../../config'
import MakeSqueak from '../../features/squeaks/MakeSqueak'
import DeleteSqueak from '../../features/squeaks/DeleteSqueak'
import ContentEditable from 'react-contenteditable'
import {
setLikeSqueak,
setUnlikeSqueak,
setDeleteSqueak,
} from '../../features/squeaks/squeaksSlice'
const SqueakCard = React.memo(function SqueakCard(props) {
const [modalOpen, setModalOpen] = useState(false)
const [replyModalOpen, setModalOpen] = useState(false)
const [deleteModalOpen, setDeleteModalOpen] = useState(false)
const [parent, setParent] = useState(false)
const [styleBody, setStyleBody] = useState(false)
const dispatch = useDispatch()
@ -47,22 +48,27 @@ const SqueakCard = React.memo(function SqueakCard(props) {
alert('Re-Squeak not yet implemented!');
}
const deleteSqueak = (e,id) => {
e.preventDefault();
e.stopPropagation();
dispatch(setDeleteSqueak(id));
}
const toggleModal = (e, type) => {
const toggleReplyModal = (e, type) => {
if(e){
e.preventDefault();
e.stopPropagation();
}
setStyleBody(!styleBody)
if(type === 'parent'){setParent(true)}else{setParent(false)}
setTimeout(()=>{ setModalOpen(!modalOpen) },20)
setTimeout(()=>{ setModalOpen(!replyModalOpen) },20)
}
const toggleDeleteModal = (e, type) => {
if(e){
e.preventDefault();
e.stopPropagation();
}
setStyleBody(!styleBody)
if(type === 'parent'){setParent(true)}else{setParent(false)}
setTimeout(()=>{ setDeleteModalOpen(!deleteModalOpen) },20)
}
const handleModalClick = (e) => {
e.stopPropagation()
}
@ -82,7 +88,7 @@ const SqueakCard = React.memo(function SqueakCard(props) {
if (isInitialMount.current){ isInitialMount.current = false;}
else if(document.getElementById("replyBox")) {
document.getElementById("replyBox").focus(); }
}, [modalOpen])
}, [replyModalOpen])
const goToUser = (e,username) => {
e.stopPropagation()
@ -142,7 +148,7 @@ const SqueakCard = React.memo(function SqueakCard(props) {
}
<div className="card-buttons-wrapper">
<div onClick={(e)=>toggleModal(e)} className="card-button-wrap reply-wrap">
<div onClick={(e)=>toggleReplyModal(e)} className="card-button-wrap reply-wrap">
<div className="card-icon reply-icon">
<ICON_REPLY styles={{fill:'rgb(101, 119, 134)'}}/>
</div>
@ -170,7 +176,7 @@ const SqueakCard = React.memo(function SqueakCard(props) {
<ICON_HEART styles={{fill:'rgb(101, 119, 134)'}}/>}
</div>
</div>
<div onClick={(e)=>deleteSqueak(e,props.id)} className="card-button-wrap">
<div onClick={(e)=>toggleDeleteModal(e)} className="card-button-wrap">
<div className="card-icon share-icon">
<ICON_DELETE styles={{fill:'rgb(101, 119, 134)'}} />
</div>
@ -193,21 +199,40 @@ const SqueakCard = React.memo(function SqueakCard(props) {
</Link>
{/* squeak modal */}
{/* reply modal */}
{props.squeak ?
<div onClick={()=>toggleModal()} style={{display: modalOpen ? 'block' : 'none'}} className="modal-edit">
{modalOpen ?
<div onClick={()=>toggleReplyModal()} style={{display: replyModalOpen ? 'block' : 'none'}} className="modal-edit">
{replyModalOpen ?
<div style={{minHeight: '350px', height: 'initial'}} onClick={(e)=>handleModalClick(e)} className="modal-content">
<div className="modal-header">
<div className="modal-closeIcon">
<div onClick={()=>toggleModal()} className="modal-closeIcon-wrap">
<div onClick={()=>toggleReplyModal()} className="modal-closeIcon-wrap">
<ICON_CLOSE />
</div>
</div>
<p className="modal-title">Reply</p>
</div>
<div style={{marginTop:'5px'}} className="modal-body">
<MakeSqueak replyToSqueak={props.squeak} submittedCallback={toggleModal} />
<MakeSqueak replyToSqueak={props.squeak} submittedCallback={toggleReplyModal} />
</div>
</div> : null}
</div> : null}
{/* delete modal */}
{props.squeak ?
<div onClick={()=>toggleDeleteModal()} style={{display: deleteModalOpen ? 'block' : 'none'}} className="modal-edit">
{deleteModalOpen ?
<div style={{minHeight: '350px', height: 'initial'}} onClick={(e)=>handleModalClick(e)} className="modal-content">
<div className="modal-header">
<div className="modal-closeIcon">
<div onClick={()=>toggleDeleteModal()} className="modal-closeIcon-wrap">
<ICON_CLOSE />
</div>
</div>
<p className="modal-title">Delete Squeak</p>
</div>
<div style={{marginTop:'5px'}} className="modal-body">
<DeleteSqueak squeakHash={props.id} submittedCallback={toggleDeleteModal} />
</div>
</div> : null}
</div> : null}

View file

@ -0,0 +1,68 @@
import React, { useEffect, useState, useContext, useRef } from 'react'
import { withRouter } from 'react-router-dom'
import { unwrapResult } from '@reduxjs/toolkit'
import moment from 'moment'
import ContentEditable from 'react-contenteditable'
import { Link } from 'react-router-dom'
import { getProfileImageSrcString } from '../../squeakimages/images';
import Loader from '../../components/Loader'
import { Form, Input, Select, Checkbox, Relevant, Debug, TextArea, Option } from 'informed';
import { useSelector } from 'react-redux'
import { useDispatch } from 'react-redux'
import {
setDeleteSqueak,
} from '../squeaks/squeaksSlice'
const DeleteSqueak = (props) => {
const dispatch = useDispatch();
const deleteSqueak = () => {
console.log('deleteSqueak');
dispatch(setDeleteSqueak(props.squeakHash));
if (props.submittedCallback) {
props.submittedCallback();
}
}
// TODO: Show profile image for selected signing profile.
// <div className="Squeak-profile-wrapper">
// {signingProfile && <img alt="" style={{ borderRadius: '50%', minWidth: '49px' }} width="100%" height="49px" src={`${getProfileImageSrcString(signingProfile)}`} />}
// </div>
const author = props.replyToSqueak && props.replyToSqueak.getAuthor();
const DeleteSqueakForm = () => (
<Form onSubmit={deleteSqueak} className="Squeak-input-side">
<div className="inner-input-links">
<div className="input-links-side">
</div>
<div className="squeak-btn-holder">
<div style={{ fontSize: '13px', color: null }}>
</div>
<button type="submit" className={'squeak-btn-side squeak-btn-active'}>
Delete
</button>
</div>
</div>
</Form>
);
return (
<>
{/* New squeak content input. */}
<div className="Squeak-input-wrapper">
<DeleteSqueakForm />
</div>
</>
)
}
export default withRouter(DeleteSqueak)

View file

@ -13,6 +13,7 @@ import { ICON_ARROWBACK, ICON_HEART, ICON_REPLY, ICON_RETWEET, ICON_HEARTFULL,
import SqueakCard from '../../components/SqueakCard'
import Loader from '../../components/Loader'
import MakeSqueak from '../squeaks/MakeSqueak'
import DeleteSqueak from '../../features/squeaks/DeleteSqueak'
import { unwrapResult } from '@reduxjs/toolkit'
@ -35,7 +36,6 @@ import { ICON_ARROWBACK, ICON_HEART, ICON_REPLY, ICON_RETWEET, ICON_HEARTFULL,
selectReplySqueaks,
selectReplySqueaksStatus,
clearReplies,
setDeleteSqueak,
selectSqueakOffers,
fetchSqueakOffers,
setBuySqueak,
@ -65,7 +65,8 @@ import { ICON_ARROWBACK, ICON_HEART, ICON_REPLY, ICON_RETWEET, ICON_HEARTFULL,
const paymentSummary = useSelector(selectPaymentSummaryForSqueak)
const dispatch = useDispatch();
const [modalOpen, setModalOpen] = useState(false)
const [replyModalOpen, setModalOpen] = useState(false)
const [deleteModalOpen, setDeleteModalOpen] = useState(false)
const [buyModalOpen, setBuyModalOpen] = useState(false)
const [spendingModalOpen, setSpendingModalOpen] = useState(false)
const [tab, setTab] = useState('Sent Payments')
@ -86,11 +87,18 @@ import { ICON_ARROWBACK, ICON_HEART, ICON_REPLY, ICON_RETWEET, ICON_HEARTFULL,
dispatch(fetchPaymentSummaryForSqueak({squeakHash: props.id}));
}, [props.id])
const toggleModal = (e, type) => {
const toggleReplyModal = (e, type) => {
if(e){ e.stopPropagation() }
// if(param === 'edit'){setSaved(false)}
// if(type === 'parent'){setParent(true)}else{setParent(false)}
setModalOpen(!modalOpen)
setModalOpen(!replyModalOpen)
}
const toggleDeleteModal = (e, type) => {
if(e){ e.stopPropagation() }
// if(param === 'edit'){setSaved(false)}
// if(type === 'parent'){setParent(true)}else{setParent(false)}
setDeleteModalOpen(!deleteModalOpen)
}
const toggleBuyModal = () => {
@ -131,10 +139,6 @@ import { ICON_ARROWBACK, ICON_HEART, ICON_REPLY, ICON_RETWEET, ICON_HEARTFULL,
dispatch(setLikeSqueak(props.id));
}
const deleteSqueak = (id) => {
dispatch(setDeleteSqueak(props.id));
}
const downloadSqueak = (id) => {
dispatch(setDownloadSqueak(props.id));
}
@ -250,7 +254,7 @@ import { ICON_ARROWBACK, ICON_HEART, ICON_REPLY, ICON_RETWEET, ICON_HEARTFULL,
</div>
</div>
<div className="squeak-interactions">
<div onClick={()=>toggleModal()} className="squeak-int-icon">
<div onClick={()=>toggleReplyModal()} className="squeak-int-icon">
<div className="card-icon reply-icon"> <ICON_REPLY /> </div>
</div>
<div onClick={()=>resqueak(squeak.getSqueakHash())} className="squeak-int-icon">
@ -267,7 +271,7 @@ import { ICON_ARROWBACK, ICON_HEART, ICON_REPLY, ICON_RETWEET, ICON_HEARTFULL,
{squeak.getLikedTimeMs() ? <ICON_HEARTFULL styles={{fill:'rgb(224, 36, 94)'}}
/> : <ICON_HEART/>} </div>
</div>
<div onClick={()=>deleteSqueak(squeak.getSqueakHash())} className="squeak-int-icon">
<div onClick={()=>toggleDeleteModal()} className="squeak-int-icon">
<div className="card-icon delete-icon">
<ICON_DELETE styles={{fill:'rgb(101, 119, 134)'}} />
</div>
@ -338,23 +342,41 @@ import { ICON_ARROWBACK, ICON_HEART, ICON_REPLY, ICON_RETWEET, ICON_HEARTFULL,
</div>
{squeak ?
<div onClick={()=>toggleModal()} style={{display: modalOpen ? 'block' : 'none'}} className="modal-edit">
{modalOpen ?
<div onClick={()=>toggleReplyModal()} style={{display: replyModalOpen ? 'block' : 'none'}} className="modal-edit">
{replyModalOpen ?
<div style={{minHeight: '379px', height: 'initial'}} onClick={(e)=>handleModalClick(e)} className="modal-content">
<div className="modal-header">
<div className="modal-closeIcon">
<div onClick={()=>toggleModal()} className="modal-closeIcon-wrap">
<div onClick={()=>toggleReplyModal()} className="modal-closeIcon-wrap">
<ICON_CLOSE />
</div>
</div>
<p className="modal-title">Reply</p>
</div>
<div style={{marginTop:'5px'}} className="modal-body">
<MakeSqueak replyToSqueak={squeak} submittedCallback={toggleModal} />
<MakeSqueak replyToSqueak={squeak} submittedCallback={toggleReplyModal} />
</div>
</div> : null}
</div>:null}
{squeak ?
<div onClick={()=>toggleDeleteModal()} style={{display: deleteModalOpen ? 'block' : 'none'}} className="modal-edit">
{deleteModalOpen ?
<div style={{minHeight: '379px', height: 'initial'}} onClick={(e)=>handleModalClick(e)} className="modal-content">
<div className="modal-header">
<div className="modal-closeIcon">
<div onClick={()=>toggleDeleteModal()} className="modal-closeIcon-wrap">
<ICON_CLOSE />
</div>
</div>
<p className="modal-title">Delete Squeak</p>
</div>
<div style={{marginTop:'5px'}} className="modal-body">
<DeleteSqueak squeakHash={squeak.getSqueakHash()} submittedCallback={toggleDeleteModal} />
</div>
</div> : null}
</div>:null}
{squeak ?
<div onClick={()=>toggleBuyModal()} style={{display: buyModalOpen ? 'block' : 'none'}} className="modal-edit">
{buyModalOpen ?