import React, { useCallback, useMemo } from 'react'; import { Room } from 'matrix-js-sdk'; import { usePowerLevels } from '../../hooks/usePowerLevels'; import { useMatrixClient } from '../../hooks/useMatrixClient'; import { SoundboardPackEditor } from './SoundboardPackEditor'; import { SoundboardContent, SoundboardPack } from '../../plugins/soundboard'; import { StateEvent } from '../../../types/matrix/room'; import { useRoomSoundboardPack } from '../../hooks/useSoundboardPacks'; import { PackAddress } from '../../plugins/custom-emoji/PackAddress'; import { randomStr } from '../../utils/common'; import { useRoomPermissions } from '../../hooks/useRoomPermissions'; import { useRoomCreators } from '../../hooks/useRoomCreators'; type RoomSoundboardPackProps = { room: Room; stateKey: string; }; export function RoomSoundboardPack({ room, stateKey }: RoomSoundboardPackProps) { const mx = useMatrixClient(); const userId = mx.getUserId()!; const powerLevels = usePowerLevels(room); const creators = useRoomCreators(room); const permissions = useRoomPermissions(creators, powerLevels); const canEdit = permissions.stateEvent( StateEvent.LotusSoundboardRoom as unknown as keyof import('matrix-js-sdk').StateEvents, userId, ); const fallbackPack = useMemo( () => new SoundboardPack(randomStr(4), {}, new PackAddress(room.roomId, stateKey)), [room.roomId, stateKey], ); const pack = useRoomSoundboardPack(room, stateKey) ?? fallbackPack; const handleUpdate = useCallback( async (content: SoundboardContent) => { await mx.sendStateEvent( room.roomId, StateEvent.LotusSoundboardRoom as unknown as keyof import('matrix-js-sdk').StateEvents, content as never, stateKey, ); }, [mx, room.roomId, stateKey], ); return ; }