Skip to content

Commit

Permalink
feat(html): bind function only once (#921)
Browse files Browse the repository at this point in the history
* feat(html): create binding only once

* rename to HTMLTemplate

* format document

* update size
  • Loading branch information
Haroenv authored and sarahdayan committed Mar 18, 2022
1 parent 042d922 commit 621b8e1
Show file tree
Hide file tree
Showing 6 changed files with 24 additions and 11 deletions.
2 changes: 1 addition & 1 deletion bundlesize.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
},
{
"path": "packages/autocomplete-js/dist/umd/index.production.js",
"maxSize": "16.75 kB"
"maxSize": "17.25 kB"
},
{
"path": "packages/autocomplete-preset-algolia/dist/umd/index.production.js",
Expand Down
5 changes: 5 additions & 0 deletions packages/autocomplete-js/src/autocomplete.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
debounce,
getItemsCount,
} from '@algolia/autocomplete-shared';
import htm from 'htm';

import { createAutocompleteDom } from './createAutocompleteDom';
import { createEffectWrapper } from './createEffectWrapper';
Expand All @@ -21,6 +22,7 @@ import {
AutocompletePropGetters,
AutocompleteSource,
AutocompleteState,
VNode,
} from './types';
import { userAgents } from './userAgents';
import { mergeDeep, setProperties } from './utils';
Expand Down Expand Up @@ -112,6 +114,8 @@ export function autocomplete<TItem extends BaseItem>(
refresh: autocomplete.value.refresh,
};

const html = htm.bind<VNode>(props.value.renderer.renderer.createElement);

const dom = reactive(() =>
createAutocompleteDom({
autocomplete: autocomplete.value,
Expand Down Expand Up @@ -150,6 +154,7 @@ export function autocomplete<TItem extends BaseItem>(
components: props.value.renderer.components,
container: props.value.renderer.container,
createElement: props.value.renderer.renderer.createElement,
html,
dom: dom.value,
Fragment: props.value.renderer.renderer.Fragment,
panelContainer: isDetached.value
Expand Down
6 changes: 3 additions & 3 deletions packages/autocomplete-js/src/render.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import {
AutocompleteScopeApi,
BaseItem,
} from '@algolia/autocomplete-core';
import htm from 'htm';
import { render as preactRender } from 'preact';

import {
Expand All @@ -14,6 +13,7 @@ import {
AutocompletePropGetters,
AutocompleteRender,
AutocompleteState,
HTMLTemplate,
Pragma,
PragmaFrag,
} from './types';
Expand All @@ -25,6 +25,7 @@ type RenderProps<TItem extends BaseItem> = {
classNames: AutocompleteClassNames;
components: AutocompleteComponents;
createElement: Pragma;
html: HTMLTemplate;
dom: AutocompleteDom;
Fragment: PragmaFrag;
panelContainer: HTMLElement;
Expand Down Expand Up @@ -67,6 +68,7 @@ export function renderPanel<TItem extends BaseItem>(
autocomplete,
autocompleteScopeApi,
classNames,
html,
createElement,
dom,
Fragment,
Expand All @@ -76,8 +78,6 @@ export function renderPanel<TItem extends BaseItem>(
components,
}: RenderProps<TItem>
): void {
const html = htm.bind(createElement);

if (!state.isOpen) {
if (panelContainer.contains(dom.panel)) {
panelContainer.removeChild(dom.panel);
Expand Down
12 changes: 8 additions & 4 deletions packages/autocomplete-js/src/types/AutocompleteRender.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
import { AutocompleteScopeApi, BaseItem } from '@algolia/autocomplete-core';

import { AutocompleteComponents } from './AutocompleteComponents';
import { HTMLToJSX, Pragma, PragmaFrag, VNode } from './AutocompleteRenderer';
import {
ComponentChild,
HTMLTemplate,
Pragma,
PragmaFrag,
VNode,
} from './AutocompleteRenderer';
import { AutocompleteState } from './AutocompleteState';

import { ComponentChild } from '.';

export type AutocompleteRender<TItem extends BaseItem> = (
params: AutocompleteScopeApi<TItem> & {
children: VNode;
Expand All @@ -15,7 +19,7 @@ export type AutocompleteRender<TItem extends BaseItem> = (
components: AutocompleteComponents;
createElement: Pragma;
Fragment: PragmaFrag;
html: HTMLToJSX;
html: HTMLTemplate;
render(
vnode: ComponentChild,
containerNode: Element | Document | ShadowRoot | DocumentFragment,
Expand Down
2 changes: 1 addition & 1 deletion packages/autocomplete-js/src/types/AutocompleteRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,4 @@ export type AutocompleteRenderer = {
Fragment: PragmaFrag;
};

export type HTMLToJSX = typeof htm;
export type HTMLTemplate = typeof htm;
8 changes: 6 additions & 2 deletions packages/autocomplete-js/src/types/AutocompleteSource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,18 @@ import {
} from '@algolia/autocomplete-core';

import { AutocompleteComponents } from './AutocompleteComponents';
import { AutocompleteRenderer, HTMLToJSX, VNode } from './AutocompleteRenderer';
import {
AutocompleteRenderer,
HTMLTemplate,
VNode,
} from './AutocompleteRenderer';
import { AutocompleteState } from './AutocompleteState';

type Template<TParams> = (
params: TParams &
AutocompleteRenderer & {
components: AutocompleteComponents;
html: HTMLToJSX;
html: HTMLTemplate;
}
) => VNode | string;

Expand Down

0 comments on commit 621b8e1

Please sign in to comment.