Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev 5313 Rev 5320
Línea 17... Línea 17...
17
import { useDispatch, useSelector } from 'react-redux'
17
import { useDispatch, useSelector } from 'react-redux'
18
import SearchIcon from '@mui/icons-material/Search'
18
import SearchIcon from '@mui/icons-material/Search'
19
import EmptySection from '../../../shared/empty-section/EmptySection'
19
import EmptySection from '../../../shared/empty-section/EmptySection'
20
import { getMessages } from '../../../redux/conversation/conversation.actions'
20
import { getMessages } from '../../../redux/conversation/conversation.actions'
Línea 21... Línea -...
21
 
-
 
22
const StyledChatHead = styled.div`
-
 
23
  .notify {
-
 
24
    animation: notify 2s infinite;
-
 
25
  }
-
 
26
 
-
 
27
  @keyframes notify {
-
 
28
    0% {
-
 
29
      background-color: unset;
-
 
30
    }
-
 
31
    50% {
-
 
32
      background-color: #00b0ff;
-
 
33
    }
-
 
34
    100% {
-
 
35
      background-color: unset;
-
 
36
    }
-
 
37
  }
-
 
38
`
-
 
39
 
21
 
40
const StyledShowOptions = styled.div`
22
const StyledShowOptions = styled.div`
41
  height: 342px;
23
  height: 342px;
42
  flex-direction: column;
24
  flex-direction: column;
43
  gap: 0.5rem;
25
  gap: 0.5rem;
Línea 88... Línea 70...
88
    type,
70
    type,
89
    url_get_all_messages,
71
    url_get_all_messages,
90
    url_send,
72
    url_send,
91
    url_upload,
73
    url_upload,
92
    profile,
74
    profile,
93
    // group
-
 
94
    url_leave,
75
    url_leave,
95
    url_delete,
76
    url_delete,
96
    url_add_user_to_group,
77
    url_add_user_to_group,
97
    url_get_contact_group_list,
78
    url_get_contact_group_list,
98
    url_get_contacts_availables_for_group,
79
    url_get_contacts_availables_for_group,
Línea 122... Línea 103...
122
  const loader = useRef(null)
103
  const loader = useRef(null)
123
  const modalActionUrl = useRef('')
104
  const modalActionUrl = useRef('')
124
  const chatboxEl = useRef(null)
105
  const chatboxEl = useRef(null)
125
  const textAreaEl = useRef(null)
106
  const textAreaEl = useRef(null)
Línea 126... Línea -...
126
 
-
 
127
  // optionTabs
-
 
128
  const optionTabs = {
-
 
129
    add_person_to_group: 'add_person_to_group',
-
 
130
    group_contacts_list: 'group_contacts_list',
-
 
131
    meet: 'meet',
-
 
132
    default: 'default'
-
 
133
  }
-
 
134
 
107
 
135
  const handleActive = () => {
108
  const handleActive = () => {
136
    onRead(entity)
109
    onRead(entity)
137
    onMinimize(entity)
110
    onMinimize(entity)
Línea 332... Línea 305...
332
        ))}
305
        ))}
333
      </>
306
      </>
334
    )
307
    )
335
  }
308
  }
Línea 336... Línea -...
336
 
-
 
337
  const optionRender = () => {
-
 
338
    switch (optionTab) {
-
 
339
      case optionTabs.add_person_to_group:
-
 
340
        return addPersonToGroupTab
-
 
341
      case optionTabs.group_contacts_list:
-
 
342
        return groupContactsListTab
-
 
343
      case optionTabs.meet:
-
 
344
        return meetingOptionsTab
-
 
345
      default:
-
 
346
        return optionsDefaultTab
-
 
347
    }
-
 
348
  }
-
 
349
 
309
 
350
  // useEffect for tabs changing
310
  // useEffect for tabs changing
