async function createVoiceFocusDeviceTransformer()

in src/providers/VoiceFocusProvider/index.tsx [139:176]


  async function createVoiceFocusDeviceTransformer(
    spec: VoiceFocusSpec | undefined,
    options: VoiceFocusDeviceOptions | undefined,
    canceled: () => boolean,
    createMeetingResponse?: JoinMeetingInfo | undefined
  ): Promise<VoiceFocusDeviceTransformer> {
    const fetch = VoiceFocusDeviceTransformer.create(
      spec,
      options,
      undefined,
      createMeetingResponse
    );
    fetch
      .then((transformer) => {
        // A different request arrived afterwards. Drop this one on the floor
        // using the cancellation mechanism of `useEffect`.
        if (canceled()) {
          return;
        }

        currentPromise = undefined;
        setVoiceFocusTransformer(transformer);
        setVoiceFocusDevice(null);
        setIsVoiceFocusSupported(transformer && transformer.isSupported());
      })
      .catch(() => {
        if (canceled()) {
          return;
        }

        currentPromise = undefined;
        setVoiceFocusTransformer(null);
        setVoiceFocusDevice(null);
        setIsVoiceFocusSupported(false);
      });

    return (currentPromise = fetch);
  }