tweb/src/components/wrappers/getUserStatusString.ts
Eduard Kuzmenko 25d222ded4 eslint init
2022-08-04 08:49:54 +02:00

96 lines
2.2 KiB
TypeScript

/*
* https://github.com/morethanwords/tweb
* Copyright (C) 2019-2021 Eduard Kuzmenko
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*/
import {formatFullSentTimeRaw} from '../../helpers/date';
import {User} from '../../layer';
import {LangPackKey, i18n} from '../../lib/langPack';
import {REPLIES_PEER_ID, SERVICE_PEER_ID} from '../../lib/mtproto/mtproto_config';
export default function getUserStatusString(user: User.user): HTMLElement {
if(!user) {
return document.createElement('span');
}
let key: LangPackKey;
let args: any[];
switch(user.id) {
case REPLIES_PEER_ID.toUserId():
key = 'Peer.RepliesNotifications';
break;
case SERVICE_PEER_ID.toUserId():
key = 'Peer.ServiceNotifications';
break;
default: {
if(user.pFlags.bot) {
key = 'Bot';
break;
}
if(user.pFlags.support) {
key = 'SupportStatus';
break;
}
switch(user.status?._) {
case 'userStatusRecently': {
key = 'Lately';
break;
}
case 'userStatusLastWeek': {
key = 'WithinAWeek';
break;
}
case 'userStatusLastMonth': {
key = 'WithinAMonth';
break;
}
case 'userStatusOffline': {
const date = user.status.was_online;
const today = new Date();
const now = today.getTime() / 1000 | 0;
const diff = now - date;
if(diff < 60) {
key = 'Peer.Status.justNow';
} else if(diff < 3600) {
key = 'Peer.Status.minAgo';
const c = diff / 60 | 0;
args = [c];
} else if(diff < 86400 && today.getDate() === new Date(date * 1000).getDate()) {
key = 'LastSeen.HoursAgo';
const c = diff / 3600 | 0;
args = [c];
} else {
key = 'Peer.Status.LastSeenAt';
const {dateEl, timeEl} = formatFullSentTimeRaw(date);
args = [dateEl, timeEl];
}
break;
}
case 'userStatusOnline': {
key = 'Online';
break;
}
default: {
key = 'ALongTimeAgo';
break;
}
}
break;
}
}
return i18n(key, args);
}