Skip to content

Commit cd53082

Browse files
committed
feat: auto remove default camera
1 parent cf15669 commit cd53082

File tree

4 files changed

+42
-4
lines changed

4 files changed

+42
-4
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ dist-ssr
1515
package-lock.json
1616
.eslintcache
1717

18+
aframe-react-component-*.tgz
19+
1820
# Editor directories and files
1921
.vscode/*
2022
!.vscode/extensions.json

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "aframe-react-component",
3-
"version": "0.1.0beta2a",
3+
"version": "0.1.0-beta2b",
44
"main": "dist/index.js",
55
"scripts": {
66
"dev": "vite",

src/components/Scene.tsx

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
1-
import React from 'react';
1+
import _ from 'lodash';
2+
import React, { useEffect, useRef } from 'react';
23
import { Scene as AScene } from 'aframe';
3-
import { convertObjectToString } from '../utils/common';
4+
import { convertObjectToString, mergeRefs } from '../utils/common';
45
import { Scene as _Scene } from '../utils/interface';
56

67
const Scene = React.forwardRef<AScene, _Scene>(({ children, ...props }, ref) => {
78
const { vrModeUI, orientationUI, colorSpace, ...rest } = props;
9+
const sceneRef = useRef<AScene>(null);
10+
11+
useEffect(() => {
12+
const defaultCamera = sceneRef.current?.querySelectorAll('[camera]');
13+
14+
// Remove default camera that Aframe add automatically, if user add a camera
15+
if (!_.isNil(defaultCamera) && defaultCamera.length > 1) {
16+
_.last(defaultCamera)?.remove();
17+
}
18+
}, []);
819

920
return React.createElement(
1021
'a-scene',
@@ -13,7 +24,7 @@ const Scene = React.forwardRef<AScene, _Scene>(({ children, ...props }, ref) =>
1324
...(colorSpace && { 'color-space': colorSpace }),
1425
'vr-mode-ui': `enabled: ${vrModeUI ?? false}`,
1526
'device-orientation-permission-ui': `enabled: ${orientationUI ?? false}`,
16-
ref,
27+
ref: mergeRefs(sceneRef, ref),
1728
},
1829
children
1930
);

src/utils/common.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,3 +100,28 @@ export const getAframeProps = (props: Record<any, any>): string => {
100100

101101
return _.map(props, (value: string | boolean, key: string) => `${key}: ${value}`).join('; ');
102102
};
103+
104+
/**
105+
* Join multiple ref
106+
* @param refs
107+
* @returns multiple refs that can be use
108+
*/
109+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
110+
export const mergeRefs = (...refs: any[]) => {
111+
const filteredRefs = refs.filter(Boolean);
112+
113+
if (!filteredRefs.length) return null;
114+
115+
if (filteredRefs.length === 0) return filteredRefs[0];
116+
117+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
118+
return (inst: any) => {
119+
for (const ref of filteredRefs) {
120+
if (typeof ref === 'function') {
121+
ref(inst);
122+
} else if (ref) {
123+
ref.current = inst;
124+
}
125+
}
126+
};
127+
};

0 commit comments

Comments
 (0)