Skip to content

Instantly share code, notes, and snippets.

export const useVideo = (videoRef: RefObject<HTMLVideoElement>, device: MediaDeviceInfo) => {
const [started, setStarted] = useState(false);
useEffect(() => {
if (!videoRef.current || !device) {
return noop;
}
const videoService = new VideoService();
const start = async () => {
@MrMeison
MrMeison / useMap.tsx
Created August 1, 2022 11:24
leaflet useMap
import {useEffect, useState, MutableRefObject} from 'react';
import {Map, TileLayer} from 'leaflet';
import {City} from '../types/city';
function useMap(
mapRef: MutableRefObject<HTMLElement | null>,
city: City
): Map | null {
const [map, setMap] = useState<Map | null>(null);
const Map = (props: PropsMap) => {
...
useEffect(() => {
if (!map) {
return;
}
const layerGroup = new LayerGroup();
points.forEach((point) => {
@MrMeison
MrMeison / auth
Created September 14, 2022 16:17
// Auth провайдер, обертка для прокидывания информации о пользователе
const AuthProvider = ({ children }) => {
const currentUser = JSON.parse(localStorage.getItem('user'));
const [user, setUser] = useState(currentUser ? { username: currentUser.username } : null);
const logIn = (userData) => {
localStorage.setItem('user', JSON.stringify(userData));
setUser({ username: userData.username });
};
const withAcknowledgement = (socketFunc) => (...args) => new Promise((resolve, reject) => {
let state = 'pending'; // eslint-disable-line
const timer = setTimeout(() => {
state = 'rejected';
reject();
}, 3000);
socketFunc(...args, (response) => {
if (state !== 'pending') return;