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,66 @@ 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 : ( this . args . isWidget )
48+ ? `${ classes [ 'headerNickname' ] } ${ classes [ 'fontMidBig' ] } ${ classes [ 'fontDemi' ] } `
49+ : `${ classes [ 'headerNickname' ] } ${ classes [ 'fontNormal' ] } ${ classes [ 'fontDemi' ] } ` ,
50+ innerText : this . args . user . nickname || '—'
51+ } ) ;
52+ const userId = createDiv ( {
53+ className : `${ classes [ 'headerUserId' ] } ${ classes [ 'fontSmall' ] } ` ,
54+ innerText : `User ID: ${ this . args . user . userId || '' } `
5855 } ) ;
59- headerInfo . appendChild ( userId ) ;
6056 headerInfo . appendChild ( nickname ) ;
57+ headerInfo . appendChild ( userId ) ;
6158
6259 userDiv . appendChild ( profileImg ) ;
6360 userDiv . appendChild ( headerInfo ) ;
6461
62+ let userDivMenu ;
63+ if ( ! this . args . isWidget ) {
64+ const userDetail = userDiv . cloneNode ( true ) ;
65+ replaceClassName ( userDetail , classes [ 'userDiv' ] , classes [ 'userDetail' ] ) ;
66+
67+ userDivMenu = new Menu ( {
68+ element : userDiv ,
69+ items : [
70+ {
71+ element : userDetail ,
72+ disabled : true ,
73+ } ,
74+ {
75+ label : 'Sign out' ,
76+ callback : ( ) => {
77+ SendBirdCall . deauthenticate ( ) ;
78+ this . sendToParent ( 'deauthenticate' ) ;
79+ }
80+ }
81+ ] ,
82+ divider : createDiv ( { className : classes [ 'menuDivider' ] } )
83+ } )
84+ }
85+
6586 const headerButtons = createDiv ( {
66- id : 'header_buttons' ,
6787 className : `${ classes [ 'headerButtons' ] } ${ classes [ 'row' ] } ${ classes [ 'center' ] } `
6888 } ) ;
6989 const settingsButton = new Menu ( {
70- id : 'settings_button' ,
7190 element : createDiv ( { className : `${ classes [ 'settingsButton' ] } ` } ) ,
7291 items : this . settingItems
7392 } ) ;
7493
7594 const closeButton = createDiv ( {
76- id : 'close_button' ,
7795 className : `${ classes [ 'closeButton' ] } `
7896 } ) ;
7997 closeButton . onclick = ( ) => {
@@ -83,15 +101,18 @@ export default class Header extends BaseElement {
83101 headerButtons . appendChild ( closeButton ) ;
84102
85103 const divider = createDiv ( {
86- id : 'header_divider' ,
87104 className : classes [ 'headerDivider' ]
88105 } ) ;
89106
90- this . element . appendChild ( userDiv ) ;
107+ if ( userDivMenu ) {
108+ userDivMenu . appendToBaseElement ( this ) ;
109+ } else {
110+ this . element . appendChild ( userDiv ) ;
111+ }
91112 this . element . appendChild ( divider ) ;
92113 this . element . appendChild ( headerButtons ) ;
93114
94- if ( ! this . args . isWidget ) {
115+ if ( ! this . args . isWidget ) {
95116 const headerLogo = createDiv ( { id : 'header_logo' , className : `${ classes [ 'headerLogo' ] } ` } ) ;
96117 this . element . appendChild ( headerLogo ) ;
97118 }
0 commit comments