Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: bump to React 19 #12

Merged
merged 3 commits into from
Jan 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 29 additions & 12 deletions src/components/ApifySearch.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import algoliasearch from 'algoliasearch/lite';

import '@algolia/autocomplete-theme-classic';
import { ResultsItems } from './ResultsItems';
import { render } from 'react-dom';
import { createRoot, type Root } from 'react-dom/client';
import { useHotkeys } from 'react-hotkeys-hook';
import { SearchIcon, ControlKeyIcon } from '../utils/icons';

Expand Down Expand Up @@ -42,6 +42,21 @@ const collapseResults = (() => {
const NavigateContext = createContext((...props: any[]) => { throw new Error('The navigate function has not been initialized yet.') });
export const useNavigate = () => useContext(NavigateContext);

const renderingRoots = {
domRoot: null as HTMLElement | null,
reactRoot: null as Root | null,
}

function createOrGetRoot(domRoot: HTMLElement): Root {
if (renderingRoots.domRoot !== domRoot) {
renderingRoots.domRoot = domRoot;
renderingRoots.reactRoot = createRoot(domRoot);
}

return renderingRoots.reactRoot!;
}


function Autocomplete(props: any) {
const containerRef = useRef<any>(null);
const setOpen = useCallback((open: boolean) => {
Expand All @@ -59,7 +74,7 @@ function Autocomplete(props: any) {

const search = autocomplete({
container: containerRef.current,
renderer: { createElement, Fragment, render },
renderer: { createElement, Fragment, render: () => {} },
detachedMediaQuery: '',
defaultActiveItemId: 0,
placeholder: 'Search Apify Docs...',
Expand All @@ -76,10 +91,10 @@ function Autocomplete(props: any) {
const currentSection = getCurrentSectionTag(window.location.pathname);

return getAlgoliaResults({
searchClient: props.searchClient,
searchClient: props.searchclient,
queries: [
{
indexName: props.indexName,
indexName: props.indexname,
query,
params: {
hitsPerPage: MAX_RESULTS,
Expand All @@ -90,7 +105,7 @@ function Autocomplete(props: any) {
},
},
{
indexName: props.indexName,
indexName: props.indexname,
query,
params: {
hitsPerPage: MAX_RESULTS,
Expand Down Expand Up @@ -167,14 +182,16 @@ function Autocomplete(props: any) {
}
},
],
render({ state, components, Fragment, setContext, setActiveItemId, render }, root) {
render({ state, components, Fragment, setContext, setActiveItemId }, domRoot) {
const root = createOrGetRoot(domRoot);

if (state?.query?.length > 0) {
collapseResults.show();

let { preview } = state.context as any;
preview = {...preview, name: getTitle(preview)}

return render (
return root.render (
<Fragment>
<NavigateContext.Provider value={props.navigate}>
<div className="flex flex-col h-full bg-white dark:bg-slate-800">
Expand All @@ -198,13 +215,13 @@ function Autocomplete(props: any) {
</div>
</NavigateContext.Provider>
</Fragment>
, root);
);
} else {
collapseResults.hide();

return render (
return root.render (
<Fragment></Fragment>
, root);
);
}
},
...props,
Expand Down Expand Up @@ -294,8 +311,8 @@ export function ApifySearch({
return (
<div className={`searchbar-container ${className ?? ''}`} style={style ?? {}}>
<Autocomplete
searchClient={searchClient}
indexName={algoliaIndexName}
searchclient={searchClient}
indexname={algoliaIndexName}
filters={filters}
{...props}
/>
Expand Down
24 changes: 12 additions & 12 deletions web/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -751,28 +751,28 @@ __metadata:
linkType: hard

"@types/prop-types@npm:*":
version: 15.7.12
resolution: "@types/prop-types@npm:15.7.12"
checksum: 10c0/1babcc7db6a1177779f8fde0ccc78d64d459906e6ef69a4ed4dd6339c920c2e05b074ee5a92120fe4e9d9f1a01c952f843ebd550bee2332fc2ef81d1706878f8
version: 15.7.14
resolution: "@types/prop-types@npm:15.7.14"
checksum: 10c0/1ec775160bfab90b67a782d735952158c7e702ca4502968aa82565bd8e452c2de8601c8dfe349733073c31179116cf7340710160d3836aa8a1ef76d1532893b1
languageName: node
linkType: hard

"@types/react-dom@npm:^18.3.0":
version: 18.3.0
resolution: "@types/react-dom@npm:18.3.0"
dependencies:
"@types/react": "npm:*"
checksum: 10c0/6c90d2ed72c5a0e440d2c75d99287e4b5df3e7b011838cdc03ae5cd518ab52164d86990e73246b9d812eaf02ec351d74e3b4f5bd325bf341e13bf980392fd53b
version: 18.3.5
resolution: "@types/react-dom@npm:18.3.5"
peerDependencies:
"@types/react": ^18.0.0
checksum: 10c0/b163d35a6b32a79f5782574a7aeb12a31a647e248792bf437e6d596e2676961c394c5e3c6e91d1ce44ae90441dbaf93158efb4f051c0d61e2612f1cb04ce4faa
languageName: node
linkType: hard

"@types/react@npm:*, @types/react@npm:^18.3.3":
version: 18.3.3
resolution: "@types/react@npm:18.3.3"
"@types/react@npm:^18.3.3":
version: 18.3.18
resolution: "@types/react@npm:18.3.18"
dependencies:
"@types/prop-types": "npm:*"
csstype: "npm:^3.0.2"
checksum: 10c0/fe455f805c5da13b89964c3d68060cebd43e73ec15001a68b34634604a78140e6fc202f3f61679b9d809dde6d7a7c2cb3ed51e0fd1462557911db09879b55114
checksum: 10c0/8fb2b00672072135d0858dc9db07873ea107cc238b6228aaa2a9afd1ef7a64a7074078250db38afbeb19064be8ea6af5eac32d404efdd5f45e093cc4829d87f8
languageName: node
linkType: hard

Expand Down
24 changes: 12 additions & 12 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -373,28 +373,28 @@ __metadata:
linkType: hard

"@types/prop-types@npm:*":
version: 15.7.5
resolution: "@types/prop-types@npm:15.7.5"
checksum: 10c0/648aae41423821c61c83823ae36116c8d0f68258f8b609bdbc257752dcd616438d6343d554262aa9a7edaee5a19aca2e028a74fa2d0f40fffaf2816bc7056857
version: 15.7.14
resolution: "@types/prop-types@npm:15.7.14"
checksum: 10c0/1ec775160bfab90b67a782d735952158c7e702ca4502968aa82565bd8e452c2de8601c8dfe349733073c31179116cf7340710160d3836aa8a1ef76d1532893b1
languageName: node
linkType: hard

"@types/react-dom@npm:^18.3.0":
version: 18.3.0
resolution: "@types/react-dom@npm:18.3.0"
dependencies:
"@types/react": "npm:*"
checksum: 10c0/6c90d2ed72c5a0e440d2c75d99287e4b5df3e7b011838cdc03ae5cd518ab52164d86990e73246b9d812eaf02ec351d74e3b4f5bd325bf341e13bf980392fd53b
version: 18.3.5
resolution: "@types/react-dom@npm:18.3.5"
peerDependencies:
"@types/react": ^18.0.0
checksum: 10c0/b163d35a6b32a79f5782574a7aeb12a31a647e248792bf437e6d596e2676961c394c5e3c6e91d1ce44ae90441dbaf93158efb4f051c0d61e2612f1cb04ce4faa
languageName: node
linkType: hard

"@types/react@npm:*, @types/react@npm:^18.3.5":
version: 18.3.5
resolution: "@types/react@npm:18.3.5"
"@types/react@npm:^18.3.5":
version: 18.3.18
resolution: "@types/react@npm:18.3.18"
dependencies:
"@types/prop-types": "npm:*"
csstype: "npm:^3.0.2"
checksum: 10c0/548b1d3d7c2f0242fbfdbbd658731b4ce69a134be072fa83e6ab516f2840402a3f20e3e7f72e95133b23d4880ef24a6d864050dc8e1f7c68f39fa87ca8445917
checksum: 10c0/8fb2b00672072135d0858dc9db07873ea107cc238b6228aaa2a9afd1ef7a64a7074078250db38afbeb19064be8ea6af5eac32d404efdd5f45e093cc4829d87f8
languageName: node
linkType: hard

Expand Down
Loading