diff --git a/src/components/Modal/Modal.jsx b/src/components/Modal/Modal.jsx new file mode 100644 index 0000000..b70930a --- /dev/null +++ b/src/components/Modal/Modal.jsx @@ -0,0 +1,26 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +import './Modal.scss'; + +const Modal = (props) => { + if (props.isOpen) { + return ( +
+
+
{props.children}
+
+ ); + } + return null; +}; + +export default Modal; + +Modal.propTypes = { + isOpen: PropTypes.bool, +}; + +Modal.defaultProps = { + isOpen: false, +}; diff --git a/src/components/Modal/Modal.scss b/src/components/Modal/Modal.scss new file mode 100644 index 0000000..3ba80c8 --- /dev/null +++ b/src/components/Modal/Modal.scss @@ -0,0 +1,31 @@ +.modal__wrapper { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; +} + +.modal__backdrop { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 100; + background-color: rgba(0, 0, 0, 0.3); +} + +.modal__box { + position: relative; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + height: 70%; + width: 60%; + background-color: white; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.25); + z-index: 101; + overflow-y: auto; + padding: 40px; +} diff --git a/src/components/Modal/Modal.test.jsx b/src/components/Modal/Modal.test.jsx new file mode 100644 index 0000000..582dc92 --- /dev/null +++ b/src/components/Modal/Modal.test.jsx @@ -0,0 +1,11 @@ +import React from 'react'; +import { render } from '@testing-library/react'; + +import Modal from './Modal'; + +describe('', () => { + it('should create the component', () => { + const { container } = render(); + expect(container).toBeTruthy(); + }); +}); diff --git a/src/demos/DemoDisplay.jsx b/src/demos/DemoDisplay.jsx index 78b6d0c..931620f 100644 --- a/src/demos/DemoDisplay.jsx +++ b/src/demos/DemoDisplay.jsx @@ -1,8 +1,3 @@ -/* eslint-disable no-console */ -import React from 'react'; -import PropTypes from 'prop-types'; - -import './DemoDisplay.scss'; const importView = (DemoComponentName) => React.lazy(() => diff --git a/src/demos/ModalDemo.jsx b/src/demos/ModalDemo.jsx new file mode 100644 index 0000000..615bb89 --- /dev/null +++ b/src/demos/ModalDemo.jsx @@ -0,0 +1,42 @@ +import React, { useState } from 'react'; +import Modal from '../components/Modal/Modal'; + +function App() { + const [isOpen, setIsOpen] = useState(false); + + const closeModalHandler = () => { + setIsOpen(false); + }; + + const openModalHandler = () => { + setIsOpen(true); + }; + + return ( +
+ + + +

Modal Header

+

+ Lorem ipsum dolor sit, amet consectetur adipisicing elit. Sint eum + alias neque fuga asperiores, deleniti pariatur sapiente eligendi + doloremque. Mollitia, facere tempora modi asperiores eum perspiciatis + iste ipsum eaque explicabo. +

+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Quasi odit + ducimus similique quo a quis itaque hic, impedit atque voluptatem + doloribus assumenda nulla saepe molestiae aliquid corrupti magnam sint + laboriosam. +

+
+
+ ); +} + +export default App; diff --git a/src/docs/avatar.md b/src/docs/avatar.md index 9f8a58d..f8dc805 100644 --- a/src/docs/avatar.md +++ b/src/docs/avatar.md @@ -1,4 +1,4 @@ -## Usage +## Usage ``` import React from 'react' @@ -17,11 +17,10 @@ export default App; ### Properties -| Property | Type | Required | Default value | Description | -|----------|--------|----------|---------------|------------| -| name | string | yes | \- |Alternative text description of the image or Title avatar| -| src | string | no | \- |Image to display.| -| size | string | no | md | sx, sm, md, lg and xl font sizes. | - +| Property | Type | Required | Default value | Description | +| -------- | ------ | -------- | ------------- | --------------------------------------------------------- | +| name | string | yes | \- | Alternative text description of the image or Title avatar | +| src | string | no | \- | Image to display. | +| size | string | no | md | sx, sm, md, lg and xl font sizes. | ### Sample diff --git a/src/docs/modal.md b/src/docs/modal.md new file mode 100644 index 0000000..68d1bec --- /dev/null +++ b/src/docs/modal.md @@ -0,0 +1,54 @@ +## Usage + +``` +import React, { useState } from 'react'; +import Modal from '../components/Modal/Modal'; + +function App() { + const [isOpen, setIsOpen] = useState(false); + + const closeModalHandler = () => { + setIsOpen(false); + }; + + const openModalHandler = () => { + setIsOpen(true); + }; + + return ( +
+ + + +

Modal Header

+

+ Lorem ipsum dolor sit, amet consectetur adipisicing elit. Sint eum + alias neque fuga asperiores, deleniti pariatur sapiente eligendi + doloremque. Mollitia, facere tempora modi asperiores eum perspiciatis + iste ipsum eaque explicabo. +

+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Quasi odit + ducimus similique quo a quis itaque hic, impedit atque voluptatem + doloribus assumenda nulla saepe molestiae aliquid corrupti magnam sint + laboriosam. +

+
+
+ ); +} + +export default App; +``` + +### Properties + +| Property | Type | Required | Default value | Description | +| :------- | :------ | :------- | :------------ | :------------------------------------------ | +| `isOpen` | Boolean | yes | none | set to true if the modal is to be displayed | + +### Sample diff --git a/src/exports/exports.js b/src/exports/exports.js index 7c664ea..6bdef6a 100644 --- a/src/exports/exports.js +++ b/src/exports/exports.js @@ -3,3 +3,4 @@ export { default as SimpleButtonDemo } from '../demos/SimpleButtonDemo'; export { default as HeadingDemo } from '../demos/HeadingDemo'; export { default as AvatarDemo } from '../demos/AvatarDemo'; export { default as ProgressBarDemo } from '../demos/ProgressBarDemo'; +