mirror of
https://github.com/jambonz/chrome-extension-dialer.git
synced 2026-10-04 02:04:28 +00:00
Merge pull request #24 from jambonz/fix/review_comment
fix review comments
This commit is contained in:
@@ -5,12 +5,14 @@ type JambonzSwitchProbs = {
|
|||||||
onlabel: string;
|
onlabel: string;
|
||||||
offLabel: string;
|
offLabel: string;
|
||||||
initialCheck: boolean;
|
initialCheck: boolean;
|
||||||
|
isDisabled?: boolean;
|
||||||
onChange: (value: boolean) => void;
|
onChange: (value: boolean) => void;
|
||||||
};
|
};
|
||||||
function JambonzSwitch({
|
function JambonzSwitch({
|
||||||
onlabel,
|
onlabel,
|
||||||
offLabel,
|
offLabel,
|
||||||
initialCheck,
|
initialCheck,
|
||||||
|
isDisabled = false,
|
||||||
onChange,
|
onChange,
|
||||||
}: JambonzSwitchProbs) {
|
}: JambonzSwitchProbs) {
|
||||||
const [isToggled, setToggled] = useState(initialCheck);
|
const [isToggled, setToggled] = useState(initialCheck);
|
||||||
@@ -24,12 +26,14 @@ function JambonzSwitch({
|
|||||||
position="relative"
|
position="relative"
|
||||||
w="90px"
|
w="90px"
|
||||||
h="30px"
|
h="30px"
|
||||||
bg={isToggled ? "green.500" : "grey.500"}
|
bg={isToggled && !isDisabled ? "green.500" : "grey.500"}
|
||||||
borderRadius="full"
|
borderRadius="full"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
const value = !isToggled;
|
if (!isDisabled) {
|
||||||
setToggled(value);
|
const value = !isToggled;
|
||||||
onChange(value);
|
setToggled(value);
|
||||||
|
onChange(value);
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
_hover={{ cursor: "pointer" }}
|
_hover={{ cursor: "pointer" }}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Box, Button, HStack, VStack } from "@chakra-ui/react";
|
import { Box, Button, HStack, VStack } from "@chakra-ui/react";
|
||||||
import DialPadAudioElements from "./DialPadSoundElement";
|
import DialPadAudioElements from "./DialPadSoundElement";
|
||||||
import { useEffect } from "react";
|
import { useEffect, useRef, useState } from "react";
|
||||||
|
|
||||||
type DialPadProbs = {
|
type DialPadProbs = {
|
||||||
handleDigitPress: (digit: string) => void;
|
handleDigitPress: (digit: string) => void;
|
||||||
@@ -9,6 +9,8 @@ type DialPadProbs = {
|
|||||||
const keySounds = new DialPadAudioElements();
|
const keySounds = new DialPadAudioElements();
|
||||||
|
|
||||||
export const DialPad = ({ handleDigitPress }: DialPadProbs) => {
|
export const DialPad = ({ handleDigitPress }: DialPadProbs) => {
|
||||||
|
const selfRef = useRef<HTMLDivElement | null>(null);
|
||||||
|
const isVisibleRef = useRef(false);
|
||||||
const buttons = [
|
const buttons = [
|
||||||
["1", "2", "3"],
|
["1", "2", "3"],
|
||||||
["4", "5", "6"],
|
["4", "5", "6"],
|
||||||
@@ -22,20 +24,36 @@ export const DialPad = ({ handleDigitPress }: DialPadProbs) => {
|
|||||||
e.key
|
e.key
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
keySounds?.playKeyTone(e.key);
|
if (isVisibleRef.current) {
|
||||||
handleDigitPress(e.key);
|
keySounds?.playKeyTone(e.key);
|
||||||
|
handleDigitPress(e.key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
const observer = new IntersectionObserver(
|
||||||
|
([entry]) => {
|
||||||
|
isVisibleRef.current = entry.isIntersecting;
|
||||||
|
},
|
||||||
|
{
|
||||||
|
threshold: 0.5,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if (selfRef.current) {
|
||||||
|
observer.observe(selfRef.current);
|
||||||
|
}
|
||||||
document.addEventListener("keydown", handleKeyDown);
|
document.addEventListener("keydown", handleKeyDown);
|
||||||
return () => {
|
return () => {
|
||||||
document.removeEventListener("keydown", handleKeyDown);
|
document.removeEventListener("keydown", handleKeyDown);
|
||||||
|
if (selfRef.current) {
|
||||||
|
observer.unobserve(selfRef.current);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box p={2} w="full">
|
<Box p={2} w="full" ref={selfRef}>
|
||||||
<VStack w="full" bg="grey.500" spacing={0.5}>
|
<VStack w="full" bg="grey.500" spacing={0.5}>
|
||||||
{buttons.map((row, rowIndex) => (
|
{buttons.map((row, rowIndex) => (
|
||||||
<HStack key={rowIndex} justifyContent="space-between" spacing={0.5}>
|
<HStack key={rowIndex} justifyContent="space-between" spacing={0.5}>
|
||||||
|
|||||||
@@ -156,7 +156,9 @@ export const Phone = ({
|
|||||||
}, [calledANumber]);
|
}, [calledANumber]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setIsForceChangeUaStatus(false);
|
if (status === "online" || status === "offline") {
|
||||||
|
setIsForceChangeUaStatus(false);
|
||||||
|
}
|
||||||
}, [status]);
|
}, [status]);
|
||||||
|
|
||||||
// useEffect(() => {
|
// useEffect(() => {
|
||||||
@@ -236,12 +238,14 @@ export const Phone = ({
|
|||||||
|
|
||||||
sipClient.on(SipConstants.UA_DISCONNECTED, (args) => {
|
sipClient.on(SipConstants.UA_DISCONNECTED, (args) => {
|
||||||
setStatus("disconnected");
|
setStatus("disconnected");
|
||||||
toast({
|
if (args.error) {
|
||||||
title: `Cannot connect to ${sipServerAddress}`,
|
toast({
|
||||||
status: "warning",
|
title: `Cannot connect to ${sipServerAddress}, ${args.reason}`,
|
||||||
duration: DEFAULT_TOAST_DURATION,
|
status: "warning",
|
||||||
isClosable: true,
|
duration: DEFAULT_TOAST_DURATION,
|
||||||
});
|
isClosable: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
// Call Status
|
// Call Status
|
||||||
sipClient.on(SipConstants.SESSION_RINGING, (args) => {
|
sipClient.on(SipConstants.SESSION_RINGING, (args) => {
|
||||||
@@ -423,6 +427,7 @@ export const Phone = ({
|
|||||||
<Circle size="8px" bg={isOnline() ? "green.500" : "gray.500"} />
|
<Circle size="8px" bg={isOnline() ? "green.500" : "gray.500"} />
|
||||||
<Spacer />
|
<Spacer />
|
||||||
<JambonzSwitch
|
<JambonzSwitch
|
||||||
|
isDisabled={isForceChangeUaStatus}
|
||||||
onlabel="Online"
|
onlabel="Online"
|
||||||
offLabel="Offline"
|
offLabel="Offline"
|
||||||
initialCheck={isOnline() || isForceChangeUaStatus}
|
initialCheck={isOnline() || isForceChangeUaStatus}
|
||||||
|
|||||||
Reference in New Issue
Block a user