File: /var/www/html/wpicare/wp-content/plugins/code-snippets/js/components/SnippetForm/page/Notices.tsx
import classnames from 'classnames'
import React, { useEffect } from 'react'
import { __, sprintf } from '@wordpress/i18n'
import { useSnippetForm } from '../../../hooks/useSnippetForm'
import type { ReactNode } from 'react'
const NOTICE_TIMEOUT_MS = 5000
interface DismissibleNoticeProps {
classNames?: classnames.Argument
onRemove: VoidFunction
children?: ReactNode
autoHide?: boolean
}
const DismissibleNotice: React.FC<DismissibleNoticeProps> = ({ classNames, onRemove, children, autoHide = true }) => {
useEffect(() => {
if (autoHide) {
const timer = setTimeout(onRemove, NOTICE_TIMEOUT_MS)
return () => clearTimeout(timer)
}
return undefined
}, [autoHide, onRemove])
return (
<div id="message" className={classnames('cs-sticky-notice notice fade is-dismissible', classNames)}>
<>{children}</>
<button type="button" className="notice-dismiss" onClick={event => {
event.preventDefault()
onRemove()
}}>
<span className="screen-reader-text">{__('Dismiss notice.', 'code-snippets')}</span>
</button>
</div>
)
}
export const Notices: React.FC = () => {
const { currentNotice, setCurrentNotice, snippet, setSnippet } = useSnippetForm()
return <>
{currentNotice
? <DismissibleNotice classNames={currentNotice[0]} onRemove={() => setCurrentNotice(undefined)}>
<p>{currentNotice[1]}</p>
</DismissibleNotice>
: null}
{snippet.code_error
? <DismissibleNotice
classNames="error"
onRemove={() => setSnippet(previous => ({ ...previous, code_error: null }))}
autoHide={false}
>
<p>
<strong>{sprintf(
// translators: %d: line number.
__('Snippet automatically deactivated due to an error on line %d:', 'code-snippets'),
snippet.code_error[1]
)}</strong>
<blockquote>{snippet.code_error[0]}</blockquote>
</p>
</DismissibleNotice>
: null}
</>
}