@s20.ai/safecam-360-rn
Version:
A React Native component to view the interior panorama and exterior 360 degree views of a product featuring suppport for hotspots. Compatible with Android and iOS
76 lines (63 loc) • 1.97 kB
JavaScript
import ReactNativeHapticFeedback from 'react-native-haptic-feedback';
import {Immersive} from 'react-native-immersive';
import {Platform, Dimensions} from 'react-native';
import {useEffect, useState} from 'react';
import DeviceInfo from 'react-native-device-info';
import constants from '../config/constants';
export const triggerHapticFeedback = () => {
const options = {
enableVibrateFallback: true,
ignoreAndroidSystemSettings: true,
};
ReactNativeHapticFeedback.trigger('impactLight', options);
};
export const setImmersive = mode => {
if (Platform.OS === 'android') {
if (mode) {
Immersive.on();
} else {
Immersive.off();
}
Immersive.setImmersive(mode);
} else {
console.log('Immersive mode unsupported on iOS');
}
};
//* hook for orientation change
// export const useOrientation = () => {
// const [orientation, setOrientation] = useState(null);
// useEffect(() => {
// const subscription = Dimensions.addEventListener('change', ({window}) => {
// setOrientation(window.width < window.height ? 'landscape' : 'portrait');
// });
// return () => subscription?.remove();
// });
// return orientation;
// };
export const useScreenDimensions = () => {
const [screenDimensions, setScreenDimensions] = useState({
width: Dimensions.get("screen").width,
height: Dimensions.get("screen").height
})
useEffect(() => {
const subscription = Dimensions.addEventListener('change', ({screen}) => {
setScreenDimensions({
width: Dimensions.get("screen").width,
height: Dimensions.get("screen").height
})
});
return () => subscription?.remove();
});
return screenDimensions;
};
export const hasNotch = () => {
return DeviceInfo.hasNotch()
}
export const getOrientation = () => {
if(Dimensions.get("screen").width > Dimensions.get("screen").height){
return constants.LANDSCAPE
}
else{
return constants.PORTRAIT
}
}