Skip to content

Commit f07f16c

Browse files
Merge pull request #112 from Detaysoft/avatar-letter-item
added avatar letter item
2 parents 7f47e00 + 33ac652 commit f07f16c

7 files changed

Lines changed: 53 additions & 8 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,7 @@ import { Avatar } from 'react-chat-elements'
472472
| alt | none | string | image alt description |
473473
| size | default | string | image size. default (25px), xsmall(30px), small(35px), medium(40px), large(45px), xlarge (55px) |
474474
| type | default | string | types: default, circle, rounded(border radius 5px), flexible |
475+
| letterItem | none | object | avatar to be a letter |
475476
| sideElement | none | component | avatar side element |
476477
| onError | none | component | avatar img onerror |
477478
| lazyLoadingImage | none | image path | lazy loading image |

native/ChatItem/ChatItem.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export class ChatItem extends Component {
2222
<Avatar
2323
src={this.props.avatar}
2424
alt={this.props.alt}
25+
letterItem={this.props.letterItem}
2526
sideElement={
2627
this.props.statusColor &&
2728
<View

native/MessageBox/MessageBox.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ export class MessageBox extends Component {
5757
width: 30,
5858
height: 30,
5959
}}
60+
letterItem={this.props.letterItem}
6061
src={this.props.avatar}/>
6162
</View>
6263
}

src/Avatar/Avatar.css

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,18 @@
7575
box-sizing: border-box;
7676
position: relative;
7777
}
78+
79+
.rce-avatar-letter {
80+
margin-top: 5px;
81+
font-size: 20px;
82+
color: #fff;
83+
display: flex;
84+
justify-content: center;
85+
align-items: center;
86+
}
87+
88+
.rce-avatar-letter-background{
89+
height: 35px;
90+
width: 35px;
91+
border-radius: 20px;
92+
}

src/Avatar/Avatar.js

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,20 @@ export class Avatar extends Component {
4242
img.onerror = loaded;
4343
}
4444

45+
stringToColour (str) {
46+
var hash = 0;
47+
for (let i = 0; i < str.length; i++) {
48+
hash = str.charCodeAt(i) + ((hash << 5) - hash);
49+
}
50+
var colour = '#';
51+
for (let i = 0; i < 3; i++) {
52+
var value = (hash >> (i * 8)) & 0xFF;
53+
value = (value % 150) + 50;
54+
colour += ('00' + value.toString(16)).substr(-2);
55+
}
56+
return colour;
57+
}
58+
4559
render() {
4660
let src = this.props.src;
4761
let isLazyImage = false;
@@ -63,14 +77,25 @@ export class Avatar extends Component {
6377

6478
return (
6579
<div className={classNames('rce-avatar-container', this.props.type, this.props.size, this.props.className)}>
66-
<img
67-
alt={this.props.alt}
68-
src={src}
69-
onError={this.props.onError}
70-
className={classNames(
71-
'rce-avatar',
72-
{'rce-avatar-lazy': isLazyImage},
73-
)} />
80+
{
81+
this.props.letterItem ?
82+
<div
83+
className="rce-avatar-letter-background"
84+
style={{ backgroundColor: this.stringToColour(this.props.letterItem.id)}}>
85+
<span class="rce-avatar-letter">
86+
{this.props.letterItem.letter}
87+
</span>
88+
</div>
89+
:
90+
<img
91+
alt={this.props.alt}
92+
src={src}
93+
onError={this.props.onError}
94+
className={classNames(
95+
'rce-avatar',
96+
{'rce-avatar-lazy': isLazyImage},
97+
)} />
98+
}
7499
{this.props.sideElement}
75100
</div>
76101
);

src/ChatItem/ChatItem.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export class ChatItem extends Component {
3131
alt={this.props.alt}
3232
className={statusColorType === 'encircle' ? 'rce-citem-avatar-encircle-status' : ''}
3333
size="large"
34+
letterItem={this.props.letterItem}
3435
sideElement={
3536
this.props.statusColor &&
3637
<span

src/MessageBox/MessageBox.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ export class MessageBox extends Component {
9494
{
9595
this.props.avatar &&
9696
<Avatar
97+
letterItem={this.props.letterItem}
9798
src={this.props.avatar}/>
9899
}
99100
{

0 commit comments

Comments
 (0)