tweb/src/components/wrappers/localSticker.ts

71 lines
1.8 KiB
TypeScript

/*
* https://github.com/morethanwords/tweb
* Copyright (C) 2019-2021 Eduard Kuzmenko
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*/
import {Middleware} from '../../helpers/middleware';
import {MyDocument} from '../../lib/appManagers/appDocsManager';
import {AppManagers} from '../../lib/appManagers/managers';
import lottieLoader, {LottieAssetName} from '../../lib/rlottie/lottieLoader';
import RLottiePlayer from '../../lib/rlottie/rlottiePlayer';
import rootScope from '../../lib/rootScope';
import wrapSticker from './sticker';
export default async function wrapLocalSticker({
emoji,
width,
height,
assetName,
middleware,
managers = rootScope.managers,
loop = false,
autoplay = true
}: {
doc?: MyDocument,
// url?: string,
emoji?: string,
assetName?: LottieAssetName,
width: number,
height: number,
managers?: AppManagers,
middleware?: Middleware,
autoplay?: boolean,
loop?: false
}) {
const container = document.createElement('div');
container.classList.add('media-sticker-wrapper');
let playerPromise: Promise<RLottiePlayer>;
if(assetName) {
playerPromise = lottieLoader.loadAnimationAsAsset({
container,
loop,
autoplay,
width,
height,
noCache: true,
middleware
}, assetName).then((animation) => {
return lottieLoader.waitForFirstFrame(animation);
});
} else if(emoji) {
const doc = await managers.appStickersManager.getAnimatedEmojiSticker(emoji);
if(doc) playerPromise = wrapSticker({
doc,
div: container,
loop,
play: autoplay,
width,
height,
emoji,
managers,
middleware
}).then((result) => {
return result.render as Promise<RLottiePlayer>;
});
}
return {container, promise: playerPromise};
}