Files
ox_lib/web/src/features/textui/TextUI.tsx

85 lines
2.1 KiB
TypeScript
Raw Normal View History

2022-03-18 16:59:18 +01:00
import React from "react";
import { useNuiEvent } from "../../hooks/useNuiEvent";
import { Box, Flex, ScaleFade } from "@chakra-ui/react";
import { debugData } from "../../utils/debugData";
import ReactMarkdown from "react-markdown";
2022-04-01 22:04:14 +02:00
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { IconProp } from "@fortawesome/fontawesome-svg-core";
2022-03-18 16:59:18 +01:00
interface Props {
text: string;
position?: "right-center" | "left-center" | "top-center";
2022-04-01 22:04:14 +02:00
icon?: IconProp;
iconColor?: string;
2022-03-18 16:59:18 +01:00
style?: React.CSSProperties;
}
debugData([
{
action: "textUi",
data: {
2022-04-01 22:04:14 +02:00
text: "[E] - Access locker inventory \n [G] - Do something else",
2022-03-18 16:59:18 +01:00
position: "right-center",
2022-04-01 22:04:14 +02:00
icon: "door-open",
2022-03-18 16:59:18 +01:00
},
},
]);
const TextUI: React.FC = () => {
const [data, setData] = React.useState<Props>({
text: "",
position: "right-center",
});
const [visible, setVisible] = React.useState(false);
useNuiEvent<Props>("textUi", (data) => {
setData(data);
setVisible(true);
});
useNuiEvent("textUiHide", () => setVisible(false));
return (
<Flex
w="100%"
h="100%"
p={3}
position="absolute"
2022-03-18 16:59:18 +01:00
alignItems={data.position === "top-center" ? "baseline" : "center"}
justifyContent={
data.position === "right-center"
? "flex-end"
: data.position === "left-center"
? "flex-start"
: "center"
}
>
<ScaleFade in={visible} unmountOnExit>
<Box
bg="gray.700"
boxShadow="lg"
p={3}
2022-04-01 22:04:14 +02:00
fontFamily="Poppins"
style={data.style}
borderRadius="md"
maxW="xs"
>
2022-04-01 22:04:14 +02:00
<Flex justifyContent="center" alignItems="center">
{data.icon && (
<FontAwesomeIcon
icon={data.icon}
color={data.iconColor}
fontSize="1.4rem"
style={{ paddingRight: 15 }}
/>
)}
<ReactMarkdown>{data.text}</ReactMarkdown>
</Flex>
2022-03-18 16:59:18 +01:00
</Box>
</ScaleFade>
</Flex>
);
};
export default TextUI;