Skip to content

Releases: daily-co/daily-react

0.21.0

01 Oct 07:25
Compare
Choose a tag to compare

Breaking changes

  • Removed recoilRootProps from DailyProvider as we've internally migrated from Recoil to Jotai.
  • Added jotaiStore prop to DailyProvider, which, when passed with a Jotai store, is equivalent to passing recoilRootProps={{ override: false }} in previous versions.

Maintenance

  • Replaced faker with @faker-js/faker

Thanks to @TimHeckel for supporting the migration to Jotai!

0.20.0

18 Jul 13:38
Compare
Choose a tag to compare

⚠️ This release requires @daily-co/daily-js@>=0.68.0.

Features

  • useAudioLevelObserver(): new hook to handle participant mic volume levels. This hook is based on audio level observers in daily-js.

Improvements

  • useParticipantIds(): the fix to avoid potential stale state introduced in 0.19.1 was reverted, due to negative performance impact. Instead stale state is now avoided by prioritizing internal event handlers in Daily React over application level event handlers.

Deprecations

0.19.1

27 Jun 07:06
Compare
Choose a tag to compare

Bugfixes

  • useParticipantIds(): when using a custom filter or sort it was possible that useParticipantIds() would return stale state until for any affected participant a participant-updated event was emitted.
  • useActiveSpeakerId(): the internally stored id of the last active speaker is now correctly reset when receiving a left-meeting event.
  • useParticipantProperty(): when embedding a Daily React app inside Angular's NgZone, attempting to resolve a MediaStreamTrack property could result in a recursive loop, due to NgZone's monkey-patching behavior on certain browser objects. (Thanks @stewartmcgown!)

0.19.0

08 May 13:32
Compare
Choose a tag to compare

Changes

  • ⚠️ Breaking change: useCallFrame: Instead of accepting the resolved value for a given parentEl, it will now accept a React Ref parentElRef. This generally improves the DX when working with conditionally rendered call frame wrappers.
// Before
const ref = useRef(null);
const callFrame = useCallFrame({
  parentEl: ref.current,
});

// Now
const ref = useRef(null);
const callFrame = useCallFrame({
  parentElRef: ref,
});
  • Removed unnecessary playsInline attributes from rendered <audio> elements
  • Updated devDependencies

0.18.0

21 Mar 13:14
Compare
Choose a tag to compare

Maintenance

This adds a behavioral change in how transcription messages are handled, when interim results were configured. In order to distinguish interim from final results, transcription needs to be configured with includeRawResponse: true. See startTranscription() for details.

0.17.3

28 Feb 09:12
Compare
Choose a tag to compare

Bugfixes

  • Fixed an issue where useTranscription() returned isTranscribing: true after a meeting ended
  • Fixed an issue where useActiveSpeakerId() unnecessarily initialized its state with null, when an active speaker id was already present
  • Fixed an issue where useAudioLevel() broke echo cancellation in Firefox, due to unintentionally playing out an audio track when it was meant to be analyzed only

0.17.2

08 Feb 12:07
Compare
Choose a tag to compare

Improvements

  • When unmounting and remounting DailyProvider, useCallObject or useCallFrame(), it will now correctly rewire to a previously created call instance, if one is available, and, when required, destroy it and create a new one. This further prevents duplicate call instance errors.
  • useCallFrame() better handles a React DOM ref passed as parentEl and will only create the call frame, when the referenced DOM element is ready. Make sure to initialize a DOM ref with useRef(null).

0.17.1

06 Feb 08:37
Compare
Choose a tag to compare

Bugfixes

  • Fixed an issue where DailyProvider would accidentally create an internal call object instance, although a custom call object instance was already provided through props
  • Fixed TypeScript definition for parentEl in useCallFrame() to allow null
  • Fix TypeScript definition for callObject in DailyProvider to accept null, since useCallObject() and useCallFrame() themselves can return null
  • Fixed an issue where unmounting and remounting DailyProvider could lead to Uncaught Error: Use after destroy

0.17.0

01 Feb 13:38
Compare
Choose a tag to compare

Features

  • New hooks: useCallFrame() and useCallObject(). These are recommended over createFrame() and createCallObject() for React applications. They prevent the Duplicate DailyIframe instances are not allowed error by better managing call instances. This is especially useful given the asynchronous nature of call instance lifecycles and React's synchronous rendering.

Improvements

  • Enhanced debugging experience in Daily React's hooks by incorporating useDebugValue(). This allows for more insightful values in React DevTools, simplifying the debugging process in Daily React applications.
  • For DailyAudio and DailyAudioTrack, the onPlayFailed() callback now includes detailed error information, featuring the original error's message and name.
  • Improved transcription state management in useTranscription(). State management is now centralized in a parent component, eliminating redundant state management for transcriptions.

Deprecations

  • We are deprecating useActiveParticipant(), useLocalParticipant(), and useParticipant() in favor of useParticipantProperty(). While the use*Participant() hooks were effective for quick access to participant objects, they led to unnecessary render cycles due to subscriptions to all atomic changes for a participant. useParticipantProperty() allows subscribing only to essential participant properties, resulting in more efficient render cycles.
  • The isTranscriptionEnabled property in the useTranscription() hook is being removed, since the enable_transcription configuration property is no longer required.

0.16.0

01 Dec 13:10
Compare
Choose a tag to compare

Improvements

Bugfixes

  • Fixed a race condition in DailyAudio when assigning a participant to an <audio> element, who wasn't updated in React state, yet, which could lead to the participant not being heard.
  • Fixed the return value of updateInputSettings, returned from useInputSettings