Releases: daily-co/daily-react
Releases · daily-co/daily-react
0.21.0
Breaking changes
- Removed
recoilRootProps
fromDailyProvider
as we've internally migrated from Recoil to Jotai. - Added
jotaiStore
prop toDailyProvider
, which, when passed with a Jotai store, is equivalent to passingrecoilRootProps={{ override: false }}
in previous versions.
Maintenance
- Replaced
faker
with@faker-js/faker
Thanks to @TimHeckel for supporting the migration to Jotai!
0.20.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
useAudioLevel()
is now deprecated. UseuseAudioLevelObserver()
instead.
0.19.1
Bugfixes
useParticipantIds()
: when using a customfilter
orsort
it was possible thatuseParticipantIds()
would return stale state until for any affected participant aparticipant-updated
event was emitted.useActiveSpeakerId()
: the internally stored id of the last active speaker is now correctly reset when receiving aleft-meeting
event.useParticipantProperty()
: when embedding a Daily React app inside Angular's NgZone, attempting to resolve aMediaStreamTrack
property could result in a recursive loop, due to NgZone's monkey-patching behavior on certain browser objects. (Thanks @stewartmcgown!)
0.19.0
Changes
⚠️ Breaking change:useCallFrame
: Instead of accepting the resolved value for a givenparentEl
, it will now accept a React RefparentElRef
. 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
Maintenance
- Adds
onTranscriptionMessage
touseTranscription()
and deprecatesonTranscriptionAppData
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
Bugfixes
- Fixed an issue where
useTranscription()
returnedisTranscribing: true
after a meeting ended - Fixed an issue where
useActiveSpeakerId()
unnecessarily initialized its state withnull
, 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
Improvements
- When unmounting and remounting
DailyProvider
,useCallObject
oruseCallFrame()
, 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 asparentEl
and will only create the call frame, when the referenced DOM element is ready. Make sure to initialize a DOM ref withuseRef(null)
.
0.17.1
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
inuseCallFrame()
to allownull
- Fix TypeScript definition for
callObject
inDailyProvider
to acceptnull
, sinceuseCallObject()
anduseCallFrame()
themselves can returnnull
- Fixed an issue where unmounting and remounting
DailyProvider
could lead toUncaught Error: Use after destroy
0.17.0
Features
- New hooks:
useCallFrame()
anduseCallObject()
. These are recommended overcreateFrame()
andcreateCallObject()
for React applications. They prevent theDuplicate 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
andDailyAudioTrack
, theonPlayFailed()
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()
, anduseParticipant()
in favor ofuseParticipantProperty()
. While theuse*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 theuseTranscription()
hook is being removed, since the enable_transcription configuration property is no longer required.
0.16.0
Improvements
- Improved autocompletion for property paths in
tracks
, when usinguseParticipantProperty
- Added a new
examples
directory, with one minimal example
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 fromuseInputSettings