264 lines
8.3 KiB
JavaScript
264 lines
8.3 KiB
JavaScript
import { DATA_SUBSCRIBER_KEYS } from '../../../config/constants';
|
|
import assert from 'assert';
|
|
export default OakComponent({
|
|
entity: 'session',
|
|
projection() {
|
|
const { entityProjection } = this.props;
|
|
const proj = {
|
|
id: 1,
|
|
entity: 1,
|
|
entityId: 1,
|
|
lmts: 1,
|
|
openId: 1,
|
|
userId: 1,
|
|
user: {
|
|
id: 1,
|
|
name: 1,
|
|
nickname: 1,
|
|
mobile$user: {
|
|
$entity: 'mobile',
|
|
data: {
|
|
id: 1,
|
|
mobile: 1,
|
|
userId: 1,
|
|
},
|
|
},
|
|
extraFile$entity: {
|
|
$entity: 'extraFile',
|
|
data: {
|
|
id: 1,
|
|
tag1: 1,
|
|
origin: 1,
|
|
bucket: 1,
|
|
objectId: 1,
|
|
filename: 1,
|
|
extra1: 1,
|
|
extension: 1,
|
|
type: 1,
|
|
entity: 1,
|
|
entityId: 1,
|
|
},
|
|
filter: {
|
|
tag1: {
|
|
$in: ['avatar'],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
sessionMessage$session: {
|
|
$entity: 'sessionMessage',
|
|
data: {
|
|
id: 1,
|
|
text: 1,
|
|
type: 1,
|
|
userId: 1,
|
|
wechatUserId: 1,
|
|
createTime: 1,
|
|
$$createAt$$: 1,
|
|
aaoe: 1,
|
|
},
|
|
sorter: [
|
|
{
|
|
$attr: {
|
|
$$createAt$$: 1,
|
|
},
|
|
$direction: 'desc',
|
|
},
|
|
],
|
|
indexFrom: 0,
|
|
count: 1,
|
|
},
|
|
$$createAt$$: 1,
|
|
};
|
|
if (entityProjection) {
|
|
Object.assign(proj, { ...entityProjection });
|
|
}
|
|
return proj;
|
|
},
|
|
isList: true,
|
|
formData: function ({ data: sessions, features, props }) {
|
|
const { entityDisplay, entityProjection } = this.props;
|
|
if (entityProjection &&
|
|
entityDisplay &&
|
|
sessions &&
|
|
sessions.length > 0) {
|
|
const newSessions = entityDisplay(sessions);
|
|
return {
|
|
sessions: newSessions,
|
|
};
|
|
}
|
|
//排序待框架实现
|
|
return {
|
|
sessions: sessions?.sort((a, b) => b.lmts - a.lmts),
|
|
};
|
|
},
|
|
lifetimes: {
|
|
async attached() {
|
|
const token = this.features.token.getTokenValue();
|
|
if (!token) {
|
|
this.redirectTo({
|
|
url: '/login',
|
|
backUrl: encodeURIComponent(window.location.href),
|
|
}, undefined, true);
|
|
return;
|
|
}
|
|
const { sessionId } = this.props;
|
|
// 父层传入sessionId 默认聊天
|
|
if (sessionId) {
|
|
this.setSelectedSessionId(sessionId);
|
|
}
|
|
},
|
|
async ready() {
|
|
const { entityFilter, entityFilterSubStr } = this.props;
|
|
let unSub;
|
|
if (entityFilter) {
|
|
assert(entityFilterSubStr);
|
|
unSub = await this.subDataEvents([entityFilterSubStr]);
|
|
}
|
|
else {
|
|
const userId = this.features.token.getUserId();
|
|
unSub = await this.subDataEvents([`${DATA_SUBSCRIBER_KEYS.sessionList}-u-${userId}`]);
|
|
}
|
|
this.setState({
|
|
unSub,
|
|
});
|
|
},
|
|
detached() {
|
|
const { entityFilter } = this.props;
|
|
const { unSub } = this.state;
|
|
if (entityFilter) {
|
|
unSub && unSub();
|
|
}
|
|
else {
|
|
unSub && unSub();
|
|
}
|
|
},
|
|
},
|
|
data: {
|
|
unReadLength: 0,
|
|
selectedSessionId: '',
|
|
unSub: undefined,
|
|
},
|
|
properties: {
|
|
entity: '',
|
|
entityFilter: null,
|
|
entityFilterSubStr: '',
|
|
entityDisplay: (data) => [],
|
|
entityProjection: null,
|
|
sessionId: '',
|
|
dialog: false,
|
|
onItemClick: null,
|
|
},
|
|
filters: [
|
|
{
|
|
filter() {
|
|
const { entityFilter, sessionId } = this.props;
|
|
if (entityFilter) {
|
|
// 说明来源于entity
|
|
return {
|
|
...entityFilter,
|
|
/* $or: [
|
|
{
|
|
userId: {
|
|
$exists: false,
|
|
},
|
|
},
|
|
{
|
|
'#id': 'node-1',
|
|
user: {
|
|
session$user: {
|
|
'#sqp': 'not in',
|
|
'$expr1': {
|
|
$ne: [
|
|
{
|
|
'#refAttr': 'id',
|
|
},
|
|
{
|
|
'#refId': 'node-1',
|
|
'#refAttr': 'id',
|
|
}
|
|
]
|
|
},
|
|
$expr2: {
|
|
$eq: [
|
|
{
|
|
'#refAttr': 'userId',
|
|
'#refId': 'node-1',
|
|
},
|
|
{
|
|
'#refAttr': 'userId',
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
], */
|
|
};
|
|
}
|
|
const userId = this.features.token.getUserId();
|
|
return {
|
|
userId,
|
|
};
|
|
},
|
|
'#name': 'propsQuery',
|
|
},
|
|
],
|
|
sorters: [
|
|
{
|
|
sorter: {
|
|
$attr: {
|
|
lmts: 1,
|
|
},
|
|
$direction: 'desc',
|
|
},
|
|
},
|
|
],
|
|
methods: {
|
|
setSelectedSessionId(sessionId) {
|
|
this.setState({
|
|
selectedSessionId: sessionId,
|
|
});
|
|
},
|
|
getFilter() {
|
|
const { entity, sessionId } = this.props;
|
|
// 当外层upsert传入id时走这里
|
|
if (sessionId) {
|
|
return {
|
|
id: sessionId,
|
|
};
|
|
}
|
|
// bypark,byCompany,byplatform走这里
|
|
const userId = this.features.token.getUserId();
|
|
},
|
|
async clearUnRead() {
|
|
// =框架支持
|
|
// const filter = getFilter();
|
|
// await this.execute({
|
|
// action: 'update',
|
|
// data:
|
|
// this.props.userType === 'employer'
|
|
// ? {
|
|
// isEmployerRead: true,
|
|
// }
|
|
// : {
|
|
// isEntityRead: true,
|
|
// },
|
|
// filter,
|
|
// });
|
|
// await this.refresh();
|
|
},
|
|
// mobile独有
|
|
navigateToMessage(sessionId) {
|
|
if (typeof this.props.onItemClick === 'function') {
|
|
this.props.onItemClick(sessionId);
|
|
return;
|
|
}
|
|
this.navigateTo({
|
|
url: '/session/sessionMessage',
|
|
sessionId,
|
|
}, undefined, true);
|
|
},
|
|
},
|
|
});
|