---
# System prepended metadata

title: Member_IMG_Name.jsx
tags: [N108 Component]

---

---
tags: N108 Component
---
# Member_IMG_Name.jsx
- Member 切換流程圖 *(原本 component 名稱把 Member 去掉)*
- 可以配合 PPT 14頁
```graphviz
digraph Pageswitch {
                nodesep=0.5
                node [color=orange, fontsize=22, shape=box, style=bold]
                edge [color=RosyBrown, style=dashed]
                Profile->{TopBar IMG_Name Content}
                Content->{info LearnHistory WatchHistory NotelistHistory}
                info->{infobtn}
                NotelistHistory->{NoteHistory}
                {rank=same;UploadImg IMG_Name}
                IMG_Name [color=orange, fontsize=22, shape=box,style=filled, fillcolor=Bisque]
}
```
## import 資料
| 名稱 | 類型 | 描述 | 來源 |
| :------ | :----------- | :----------- | :-- |
| google | <font color='Red'>image</font> | Google logo，登入過後頭貼右下角的小圖示 | image/google.png |
| wke | <font color='Red'>image</font> | Wke logo，登入過後頭貼右下角的小圖示 | image/wkesso2.png |
| facebook | <font color='Red'>image</font> | Facebook logo，登入過後頭貼右下角的小圖示 | image/facebook.png |

## constructor 介紹
### state 參數介紹
| 名稱 | 類型 | 描述 | defalut |
| :------ | :----------- | :----------- | :-- |
| `show` | <font color='blue'>bool</font> | 等同於 topbarshowIMG，<font color='red'>***沒使用*** </font>| `this.props.topbarshowIMG` |
## 獨立 function
| 名稱 | 描述 | async 是否 |
|:--|:--|:--|
|bindScroll()|視覺滾輪功能|否|
### bindScroll() 介紹
- 將 showtopbarIMG、closetopbarIMG 兩種 function 傳入
- 如果目前頭貼 div Y 軸 `pos.offsetHeight` 超過視窗顯 Y 軸`window.scrollY`，在 topbar 顯示小頭貼以及個人名稱，反之則不在 topbar 顯示
:::info
- 簡單來說，就是下層 component function 控制上層 component 顯示
:::
```jsx=23
bindScroll = () => {
    const { showtopbarIMG, closetopbarIMG, topbarshowIMG } = this.props
    let pos = this.scrollpos.current // 頭貼 div Y軸
    if (window.scrollY >= pos.offsetHeight) {
        if (this.state.show == topbarshowIMG)
            showtopbarIMG()
    }
    else {
        if (this.state.show != topbarshowIMG)
            closetopbarIMG()
    }
    // console.log(window.scrollY)
    // console.log(pos.offsetHeight, pos.offsetTop)
}
```
## componentDidMount
- 增加監聽事件
```jsx=20
window.addEventListener('scroll', this.bindScroll, true)
```
## componentWillUnmount
- 刪除監聽事件
```jsx=39
window.removeEventListener('scroll', this.bindScroll, true);
```
## render
### props (上層傳入) 參數介紹
| 名稱 | 類型 | 描述 |
| :------ | :----------- | :----------- |
| `info` | <font color='Gold'>json value</font> | API 傳入的個人 ID、名稱、SSO來源、Type|
| `userimg` |  <font color='orange'>string</font> | API 傳入的頭貼路徑 | 
| `clickwrapper` | <font color='Green'>function</font>  |打開上傳頭貼的視窗 (wrapper)    |
### 額外參數
| 名稱 | 類型 | 描述 |
| :------ | :----------- | :----------- |
| `name` |  <font color='orange'>string</font> | 個人名稱 **(不知道為什麼在底下寫 `info.CName` 會有 bug)** | 

### return
- 大頭貼分成 2 種
        1. 有頭貼顯示頭貼 `{userimg}` + SSO登入來源的小 logo (90 ~ 92行)
        2. 沒頭貼顯示 SVG
```jsx=50
{
    userimg.length ?
        <img className="myface" src={userimg} alt="" />
        :
        <div className="noface">
            {name}
        </div>
}
```
- 如果是 WKE 登入來源，提供使用者自行上傳大頭貼的功能
```jsx=58
{info.sso == 'WKESSO' &&
    <form className="iconsplace dis-center mouse" title="新增頭貼">
        <label className="mouse">
            <i className="fa fa-camera mouse" onClick={clickwrapper}></i>
        </label>
    </form>}
```
- 顯示名稱以及登入來源，~~設定身份 button~~
- 設定身份 button，目前沒有功能
```jsx=65
<div className="fullinfoname overflow">
    {info.CName}
    <div className="ssowhere">
        {info.sso == 'WKESSO' && <i><img src={wke} alt="" width="32px" />{info.sso}</i>}
        {info.sso == 'GoogleSSO' && <i><img src={google} alt="" width="32px" />{info.sso}</i>}
        {info.sso == 'FacebookSSO' && <i><img src={facebook} alt="" width="32px" />{info.sso}</i>}
    </div>
</div>
{/* <div className="belong">
    身分：尚未設定
    <img src={parent} alt="" width="48px" />
    <img src={teacher} alt="" width="48px" />
    <img src={student} alt="" width="48px" />
</div> */}
<button name="button" type="button" className="btn2 btn-block2">Edit profile</button>
```
[回上層 MemberProfile.jsx](https://hackmd.io/_F5o4DuORuuuyeXsJI7XSw?view)