Files
AFFiNE-Mirror/packages/frontend/component/src/lit-react/to-react-node.ts
T
L-Sun 662a3d4b76 refactor(core): use lit customelement decorator (#7560)
Close: [BS-585](https://linear.app/affine-design/issue/BS-585/更新affine侧lit自定义yuan素的写法)

### What changes:
- using `@customElement(xxx)` instead of `window.customElements.define(xxx)`
- remove `registerOutlinePanelComponents` and `registerFramePanelComponents`, Related PR https://github.com/toeverything/blocksuite/pull/7700
2024-07-25 07:45:41 +00:00

36 lines
917 B
TypeScript

import { LitElement, type TemplateResult } from 'lit';
import { customElement } from 'lit/decorators.js';
import React, { createElement, type ReactNode } from 'react';
import { createComponent } from './create-component';
@customElement('affine-lit-template-wrapper')
export class LitTemplateWrapper extends LitElement {
static override get properties() {
return {
template: { type: Object },
};
}
template: TemplateResult | null = null;
// do not enable shadow root
override createRenderRoot() {
return this;
}
override render() {
return this.template;
}
}
const TemplateWrapper = createComponent({
elementClass: LitTemplateWrapper,
react: React,
});
export const toReactNode = (template?: TemplateResult | string): ReactNode => {
if (!template) return null;
return typeof template === 'string'
? template
: createElement(TemplateWrapper, { template });
};