diff --git a/.stylelintrc b/.stylelintrc index e49ea7b543..f92969fa42 100644 --- a/.stylelintrc +++ b/.stylelintrc @@ -34,7 +34,7 @@ } ], "font-family-no-duplicate-names": true, "font-family-no-missing-generic-family-keyword": true, - "function-comma-space-after": [ "always", { + "function-comma-space-after": [ "always-single-line", { "severity": "warning" } ], "function-max-empty-lines": 0, diff --git a/src/app/components/Footer/ContactDialog.tsx b/src/app/components/Footer/ContactDialog.tsx new file mode 100644 index 0000000000..b044e2d8c2 --- /dev/null +++ b/src/app/components/Footer/ContactDialog.tsx @@ -0,0 +1,68 @@ +import React from 'react'; +import classNames from 'classnames'; +import { MessageEvent } from '@openstax/types/lib.dom'; +import { useModalFocusManagement } from '../../content/hooks/useModalFocusManagement'; +import Modal from '../Modal'; + +export function ContactDialog({ + isOpen, + close, + contactFormParams, + className, +}: { + isOpen: boolean; + close: () => void; + contactFormParams?: { key: string; value: string }[]; + className?: string; +}) { + const contactFormUrl = React.useMemo(() => { + const formUrl = '/embedded/contact'; + + if (contactFormParams !== undefined) { + const params = contactFormParams + .map(({ key, value }) => encodeURIComponent(`${key}=${value}`)) + .map((p) => `body=${p}`) + .join('&'); + + return `${formUrl}?${params}`; + } + + return formUrl; + }, [contactFormParams]); + const { closeButtonRef } = useModalFocusManagement({ modalId: 'contactdialog', isOpen }); + + return !isOpen ? null : ( + +