From d4dc650e7b2f747b5591ccd47198c7059b6dc81f Mon Sep 17 00:00:00 2001 From: Mokshit06 <50412128+Mokshit06@users.noreply.github.com> Date: Sat, 14 May 2022 13:28:54 +0000 Subject: [PATCH] fix svelte render --- packages/svelte-table/src/index.ts | 46 +++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/packages/svelte-table/src/index.ts b/packages/svelte-table/src/index.ts index bb984c9795..0d3df2f0d2 100755 --- a/packages/svelte-table/src/index.ts +++ b/packages/svelte-table/src/index.ts @@ -7,6 +7,7 @@ import { TableOptions, } from '@tanstack/table-core' import Placeholder from './placeholder.svelte' +import { SvelteComponent } from 'svelte/internal' import { readable, writable, derived, Readable, get } from 'svelte/store' import { renderComponent } from './render-component' @@ -14,17 +15,48 @@ export { renderComponent } from './render-component' export * from '@tanstack/table-core' -export function render(Comp: any, props: any) { - if (!Comp) return null +function isSvelteServerComponent(component: any) { + return ( + typeof component === 'object' && + typeof component.$$render === 'function' && + typeof component.render === 'function' + ) +} + +function isSvelteClientComponent(component: any) { + return component.prototype instanceof SvelteComponent +} - if (Comp instanceof Function) { - let res = Comp(props) - return res +function isSvelteComponent(component: any) { + if (typeof document === 'undefined') { + return isSvelteServerComponent(component) } else { - return renderComponent(Placeholder, { content: Comp }) + return isSvelteClientComponent(component) + } +} + +function wrapInPlaceholder(content: any) { + return renderComponent(Placeholder, { content }) +} + +export function render(component: any, props: any) { + if (!component) return null + + if (isSvelteComponent(component)) { + return renderComponent(component, props) + } + + if (typeof component === 'function') { + const result = component(props) + + if (isSvelteComponent(result)) { + return result + } + + return wrapInPlaceholder(result) } - // return Comp + return wrapInPlaceholder(component) } export const createTable = createTableFactory({ render })