Skip to content
This repository was archived by the owner on Jul 6, 2025. It is now read-only.

Commit 34bbc79

Browse files
author
Je
committed
refactor: imporve SEOProps and ViewportProps interfaces
1 parent 67b9b8f commit 34bbc79

File tree

1 file changed

+13
-18
lines changed

1 file changed

+13
-18
lines changed

head.ts

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -73,55 +73,50 @@ export function Scripts({ children }: PropsWithChildren<{}>) {
7373
}
7474

7575
interface SEOProps {
76-
title: string
77-
description: string
78-
keywords: string | string[]
76+
title?: string
77+
description?: string
78+
keywords?: string | string[]
7979
image?: string
8080
}
8181

8282
export function SEO({ title, description, keywords, image }: SEOProps) {
8383
return createElement(
8484
Head,
8585
undefined,
86-
createElement('title', undefined, title),
87-
createElement('meta', { name: 'description', content: description }),
88-
createElement('meta', { name: 'keywords', content: util.isArray(keywords) ? keywords.join(',') : keywords }),
89-
createElement('meta', { name: 'og:title', content: title }),
90-
createElement('meta', { name: 'og:description', content: description }),
91-
createElement('meta', { name: 'twitter:title', content: title }),
92-
createElement('meta', { name: 'twitter:description', content: description }),
86+
title && createElement('title', undefined, title),
87+
description && createElement('meta', { name: 'description', content: description }),
88+
keywords && createElement('meta', { name: 'keywords', content: util.isArray(keywords) ? keywords.join(',') : keywords }),
89+
title && createElement('meta', { name: 'og:title', content: title }),
90+
description && createElement('meta', { name: 'og:description', content: description }),
91+
title && createElement('meta', { name: 'twitter:title', content: title }),
92+
description && createElement('meta', { name: 'twitter:description', content: description }),
9393
image && createElement('meta', { name: 'og:image', content: image }),
9494
image && createElement('meta', { name: 'twitter:image:src', content: image }),
9595
image && createElement('meta', { name: 'twitter:card', content: 'summary_large_image' }),
9696
)
9797
}
9898

9999
interface ViewportProps {
100-
width: number | 'device-width'
100+
width?: number | 'device-width'
101101
height?: number | 'device-height'
102102
initialScale?: number
103103
minimumScale?: number
104104
maximumScale?: number
105-
userScalable?: boolean
105+
userScalable?: 'yes' | 'no'
106106
targetDensitydpi?: number | 'device-dpi' | 'low-dpi' | 'medium-dpi' | 'high-dpi'
107107
}
108108

109109
export function Viewport(props: ViewportProps) {
110110
const content = Object.entries(props)
111111
.map(([key, value]) => {
112112
key = key.replace(/[A-Z]/g, c => '-' + c.toLowerCase())
113-
if (value === true) {
114-
value = 'yes'
115-
} else if (value === false) {
116-
value = 'no'
117-
}
118113
return `${key}=${value}`
119114
})
120115
.join(',')
121116
return createElement(
122117
Head,
123118
undefined,
124-
createElement('meta', { name: 'viewport', content })
119+
content && createElement('meta', { name: 'viewport', content })
125120
)
126121
}
127122

0 commit comments

Comments
 (0)