react-native-feedback-hub
Version:
React Native feedback SDK with Slack, Jira, Discord and Microsoft Teams integration
63 lines • 2.61 kB
JavaScript
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