| import dynamic from 'next/dynamic' |
| import Tabs from '@/components/Tabs' |
| import { isBrowser, isSearchEngineBot } from '@/lib/utils' |
| import { useRouter } from 'next/router' |
| import Artalk from './Artalk' |
| import { siteConfig } from '@/lib/config' |
|
|
| const WalineComponent = dynamic( |
| () => { |
| return import('@/components/WalineComponent') |
| }, |
| { ssr: false } |
| ) |
|
|
| const CusdisComponent = dynamic( |
| () => { |
| return import('@/components/CusdisComponent') |
| }, |
| { ssr: false } |
| ) |
|
|
| const TwikooCompenent = dynamic( |
| () => { |
| return import('@/components/Twikoo') |
| }, |
| { ssr: false } |
| ) |
|
|
| const GitalkComponent = dynamic( |
| () => { |
| return import('@/components/Gitalk') |
| }, |
| { ssr: false } |
| ) |
| const UtterancesComponent = dynamic( |
| () => { |
| return import('@/components/Utterances') |
| }, |
| { ssr: false } |
| ) |
| const GiscusComponent = dynamic( |
| () => { |
| return import('@/components/Giscus') |
| }, |
| { ssr: false } |
| ) |
| const WebMentionComponent = dynamic( |
| () => { |
| return import('@/components/WebMention') |
| }, |
| { ssr: false } |
| ) |
|
|
| const ValineComponent = dynamic(() => import('@/components/ValineComponent'), { |
| ssr: false |
| }) |
|
|
| |
| |
| |
| |
| |
| const Comment = ({ siteInfo, frontMatter, className }) => { |
| const router = useRouter() |
|
|
| const COMMENT_ARTALK_SERVER = siteConfig('COMMENT_ARTALK_SERVER') |
| const COMMENT_TWIKOO_ENV_ID = siteConfig('COMMENT_TWIKOO_ENV_ID') |
| const COMMENT_WALINE_SERVER_URL = siteConfig('COMMENT_WALINE_SERVER_URL') |
| const COMMENT_VALINE_APP_ID = siteConfig('COMMENT_VALINE_APP_ID') |
| const COMMENT_GISCUS_REPO = siteConfig('COMMENT_GISCUS_REPO') |
| const COMMENT_CUSDIS_APP_ID = siteConfig('COMMENT_CUSDIS_APP_ID') |
| const COMMENT_UTTERRANCES_REPO = siteConfig('COMMENT_UTTERRANCES_REPO') |
| const COMMENT_GITALK_CLIENT_ID = siteConfig('COMMENT_GITALK_CLIENT_ID') |
| const COMMENT_WEBMENTION_ENABLE = siteConfig('COMMENT_WEBMENTION_ENABLE') |
|
|
| if (isSearchEngineBot()) { |
| return null |
| } |
|
|
| |
| if (isBrowser && ('giscus' in router.query || router.query.target === 'comment')) { |
| setTimeout(() => { |
| const url = router.asPath.replace('?target=comment', '') |
| history.replaceState({}, '', url) |
| document?.getElementById('comment')?.scrollIntoView({ block: 'start', behavior: 'smooth' }) |
| }, 1000) |
| } |
|
|
| if (!frontMatter) { |
| return <>Loading...</> |
| } |
|
|
| return ( |
| <div key={frontMatter?.id} id='comment' className={`comment mt-5 text-gray-800 dark:text-gray-300 ${className || ''}`}> |
| <Tabs> |
| {COMMENT_ARTALK_SERVER && (<div key='Artalk'> |
| <Artalk /> |
| </div>)} |
| |
| {COMMENT_TWIKOO_ENV_ID && (<div key='Twikoo'> |
| <TwikooCompenent /> |
| </div>)} |
| |
| {COMMENT_WALINE_SERVER_URL && (<div key='Waline'> |
| <WalineComponent /> |
| </div>)} |
| |
| {COMMENT_VALINE_APP_ID && (<div key='Valine' name='reply'> |
| <ValineComponent path={frontMatter.id} /> |
| </div>)} |
| |
| {COMMENT_GISCUS_REPO && ( |
| <div key="Giscus"> |
| <GiscusComponent className="px-2" /> |
| </div> |
| )} |
| |
| {COMMENT_CUSDIS_APP_ID && (<div key='Cusdis'> |
| <CusdisComponent frontMatter={frontMatter} /> |
| </div>)} |
| |
| {COMMENT_UTTERRANCES_REPO && (<div key='Utterance'> |
| <UtterancesComponent issueTerm={frontMatter.id} className='px-2' /> |
| </div>)} |
| |
| {COMMENT_GITALK_CLIENT_ID && (<div key='GitTalk'> |
| <GitalkComponent frontMatter={frontMatter} /> |
| </div>)} |
| |
| {COMMENT_WEBMENTION_ENABLE && (<div key='WebMention'> |
| <WebMentionComponent frontMatter={frontMatter} className="px-2" /> |
| </div>)} |
| </Tabs> |
| </div> |
| ) |
| } |
|
|
| export default Comment |
|
|