Files
scrm.antd/src/pages/ChatLogs/ChatUtils.tsx

250 lines
5.7 KiB
TypeScript
Raw Normal View History

2023-04-14 17:31:45 +08:00
/**
*
* @param data
* @param state
* @returns
*/
2023-04-17 17:47:31 +08:00
import React, { useEffect, useState } from 'react';
import { IGroup, IGroupMembers } from './ChatLogsType';
import { AdminSvg, OwnerSvg } from './components/Svgs';
2023-04-17 17:47:31 +08:00
2023-04-14 17:31:45 +08:00
export const groupMembersCount = (data: any[], state: any) => {
let count = 0;
data.forEach((item) => {
if (item.state == state) {
count += 1;
}
});
return count;
};
/**
*
* @param data
* @param group_members_type
* @param state
* @returns
*/
export const groupMembersCount2 = (data: any[], group_members_type: any, state: any) => {
let count = 0;
data.forEach((item) => {
if (item.group_members_type == group_members_type && item.state == state) {
count += 1;
}
});
return count;
};
// 群 Drawer 群员
export const groupMembersListItem = (item: IGroupMembers, selectGroup: IGroup) => {
return (
<div
key={item.user_id}
style={{
display: 'inline-flex',
justifyContent: 'flex-start',
alignItems: 'center',
width: 80,
flexDirection: 'column',
verticalAlign: 'top',
marginTop: 12,
}}
>
<div
style={{
position: 'relative',
display: 'flex',
flexShrink: 0,
alignItems: 'center',
justifyContent: 'center',
width: 56,
height: 56,
lineHeight: 1,
background: '#69b1ff',
borderRadius: 4,
}}
>
{item.avatar ? (
<img
style={{
maxWidth: '100%',
maxHeight: '100%',
objectFit: 'cover',
borderRadius: 4,
}}
src={item.avatar}
alt=""
/>
) : item.name ? (
item.name[0]
) : (
''
)}
{item.user_id == selectGroup?.owner ? <OwnerSvg /> : null}
{selectGroup?.adminUserIDs?.includes(item.user_id) ? <AdminSvg /> : null}
</div>
<div
style={{
padding: '0 4px',
whiteSpace: 'nowrap',
minWidth: 0,
textOverflow: 'ellipsis',
overflow: 'hidden',
width: 72,
textAlign: 'center',
}}
title={item.name}
>
{item.name}
</div>
</div>
);
};
2023-04-14 17:31:45 +08:00
/**
*
* @param data
* @param groupMembers
* @returns
*/
export const adminList = (data: any, groupMembers: any) => {
if (data) {
try {
const msg = JSON.parse(data);
if (Array.isArray(msg) && msg.length) {
let arr: any = [];
msg.forEach((el) => {
arr.push(groupMembers[el.userid]?.name);
});
return <div>{arr.join('')}</div>;
}
} catch (e) {
return <></>;
}
}
return <></>;
};
/**
* userid
* @param data
* @returns
*/
export const getAdminList = (data: any) => {
if (data) {
try {
const msg = JSON.parse(data);
if (Array.isArray(msg)) {
let arr: string[] = [];
msg.forEach((item) => {
arr.push(item.userid);
});
return arr;
}
2023-04-24 13:43:36 +08:00
} catch (e) {
/* empty */
}
}
return [];
};
2023-04-14 17:31:45 +08:00
/**
*
* @returns
*/
export const formatTags = (data: any) => {
if (data) {
try {
const tags = JSON.parse(data);
2023-04-18 17:28:06 +08:00
if (Array.isArray(tags) && tags.length) {
2023-04-14 17:31:45 +08:00
return (
<>
{tags.map((item) => {
return (
<div key={`${item.group_name}_${item.tag_name}`}>
{item.group_name}{item.tag_name}
</div>
);
})}
</>
);
}
2023-04-24 13:43:36 +08:00
} catch (e) {
/* empty */
}
2023-04-14 17:31:45 +08:00
}
2023-04-18 17:28:06 +08:00
return <div></div>;
2023-04-14 17:31:45 +08:00
};
2023-04-17 17:47:31 +08:00
type IGroupIcon = {
groupList: any[];
};
/**
*
2023-04-17 17:47:31 +08:00
* @param props
* @returns
*/
export const GroupIcon: React.FC<IGroupIcon> = (props) => {
const [list, setList] = useState<any>([[], [], []]);
useEffect(() => {
let temp: any = [[], [], []];
const { groupList } = props;
for (let index = 0; index < 9; index++) {
const element = groupList[index];
if (index < 3) {
temp[0].push(element);
} else if (index < 6) {
temp[1].push(element);
} else {
temp[2].push(element);
}
}
temp.reverse();
setList(temp);
2023-04-17 17:47:31 +08:00
}, [props.groupList]);
return (
<div style={{ display: 'flex', flexDirection: 'column' }}>
{list.map((item: any[], i: number) => {
return (
<div key={i} style={{ display: 'flex', justifyContent: 'center' }}>
{item.map((el) => {
return el ? (
<div
key={`${el.avatar}_${el.name}`}
style={{ width: 12, height: 12, borderRadius: 2, overflow: 'hidden' }}
>
{el.avatar ? (
<img
style={{ width: '100%', height: '100%', objectFit: 'cover' }}
src={el.avatar}
/>
) : (
<div
style={{
background: '#bae0ff',
width: '100%',
height: '100%',
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
}}
>
<div style={{ transform: 'scale(0.65)', lineHeight: 1 }}>{el.name[0]}</div>
</div>
)}
</div>
2023-04-24 13:43:36 +08:00
) : null;
})}
</div>
);
})}
</div>
);
2023-04-17 17:47:31 +08:00
};