tweb/src/components/sendingStatus.ts

92 lines
2.4 KiB
TypeScript
Raw Normal View History

/*
* https://github.com/morethanwords/tweb
* Copyright (C) 2019-2021 Eduard Kuzmenko
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*/
2022-08-04 08:49:54 +02:00
import {Message} from '../layer';
/* import findUpClassName from "../helpers/dom/findUpClassName";
import rootScope from "../lib/rootScope";
import Transition from "./transition"; */
export enum SENDING_STATUS {
Error = -1,
Pending,
Sent,
Read
}
export function getSendingStatus(message: Message.message | Message.messageService) {
2022-08-04 08:49:54 +02:00
return message.pFlags.is_outgoing ?
SENDING_STATUS.Pending : (
2022-08-04 08:49:54 +02:00
message.pFlags.unread ?
SENDING_STATUS.Sent :
SENDING_STATUS.Read
);
}
2023-01-06 20:27:29 +01:00
type C = 'check' | 'checks' | 'sending' | 'sendingerror' | 'premium_lock';
export function setSendingStatus(
2022-08-04 08:49:54 +02:00
container: HTMLElement,
2023-01-06 20:27:29 +01:00
message?: C | Message.message | Message.messageService,
disableAnimationIfRippleFound?: boolean
) {
2023-01-06 20:27:29 +01:00
let className: C;
if(typeof(message) === 'string') {
className = message;
} else if(message?.pFlags.out) {
2022-09-02 19:43:54 +02:00
if(message.error) {
className = 'sendingerror';
} else if(message.pFlags.is_outgoing) {
className = 'sending';
} else if(message.pFlags.unread) {
className = 'check';
} else {
className = 'checks';
}
}
if(!className) {
container.textContent = '';
return;
}
2022-08-04 08:49:54 +02:00
const iconClassName = 'tgico-' + className;
const lastElement = container.lastElementChild as HTMLElement;
if(lastElement && lastElement.classList.contains(iconClassName)) {
return;
}
2022-08-04 08:49:54 +02:00
const element = document.createElement('i');
element.classList.add('sending-status-icon', /* 'transition-item', */ iconClassName);
container.append(element);
if(lastElement) {
lastElement.remove();
}
/* if(!lastElement) {
element.classList.add('active');
return;
}
const select = Transition(container, undefined, 350, () => {
lastElement.remove();
}, false, true, false);
let animate = rootScope.settings.animationsEnabled && className !== 'sending' && !lastElement.classList.contains('tgico-sending');
if(disableAnimationIfRippleFound && animate) {
const parent = findUpClassName(container, 'rp');
if(parent.querySelector('.c-ripple__circle') || parent.matches(':hover')) {
animate = false;
}
}
select(element, animate, lastElement); */
/* SetTransition(lastElement, 'is-visible', false, 350, () => {
// lastElement.remove();
}, 2);
SetTransition(element, 'is-visible', true, 350, undefined, 2); */
}