351
  useEffect(() => {
-
 
352
    switch (optionTab) {
-
 
353
      case optionTabs.add_person_to_group:
311
  useEffect(() => {
354
        loadPersonsAvailable()
-
 
355
        break
-
 
356
      case optionTabs.group_contacts_list:
312
    if (optionTab === 'addContacts') loadPersonsAvailable()
357
        loadGroupContacts()
-
 
358
        break
-
 
359
    }
313
    if (optionTab === 'listContacts') loadGroupContacts()
Línea 360... Línea 314...
360
  }, [optionTab])
314
  }, [optionTab])
361
 
315
 
362
  const loadPersonsAvailable = async () => {
316
  const loadPersonsAvailable = async () => {
Línea 384... Línea 338...
384
        loadGroupContacts()
338
        loadGroupContacts()
385
      }
339
      }
386
    })
340
    })
387
  }
341
  }
Línea 388... Línea 342...
388
 
342
 
389
  const optionsDefaultTab = (
-
 
390
    <React.Fragment>
-
 
391
      <span className="optionBack" onClick={() => handleShowOptions()}>
-
 
392
        <i className="fa icon-arrow-left"></i>
343
  const tabsOptions = {
393
      </span>
-
 
394
      <div className="optionsTab">
344
    group: () => (
395
        <ul>
345
      <ul>
396
          {!!url_get_contact_group_list && (
-
 
397
            <li
-
 
398
              className="optionsTab__option"
346
        {url_get_contact_group_list &&
399
              onClick={() => handleChangeTab(optionTabs.group_contacts_list)}
-
 
400
            >
347
          <li className="optionsTab__option" onClick={() => handleChangeTab('listContacts')}>
401
              <span className="optionsTab__option__icon">
348
            <span className="optionsTab__option__icon">
402
                <i className="fa fa-group"></i>
-
 
403
              </span>
349
              <i className="fa fa-group" />
404
              Integrantes
350
              Integrantes
405
            </li>
351
            </span>
406
          )}
-
 
407
          {!!url_add_user_to_group && (
352
          </li>
408
            <li
353
        }
409
              className="optionsTab__option"
354
        {url_add_user_to_group &&
410
              onClick={() => handleChangeTab(optionTabs.add_person_to_group)}
-
 
411
            >
355
          <li className="optionsTab__option" onClick={() => handleChangeTab('addContacts')}>
412
              <span className="optionsTab__option__icon">
356
            <span className="optionsTab__option__icon">
413
                <i className="fa fa-user-plus"></i>
357
              <i className="fa fa-user-plus"></i>
414
              </span>
358
            </span>
415
              {CHAT_LABELS.ADD_CONTACTS}
359
            {CHAT_LABELS.ADD_CONTACTS}
416
            </li>
360
          </li>
417
          )}
-
 
418
          {
361
        }
419
            url_zoom &&
362
        {url_zoom &&
420
            <li
363
          <li
421
              className="optionsTab__option"
364
            className="optionsTab__option"
422
              onClick={displayConferenceModal}
-
 
423
            >
-
 
424
              <span className="optionsTab__option__icon">
-
 
425
                <i className="fa fa-user-plus" />
-
 
426
              </span>
-
 
427
              {CHAT_LABELS.CREATE_CONFERENCE}
-
 
428
            </li>
365
            onClick={displayConferenceModal}
429
          }
-
 
430
          {!!url_delete && (
-
 
431
            <li
-
 
432
              className="optionsTab__option"
-
 
433
              style={{ color: 'red' }}
-
 
434
              onClick={() => {
-
 
435
                handleConfirmModalShow()
-
 
436
                modalActionUrl.current = url_delete
-
 
437
              }}
-
 
438
            >
-
 
439
              <span className="optionsTab__option__icon">
-
 
440
                <i className="fa fa-trash"></i>
-
 
441
              </span>
-
 
442
              Eliminar grupo
-
 
443
            </li>
-
 
444
          )}
-
 
445
          {!!url_leave && (
-
 
446
            <li
-
 
447
              className="optionsTab__option"
-
 
448
              style={{ color: 'red' }}
-
 
449
              onClick={() => {
-
 
450
                handleConfirmModalShow()
-
 
451
                modalActionUrl.current = url_leave
-
 
452
              }}
-
 
453
            >
-
 
454
              <span className="optionsTab__option__icon">
-
 
455
                <i className="fa fa-user-times"></i>
-
 
456
              </span>
-
 
457
              Dejar grupo
-
 
458
            </li>
-
 
459
          )}
-
 
460
        </ul>
-
 
461
      </div>
-
 
462
    </React.Fragment>
-
 
463
  )
-
 
464
 
-
 
465
  const meetingOptionsTab = (
-
 
466
    <>
-
 
467
      <span className="optionBack" onClick={() => handleShowOptions()}>
-
 
468
        <i className="fa icon-arrow-left" />
-
 
469
      </span>
-
 
470
      <div className="optionsTab">
-
 
471
        <ul>
-
 
472
          <li className="optionsTab__option" onClick={displayConferenceModal}>
366
          >
473
            <span className="optionsTab__option__icon">
367
            <span className="optionsTab__option__icon">
474
              <i className="fa fa-user-plus" />
368
              <i className="fa fa-user-plus" />
475
            </span>
369
            </span>
476
            {CHAT_LABELS.CREATE_CONFERENCE}
370
            {CHAT_LABELS.CREATE_CONFERENCE}
-
 
371
          </li>
-
 
372
        }
-
 
373
        {url_delete &&
-
 
374
          <li
-
 
375
            className="optionsTab__option"
-
 
376
            style={{ color: 'red' }}
-
 
377
            onClick={() => {
-
 
378
              handleConfirmModalShow()
-
 
379
              modalActionUrl.current = url_delete
-
 
380
            }}
-
 
381
          >
-
 
382
            <span className="optionsTab__option__icon">
-
 
383
              <i className="fa fa-trash"></i>
-
 
384
            </span>
477
          </li>
385
            Eliminar grupo
-
 
386
          </li>
-
 
387
        }
-
 
388
        {!!url_leave &&
-
 
389
          <li
-
 
390
            className="optionsTab__option"
-
 
391
            style={{ color: 'red' }}
-
 
392
            onClick={() => {
-
 
393
              handleConfirmModalShow()
-
 
394
              modalActionUrl.current = url_leave
478
        </ul>
395
            }}
-
 
396
          >
-
 
397
            <span className="optionsTab__option__icon">
-
 
398
              <i className="fa fa-user-times"></i>
-
 
399
            </span>
-
 
400
            Dejar grupo
-
 
401
          </li>
479
      </div>
402
        }
480
    </>
403
      </ul>
481
  )
-
 
482
 
404
    ),
483
  const addPersonToGroupTab = (
405
    conference: () => (
484
    <>
406
      <ul>
-
 
407
        <li className="optionsTab__option" onClick={displayConferenceModal}>
485
      <span className="optionBack" onClick={() => handleChangeTab(optionTabs.default)}>
408
          <span className="optionsTab__option__icon">
486
        <i className="fa icon-arrow-left" />
409
            <i className="fa fa-user-plus" />
487
      </span>
410
          </span>
-
 
411
          {CHAT_LABELS.CREATE_CONFERENCE}
-
 
412
        </li>
-
 
413
      </ul>
-
 
414
    ),
-
 
415
    addContacts: () => (
488
      <div className="addPersonToGroupTab">
416
      <>
489
        !{availableContactsToAdd.length
417
        {availableContactsToAdd.length
490
        ? <EmptySection message={CHAT_LABELS.NOT_CONTACTS} align='left' />
418
          ? <EmptySection message={CHAT_LABELS.NOT_CONTACTS} align='left' />
491
        : availableContactsToAdd.map(({ image, name, id }) =>
419
          : availableContactsToAdd.map(({ image, name, id }) =>
492
            <div className="addPersonToGroupTab__person" key={id}>
420
            <div className="addPersonToGroupTab__person" key={id}>
493
              <div className="d-inline-flex" style={{ gap: '5px' }}>
421
              <div className="d-inline-flex" style={{ gap: '5px' }}>
494
                <img
422
                <img
495
                  className="chat-image img-circle pull-left"
423
                  className="chat-image img-circle pull-left"
Línea 502... Línea 430...
502
              </div>
430
              </div>
503
              <span className='cursor-pointer' onClick={() => handleAddPersonToGroup(id)}>
431
              <span className='cursor-pointer' onClick={() => handleAddPersonToGroup(id)}>
504
                <i className="fa fa-plus-circle" />
432
                <i className="fa fa-plus-circle" />
505
              </span>
433
              </span>
506
            </div>
434
            </div>
507
        )}
435
          )}
508
      </div>
436
      </>
509
    </>
437
    ),
510
  )
-
 
511
 
-
 
512
  const groupContactsListTab = (
438
    listContacts: () => (
513
    <>
439
      <>
514
      <span className="optionBack" onClick={() => handleChangeTab(optionTabs.default)}>
-
 
515
        <i className="fa icon-arrow-left" />
-
 
516
      </span>
-
 
517
      <div className='group__search'>
440
        <div className='group__search'>
518
        <SearchIcon />
441
          <SearchIcon />
519
        <input
442
          <input
520
          type='text'
443
            type='text'
521
          placeholder={CHAT_LABELS.SEARCH}
444
            placeholder={CHAT_LABELS.SEARCH}
522
          onChange={(e) => setSearch(e.target.value)}
445
            onChange={(e) => setSearch(e.target.value)}
523
        />
446
          />
524
      </div>
447
        </div>
525
      <div className="addPersonToGroupTab">
-
 
526
        {filtredGroupList.length
448
        {filtredGroupList.length
527
          ? filtredGroupList.map(({ image, name, url_remove_from_group, id }) => {
449
          ? filtredGroupList.map(({ image, name, url_remove_from_group, id }) => {
528
            return (
450
            return (
529
              <div className="addPersonToGroupTab__person" key={id}>
451
              <div className="addPersonToGroupTab__person" key={id}>
530
                <div style={{ display: 'flex', alignItems: 'center' }}>
452
                <div style={{ display: 'flex', alignItems: 'center' }}>
Línea 545... Línea 467...
545
              </div>
467
              </div>
546
            )
468
            )
547
          })
469
          })
548
          : <div className="addPersonToGroupTab__person">{CHAT_LABELS.NOT_CONTACTS}</div>
470
          : <div className="addPersonToGroupTab__person">{CHAT_LABELS.NOT_CONTACTS}</div>
549
        }
471
        }
550
      </div>
472
      </>
551
    </>
473
    )
552
  )
474
  }
