import { useGlobal } from '@/lib/global' import { useRouter } from 'next/router' import { useEffect, useRef } from 'react' /** * 加密文章驗證元件 * @param {password, validPassword} props * @param password 正確的密碼 * @param validPassword(bool) 回呼函式,驗證通過時傳回 true * @returns */ export const ArticleLock = props => { const { validPassword } = props const { locale } = useGlobal() const router = useRouter() const passwordInputRef = useRef(null) /** * 輸入並送出密碼 */ const submitPassword = () => { const p = document.getElementById('password') // 驗證失敗提示 if (!validPassword(p?.value)) { const tips = document.getElementById('tips') if (tips) { tips.innerHTML = '' tips.innerHTML = `
${locale.COMMON.PASSWORD_ERROR}
` } } } useEffect(() => { // 選取密碼輸入框並聚焦 passwordInputRef.current.focus() }, [router]) return (
{locale.COMMON.ARTICLE_LOCK_TIPS}
{ if (e.key === 'Enter') { submitPassword() } }} ref={passwordInputRef} // 綁定 ref 到 passwordInputRef 變數 className='outline-none w-full text-sm pl-5 rounded-l transition focus:shadow-lg dark:text-gray-300 font-light leading-10 text-black bg-gray-100 dark:bg-gray-500'>
 {locale.COMMON.SUBMIT}
) }