From 698e5577970157146f1c666f49cf048642bb473a Mon Sep 17 00:00:00 2001 From: 07akioni <07akioni2@gmail.com> Date: Sat, 25 Sep 2021 18:09:18 +0800 Subject: [PATCH] fix: components with rtl support throws error in SSR --- CHANGELOG.en-US.md | 1 + CHANGELOG.zh-CN.md | 1 + package.json | 2 +- src/_mixins/use-rtl.ts | 2 +- src/config-provider/tests/server.spec.tsx | 25 +++++++++++++++++++++++ src/jest-setup.ts | 4 +++- 6 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 src/config-provider/tests/server.spec.tsx diff --git a/CHANGELOG.en-US.md b/CHANGELOG.en-US.md index a82fea3ff..916d8a3d0 100644 --- a/CHANGELOG.en-US.md +++ b/CHANGELOG.en-US.md @@ -11,6 +11,7 @@ - Fix `n-global-style` applies style transition on first mount. - Fix `n-drawer` border transition, closes[#1211]. - Fix `n-input-number`'s `value` prop can't be `null` type. +- Fix components with rtl support throws error in SSR. ### Feats diff --git a/CHANGELOG.zh-CN.md b/CHANGELOG.zh-CN.md index cd2a094ce..fec856ebc 100644 --- a/CHANGELOG.zh-CN.md +++ b/CHANGELOG.zh-CN.md @@ -11,6 +11,7 @@ - 修复 `n-global-style` 在首次挂载时应用样式过渡 - 修复 `n-drawer` 边界缺少 transition,关闭 [#1211] - 修复 `n-input-number` 的 `value` 属性不能为 null 类型 +- 修复支持 rtl 的组件 SSR 报错 ### Feats diff --git a/package.json b/package.json index 4e6055e14..39467b3b0 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "@vue/compiler-sfc": "^3.0.10", "@vue/eslint-config-standard": "^6.0.0", "@vue/eslint-config-typescript": "^7.0.0", - "@vue/server-renderer": "^3.2.12", + "@vue/server-renderer": "^3.2.18", "@vue/test-utils": "^2.0.0-rc.9", "autoprefixer": "^10.2.6", "babel-eslint": "^10.1.0", diff --git a/src/_mixins/use-rtl.ts b/src/_mixins/use-rtl.ts index b537bc762..16f6c2c54 100644 --- a/src/_mixins/use-rtl.ts +++ b/src/_mixins/use-rtl.ts @@ -31,7 +31,7 @@ export default function useRtl ( // if it already exists, we only need to watch clsPrefix, although in most // of time it's unnecessary... However we can at least listen less // handlers, which is great. - if (exists(id)) return + if (exists(id, ssrAdapter)) return const { value: componentRtlState } = componentRtlStateRef if (!componentRtlState) return componentRtlState.style.mount({ diff --git a/src/config-provider/tests/server.spec.tsx b/src/config-provider/tests/server.spec.tsx new file mode 100644 index 000000000..1b435c994 --- /dev/null +++ b/src/config-provider/tests/server.spec.tsx @@ -0,0 +1,25 @@ +/** + * @jest-environment node + */ +import { h, createSSRApp } from 'vue' +import { renderToString } from '@vue/server-renderer' +import { setup } from '@css-render/vue3-ssr' +import { NConfigProvider, NButton } from '../..' + +describe('SSR', () => { + it('works', async () => { + const app = createSSRApp(() => ( + + {{ + default: () => + }} + + )) + setup(app) + try { + await renderToString(app) + } catch (e) { + expect(e).not.toBeTruthy() + } + }) +}) diff --git a/src/jest-setup.ts b/src/jest-setup.ts index a2376bc87..ae21cb3fd 100644 --- a/src/jest-setup.ts +++ b/src/jest-setup.ts @@ -1,2 +1,4 @@ // https://github.com/jsdom/jsdom/issues/1422 -HTMLDivElement.prototype.scrollTo = () => {} +if (typeof window !== 'undefined') { + HTMLDivElement.prototype.scrollTo = () => {} +}