Línea 553... Línea 475...
553
 
475
 
554
  const userChat = (
476
  const userChat = (
555
    <>
-
 
556
      <div className="chatbox active-chat" style={{ display: 'block' }}>
477
    <>
557
        <div className="panel personal-chat">
-
 
558
          <StyledChatHead>
-
 
559
            <div className={`panel-heading chatboxhead ${not_seen_messages ? 'notify' : ''}`}>
-
 
560
              <div className="panel-title">
-
 
561
                <img
-
 
562
                  className="chat-image img-circle pull-left"
-
 
563
                  height="36"
-
 
564
                  width="36"
-
 
565
                  src={image}
-
 
566
                  alt="avatar-image"
-
 
567
                />
-
 
568
                <div className="header-elements">
-
 
569
                  <a href={profile} target="_blank" rel="noreferrer">
-
 
570
                    {name}
-
 
571
                  </a>
-
 
572
                  <br />
-
 
573
                  <small className={`status ${online ? 'Online' : 'Offline'}`}>
-
 
574
                    <b>{online ? 'En línea' : 'Desconectado'}</b>
-
 
Línea 575... Línea -...
575
                  </small>
-
 
576
 
-
 
577
                  <div className="pull-right options">
-
 
578
                    <div className="btn-group">
-
 
579
                      <i className="fa fa-gear" onClick={() => {
-
 
580
                        handleChangeTab(optionTabs.meet)
-
 
581
                        handleShowOptions()
-
 
582
                      }} />
-
 
583
                    </div>
478
      <div className="personal-chat">
584
                    <div className="btn-group">
-
 
585
                      <i className={'fa fa-minus-circle'} onClick={handleActive} />
-
 
586
                    </div>
-
 
587
                    <div className="btn-group">
-
 
588
                      <i className="fa fa-times-circle" onClick={handleCloseChat} />
-
 
Línea -... Línea 479...
-
 
479
 
589
                    </div>
480
        <div className={`chat-header ${not_seen_messages ? 'notify' : ''}`}>
-
 
481
 
-
 
482
          <div className="user-info">
-
 
483
            <img
590
                  </div>
484
              className={online ? 'online' : 'offline'}
-
 
485
              src={image}
-
 
486
              alt="avatar-image"
-
 
487
            />
591
 
488
            <div className="info-content">
-
 
489
              <a href={profile} target="_blank" rel="noreferrer">{name}</a>
-
 
490
              <small>{online ? 'En línea' : 'Desconectado'}</small>
-
 
491
            </div>
-
 
492
          </div>
-
 
493
 
-
 
494
          <div className="pull-right options">
-
 
495
            <div className="btn-group">
-
 
496
              <i className="fa fa-gear" onClick={() => {
-
 
497
                handleChangeTab('conference')
-
 
498
                handleShowOptions()
-
 
499
              }} />
-
 
500
            </div>
-
 
501
            <div className="btn-group">
-
 
502
              <i className={'fa fa-minus-circle'} onClick={handleActive} />
-
 
503
            </div>
-
 
504
            <div className="btn-group">
-
 
505
              <i className="fa fa-times-circle" onClick={handleCloseChat} />
-
 
506
            </div>
-
 
507
          </div>
-
 
508
        </div>
-
 
509
 
-
 
510
        <div className="panel-body" style={{ display: !minimized ? 'block' : 'none' }}>
-
 
511
          <StyledShowOptions className={` ${showOptions ? 'show' : 'hide'}`}>
-
 
512
            <span className="optionBack" onClick={() => optionTab !== 'default' ? handleChangeTab('default') : handleShowOptions()}>
-
 
513
              <i className="fa icon-arrow-left" />
-
 
514
            </span>
592
                </div>
515
            <div className="optionsTab">
-
 
516
              {tabsOptions[optionTab]}
593
              </div>
517
            </div>
594
            </div>
518
          </StyledShowOptions>
595
          </StyledChatHead>
519
 
596
          <div
520
          <div
597
            className="panel-body"
521
            className="chat-conversation"
598
            style={{ display: !minimized ? 'block' : 'none' }}
-
 
599
          >
-
 
600
            <StyledShowOptions className={` ${showOptions ? 'show' : 'hide'}`}>
522
            style={{ position: 'relative', display: showOptions ? 'none' : 'block' }}
601
              {optionRender()}
523
          >
602
            </StyledShowOptions>
524
            <div className="reverseChatBox" ref={conversationListEl}>
603
            <div
525
              <ul
604
              id="uploader_'+chatboxtitle+'"
526
                className="conversation-list chatboxcontent"
605
              style={{ display: 'none', height: '342px' }}
-
 
606
            >
527
                id="resultchat_'+chatboxtitle+'"
607
              <p>
528
              >
608
                Your browser does not have Flash, Silverlight or HTML5 support.
-
 
609
              </p>
-
 
610
            </div>
-
 
611
            <div
-
 
612
              className="chat-conversation"
-
 
613
              style={{ position: 'relative', display: showOptions ? 'none' : 'block' }}
-
 
614
            >
-
 
615
              <div className="reverseChatBox" ref={conversationListEl}>
-
 
616
                <ul
-
 
617
                  className="conversation-list chatboxcontent"
-
 
618
                  id="resultchat_'+chatboxtitle+'"
-
 
619
                >
-
 
620
                  {messagesRender()}
529
                {messagesRender()}
621
                </ul>
530
              </ul>
Línea 622... Línea 531...
622
              </div>
531
            </div>
623
              <div className="wchat-footer wchat-chat-footer">
532
            <div className="wchat-footer wchat-chat-footer">
624
                <div id="chatFrom" className="chatFrom">
533
              <div id="chatFrom" className="chatFrom">
625
 
534
 
626
                  <div className="block-wchat">
535
                <div className="block-wchat">
627
                    <button
536
                  <button
628
                      className="icon ti-clip attachment font-24 btn-attach btn-attach uploadFile"
537
                    className="icon ti-clip attachment font-24 btn-attach btn-attach uploadFile"
629
                      id="uploadFile"
538
                    id="uploadFile"
630
                      onClick={handleShareFileModalShow}
539
                    onClick={handleShareFileModalShow}
631
                    ></button>
540
                  ></button>
632
                    <button
541
                  <button
633
                      className="icon ti-face-smile font-24 btn-emoji"
542
                    className="icon ti-face-smile font-24 btn-emoji"
634
                      id="toggle-emoji"
543
                    id="toggle-emoji"
635
                      onClick={handleShowEmojiTab}
544
                    onClick={handleShowEmojiTab}
636
                    ></button>
545
                  ></button>
637
                    <div className="input-container">
546
                  <div className="input-container">
638
                      <div className="input-emoji">
547
                    <div className="input-emoji">
639
                        <div
548
                      <div
640
                          className="input-placeholder"
-
 
641
                          style={{ visibility: 'hidden', display: 'none' }}
-
 
642
                        >
-
 
643
                          {CHAT_LABELS.WRITE_A_MESSAGE}
-
 
644
                        </div>
-
 
645
                        <textarea
-
 
646
                          className="input chatboxtextarea"
-
 
647
                          id="chatboxtextarea"
-
 
648
                          name="chattxt"
-
 
649
                          style={{ resize: 'none', height: '20px' }}
-
 
650
                          placeholder={CHAT_LABELS.WRITE_A_MESSAGE}
-
 
651
                          onKeyDown={handleChatBoxKeyDown}
549
                        className="input-placeholder"
-
 
550
                        style={{ visibility: 'hidden', display: 'none' }}
-
 
551
                      >
-
 
552
                        {CHAT_LABELS.WRITE_A_MESSAGE}
-
 
553
                      </div>
-
 
554
                      <textarea
-
 
555
                        className="input chatboxtextarea"
-
 
556
                        id="chatboxtextarea"
-
 
557
                        name="chattxt"
-
 
558
                        style={{ resize: 'none', height: '20px' }}
-
 
559
                        placeholder={CHAT_LABELS.WRITE_A_MESSAGE}
652
                          ref={textAreaEl}
560
                        onKeyDown={handleChatBoxKeyDown}
653
                          onFocus={() => not_seen_messages && onRead(entity)}
561
                        ref={textAreaEl}
654
                        />
562
                        onFocus={() => not_seen_messages && onRead(entity)}
Línea 655... Línea 563...
655
                      </div>
563
                      />
Línea 663... Línea 571...
663
                  </div>
571
                  </div>
664
                </div>
572
                </div>
Línea 665... Línea 573...
665
 
573
 
666
              </div>
574
              </div>
-
 
575
            </div>
667
            </div>
576
 
668
          </div>
577
          </div>
669
        </div>
578
        </div>
-
 
579
      </div>
670
      </div>
580
 
671
      <SendFileModal
581
      <SendFileModal
672
        show={shareFileModalShow}
582
        show={shareFileModalShow}
673
        onHide={() => setShareFileModalShow(false)}
583
        onHide={() => setShareFileModalShow(false)}
674
        urlUpload={url_upload}
584
        urlUpload={url_upload}
Línea 719... Línea 629...
719
            </div>
629
            </div>
720
          </StyledChatHead>
630
          </StyledChatHead>
Línea 721... Línea 631...
721
 
631
 
722
          <div className="panel-body" style={{ display: !minimized ? 'block' : 'none' }}>
632
          <div className="panel-body" style={{ display: !minimized ? 'block' : 'none' }}>
723
            <StyledShowOptions className={` ${showOptions ? 'show' : 'hide'}`}>
-
 
-
 
633
            <StyledShowOptions className={` ${showOptions ? 'show' : 'hide'}`}>
724
              {optionRender()}
634
 
Línea 725... Línea 635...
725
            </StyledShowOptions>
635
            </StyledShowOptions>
726
 
636
 
727
            <div
637
            <div