This commit is contained in:
Alexander Zinchuk 2021-06-14 02:42:18 +03:00
parent 9b8a87217c
commit 3f4901df28
31 changed files with 47 additions and 51 deletions

2
dist/0.c2412143c16cd7b04f22.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/0.c2412143c16cd7b04f22.js.map vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
dist/4.58ce129136041aa9506a.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/4.58ce129136041aa9506a.js.map vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
dist/5.40a5f6df45d6ba7e84fd.js.map vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,2 @@
!function(e){var r={};function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:n})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var o in e)t.d(n,o,function(r){return e[r]}.bind(null,o));return n},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},t.p="",t(t.s=0)}([function(e,r,t){"use strict";t.r(r);new Set(["newMessage","newScheduledMessage","deleteMessages","deleteScheduledMessages","deleteHistory"]),"undefined"!=typeof window&&window.innerHeight;self.onerror=e=>{console.error(e),o({type:"unhandledError",error:{message:e.error.message||"Uncaught exception in worker"}})},self.addEventListener("unhandledrejection",e=>{console.error(e),o({type:"unhandledError",error:{message:e.reason.message||"Uncaught rejection in worker"}})});const n=new Map;function o(e,r){r?postMessage(e,r):postMessage(e)}let s;self.importScripts("rlottie-wasm.js");const a=new Promise(e=>{Module.onRuntimeInitialized=()=>{s={init:Module.cwrap("lottie_init","",[]),destroy:Module.cwrap("lottie_destroy","",["number"]),resize:Module.cwrap("lottie_resize","",["number","number","number"]),buffer:Module.cwrap("lottie_buffer","number",["number"]),render:Module.cwrap("lottie_render","",["number","number"]),loadFromData:Module.cwrap("lottie_load_from_data","number",["number","number"])},e()}}),i=new Map;var c;c={init:async function(e,r,t,n,o,c){s||await a;const u=JSON.stringify(r),d=allocate(intArrayFromString(u),"i8",0),l=s.init(),f=s.loadFromData(l,d);s.resize(l,t,t),i.set(e,{imgSize:t,reduceFactor:o,handle:l}),c(Math.ceil(f/o))},renderFrames:async function(e,r,t,n){s||await a;const{imgSize:o,reduceFactor:c,handle:u}=i.get(e);for(let e=r;e<=t;e++){const r=e*c;s.render(u,r);const t=s.buffer(u),a=Module.HEAPU8.subarray(t,t+o*o*4);n(e,new Uint8ClampedArray(a).buffer)}},destroy:function(e){const r=i.get(e);s.destroy(r.handle),i.delete(e)}},onmessage=async e=>{const{data:r}=e;switch(r.type){case"callMethod":{const{messageId:e,name:t,args:s}=r;try{if(e){const r=(...r)=>{const t=r[r.length-1];o({type:"methodCallback",messageId:e,callbackArgs:r},t instanceof ArrayBuffer?[t]:void 0)};n.set(e,r),s.push(r)}const[r,a]=await c[t](...s)||[];e&&o({type:"methodResponse",messageId:e,response:r},a)}catch(r){e&&o({type:"methodResponse",messageId:e,error:{message:r.message}})}e&&n.delete(e);break}case"cancelProgress":{const e=n.get(r.messageId);e&&(e.isCanceled=!0);break}}}}]);
//# sourceMappingURL=56216b5dd7490b245f95.worker.js.map
//# sourceMappingURL=d21fb25520204faa2094.worker.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
dist/index.html vendored
View File

@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="apple-mobile-web-app-capable" content="yes"><link rel="apple-touch-icon" sizes="180x180" href="./apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="./favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="./favicon-16x16.png"><link rel="manifest" href="./site.webmanifest"><link rel="mask-icon" href="./safari-pinned-tab.svg" color="#3a8bf5"><meta name="apple-mobile-web-app-title" content="Telegram T"><meta name="application-name" content="Telegram T"><meta name="msapplication-TileColor" content="#2b5797"><meta name="msapplication-config" content="./browserconfig.xml"><meta name="theme-color" content="#ffffff"><title>Telegram</title><link href="main.9615bb0fe696e5cdc29b.css" rel="stylesheet"></head><body><div id="root"></div><div id="portals"></div><script src="main.8e16668665a300b53952.js"></script></body></html>
<!doctype html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="apple-mobile-web-app-capable" content="yes"><link rel="apple-touch-icon" sizes="180x180" href="./apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="./favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="./favicon-16x16.png"><link rel="manifest" href="./site.webmanifest"><link rel="mask-icon" href="./safari-pinned-tab.svg" color="#3a8bf5"><meta name="apple-mobile-web-app-title" content="Telegram T"><meta name="application-name" content="Telegram T"><meta name="msapplication-TileColor" content="#2b5797"><meta name="msapplication-config" content="./browserconfig.xml"><meta name="theme-color" content="#ffffff"><title>Telegram</title><link href="main.9615bb0fe696e5cdc29b.css" rel="stylesheet"></head><body><div id="root"></div><div id="portals"></div><script src="main.33e6cd81e494b7bcb940.js"></script></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

