Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 5186 | Rev 5188 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 5186 Rev 5187
Línea 1... Línea 1...
1
/* eslint-disable camelcase */
1
/* eslint-disable camelcase */
2
/* eslint-disable react/prop-types */
2
/* eslint-disable react/prop-types */
3
import React, { useEffect, useState } from 'react'
3
import React, { useEffect, useState } from 'react'
-
 
4
import { useDispatch } from 'react-redux'
-
 
5
import { addNotification } from '../redux/notification/notification.actions'
4
import { axios } from '../utils'
6
import { axios } from '../utils'
5
import ChatMail from './inmail/inmail'
7
import ChatMail from './inmail/inmail'
6
import Sidebar from './inmail/sidebar'
8
import Sidebar from './inmail/sidebar'
Línea 7... Línea 9...
7
 
9
 
Línea 8... Línea 10...
8
const defaultPages = { current: 1, last: 1 }
10
const defaultPages = { current: 1, last: 1 }
9
 
11
 
10
const Inmail = () => {
12
const Inmail = () => {
11
  const [messages, setMessages] = useState([])
13
  const [messages, setMessages] = useState([])
12
  const [page, setPage] = useState(defaultPages)
14
  const [pages, setPages] = useState(defaultPages)
-
 
15
  const [selectedConversation, setSelectedConversation] = useState(null)
Línea 13... Línea 16...
13
  const [selectedConversation, setSelectedConversation] = useState(null)
16
  const [loading, setLoading] = useState(false)
14
  const [isGettingMessages, setIsGettingMessages] = useState(false)
17
  const dispatch = useDispatch()
15
 
18
 
16
  const getMessages = async ({ messages_link = selectedConversation.messages_link, _page = defaultPages.current }) => {
19
  const getMessages = async ({ messages_link = '', page = defaultPages.current }) => {
Línea 17... Línea 20...
17
    try {
20
    try {
-
 
21
      setLoading(true)
-
 
22
      const { data: response } = await axios.get(`${messages_link}?page=' + ${page}`)
-
 
23
 
-
 
24
      if (!response.success) {
18
      setIsGettingMessages(true)
25
        const errorMessage = response.data
-
 
26
 
-
 
27
        setPages(defaultPages)
-
 
28
        dispatch(addNotification({ style: 'danger', msg: errorMessage.message }))
-
 
29
        setLoading(false)
-
 
30
 
-
 
31
        return
19
      const { data } = await axios.get(messages_link + '?page=' + _page)
32
      }
-
 
33
 
20
 
34
      if (page > 1) {
Línea -... Línea 35...
-
 
35
        setPages((prevPages) => ({ ...prevPages, last: response.pagination.last }))
21
      if (data.success) {
36
        setMessages(prev => [...prev, response.data])
22
        setIsGettingMessages(false)
37
        return
23
        return { pages: data.pagination, msgs: data.data }
38
      }
24
      }
39
 
-
 
40
      setPages((prevPages) => ({ ...prevPages, last: response.pagination.last }))
25
 
41
      setMessages(response.data)
26
      setIsGettingMessages(false)
42
      setLoading(false)
Línea 27... Línea 43...
27
      return { pages: defaultPages.current, msgs: data.data }
43
    } catch (error) {
28
    } catch (error) {
44
      const errorMessage = new Error(error)
29
      console.log('>>: error > ', error)
45
      dispatch(addNotification({ style: 'danger', msg: errorMessage.message }))
30
    }
-
 
Línea 31... Línea -...
31
  }
-
 
32
 
-
 
33
  const changeConversation = (conversation) => {
-
 
34
    setPage(defaultPages)
46
    }
35
    setSelectedConversation(conversation)
-
 
36
  }
47
  }
37
 
48
 
38
  const handleSend = async (message = '') => {
49
  const handleSend = async (sendUrl = '', message = {}) => {
39
    if (selectedConversation) {
50
    try {
40
      try {
51
      const formData = new FormData()
41
        const formData = new FormData()
-
 
42
        formData.append('message', message)
52
 
43
 
53
      Object.entries(message).forEach(([key, value]) => formData.append(key, value))
Línea -... Línea 54...
-
 
54
 
-
 
55
      const { data: response } = await axios.post(sendUrl, formData)
44
        const res = await axios.post(selectedConversation.send_link, formData)
56
      setMessages(prev => [response.data, ...prev])
45
        setMessages(prev => [res.data.data, ...prev])
57
    } catch (error) {
46
      } catch (error) {
58
      console.log('>>: err0r > ', error)
47
        console.log('>>: err0r > ', error)
59
    }
-
 
60
  }
-
 
61
 
48
      }
62
  const changeConversation = (conversation) => setSelectedConversation(conversation)
Línea 49... Línea 63...
49
    }
63
 
50
  }
64
  const getMoreMessages = () => {
51
 
65
    if (pages.current + 1 > pages.last) {
52
  const getMoreMessages = () => {
-
 
53
    if (page.last > page.current) {
-
 
54
      setPage({ ...page, current: page.current += 1 })
-
 
55
    }
-
 
56
  }
-
 
57
 
66
      return null
Línea 58... Línea 67...
58
  useEffect(() => {
67
    }
59
    if (selectedConversation) {
68
 
60
      getMessages(selectedConversation.messages_link)
69
    setPages((prevPages) => ({ ...prevPages, current: prevPages.current + 1 }))
61
        .then(({ pages, msgs }) => {
70
  }
62
          setPage({ ...page, last: pages.last })
71
 
63
          setMessages(msgs)
-
 
64
        })
-
 
65
    }
-
 
66
  }, [selectedConversation])
-
 
67
 
72
  useEffect(() => {
68
  useEffect(() => {
73
    setPages(defaultPages)
69
    let timer
74
    getMessages(selectedConversation?.messages_link)
70
    if (!isGettingMessages && selectedConversation) {
75
  }, [selectedConversation])
71
      timer = setTimeout(() => {
76
 
72
        getMessages(selectedConversation.messages_link)
77
  useEffect(() => {
Línea 73... Línea 78...
73
          .then(({ pages, msgs }) => {
78
    let timer
74
            setPage({ ...page, last: pages.last })
-
 
75
            setMessages(msgs)
-
 
76
          })
-
 
77
      }, 2000)
79
    if (!loading && selectedConversation) {
78
    }
-
 
79
    return () => {
-
 
80
      clearTimeout(timer)
-
 
81
    }
-
 
82
  }, [isGettingMessages, selectedConversation])
-
 
83
 
80
      timer = setTimeout(() => {
Línea 84... Línea 81...
84
  useEffect(() => {
81
        getMessages(selectedConversation.messages_link)
85
    if (page.current > 1) {
82
      }, 2000)
86
      setIsGettingMessages(true)
83
    }
87
 
84
    return () => {
88
      getMessages({ _page: page.current })
85
      clearTimeout(timer)
89
        .then(({ pages, msgs }) => {
86
    }
90
          setPage({ ...page, last: pages.last })
87
  }, [loading, selectedConversation])
91
          setMessages(prev => [...prev, ...msgs])
88
 
92
        })
89
  useEffect(() => {
93
    }
90
    getMessages({ messages_link: selectedConversation?.messages_link, page: pages.current })
94
  }, [page.current])
91
  }, [pages.current])
95
 
92
 
96
  return (
93
  return (
97
    <div className="messages-sec container">
94
  <div className="messages-sec container">
98
      <div className="row">
95
    <div className="row">
99
        <div className={`col-12 col-md-4 ${selectedConversation && 'msgs-hide'}`}>
96
      <div className={`col-12 col-md-4 ${selectedConversation && 'msgs-hide'}`}>
100
          <Sidebar
-
 
101
            setConversation={changeConversation}
97
        <Sidebar
102
            selectedConversation={selectedConversation}
-
 
103
          />
98
          setConversation={changeConversation}
104
        </div>
99
          selectedConversation={selectedConversation}
-
 
100
        />
105
        <div className={`col-12 col-md-8 ${!selectedConversation && 'msgs-hide'}`}>
101
      </div>
106
          <ChatMail
102
      <div className={`col-12 col-md-8 ${!selectedConversation && 'msgs-hide'}`}>
Línea 107... Línea 103...
107
            selectedConversation={selectedConversation}
103
        <ChatMail