UNPKG

react-native-feedback-hub

Version:

React Native feedback SDK with Slack, Jira, Discord and Microsoft Teams integration

63 lines 2.61 kB
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime"; import { createContext, useCallback, useContext, useState } from 'react'; import { StyleSheet, View } from 'react-native'; import FloatingButton from '../components/FloatingButton'; import FeedbackModal from '../components/FeedbackModal'; import { colors } from '../tokens/colors'; const FeedbackContext = createContext({ toggleModal: () => { }, toggleRecording: () => { }, isRecording: false, title: '', message: '', screenshot: '', additionalInfo: '', setTitle: () => { }, setMessage: () => { }, setScreenshot: () => { }, setType: () => { }, slackConfig: undefined, jiraConfig: undefined, microsoftTeamsConfig: undefined, type: 'bug', }); export const useFeedback = () => useContext(FeedbackContext); export const FeedbackHubProvider = ({ feedbackButtonPosition = { bottom: 30, right: 30, }, children, config, enabled = false, additionalInfo = '', }) => { const [visible, setVisible] = useState(false); const [isRecording, setIsRecording] = useState(false); const [title, setTitle] = useState(''); const [message, setMessage] = useState(''); const [screenshot, setScreenshot] = useState(null); const [type, setType] = useState('bug'); const toggleModal = useCallback(() => setVisible(!visible), [visible]); const toggleRecording = useCallback(() => setIsRecording(!isRecording), [isRecording]); return (_jsx(FeedbackContext.Provider, Object.assign({ value: Object.assign({ toggleModal, isRecording, toggleRecording, title, message, additionalInfo, screenshot, setTitle, setMessage, setScreenshot, type, setType }, config) }, { children: _jsx(View, Object.assign({ style: styles.flex }, { children: enabled && config && Object.keys(config).length ? (_jsxs(_Fragment, { children: [children, _jsx(FloatingButton, { buttonPosition: feedbackButtonPosition, onPress: toggleModal, isRecording: isRecording }), visible && _jsx(FeedbackModal, { onClose: toggleModal }), isRecording && (_jsx(View, { pointerEvents: "none", style: styles.RecordingView }))] })) : null })) }))); }; const styles = StyleSheet.create({ flex: { flex: 1, }, RecordingView: { position: 'absolute', borderWidth: 2, borderColor: colors.legacy.red, borderRadius: 30, height: '100%', width: '100%', }, }); //# sourceMappingURL=FeedbackHubProvider.js.map