4
dist/report.html vendored

File diff suppressed because one or more lines are too long

View File

@ -53,6 +53,7 @@ import fastSmoothScroll, { isAnimatingScroll } from '../../util/fastSmoothScroll
import renderText from '../common/helpers/renderText';
import useLang, { LangFn } from '../../hooks/useLang';
import useWindowSize from '../../hooks/useWindowSize';
import useBackgroundMode from '../../hooks/useBackgroundMode';
import Loading from '../ui/Loading';
import MessageScroll from './MessageScroll';
@ -225,6 +226,8 @@ const MessageList: FC<OwnProps & StateProps & DispatchProps> = ({
}
});
useBackgroundMode(freezeForReading, unfreezeForReading);
useOnChange(() => {
memoFocusingIdRef.current = focusingId;

View File

@ -1,7 +1,5 @@
import { MutableRefObject } from 'react';
import React, {
FC, useCallback, useEffect, useRef,
} from '../../lib/teact/teact';
import React, { FC, useCallback, useRef } from '../../lib/teact/teact';
import { MESSAGE_LIST_SENSITIVE_AREA } from '../../config';
import resetScroll from '../../util/resetScroll';
@ -23,10 +21,7 @@ type OwnProps = {
};
const FAB_THRESHOLD = 50;
const TOOLS_FREEZE_TIMEOUT = 100;
// Local flag is used because `freeze/unfreeze` methods are controlled by heavy animation
let areToolsFrozen = false;
const TOOLS_FREEZE_TIMEOUT = 1000;
const MessageScroll: FC<OwnProps> = ({
containerRef,
@ -49,10 +44,6 @@ const MessageScroll: FC<OwnProps> = ({
const fabTriggerRef = useRef<HTMLDivElement>(null);
const toggleScrollTools = useCallback(() => {
if (areToolsFrozen) {
return;
}
if (!messageIds || !messageIds.length) {
onFabToggle(false);
onNotchToggle(false);
@ -118,35 +109,33 @@ const MessageScroll: FC<OwnProps> = ({
const {
observe: observeIntersectionForNotch,
freeze: freezeForNotch,
unfreeze: unfreezeForNotch,
} = useIntersectionObserver({
rootRef: containerRef,
}, toggleScrollTools);
useOnIntersect(fabTriggerRef, observeIntersectionForNotch);
// Do not load more and show FAB when focusing
useOnChange(() => {
if (focusingId) {
freezeForLoadMore();
freezeForFab();
} else {
unfreezeForFab();
unfreezeForLoadMore();
}
}, [focusingId]);
// Workaround for FAB and notch flickering with tall incoming message
useOnChange(() => {
areToolsFrozen = true;
freezeForFab();
freezeForNotch();
setTimeout(() => {
areToolsFrozen = false;
unfreezeForNotch();
unfreezeForFab();
}, TOOLS_FREEZE_TIMEOUT);
}, [messageIds]);
// Workaround for stuck FAB when many unread messages
useEffect(toggleScrollTools, [firstUnreadId]);
return (
<div className={className} teactFastList>
<div ref={backwardsTriggerRef} key="backwards-trigger" className="backwards-trigger" />

View File

@ -41,19 +41,23 @@ export function useIntersectionObserver({
}, rootCallback?: RootCallback): Response {
const controllerRef = useRef<IntersectionController>();
const rootCallbackRef = useRef<RootCallback>();
const isFrozenRef = useRef<boolean>();
const freezeFlagsRef = useRef(0);
const onUnfreezeRef = useRef<NoneToVoidFunction>();
rootCallbackRef.current = rootCallback;
const freeze = useCallback(() => {
isFrozenRef.current = true;
freezeFlagsRef.current++;
}, []);
const unfreeze = useCallback(() => {
isFrozenRef.current = false;
if (!freezeFlagsRef.current) {
return;
}
if (onUnfreezeRef.current) {
freezeFlagsRef.current--;
if (!freezeFlagsRef.current && onUnfreezeRef.current) {
onUnfreezeRef.current();
onUnfreezeRef.current = undefined;
}
@ -104,7 +108,7 @@ export function useIntersectionObserver({
entriesAccumulator.set(entry.target, entry);
});
if (isFrozenRef.current) {
if (freezeFlagsRef.current) {
onUnfreezeRef.current = () => {
observerCallback();
};