@s20.ai/safecam-360-rn-lite
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
111 lines (106 loc) • 3.61 kB
JavaScript
/*
* Copyright © 2022 S20.AI India Pvt. Ltd.
* Contact - origin@s20.ai
* License - Licensed as per https://docs.s20.ai/license.html
*/
export const preProcess = (exteriorData = {}, interiorData = {}) => {
if (exteriorData && Object.keys(exteriorData).length > 0) {
//set initialframe
if (!exteriorData.initialFrame) {
exteriorData.initialFrame = Math.round(
45 / (360 / exteriorData.imageSource.length),
);
}
if (
exteriorData.hasOwnProperty('hotspotPostionData') &&
exteriorData.hasOwnProperty('hotspotPostionData')
) {
let hotspotPostionDataParsed = {};
let filteredHotspotMetadata = [
...new Map(
exteriorData.hotspotPostionData
.filter(d => {
if (d.display.length === 0) return true;
else return d.display[2];
})
.map(item => [
item['hotspotRefId'],
{
...item,
triggerFrame: item.display.length
? item.frameId
: item.triggerFrame,
},
]),
).values(),
];
exteriorData.filteredHotspotMetadata = filteredHotspotMetadata;
exteriorData.filteredHotspotMetadata.forEach((hp, index) => {
hp.imageSrc = exteriorData.hotspotImages.find(
d => d.hotspotRefId === hp.hotspotRefId,
).imageSrc;
hp.address = index;
hp.hotspotType = hp.type;
hp.type = 'exterior';
});
exteriorData.hotspotPostionData.forEach((hp, index) => {
hotspotPostionDataParsed[hp.frameId] = [
...(hotspotPostionDataParsed[hp.frameId] || []),
hp,
];
hp.imageSrc = exteriorData.hotspotImages.find(
d => d.hotspotRefId === hp.hotspotRefId,
).imageSrc;
});
exteriorData['hotspotPostionDataParsed'] = hotspotPostionDataParsed;
}
}
if (interiorData && Object.keys(interiorData).length > 0) {
interiorData.filteredHotspotMetadata = [];
if (
interiorData.hasOwnProperty('hotspotPostionData') &&
interiorData.hasOwnProperty('hotspotPostionData')
) {
interiorData.hotspotPostionData.forEach((hp, index) => {
let formattedHp = {...hp};
formattedHp.imageSrc = interiorData.hotspotImages.find(
d => d.hotspotRefId === hp.hotspotRefId,
).imageSrc;
formattedHp.address = index;
formattedHp.hotspotType = hp.type;
formattedHp.type = 'interior';
interiorData.filteredHotspotMetadata.push(formattedHp);
});
}
}
let combinedHotspotMetadata = [];
if (
exteriorData &&
exteriorData.hasOwnProperty('filteredHotspotMetadata') &&
interiorData &&
interiorData.hasOwnProperty('filteredHotspotMetadata')
) {
combinedHotspotMetadata = interiorData.filteredHotspotMetadata.concat(
exteriorData.filteredHotspotMetadata,
);
} else if (
exteriorData &&
exteriorData.hasOwnProperty('filteredHotspotMetadata') &&
interiorData &&
!interiorData.hasOwnProperty('filteredHotspotMetadata')
) {
combinedHotspotMetadata = exteriorData.filteredHotspotMetadata;
} else if (
exteriorData &&
!exteriorData.hasOwnProperty('filteredHotspotMetadata') &&
interiorData &&
interiorData.hasOwnProperty('filteredHotspotMetadata')
) {
combinedHotspotMetadata = interiorData.filteredHotspotMetadata;
}
return [
exteriorData ? exteriorData : {},
interiorData ? interiorData : {},
combinedHotspotMetadata ? combinedHotspotMetadata : [],
];
};