Commit fe6e470e by Sixong.Zhu

Merge branch 'master' into pre

parents 89e76ac1 3e2c1309
......@@ -207,7 +207,7 @@
QuestionAnswerMessage,
ActionMessage,
PayMessage,
NotifyMessage
NotifyMessage,
},
})
export default class Message extends Vue {
......@@ -326,8 +326,13 @@
return true;
}
const senderEid = this.messageBody.eid;
return senderEid!.toString() === this.chatMyId!.toString();
const senderEid = +this.messageBody.eid;
const m1 = senderEid === +this.chatMyId;
if (m1 && this.chatMembers) {
const m2 = _.find(this.chatMembers, (i) => +i.eid === senderEid);
return m2 && +m2.oid === +this.messageBody.oid;
}
return false;
}
private get userName() {
......
......@@ -164,6 +164,7 @@
private emoji: EmojiItem[] = [];
private percentage = 0;
private reloadTimer = 0;
@Watch("chatId")
private onChatIdChanged(v: number, old: number) {
......@@ -344,7 +345,10 @@
if (this.chatId) {
chatCache[this.chatId] = [];
}
setTimeout(() => this.getMyChatList(), 120);
if (this.reloadTimer) {
clearTimeout(this.reloadTimer);
}
this.reloadTimer = setTimeout(() => this.getMyChatList(), 120);
}
/**
......
......@@ -124,6 +124,16 @@ export function getLastMessageId(msgs: Message[] | any) {
return 0;
}
let loadingChatList = false;
let cachedLoadingChatListAction: ((value: ChatType[]) => void)[] = [];
function clearAction(value: ChatType[]) {
for (const item of cachedLoadingChatListAction) {
item(value);
}
cachedLoadingChatListAction = [];
return value;
}
export default {
namespaced: true,
state: () => ({
......@@ -222,10 +232,12 @@ export default {
[ChatStore.MUTATION_SAVE_MYSELF_ID](state) {
if (!state[ChatStore.STATE_CHAT_MY_ID]) {
Chat.getToken().then((token) => {
if (token) {
const eid =
decodeJwt<{ user_id: string; sub: string }>(token);
state[ChatStore.STATE_CHAT_MY_ID] = String(eid.user_id);
state[ChatStore.STATE_CHAT_MY_UID] = eid.sub;
}
});
}
},
......@@ -410,6 +422,14 @@ export default {
async [ChatStore.ACTION_GET_MY_CHAT_LIST]({ commit, state }) {
commit(ChatStore.MUTATION_SAVE_MYSELF_ID);
if (loadingChatList) {
return new Promise<ChatType[]>((resolve) =>
cachedLoadingChatListAction.push(resolve)
);
}
loadingChatList = true;
let cache = await dbController.getChatList();
cache.sort((x, y) => (x.last_msg_ts < y.last_msg_ts ? 1 : -1));
......@@ -465,9 +485,9 @@ export default {
resolve(buildUnreadMessage(cache));
});
});
});
}).finally(() => (loadingChatList = false));
return await execute().then((d) => d);
return await execute().then((d) => clearAction(d));
}
const execute = () =>
......@@ -488,9 +508,9 @@ export default {
resolve(buildUnreadMessage(items));
});
});
});
}).finally(() => (loadingChatList = false));
return await execute().then((d) => d);
return await execute().then((d) => clearAction(d));
},
async [ChatStore.ACTION_FORCE_RELOAD_CHAT_LIST]({ commit }) {
return new Promise<ChatType[]>((resolve) => {
......
......@@ -56,8 +56,7 @@ class Chat {
this.eventHub = option.eventHub || null;
option.message && (this.messageController = option.message);
option.avatar !== undefined &&
(this.defaultAvatar = option.avatar);
option.avatar !== undefined && (this.defaultAvatar = option.avatar);
await this.setupIndexDb(option.orgId());
this.token = async () => option.sdk().global.jwtToken;
......@@ -73,7 +72,9 @@ class Chat {
// this.keywords = ["社保"];
const path = socketMapping.get(option.connection as ImEnvironment) as string || option.connection as string;
const path =
(socketMapping.get(option.connection as ImEnvironment) as string) ||
(option.connection as string);
return this.initChatSdk((this.ws = path)).finally(() => {
this.connected = true;
......@@ -86,7 +87,7 @@ class Chat {
private setupIndexDb(orgId: number | string) {
if (this._sdk) {
const s = this._sdk();
const key = `${s.global.uid}-${orgId || 0}`
const key = `${s.global.uid}-${orgId || 0}`;
return dbController.setup(key);
}
return Promise.reject();
......@@ -134,8 +135,11 @@ class Chat {
}
public async getToken() {
if (this.token) {
return this.trimToken(await this.token());
}
return Promise.resolve("");
}
private async initChatSdk(uri: string) {
if (xim.isConnected()) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment