Skip to content

Commit ae4aab1

Browse files
committed
nicer
1 parent ca33aa0 commit ae4aab1

File tree

1 file changed

+26
-17
lines changed
  • services/static-webserver/client/source/class/osparc/ui/basic

1 file changed

+26
-17
lines changed

services/static-webserver/client/source/class/osparc/ui/basic/AvatarGroup.js

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,15 @@ qx.Class.define("osparc.ui.basic.AvatarGroup", {
2222
construct: function() {
2323
this.base(arguments);
2424

25+
this.set({
26+
decorator: null,
27+
padding: 0,
28+
backgroundColor: null,
29+
});
2530
this._setLayout(new qx.ui.layout.HBox());
2631

32+
this.__avatarSize = 30;
33+
this.__maxVisible = 5;
2734
this.__users = [
2835
{ name: "Alice", avatar: "https://i.pravatar.cc/150?img=1" },
2936
{ name: "Bob", avatar: "https://i.pravatar.cc/150?img=2" },
@@ -32,7 +39,6 @@ qx.Class.define("osparc.ui.basic.AvatarGroup", {
3239
{ name: "Eve", avatar: "https://i.pravatar.cc/150?img=5" },
3340
{ name: "Frank", avatar: "https://i.pravatar.cc/150?img=6" },
3441
];
35-
this.__maxVisible = 5;
3642
this.__avatars = [];
3743

3844
this.__buildAvatars();
@@ -43,28 +49,30 @@ qx.Class.define("osparc.ui.basic.AvatarGroup", {
4349
},
4450

4551
members: {
46-
__avatars: null,
47-
__users: null,
52+
__avatarSize: null,
4853
__maxVisible: null,
54+
__users: null,
55+
__avatars: null,
4956

5057
__buildAvatars() {
58+
const overlap = Math.floor(this.__avatarSize * 0.5); // 50% overlap
59+
const overlapPx = `-${overlap}px`;
5160
const usersToShow = this.__users.slice(0, this.__maxVisible);
5261

5362
usersToShow.forEach((user, index) => {
5463
const avatar = new qx.ui.basic.Image(user.avatar);
5564
avatar.set({
56-
width: 40,
57-
height: 40,
65+
width: this.__avatarSize,
66+
height: this.__avatarSize,
5867
scale: true,
59-
decorator: "main", // You can use or define a circle decorator
6068
toolTipText: user.name,
6169
});
6270

6371
avatar.getContentElement().setStyles({
6472
borderRadius: "50%",
65-
border: "2px solid white",
73+
border: "1px solid gray",
6674
boxShadow: "0 0 0 1px rgba(0,0,0,0.1)",
67-
marginLeft: index === 0 ? "0px" : "-12px",
75+
marginLeft: index === 0 ? "0px" : overlapPx,
6876
transition: "margin 0.3s ease",
6977
});
7078

@@ -76,22 +84,21 @@ qx.Class.define("osparc.ui.basic.AvatarGroup", {
7684
const remaining = this.__users.length - this.__maxVisible;
7785
const label = new qx.ui.basic.Label("+" + remaining);
7886
label.set({
79-
width: 40,
80-
height: 40,
87+
width: this.__avatarSize,
88+
height: this.__avatarSize,
8189
textAlign: "center",
8290
backgroundColor: "#ddd",
8391
font: "bold",
84-
allowGrowX: false,
85-
allowGrowY: false,
8692
toolTipText: `${remaining} more`,
8793
});
8894

8995
label.getContentElement().setStyles({
90-
lineHeight: "40px",
96+
lineHeight: this.__avatarSize + "px",
9197
borderRadius: "50%",
92-
border: "2px solid white",
98+
border: "1px solid gray",
9399
boxShadow: "0 0 0 1px rgba(0,0,0,0.1)",
94-
marginLeft: "-12px"
100+
marginLeft: overlapPx,
101+
transition: "margin 0.3s ease",
95102
});
96103

97104
this.__avatars.push(label);
@@ -102,13 +109,15 @@ qx.Class.define("osparc.ui.basic.AvatarGroup", {
102109
__expand() {
103110
this.__avatars.forEach(avatar => {
104111
avatar.getContentElement().setStyle("marginLeft", "8px");
105-
avatar.setZIndex(1);
112+
avatar.setZIndex(10);
106113
});
107114
},
108115

109116
__collapse() {
117+
const overlap = Math.floor(this.__avatarSize * 0.5);
110118
this.__avatars.forEach((avatar, index) => {
111-
avatar.getContentElement().setStyle("marginLeft", index === 0 ? "0px" : "-12px");
119+
const margin = index === 0 ? "0px" : `-${overlap}px`;
120+
avatar.getContentElement().setStyle("marginLeft", margin);
112121
avatar.setZIndex(index);
113122
});
114123
},

0 commit comments

Comments
 (0)