* adds focusTrap wrapper to preact Modal component * add view specific code for focus trap in admin add nav link * add script to return a focustrap toggle, use in add nav link modal partial * add trap to edit nav link modal * add handlers for sign up modal * update modal controller for admin section, update nav link modals to use * update other admin modals with new data values for trap * remove unneeded erb script file * remove unneeded target * refactor to remove extra unneeded param * remove duplicate code, store getFocusTrapToggle in window * trap focus in comment and bookmark showModal instances for not logged in user * remove need for activator id * clean up id refs no longer needed * remove custom code and re-use focsu-trap lib * update storybook docs * update default export in focusTrap * prevent close button click triggering a modal toggle twice * ensure if user navigates from a modal the trap is deactivated * add jsdoc comments and add dynamic import * ensure admin controller modal traps are cleaned up on disconnect * update sign up modal to use crayons * update modal controller and admin nav links modals to use preact modal * update profile fields modals for new controller * tweak styling of sign up and admin modals to match previous * update listings modal to use crayons modal, adapt focus trap to work with click outside * memoize deactivate callback to ensure modal can be presented on first page load * add missed focustrap changes * fix focus trap issues in onboarding flow * refactor onboarding focus trap, remove getFocusTrapToggle * tweaks for styling and article modal toggle * add click outside tests to modal * add cypress tests for the login modal * update liquid tag tests affected by change * refactors to address review comments * fix issue with login modal presented twice on comment add * change ids to selectors in admin modals * small pr comment refactors * add listings e2e tests * add nav link modal tests * fix issue with help modal * tweak to fix ui bug from merge * remove context from showLoginModal * rename toggleModal * rename state property for clarity Co-authored-by: Nick Taylor <nick@dev.to>
66 lines
1.7 KiB
JavaScript
66 lines
1.7 KiB
JavaScript
import { h } from 'preact';
|
|
import PropTypes from 'prop-types';
|
|
import { SingleListing } from '../singleListing/SingleListing';
|
|
import { MessageModal } from './MessageModal';
|
|
import { Modal as CrayonsModal } from '@crayons';
|
|
|
|
export const Modal = ({
|
|
currentUserId,
|
|
onAddTag,
|
|
onChangeDraftingMessage,
|
|
onClick,
|
|
onChangeCategory,
|
|
onOpenModal,
|
|
onSubmit,
|
|
listing,
|
|
message,
|
|
}) => {
|
|
const shouldRenderMessageModal = listing && listing.contact_via_connect;
|
|
|
|
return (
|
|
<div className="listings-modal" data-testid="listings-modal">
|
|
<CrayonsModal
|
|
onClose={onClick}
|
|
closeOnClickOutside={true}
|
|
title="Listing"
|
|
>
|
|
<div className="p-3 m:p-6 l:p-8">
|
|
<SingleListing
|
|
onAddTag={onAddTag}
|
|
onChangeCategory={onChangeCategory}
|
|
listing={listing}
|
|
currentUserId={currentUserId}
|
|
onOpenModal={onOpenModal}
|
|
isOpen
|
|
/>
|
|
</div>
|
|
{shouldRenderMessageModal && (
|
|
<div className="bg-base-10 p-3 m:p-6 l:p-8">
|
|
<MessageModal
|
|
onSubmit={onSubmit}
|
|
onChangeDraftingMessage={onChangeDraftingMessage}
|
|
message={message}
|
|
listing={listing}
|
|
/>
|
|
</div>
|
|
)}
|
|
</CrayonsModal>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
Modal.propTypes = {
|
|
listing: PropTypes.isRequired,
|
|
onAddTag: PropTypes.func.isRequired,
|
|
onChangeDraftingMessage: PropTypes.func.isRequired,
|
|
onClick: PropTypes.func.isRequired,
|
|
onChangeCategory: PropTypes.func.isRequired,
|
|
onOpenModal: PropTypes.func.isRequired,
|
|
onSubmit: PropTypes.func.isRequired,
|
|
currentUserId: PropTypes.number,
|
|
message: PropTypes.string.isRequired,
|
|
};
|
|
|
|
Modal.defaultProps = {
|
|
currentUserId: null,
|
|
};
|