%PDF- %PDF-
Direktori : /home/dopla/www/wp-content/plugins/ml-slider/extendify-sdk/src/components/ |
Current File : /home/dopla/www/wp-content/plugins/ml-slider/extendify-sdk/src/components/FooterNotice.js |
import { __ } from '@wordpress/i18n' import { Icon, closeSmall } from '@wordpress/icons' import { Button } from '@wordpress/components' import WelcomeNotice from './notices/WelcomeNotice' import PromotionNotice from './notices/PromotionNotice' import { useUserStore } from '../state/User' import { useGlobalStore } from '../state/GlobalState' import { useState, useEffect, useRef } from '@wordpress/element' const NoticesByPriority = { welcome: WelcomeNotice, promotion: PromotionNotice, } export default function FooterNotice() { const [hasNotice, setHasNotice] = useState(null) const once = useRef(false) const promotionData = useGlobalStore( (state) => state.metaData?.banners?.footer, ) // Find the first notice key to use const componentKey = Object.keys(NoticesByPriority).find((key) => { if (key === 'promotion') { return ( // When checking promotions, use the key sent from the server // to check whether it's been dismissed promotionData?.key && !useUserStore.getState().noticesDismissedAt[ promotionData.key ] ) } return !useUserStore.getState().noticesDismissedAt[key] }) ?? null const Notice = NoticesByPriority[componentKey] const dismiss = () => { setHasNotice(false) // The noticesDismissedAt key will either be the welcome notice, // or a key passed in from the server, such as 'holiday-sale2077' const key = componentKey === 'promotion' ? promotionData.key : componentKey useUserStore.setState({ noticesDismissedAt: Object.assign( {}, { ...useUserStore.getState().noticesDismissedAt, [key]: new Date().toISOString(), }, ), }) } useEffect(() => { // Only show the notice once on main render and only if a notice exists. if (NoticesByPriority[componentKey] && !once.current) { setHasNotice(true) once.current = true } }, [componentKey]) if (!hasNotice) { return null } return ( <div className="bg-extendify-secondary hidden lg:flex space-x-4 py-3 px-5 justify-center items-center relative max-w-screen-4xl mx-auto"> {/* Pass all data to all components and let them decide what they use */} <Notice promotionData={promotionData} /> <div className="absolute right-1"> <Button className="opacity-50 hover:opacity-100 focus:opacity-100 text-extendify-black" icon={<Icon icon={closeSmall} />} label={__('Dismiss this notice', 'extendify-sdk')} onClick={dismiss} showTooltip={false} /> </div> </div> ) }