Skip to content

Commit 110914a

Browse files
robintownhughns
andauthored
Replace some custom React hooks with observable-hooks (#2710)
The observable-hooks package provides hooks that do exactly the same thing as these custom React hooks I had written a while back. (even the names are the same, wow) Co-authored-by: Hugh Nimmo-Smith <[email protected]>
1 parent d3f069e commit 110914a

File tree

3 files changed

+12
-42
lines changed

3 files changed

+12
-42
lines changed

src/room/InCallView.tsx

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ import {
2828
import useMeasure from "react-use-measure";
2929
import { MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession";
3030
import classNames from "classnames";
31-
import { BehaviorSubject } from "rxjs";
32-
import { useObservableEagerState } from "observable-hooks";
31+
import { BehaviorSubject, map } from "rxjs";
32+
import { useObservable, useObservableEagerState } from "observable-hooks";
3333
import { logger } from "matrix-js-sdk/src/logger";
3434

3535
import LogoMark from "../icons/LogoMark.svg?react";
@@ -65,7 +65,6 @@ import { ECConnectionState } from "../livekit/useECConnectionState";
6565
import { useOpenIDSFU } from "../livekit/openIDSFU";
6666
import { CallViewModel, GridMode, Layout } from "../state/CallViewModel";
6767
import { Grid, TileProps } from "../grid/Grid";
68-
import { useObservable } from "../state/useObservable";
6968
import { useInitial } from "../useInitial";
7069
import { SpotlightTile } from "../tile/SpotlightTile";
7170
import { EncryptionSystem } from "../e2ee/sharedKeyManagement";
@@ -103,7 +102,10 @@ export const ActiveCall: FC<ActiveCallProps> = (props) => {
103102
sfuConfig,
104103
props.e2eeSystem,
105104
);
106-
const connStateObservable = useObservable(connState);
105+
const connStateObservable = useObservable(
106+
(inputs) => inputs.pipe(map(([connState]) => connState)),
107+
[connState],
108+
);
107109
const [vm, setVm] = useState<CallViewModel | null>(null);
108110

109111
useEffect(() => {
@@ -308,7 +310,10 @@ export const InCallView: FC<InCallViewProps> = ({
308310
windowMode,
309311
],
310312
);
311-
const gridBoundsObservable = useObservable(gridBounds);
313+
const gridBoundsObservable = useObservable(
314+
(inputs) => inputs.pipe(map(([gridBounds]) => gridBounds)),
315+
[gridBounds],
316+
);
312317

313318
const spotlightAlignment = useInitial(
314319
() => new BehaviorSubject(defaultSpotlightAlignment),

src/state/useObservable.ts

Lines changed: 0 additions & 34 deletions
This file was deleted.

src/tile/SpotlightTile.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import {
2222
} from "@vector-im/compound-design-tokens/assets/web/icons";
2323
import { animated } from "@react-spring/web";
2424
import { Observable, map } from "rxjs";
25-
import { useObservableEagerState } from "observable-hooks";
25+
import { useObservableEagerState, useObservableRef } from "observable-hooks";
2626
import { useTranslation } from "react-i18next";
2727
import classNames from "classnames";
2828
import { TrackReferenceOrPlaceholder } from "@livekit/components-core";
@@ -39,7 +39,6 @@ import {
3939
} from "../state/MediaViewModel";
4040
import { useInitial } from "../useInitial";
4141
import { useMergedRefs } from "../useMergedRefs";
42-
import { useObservableRef } from "../state/useObservable";
4342
import { useReactiveState } from "../useReactiveState";
4443
import { useLatest } from "../useLatest";
4544
import { SpotlightTileViewModel } from "../state/TileViewModel";
@@ -203,7 +202,7 @@ export const SpotlightTile = forwardRef<HTMLDivElement, Props>(
203202
theirRef,
204203
) => {
205204
const { t } = useTranslation();
206-
const [root, ourRef] = useObservableRef<HTMLDivElement | null>(null);
205+
const [ourRef, root] = useObservableRef<HTMLDivElement | null>(null);
207206
const ref = useMergedRefs(ourRef, theirRef);
208207
const maximised = useObservableEagerState(vm.maximised);
209208
const media = useObservableEagerState(vm.media);

0 commit comments

Comments
 (0)