11import styles from "./styles.module.css" ;
2- import Popup from "reactjs-popup" ;
3- import SocialMediaContacts from "./SocialMediaContacts" ;
4- import { useRef , useState } from "react" ;
5- import LargePortraitCard from "./LargePortraitCard" ;
2+ import { useHistory } from "react-router" ;
63import Avatar from "./Avatar" ;
4+ import { useState } from "react" ;
75
8- const contentStyle = {
9- background : "white" ,
10- borderRadius : "10px" ,
11- } ;
126
13- const overlayStyle = {
14- backgroundColor : "var(--ifm-background-color-popup-overlay)" ,
15- opacity : "0.4" ,
16- width : "100%" ,
17- height : "100%" ,
18- } ;
7+ export function SmallPortraitCard ( { person} ) {
8+ let [ isDialogOpen , setIsDialogOpen ] = useState ( false ) ;
199
20- function getCenterOfViewport ( ) {
21- let horizontalCenter = Math . floor ( window . innerWidth / 2 ) ;
22- let verticalCenter = Math . floor ( window . innerHeight / 2 ) ;
23- return [ horizontalCenter , verticalCenter ] ;
24- }
10+ const history = useHistory ( ) ;
2511
26- function calculateOffsets ( elementRef ) {
27- const rect = elementRef . current . getBoundingClientRect ( ) ;
28- const [ xViewportCenter , yViewportCenter ] = getCenterOfViewport ( ) ;
29- const [ xCardCenter , yCardCenter ] = [
30- rect . left + rect . width / 2 ,
31- rect . top + rect . height / 2 ,
32- ] ;
33- const offsets = [
34- xViewportCenter - xCardCenter ,
35- yViewportCenter - yCardCenter ,
36- ] ;
37- return offsets ;
38- }
39-
40- export function SmallPortraitCard ( { person, setOffsets } ) {
41- const elementRef = useRef ( null ) ;
12+ const openDialog = ( ) => {
13+ history . push ( "/about/" + person . firstName ) ;
14+ setIsDialogOpen ( true ) ;
15+ } ;
4216
4317 return (
44- < div
45- ref = { elementRef }
46- className = { "card" + " " + styles . small_portrait_card }
47- id = { person . firstName }
48- onClick = { ( ) => {
49- setOffsets ( calculateOffsets ( elementRef ) ) ;
50- } }
51- >
18+ < div onClick = { openDialog } >
19+ < div className = { "card" + " " + styles . small_portrait_card } >
5220 < div className = "card__header" >
5321 < Avatar person = { person } />
5422 < div
@@ -65,49 +33,8 @@ export function SmallPortraitCard({ person, setOffsets }) {
6533 >
6634 { person . position }
6735 </ div >
68- < div style = { { marginTop : "var(--ifm-spacing-xl)" } } >
69- < SocialMediaContacts person = { person } > </ SocialMediaContacts >
70- </ div >
7136 </ div >
7237 </ div >
73- ) ;
74- }
75- export default function PopupPortrait ( { person } ) {
76- const [ offsets , setOffsets ] = useState ( [ 0 , 0 ] ) ;
77- let [ isPopupOpen , setIsPopupOpen ] = useState ( false ) ;
78-
79- return (
80- < div >
81- < Popup
82- open = { isPopupOpen }
83- closeOnEscape = { true }
84- closeOnDocumentClick = { true }
85- onClose = { ( ) => setIsPopupOpen ( false ) }
86- trigger = {
87- < div >
88- < SmallPortraitCard person = { person } setOffsets = { setOffsets } />
89- </ div >
90- }
91- onOpen = { ( ) => {
92- setIsPopupOpen ( true ) ;
93- } }
94- contentStyle = { contentStyle }
95- overlayStyle = { overlayStyle }
96- position = { "center center" }
97- offsetX = { offsets [ 0 ] }
98- offsetY = { offsets [ 1 ] }
99- >
100- < div >
101- < button
102- className = "close-button"
103- style = { { position : "absolute" , right : "0px" } }
104- onClick = { ( ) => {
105- setIsPopupOpen ( false ) ;
106- } }
107- > </ button >
108- < LargePortraitCard person = { person } > </ LargePortraitCard >
109- </ div >
110- </ Popup >
11138 </ div >
11239 ) ;
113- }
40+ }
0 commit comments