Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
5632081
Merge pull request #54 from getasense-IA/development
sciencebased Apr 27, 2024
2558648
Merge pull request #56 from getasense-IA/development
sciencebased May 1, 2024
5647f30
Merge pull request #63 from getasense-IA/development
sciencebased May 9, 2024
13a9e23
Merge pull request #67 from getasense-IA/development
sciencebased May 17, 2024
45c1000
Merge pull request #69 from getasense-IA/development
sciencebased May 17, 2024
8d85a2a
Merge pull request #72 from getasense-IA/development
sciencebased May 17, 2024
179b0d0
Merge pull request #74 from getasense-IA/development
sciencebased May 17, 2024
b0c8819
Merge pull request #79 from getasense-IA/development
sciencebased May 22, 2024
02a546e
Merge pull request #81 from GetASense-frontend/development
sciencebased May 30, 2024
adce9f1
Added test
sciencebased May 30, 2024
5ca34ba
Merge pull request #90 from GetASense-frontend/test-pipelines
sciencebased May 30, 2024
2924ef7
Merge pull request #97 from GetASense-frontend/development
sciencebased Jun 3, 2024
ad0ce17
Merge pull request #103 from GetASense-frontend/development
sciencebased Jun 4, 2024
8bc4522
Merge pull request #108 from GetASense-frontend/development
sciencebased Jun 4, 2024
df85815
Merge pull request #110 from GetASense-frontend/development
sciencebased Jun 4, 2024
4acd7f2
Merge pull request #113 from GetASense-frontend/development
sciencebased Jun 5, 2024
502b057
Merge pull request #115 from GetASense-frontend/development
sciencebased Jun 11, 2024
9e644c6
Merge pull request #117 from GetASense-frontend/development
sciencebased Jun 11, 2024
ac4aa1e
Merge pull request #122 from GetASense-frontend/development
sciencebased Jun 20, 2024
905bde6
Merge pull request #125 from GetASense-frontend/development
sciencebased Jun 21, 2024
e19119d
Merge branch 'development' of github.com:getasense-IA/backoffice into…
Leja22leja Jun 29, 2024
6bb5054
More Options Media added
Leja22leja Jul 3, 2024
1242cbb
Merge branch 'development' into feature/cameraButton
sciencebased Jul 3, 2024
c810fb9
Update README.md
sciencebased Jul 3, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion src/components/Chat/ChatDetail.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ function ChatDetail() {
const [websocket, setWebSocket] = useState(null);
const [pastedImages, setPastedImages] = useState([]);
const [selectedImage, setSelectedImage] = useState(null);
const [moreSelection, setMoreSelection] = useState(false);
const [hasCameraPermission, setHasCameraPermission] = useState(false);
//const { userRole, changeUserRole } = useUserRole();
const {
userUuid,
Expand Down Expand Up @@ -68,6 +70,8 @@ function ChatDetail() {
handleEmojiClick,
handleSelectEmoji,
handleCloseEmojiPicker,
handleOpenMoreSelection,
handleCloseMoreSelection,
handleMediaButtonClick,
handleFileChange,
handleCloseMediaConfirm,
Expand All @@ -77,9 +81,10 @@ function ChatDetail() {
handleShowImage,
handleCloseModalImage,
handleVoiceMessages,
handleCameraClick,
isRecording,
mimeType,
} = useAgentInput(userUuid, selectedChat, idToken, company, typing, setTyping, inputRef, showEmojiPicker, setShowEmojiPicker, showMediaConfirm, setShowMediaConfirm, selectedMedia, setSelectedMedia, setMessages, fileInputRef, setIsLoading, isLoading, sendWebSocketMessage, pastedImages, setPastedImages, selectedImage, setSelectedImage);
} = useAgentInput(userUuid, selectedChat, idToken, company, typing, setTyping, inputRef, showEmojiPicker, setShowEmojiPicker, showMediaConfirm, setShowMediaConfirm, selectedMedia, setSelectedMedia, setMessages, fileInputRef, setIsLoading, isLoading, sendWebSocketMessage, pastedImages, setPastedImages, selectedImage, setSelectedImage, setMoreSelection, moreSelection, setHasCameraPermission, hasCameraPermission);
const {
handleArrowClick,
handleScroll
Expand Down Expand Up @@ -163,6 +168,11 @@ function ChatDetail() {
handleShowImage={handleShowImage}
handleCloseModalImage={handleCloseModalImage}
selectedImage={selectedImage}
handleOpenMoreSelection={handleOpenMoreSelection}
handleCloseMoreSelection={handleCloseMoreSelection}
moreSelection={moreSelection}
handleCameraClick={handleCameraClick}
hasCameraPermission={hasCameraPermission}
/>
</>
)}
Expand Down
15 changes: 12 additions & 3 deletions src/components/Chat/ChatDetail/ChatInput.jsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import React from 'react';
import { BiHappy, BiMicrophone} from 'react-icons/bi';
import { FiPaperclip } from "react-icons/fi";
import { FaPlus } from "react-icons/fa6";
import { MdSend } from 'react-icons/md';
import RoundedBtn from '../../common/RoundedBtn';
import EmojiPicker from '../EmojiPicker';
import MediaMessagePreview from '../MediaMessagePreview';
import ImageGallery from './ChatInput/ImageGallery';
import MoreOptionsInput from '../../common/MoreOptionsInput';

const ChatInput = ({
typing,
Expand All @@ -31,7 +32,12 @@ const ChatInput = ({
selectedImage,
handleRemoveImage,
handleShowImage,
handleCloseModalImage
handleCloseModalImage,
handleOpenMoreSelection,
handleCloseMoreSelection,
handleCameraClick,
hasCameraPermission,
moreSelection
}) => {

return (
Expand All @@ -47,8 +53,11 @@ const ChatInput = ({
/>
)}
<span className="mr-2">
<RoundedBtn icon={<FiPaperclip />} onClick={handleMediaButtonClick} />
<RoundedBtn icon={<FaPlus />} onClick={handleOpenMoreSelection} />
</span>
{moreSelection && (
<MoreOptionsInput media={handleMediaButtonClick} camera={handleCameraClick} handleClose={handleCloseMoreSelection}/>
)}
{showMediaConfirm && (
<MediaMessagePreview
selectedMedia={selectedMedia}
Expand Down
35 changes: 35 additions & 0 deletions src/components/common/MoreOptionsInput.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import React, { useEffect, useRef, useState } from "react";
import { FiPaperclip } from "react-icons/fi";
import { MdCameraAlt } from 'react-icons/md';
import RoundedBtn from "./RoundedBtn";

function MoreOptionsInput({ media, camera, handleClose }) {
const divRef = useRef(null);

useEffect(() => {
const handleClickOutside = (event) => {
if (divRef.current && !divRef.current.contains(event.target)) {
handleClose();
}
};

document.addEventListener('mousedown', handleClickOutside);

return () => {
document.removeEventListener('mousedown', handleClickOutside);
};
}, [handleClose]);

return (
<>
<div className="absolute inset-0 bg-black bg-opacity-50 flex justify-start items-end mb-16">
<div ref={divRef} className="p-2 bg-[#0c4a6e] rounded-lg flex flex-col ml-12">
<RoundedBtn icon={<FiPaperclip />} onClick={media} />
<RoundedBtn icon={<MdCameraAlt />} onClick={camera} />
</div>
</div>
</>
);
}

export default MoreOptionsInput;
31 changes: 30 additions & 1 deletion src/hooks/useAgentInput.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@ import postMessageToWhatsApp from '../logic/PostMessageToWhatsapp';
import MicRecorder from 'mic-recorder-to-mp3'


const useAgentInput = (userUuid, selectedChat, idToken, company, externalTyping, externalSetTyping, externalInputRef, externalShowEmojiPicker, externalSetShowEmojiPicker, externalShowMediaConfirm, externalSetShowMediaConfirm, externalSelectedMedia, externalSetSelectedMedia, externalSetMessages, externalFileInputRef, externalSetIsLoading, externalIsLoading, sendWebSocketMessage, externalPastedImages, externalSetPastedImages, externalSelectedImage, externalSetSelectedImage) => {
const useAgentInput = (userUuid, selectedChat, idToken, company, externalTyping, externalSetTyping, externalInputRef, externalShowEmojiPicker, externalSetShowEmojiPicker, externalShowMediaConfirm, externalSetShowMediaConfirm, externalSelectedMedia, externalSetSelectedMedia, externalSetMessages, externalFileInputRef, externalSetIsLoading, externalIsLoading, sendWebSocketMessage, externalPastedImages, externalSetPastedImages, externalSelectedImage, externalSetSelectedImage, externalSetMoreSelection, externalMoreSelection, externalSetHasCameraPermission, externalHasCameraPermission) => {
const [typing, setTyping] = useState(false);
const inputRef = useRef(null);
const fileInputRef = useRef(null);
const videoRef = useRef(null);

const [showEmojiPicker, setShowEmojiPicker] = useState(false);
const [showMediaConfirm, setShowMediaConfirm] = useState(false);
const [selectedMedia, setSelectedMedia] = useState(null);
Expand All @@ -21,6 +23,8 @@ const useAgentInput = (userUuid, selectedChat, idToken, company, externalTyping,
const [isBlocked, setIsBlocked] = useState(null);
const [pastedImages, setPastedImages] = useState([]);
const [selectedImage, setSelectedImage] = useState(null);
const [moreSelection, setMoreSelection] = useState(false);
const [hasCameraPermission, setHasCameraPermission] = useState(false);
const [metaContextMid, setMetaContextMid] = useState("");

const actualSetTyping = externalSetTyping || setTyping;
Expand All @@ -39,6 +43,10 @@ const useAgentInput = (userUuid, selectedChat, idToken, company, externalTyping,
const actualPastedImages = externalPastedImages || pastedImages;
const actualSetSelectedImage = externalSetSelectedImage || setSelectedImage;
const actualSelectedImage = externalSelectedImage || selectedImage;
const actualSetMoreSelection = externalSetMoreSelection || setMoreSelection;
const actualMoreSelection = externalMoreSelection || moreSelection;
const actualSetHasCameraPermission = externalSetHasCameraPermission || setHasCameraPermission;
const actualHasCameraPermission = externalHasCameraPermission || hasCameraPermission;
const [Mp3Recorder, setMp3Recorder] = useState(
new MicRecorder({ bitRate: 128 })
);
Expand Down Expand Up @@ -79,6 +87,24 @@ const useAgentInput = (userUuid, selectedChat, idToken, company, externalTyping,
}
};

const handleOpenMoreSelection = () => {
actualSetMoreSelection(true);
};

const handleCloseMoreSelection = () => {
actualSetMoreSelection(false)
};

const handleCameraClick = async () => {
try {
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
videoRef.current.srcObject = stream;
actualSetHasCameraPermission(true);
} catch (err) {
console.error("Error accessing camera: ", err);
}
};

const handleMediaButtonClick = () => {
actualFileInputRef.current.click();
};
Expand Down Expand Up @@ -334,6 +360,8 @@ const useAgentInput = (userUuid, selectedChat, idToken, company, externalTyping,
handleSelectEmoji,
handleCloseEmojiPicker,
handleFileChange,
handleOpenMoreSelection,
handleCloseMoreSelection,
handleMediaButtonClick,
handleCloseMediaConfirm,
handlePaste,
Expand All @@ -342,6 +370,7 @@ const useAgentInput = (userUuid, selectedChat, idToken, company, externalTyping,
handleShowImage,
handleCloseModalImage,
handleVoiceMessages,
handleCameraClick,
setIsLoading: actualSetIsLoading,
isLoading: actualIsLoading,
pastedImages: actualPastedImages,
Expand Down