11import SendBirdCall from "sendbird-calls" ;
22import BaseElement from "./BaseElement" ;
3- import { createDiv } from "../utils/domUtil" ;
3+ import { createDiv , replaceClassName } from "../utils/domUtil" ;
44import Menu from "../components/Menu" ;
55import { sheet , classes } from "../css/styles" ;
66
@@ -32,48 +32,63 @@ export default class Header extends BaseElement {
3232 }
3333
3434 build ( ) {
35- const userDiv = createDiv ( {
36- id : 'header_user_div' ,
37- className : `${ classes [ 'userDiv' ] } ${ classes [ 'center' ] } `
38- } ) ;
35+ let userDiv = createDiv ( { className : `${ classes [ 'userDiv' ] } ` } ) ;
3936
4037 let profileImg ;
4138 if ( this . args . user && this . args . user . profileUrl ) {
4239 sheet . update ( { profileUrl : this . args . user . profileUrl } ) ;
43- profileImg = createDiv ( { id : 'header_profile_img' , className : classes [ 'profileSmall' ] } ) ;
40+ profileImg = createDiv ( { className : classes [ 'profileSmall' ] } ) ;
4441 } else {
45- profileImg = createDiv ( { id : 'header_avatar' , className : `${ classes [ 'avatar' ] } ` } ) ;
42+ profileImg = createDiv ( { className : `${ classes [ 'avatar' ] } ` } ) ;
4643 }
4744
48- const headerInfo = createDiv ( { id : 'header_info' , className : `${ classes [ 'headerInfo' ] } ` } ) ;
49- const userId = createDiv ( {
50- id : 'header_user_id' ,
51- className : `${ classes [ 'headerUserId' ] } ${ classes [ 'fontMidBig' ] } ${ classes [ 'fontDemi' ] } ` ,
52- innerText : this . args . user . userId || ''
53- } ) ;
45+ const headerInfo = createDiv ( { className : `${ classes [ 'headerInfo' ] } ` } ) ;
5446 const nickname = createDiv ( {
55- id : 'header_nickname' ,
56- className : `${ classes [ 'headerNickname' ] } ${ classes [ 'fontSmall' ] } ` ,
57- innerText : this . args . user . nickname || 'no nickname'
47+ className : `${ classes [ 'headerNickname' ] } ${ classes [ 'fontMidBig' ] } ${ classes [ 'fontDemi' ] } ` ,
48+ innerText : this . args . user . nickname || '—'
49+ } ) ;
50+ const userId = createDiv ( {
51+ className : `${ classes [ 'headerUserId' ] } ${ classes [ 'fontSmall' ] } ` ,
52+ innerText : `User ID: ${ this . args . user . userId || '' } `
5853 } ) ;
59- headerInfo . appendChild ( userId ) ;
6054 headerInfo . appendChild ( nickname ) ;
55+ headerInfo . appendChild ( userId ) ;
6156
6257 userDiv . appendChild ( profileImg ) ;
6358 userDiv . appendChild ( headerInfo ) ;
6459
60+ let userDivMenu ;
61+ if ( ! this . args . isWidget ) {
62+ const userDetail = userDiv . cloneNode ( true ) ;
63+ replaceClassName ( userDetail , classes [ 'userDiv' ] , classes [ 'userDetail' ] ) ;
64+
65+ userDivMenu = new Menu ( {
66+ element : userDiv ,
67+ items : [
68+ {
69+ element : userDetail
70+ } ,
71+ {
72+ label : 'Sign out' ,
73+ callback : ( ) => {
74+ SendBirdCall . deauthenticate ( ) ;
75+ this . sendToParent ( 'deauthenticate' ) ;
76+ }
77+ }
78+ ] ,
79+ divider : createDiv ( { className : classes [ 'menuDivider' ] } )
80+ } )
81+ }
82+
6583 const headerButtons = createDiv ( {
66- id : 'header_buttons' ,
6784 className : `${ classes [ 'headerButtons' ] } ${ classes [ 'row' ] } ${ classes [ 'center' ] } `
6885 } ) ;
6986 const settingsButton = new Menu ( {
70- id : 'settings_button' ,
7187 element : createDiv ( { className : `${ classes [ 'settingsButton' ] } ` } ) ,
7288 items : this . settingItems
7389 } ) ;
7490
7591 const closeButton = createDiv ( {
76- id : 'close_button' ,
7792 className : `${ classes [ 'closeButton' ] } `
7893 } ) ;
7994 closeButton . onclick = ( ) => {
@@ -83,15 +98,18 @@ export default class Header extends BaseElement {
8398 headerButtons . appendChild ( closeButton ) ;
8499
85100 const divider = createDiv ( {
86- id : 'header_divider' ,
87101 className : classes [ 'headerDivider' ]
88102 } ) ;
89103
90- this . element . appendChild ( userDiv ) ;
104+ if ( userDivMenu ) {
105+ userDivMenu . appendToBaseElement ( this ) ;
106+ } else {
107+ this . element . appendChild ( userDiv ) ;
108+ }
91109 this . element . appendChild ( divider ) ;
92110 this . element . appendChild ( headerButtons ) ;
93111
94- if ( ! this . args . isWidget ) {
112+ if ( ! this . args . isWidget ) {
95113 const headerLogo = createDiv ( { id : 'header_logo' , className : `${ classes [ 'headerLogo' ] } ` } ) ;
96114 this . element . appendChild ( headerLogo ) ;
97115 }
0 commit comments