Skip to content

Commit 4076d15

Browse files
committed
feat: q-no-ssr component
1 parent 99a28b6 commit 4076d15

File tree

4 files changed

+89
-0
lines changed

4 files changed

+89
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<template>
2+
<div class="no-ssr-page layout-padding">
3+
<div class="q-title">1. Basic</div>
4+
<q-no-ssr>
5+
<div>This won't be rendered on server</div>
6+
</q-no-ssr>
7+
8+
<div class="q-title">2. Multiple client nodes</div>
9+
<q-no-ssr>
10+
<div>This won't be rendered on server.</div>
11+
<div>This won't either.</div>
12+
</q-no-ssr>
13+
14+
<div class="q-title">3. Multiple client nodes with tag prop</div>
15+
<q-no-ssr tag="blockquote">
16+
<div>This won't be rendered on server.</div>
17+
<div>This won't either.</div>
18+
</q-no-ssr>
19+
20+
<div class="q-title">4. Placeholder prop</div>
21+
<q-no-ssr placeholder="Rendered on server">
22+
<div>This won't be rendered on server</div>
23+
</q-no-ssr>
24+
25+
<div class="q-title">5. Placeholder slot</div>
26+
<q-no-ssr>
27+
<div>This won't be rendered on server</div>
28+
<div slot="placeholder">Rendered on server</div>
29+
</q-no-ssr>
30+
31+
<div class="q-title">6. Multiple placeholder slot</div>
32+
<q-no-ssr>
33+
<div>This won't be rendered on server</div>
34+
<div slot="placeholder">Rendered on server (1/2)</div>
35+
<div slot="placeholder">Rendered on server (2/2)</div>
36+
</q-no-ssr>
37+
38+
<div class="q-title">7. Only placeholder slot</div>
39+
<q-no-ssr>
40+
<div slot="placeholder">Rendered on server</div>
41+
</q-no-ssr>
42+
</div>
43+
</template>
44+
45+
<style lang="stylus">
46+
.no-ssr-page
47+
.q-title
48+
margin-top 42px
49+
</style>

src/components.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export * from './components/knob'
2828
export * from './components/layout'
2929
export * from './components/list'
3030
export * from './components/modal'
31+
export * from './components/no-ssr'
3132
export * from './components/observables'
3233
export * from './components/option-group'
3334
export * from './components/pagination'

src/components/no-ssr/QNoSsr.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import CanRenderMixin from '../../mixins/can-render'
2+
3+
export default {
4+
name: 'QNoSsr',
5+
mixins: [ CanRenderMixin ],
6+
props: {
7+
tag: {
8+
type: String,
9+
default: 'div'
10+
},
11+
placeholder: String
12+
},
13+
render (h) {
14+
if (this.canRender) {
15+
const slot = this.$slots.default
16+
return slot && slot.length > 1
17+
? h(this.tag, slot)
18+
: (slot ? slot[0] : null)
19+
}
20+
21+
if (this.$slots.placeholder) {
22+
const slot = this.$slots.placeholder
23+
return slot && slot.length > 1
24+
? h(this.tag, { staticClass: 'q-no-ssr-placeholder' }, slot)
25+
: (slot ? slot[0] : null)
26+
}
27+
28+
if (this.placeholder) {
29+
return h(this.tag, { staticClass: 'q-no-ssr-placeholder' }, [
30+
this.placeholder
31+
])
32+
}
33+
}
34+
}

src/components/no-ssr/index.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import QNoSsr from './QNoSsr'
2+
3+
export {
4+
QNoSsr
5+
}

0 commit comments

Comments
 (0)