expo-roomplan
Version:
React Native implementation of Apple's RoomPlan SDK
49 lines • 1.8 kB
JavaScript
import { useEffect, useState } from 'react';
import { Platform } from 'react-native';
import ExpoRoomPlan from './ExpoRoomPlanModule';
import { ScanStatus, ExportType } from './ExpoRoomPlan.types';
export default function useRoomPlan(params) {
const [roomScanStatus, setRoomScanStatus] = useState(ScanStatus.NotStarted);
const [scanUrl, setScanUrl] = useState(null);
const [jsonUrl, setJsonUrl] = useState(null);
useEffect(() => {
const sub = ExpoRoomPlan.addListener?.('onDismissEvent', (event) => {
setRoomScanStatus(event.status);
console.log('RoomScan status: ', event.status);
if (event.scanUrl) {
setScanUrl(event.scanUrl);
console.log('Scan URL: ', event.scanUrl);
}
if (event.jsonUrl) {
setJsonUrl(event.jsonUrl);
console.log('JSON URL: ', event.jsonUrl);
}
});
return () => {
sub?.remove();
};
}, []);
const startRoomPlan = async (scanName) => {
if (Platform.OS === 'android') {
throw new Error('RoomPlan SDK only available on iOS.');
}
try {
// ExportType: defaults internally to 'parametric'
// Model file location is not returned by default.
const exportType = params?.exportType ?? ExportType.Parametric;
const sendFileLoc = params?.sendFileLoc ?? false;
ExpoRoomPlan.startCapture(scanName, exportType, sendFileLoc);
}
catch (err) {
console.error('startCapture failed:', err);
throw err;
}
};
return {
startRoomPlan,
roomScanStatus,
scanUrl,
jsonUrl,
};
}
//# sourceMappingURL=useRoomPlan.js.map