Skip to content

Commit

Permalink
Pass live api through context
Browse files Browse the repository at this point in the history
  • Loading branch information
vonagam committed Sep 4, 2023
1 parent d9eba0a commit 9daf2da
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 3 deletions.
8 changes: 6 additions & 2 deletions assets/js/live_svelte/hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ function getProps(ref) {
return {
...getAttributeJson(ref, "data-props"),
...getLiveJsonProps(ref),
live: ref,
...ref._live_props,
$$slots: getSlots(ref),
$$scope: {},
}
Expand All @@ -83,7 +83,7 @@ function findSlotCtx(component) {
return component.$$.ctx.find(ctxElement => ctxElement?.default)
}

export function getHooks(components) {
export function getHooks(components, options) {
components = normalizeComponents(components)

const SvelteHook = {
Expand All @@ -98,6 +98,9 @@ export function getHooks(components) {
throw new Error(`Unable to find ${componentName} component.`)
}

this._live_props = options?.prop !== false ? {live: this} : undefined
this._live_context = options?.context !== false ? new Map([["live-svelte", this]]) : undefined

for (const liveJsonElement of Object.keys(getAttributeJson(this, "data-live-json"))) {
window.addEventListener(`${liveJsonElement}_initialized`, event => this._instance.$set(getProps(this)), false)
window.addEventListener(`${liveJsonElement}_patched`, event => this._instance.$set(getProps(this)), false)
Expand All @@ -106,6 +109,7 @@ export function getHooks(components) {
this._instance = new Component({
target: this.el,
props: getProps(this),
context: this._live_context,
hydrate: this.el.hasAttribute("data-ssr"),
})
},
Expand Down
1 change: 1 addition & 0 deletions assets/js/live_svelte/index.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
export {getRender} from "./render"
export {getHooks} from "./hooks"
export {getLive} from "./utils"
8 changes: 7 additions & 1 deletion assets/js/live_svelte/types.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,11 @@ export type Live = {
uploadTo(phxTarget: any, name: string, files: any): void
}

export declare const getHooks: (components: object) => object
export type HooksOptions = {
prop?: boolean
context?: boolean
}

export declare const getHooks: (components: object, options?: HooksOptions) => object
export declare const getRender: (components: object) => (name: string, props: object, slots: object) => any
export declare const getLive: (getContext: (key: string) => any) => Live
4 changes: 4 additions & 0 deletions assets/js/live_svelte/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,7 @@ export function normalizeComponents(components) {
}
return normalized
}

export function getLive(getContext) {
return getContext("live-svelte")
}

0 comments on commit 9daf2da

Please sign in to comment.