Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 5175 | Rev 5996 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

/* eslint-disable react/prop-types */
/* eslint-disable camelcase */
import React, { useEffect, useState } from 'react'
import { connect } from 'react-redux'
import { debounce } from '../../../../utils'
import { searchEntities } from '../../../../services/search'
import { addNotification } from '../../../../redux/notification/notification.actions'
import Spinner from '../../../../shared/loading-spinner/Spinner'
import Profile from '../../../../components/Profile'
import SearchList from '../../../../components/SearchList'
import TitleSection from '../../../../components/TitleSection'
import EmptySection from '../../../../shared/empty-section/EmptySection'
import AddGroupModal from './add-group-modal/AddGroupModal'

const MyGroups = ({ groupTypes, industries, addNotification, LABELS }) => {
  const [groups, setGroups] = useState([])
  const [loading, setLoading] = useState(true)
  const [showAddGroupModal, setShowAddGroupModal] = useState(false)

  useEffect(() => {
    getGroups()
  }, [])

  const getGroups = async (searchValue = '') => {
    setLoading(true)
    const response = await searchEntities('group/my-groups', searchValue)

    if (!response.success) {
      addNotification({ style: 'danger', msg: response.data })
      setLoading(false)
      return
    }

    setGroups(response.data)
    setLoading(false)
  }

  const handleShowAddGroupModal = () => {
    setShowAddGroupModal(!showAddGroupModal)
  }

  const handleSearch = debounce((value) => getGroups(value), 500)

  return (
    <section className="companies-info container">
      <TitleSection title={LABELS.MY_GROUPS} allowAdd onAdd={handleShowAddGroupModal} />
      <SearchList onChange={handleSearch} />
      <div className="companies-list">
        {loading && <Spinner />}
        {(!loading && Boolean(!groups.length)) && <EmptySection align='left' message={LABELS.DATATABLE_SZERORECORDS} />}
        {(!loading && Boolean(groups.length)) &&
          groups.map(
            ({ image, link_delete, link_edit, link_view, name, privacy }, id) =>
              <Profile
                image={image}
                name={name}
                status={privacy}
                link_view={link_view}
                link_edit={link_edit}
                link_delete={link_delete}
                key={id}
                fetchCallback={getGroups}
                btnAcceptTitle={LABELS.GROUP_VIEW}
                btnEditTitle={`${LABELS.EDIT} ${LABELS.GROUP.toLowerCase()}`}
                btnCancelTitle={`${LABELS.DELETE} ${LABELS.GROUP.toLowerCase()}`}
              />
          )}
      </div>
      <AddGroupModal
        show={showAddGroupModal}
        onHide={handleShowAddGroupModal}
        getGroups={getGroups}
        groupTypes={groupTypes}
        industries={industries}
      />
    </section>
  )
}

const mapDispatchToProps = {
  addNotification: (notification) => addNotification(notification)
}

export default connect(null, mapDispatchToProps)(MyGroups)