index.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import Grid from '@mui/material/Grid'
  2. import { useState,useEffect } from 'react'
  3. import { useSelector, useDispatch } from 'react-redux'
  4. import HeaderBar from './HeaderBar'
  5. import ChatBar from './ChatBar'
  6. import { getPinnedMessagesMemo } from '../../../redux/pinnedMessages/selector'
  7. import { TRightIsOpen } from '../../../typescript/redux/control/types'
  8. import { getOpenPinned } from '../../../redux/control/selector'
  9. import { actionOpenPinned } from '../../../redux/control/action'
  10. import { unpinAllMessagesById } from '../../../api-data'
  11. interface ICentralBar {
  12. rightIsOpen: TRightIsOpen,
  13. chatDivRef: any | null,
  14. companionId: string,
  15. backgroundImage: string,
  16. }
  17. const CentralBar = ({rightIsOpen,chatDivRef,companionId,backgroundImage}:ICentralBar) => {
  18. const dispatch = useDispatch()
  19. const pinnedMessagesMemo = useSelector(getPinnedMessagesMemo)
  20. const openPinned = useSelector(getOpenPinned)
  21. const [selectedArr, setSelectedArr] = useState<string[] | []>([])
  22. const [isSomeSelected, setIsSomeSelected] = useState<boolean>(false)
  23. const handleClearSelect = () => {
  24. selectedArr.length > 0 && setSelectedArr([])
  25. isSomeSelected && setIsSomeSelected(false)
  26. }
  27. const handleUnpinAll = () => {
  28. openPinned && dispatch(actionOpenPinned(false))
  29. unpinAllMessagesById(pinnedMessagesMemo.map(({_id}) => _id))
  30. }
  31. useEffect(() => {
  32. if(pinnedMessagesMemo.length === 0 && openPinned) dispatch(actionOpenPinned(false))
  33. }, [openPinned,pinnedMessagesMemo,dispatch])
  34. useEffect(() => {
  35. setIsSomeSelected(false)
  36. setSelectedArr([])
  37. }, [companionId])
  38. return (
  39. <Grid item lg={rightIsOpen?8:12}>
  40. <Grid item lg={12} >
  41. <HeaderBar chatDivRef={chatDivRef} selectedArr={selectedArr} isSomeSelected={isSomeSelected}
  42. handleClearSelect={handleClearSelect} setIsSomeSelected={setIsSomeSelected}
  43. openPinned={openPinned} pinnedMessagesMemo={pinnedMessagesMemo}/>
  44. </Grid>
  45. <Grid item lg={12} style={{backgroundImage}}>
  46. <ChatBar chatDivRef={chatDivRef} selectedArr={selectedArr} setSelectedArr={setSelectedArr}
  47. isSomeSelected={isSomeSelected} setIsSomeSelected={setIsSomeSelected}
  48. openPinned={openPinned} pinnedMessagesMemo={pinnedMessagesMemo} handleUnpinAll={handleUnpinAll}/>
  49. </Grid>
  50. </Grid>
  51. )
  52. }
  53. export default CentralBar