Skip to content

feat(vue): PoC — Composition API composables over a shared widget lifecycle controller - #7147

Draft
FabienMotte wants to merge 1 commit into
masterfrom
poc/vue-composables
Draft

feat(vue): PoC — Composition API composables over a shared widget lifecycle controller#7147
FabienMotte wants to merge 1 commit into
masterfrom
poc/vue-composables

Conversation

@FabienMotte

Copy link
Copy Markdown
Contributor

Summary

Throwaway PoC supporting RFC: Composition API composables for Vue InstantSearch. Not intended to merge — it exists so RFC reviewers can read the diff and comment inline.

It proves the RFC's central claim: createWidgetMixin and a new useConnector composable can share a plain-JS widget lifecycle controller without breaking the mixin's public contract.

  • src/util/widgetLifecycleController.js — shared core: connector → factory → widget, add/remove on the parent index, remove-and-recreate on params change, SSR __forceRender; state-update policy stays per consumer.
  • src/mixins/widget.js rewired over the controller — public contract unchanged (options, this.state, this.widget, timing, warnings, SSR error).
  • src/composables/useConnector.js + useSearchBox.js — sync initial render state (never null), shallowRef out, MaybeRefOrGetter in, dequal-guarded commits and recreation.
  • vue-compat shim: real re-exports of composition APIs on both Vue 2.7 and Vue 3 sides + a toValue shim; build/Jest infra picked them up with zero config changes.

Result

The existing vue-instantsearch suite passes untouched in both modes:

  • Vue 2.7: 54 suites, 568 passed / 0 failed
  • Vue 3 (prepare-vue3): 54 suites, 562 passed / 0 failed

Plus 11 new PoC tests (8 useConnector unit, 3 useSearchBox integration), passing in both modes.

@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 153 complexity

Metric Results
Complexity 153

View in Codacy

TIP This summary will be updated as you push new changes.

@pkg-pr-new

pkg-pr-new Bot commented Jul 31, 2026

Copy link
Copy Markdown
More templates

algoliasearch-helper

npm i https://pkg.pr.new/algolia/instantsearch/algoliasearch-helper@7147

instantsearch-ui-components

npm i https://pkg.pr.new/algolia/instantsearch/instantsearch-ui-components@7147

instantsearch.css

npm i https://pkg.pr.new/algolia/instantsearch/instantsearch.css@7147

instantsearch.js

npm i https://pkg.pr.new/algolia/instantsearch/instantsearch.js@7147

react-instantsearch

npm i https://pkg.pr.new/algolia/instantsearch/react-instantsearch@7147

react-instantsearch-core

npm i https://pkg.pr.new/algolia/instantsearch/react-instantsearch-core@7147

react-instantsearch-nextjs

npm i https://pkg.pr.new/algolia/instantsearch/react-instantsearch-nextjs@7147

react-instantsearch-router-nextjs

npm i https://pkg.pr.new/algolia/instantsearch/react-instantsearch-router-nextjs@7147

vue-instantsearch

npm i https://pkg.pr.new/algolia/instantsearch/vue-instantsearch@7147

commit: e78ba73

@github-actions

Copy link
Copy Markdown

Size Change: +3.16 kB (+0.26%)

Total Size: 1.21 MB

📦 View Changed
Filename Size Change
packages/vue-instantsearch/vue2/cjs/index.js 21.3 kB +1.43 kB (+7.18%) 🔍
packages/vue-instantsearch/vue2/umd/index.js 73.2 kB +152 B (+0.21%)
packages/vue-instantsearch/vue3/cjs/index.js 22 kB +1.43 kB (+6.93%) 🔍
packages/vue-instantsearch/vue3/umd/index.js 73.6 kB +155 B (+0.21%)
ℹ️ View Unchanged
Filename Size Change
packages/algolia-experiences/dist/algolia-experiences.development.js 179 kB 0 B
packages/algolia-experiences/dist/algolia-experiences.production.min.js 81.2 kB -1 B (0%)
packages/algoliasearch-helper/dist/algoliasearch.helper.js 44.3 kB 0 B
packages/algoliasearch-helper/dist/algoliasearch.helper.min.js 13.9 kB 0 B
packages/instantsearch.css/components/ai-mode-button.css 1.75 kB 0 B
packages/instantsearch.css/components/autocomplete-min.css 4.31 kB 0 B
packages/instantsearch.css/components/autocomplete.css 4.66 kB 0 B
packages/instantsearch.css/components/button.css 1.96 kB 0 B
packages/instantsearch.css/components/chat-min.css 6.16 kB 0 B
packages/instantsearch.css/components/chat.css 6.59 kB 0 B
packages/instantsearch.css/components/filter-suggestions.css 1.88 kB 0 B
packages/instantsearch.css/themes/algolia-min.css 10.6 kB 0 B
packages/instantsearch.css/themes/algolia.css 11.3 kB 0 B
packages/instantsearch.css/themes/nova-min.css 10.7 kB 0 B
packages/instantsearch.css/themes/nova.css 11.4 kB 0 B
packages/instantsearch.css/themes/reset-min.css 1.3 kB 0 B
packages/instantsearch.css/themes/reset.css 1.38 kB 0 B
packages/instantsearch.css/themes/satellite-min.css 11.5 kB 0 B
packages/instantsearch.css/themes/satellite.css 12.3 kB 0 B
packages/instantsearch.js/dist/instantsearch.development.js 289 kB 0 B
packages/instantsearch.js/dist/instantsearch.production.min.js 138 kB -1 B (0%)
packages/react-instantsearch-core/dist/umd/ReactInstantSearchCore.min.js 64.6 kB 0 B
packages/react-instantsearch/dist/umd/ReactInstantSearch.min.js 109 kB +1 B (0%)

compressed-size-action

@FabienMotte FabienMotte changed the title feat(vue): PoC — Composition API composables over a shared widget lifecycle controller (do not merge) feat(vue): PoC — Composition API composables over a shared widget lifecycle controller Jul 31, 2026
@FabienMotte FabienMotte added the 🚨 DO NOT MERGE for a pull request that is ready to review, but should not be merged yet label Jul 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🚨 DO NOT MERGE for a pull request that is ready to review, but should not be merged yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant