survey-widget-ds-nav.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import usePersistedState from '../../../shared/hooks/use-persisted-state'
  2. import getMeta from '../../../utils/meta'
  3. import { useCallback } from 'react'
  4. import OLButton from '@/shared/components/ol/ol-button'
  5. import { useTranslation } from 'react-i18next'
  6. import { X } from '@phosphor-icons/react'
  7. export function SurveyWidgetDsNav() {
  8. const { t } = useTranslation()
  9. const survey = getMeta('ol-survey')
  10. const [dismissedSurvey, setDismissedSurvey] = usePersistedState(
  11. `dismissed-${survey?.name}`,
  12. false
  13. )
  14. const dismissSurvey = useCallback(() => {
  15. setDismissedSurvey(true)
  16. }, [setDismissedSurvey])
  17. if (!survey?.name || dismissedSurvey) {
  18. return null
  19. }
  20. return (
  21. <aside className="user-notifications" aria-label={t('feedback')}>
  22. <div className="notification-entry">
  23. <div role="alert" className="survey-notification">
  24. <div className="notification-body">
  25. <p className="fw-bold fs-6 pe-4">{survey.title}</p>
  26. <p>{survey.text}</p>
  27. <OLButton
  28. variant="secondary"
  29. size="sm"
  30. href={survey.url}
  31. target="_blank"
  32. rel="noreferrer noopener"
  33. >
  34. {survey.cta || t('take_survey')}
  35. </OLButton>
  36. </div>
  37. <OLButton
  38. variant="ghost"
  39. className="user-notification-close"
  40. onClick={() => dismissSurvey()}
  41. >
  42. <X size={16} onClick={() => dismissSurvey()} />
  43. <span className="visually-hidden">{t('close')}</span>
  44. </OLButton>
  45. </div>
  46. </div>
  47. </aside>
  48. )
  49. }