Подготовка голосовых сообщений
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { useDialog } from "@/app/providers/DialogProvider/useDialog";
|
||||
import { useRosettaColors } from "@/app/hooks/useRosettaColors";
|
||||
import { Box, Divider, Flex, Menu, Popover, Text, Transition, useComputedColorScheme } from "@mantine/core";
|
||||
import { IconBarrierBlock, IconCamera, IconDoorExit, IconFile, IconMoodSmile, IconPaperclip, IconSend } from "@tabler/icons-react";
|
||||
import { IconBarrierBlock, IconCamera, IconDoorExit, IconFile, IconMicrophone, IconMoodSmile, IconPaperclip, IconSend } from "@tabler/icons-react";
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import { useBlacklist } from "@/app/providers/BlacklistProvider/useBlacklist";
|
||||
import { filePrapareForNetworkTransfer, generateRandomKey, imagePrepareForNetworkTransfer } from "@/app/utils/utils";
|
||||
@@ -64,6 +64,13 @@ export function DialogInput() {
|
||||
}]
|
||||
], [], true);
|
||||
|
||||
const hasText = message.trim().length > 0;
|
||||
const showSendIcon = hasText || attachments.length > 0;
|
||||
|
||||
const onMicClick = () => {
|
||||
console.info("Start voice record");
|
||||
};
|
||||
|
||||
const fileDialog = useFileDialog({
|
||||
multiple: false,
|
||||
//naccept: '*',
|
||||
@@ -435,9 +442,41 @@ export function DialogInput() {
|
||||
/>
|
||||
</Popover.Dropdown>
|
||||
</Popover>
|
||||
<IconSend stroke={1.5} color={message.trim() == "" && attachments.length <= 0 ? colors.chevrons.active : colors.brandColor} onClick={send} style={{
|
||||
cursor: 'pointer'
|
||||
}} size={25}></IconSend>
|
||||
<Box pos="relative" w={25} h={25}>
|
||||
<Transition mounted={showSendIcon} transition="pop" duration={180} timingFunction="ease">
|
||||
{(styles) => (
|
||||
<IconSend
|
||||
stroke={1.5}
|
||||
color={colors.brandColor}
|
||||
onClick={send}
|
||||
style={{
|
||||
...styles,
|
||||
position: 'absolute',
|
||||
inset: 0,
|
||||
cursor: 'pointer'
|
||||
}}
|
||||
size={25}
|
||||
/>
|
||||
)}
|
||||
</Transition>
|
||||
|
||||
<Transition mounted={!showSendIcon} transition="pop" duration={180} timingFunction="ease">
|
||||
{(styles) => (
|
||||
<IconMicrophone
|
||||
stroke={1.5}
|
||||
color={colors.chevrons.active}
|
||||
onClick={onMicClick}
|
||||
style={{
|
||||
...styles,
|
||||
position: 'absolute',
|
||||
inset: 0,
|
||||
cursor: 'pointer'
|
||||
}}
|
||||
size={25}
|
||||
/>
|
||||
)}
|
||||
</Transition>
|
||||
</Box>
|
||||
</Flex>
|
||||
</Flex>}
|
||||
{blocked && <Box mih={62} bg={colors.boxColor}>
|
||||
|
||||
25
app/providers/PlayerProvider/PlayerProvider.tsx
Normal file
25
app/providers/PlayerProvider/PlayerProvider.tsx
Normal file
@@ -0,0 +1,25 @@
|
||||
import { createContext, useRef } from "react";
|
||||
|
||||
const PlayerContext = createContext(null);
|
||||
/**
|
||||
* Провайдер для Audio/Video плеера
|
||||
*/
|
||||
interface PlayerProviderProps {
|
||||
children: React.ReactNode;
|
||||
}
|
||||
export function PlayerProvider(props : PlayerProviderProps) {
|
||||
|
||||
const audioRef = useRef<HTMLAudioElement>(null);
|
||||
|
||||
const playVoice = () => {
|
||||
|
||||
}
|
||||
|
||||
|
||||
return (
|
||||
<PlayerContext.Provider value={null}>
|
||||
{props.children}
|
||||
<audio ref={audioRef} />
|
||||
</PlayerContext.Provider>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user