mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-11 11:34:15 +00:00
improve pending additions process
This commit is contained in:
parent
85477efb8d
commit
ba35218f3c
@ -13,6 +13,8 @@ const maxMessageLength = 512
|
|||||||
export default (props) => {
|
export default (props) => {
|
||||||
const api = window.app.request
|
const api = window.app.request
|
||||||
|
|
||||||
|
const additionsRef = React.useRef(null)
|
||||||
|
const [pending, setPending] = React.useState([])
|
||||||
const [loading, setLoading] = React.useState(false)
|
const [loading, setLoading] = React.useState(false)
|
||||||
const [uploaderVisible, setUploaderVisible] = React.useState(false)
|
const [uploaderVisible, setUploaderVisible] = React.useState(false)
|
||||||
const [focused, setFocused] = React.useState(false)
|
const [focused, setFocused] = React.useState(false)
|
||||||
@ -57,6 +59,9 @@ export default (props) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const onUploadFile = async (req) => {
|
const onUploadFile = async (req) => {
|
||||||
|
// hide uploader
|
||||||
|
setUploaderVisible(false)
|
||||||
|
|
||||||
// get file data
|
// get file data
|
||||||
const file = req.file
|
const file = req.file
|
||||||
|
|
||||||
@ -64,8 +69,6 @@ export default (props) => {
|
|||||||
const formData = new FormData()
|
const formData = new FormData()
|
||||||
formData.append("files", file)
|
formData.append("files", file)
|
||||||
|
|
||||||
setLoading(true)
|
|
||||||
|
|
||||||
// send request
|
// send request
|
||||||
const request = await api.post.upload(formData, undefined).catch((error) => {
|
const request = await api.post.upload(formData, undefined).catch((error) => {
|
||||||
console.error(error)
|
console.error(error)
|
||||||
@ -76,8 +79,6 @@ export default (props) => {
|
|||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
|
|
||||||
setLoading(false)
|
|
||||||
|
|
||||||
if (request) {
|
if (request) {
|
||||||
return req.onSuccess(request)
|
return req.onSuccess(request)
|
||||||
}
|
}
|
||||||
@ -86,19 +87,34 @@ export default (props) => {
|
|||||||
const canPublish = () => {
|
const canPublish = () => {
|
||||||
const messageLengthValid = postData.message.length !== 0 && postData.message.length < maxMessageLength
|
const messageLengthValid = postData.message.length !== 0 && postData.message.length < maxMessageLength
|
||||||
|
|
||||||
return Boolean(messageLengthValid)
|
return Boolean(messageLengthValid) && Boolean(pending.length === 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
const onDraggerChange = (change) => {
|
const onDraggerChange = (change) => {
|
||||||
console.log(change)
|
console.log(change)
|
||||||
|
|
||||||
switch (change.file.status) {
|
switch (change.file.status) {
|
||||||
|
case "uploading": {
|
||||||
|
setPending([...pending, change.file.uid])
|
||||||
|
break
|
||||||
|
}
|
||||||
case "done": {
|
case "done": {
|
||||||
let additions = postData.additions ?? []
|
let additions = postData.additions ?? []
|
||||||
|
|
||||||
additions.push(...change.file.response)
|
additions.push(...change.file.response)
|
||||||
|
|
||||||
return updatePostData({ additions })
|
// remove pending file
|
||||||
|
setPending(pending.filter(uid => uid !== change.file.uid))
|
||||||
|
|
||||||
|
// update post data
|
||||||
|
updatePostData({ additions })
|
||||||
|
|
||||||
|
// force update additions
|
||||||
|
if (additionsRef.current) {
|
||||||
|
additionsRef.current.forceUpdate()
|
||||||
|
}
|
||||||
|
|
||||||
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
@ -127,6 +143,12 @@ export default (props) => {
|
|||||||
})
|
})
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
|
// set loading to true menwhile pending is not empty
|
||||||
|
React.useEffect(() => {
|
||||||
|
console.log(pending)
|
||||||
|
setLoading(pending.length !== 0)
|
||||||
|
}, [pending])
|
||||||
|
|
||||||
return <div
|
return <div
|
||||||
className="postCreator"
|
className="postCreator"
|
||||||
onDragOver={(e) => {
|
onDragOver={(e) => {
|
||||||
@ -170,7 +192,7 @@ export default (props) => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{postData.additions.length > 0 && <PostAdditions additions={postData.additions} />}
|
{postData.additions.length > 0 && <PostAdditions ref={additionsRef} additions={postData.additions} />}
|
||||||
|
|
||||||
<div className={classnames("actions", { ["hided"]: !focused && !uploaderVisible })}>
|
<div className={classnames("actions", { ["hided"]: !focused && !uploaderVisible })}>
|
||||||
<div>
|
<div>
|
||||||
@ -187,6 +209,7 @@ export default (props) => {
|
|||||||
|
|
||||||
<div className={classnames("uploader", { ["hided"]: !uploaderVisible })}>
|
<div className={classnames("uploader", { ["hided"]: !uploaderVisible })}>
|
||||||
<antd.Upload.Dragger
|
<antd.Upload.Dragger
|
||||||
|
maxCount={20}
|
||||||
multiple={true}
|
multiple={true}
|
||||||
onChange={onDraggerChange}
|
onChange={onDraggerChange}
|
||||||
customRequest={onUploadFile}
|
customRequest={onUploadFile}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user