ContactPage.jsx 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. import FacebookIcon from "@mui/icons-material/Facebook";
  2. import InstagramIcon from "@mui/icons-material/Instagram";
  3. import TwitterIcon from "@mui/icons-material/Twitter";
  4. import YouTubeIcon from "@mui/icons-material/YouTube";
  5. import Box from "@mui/material/Box";
  6. import PropTypes from "prop-types";
  7. import {Container, Grid, useMediaQuery} from "@mui/material";
  8. import {useState} from "react";
  9. import Breadcrumbs from "../../components/Breadcrumbs";
  10. import Tabs from "@mui/material/Tabs";
  11. import Tab from "@mui/material/Tab";
  12. import GoogleMap from "../../components/GoogleMap";
  13. import * as React from "react";
  14. import {AddressItem} from "./AddressItem";
  15. const defaultAddress = {
  16. 'NEW YORK': {
  17. phones: ['212-371-8500', '212-371-8555'],
  18. address: '9 East 40th Street, 3rd Floor, New York City',
  19. email: ['newyork@gmail.com'],
  20. "social networks": [
  21. {icon: FacebookIcon, url: 'https://www.facebook.com/'},
  22. {icon: InstagramIcon, url: 'https://www.instagram.com/'},
  23. {icon: TwitterIcon, url: 'https://twitter.com/home'},
  24. {icon: YouTubeIcon, url: 'https://www.youtube.com/'},
  25. ],
  26. coordinates: {
  27. lat: 40.751936,
  28. lng: -73.981081
  29. }
  30. },
  31. 'TOKYO':{
  32. phones: ['212-371-8500', '212-371-8555'],
  33. address: 'Япония, 〒162-0044 Tokyo, Shinjuku City, Kikuicho, 20−110 エヌエフ喜久井町',
  34. email: ['tokyo@gmail.com'],
  35. "social networks": [
  36. {icon: FacebookIcon, url: 'https://www.facebook.com/'},
  37. {icon: InstagramIcon, url: 'https://www.instagram.com/'},
  38. {icon: TwitterIcon, url: 'https://twitter.com/home'},
  39. {icon: YouTubeIcon, url: 'https://www.youtube.com/'},
  40. ],
  41. coordinates: {
  42. lat: 35.704015,
  43. lng: 139.721445
  44. }
  45. },
  46. 'LONDON':{
  47. phones: ['212-371-8500', '212-371-8555'],
  48. address: 'Randolph St, London NW1 0TL, Great Britain',
  49. email: ['london@gmail.com'],
  50. "social networks": [
  51. {icon: FacebookIcon, url: 'https://www.facebook.com/'},
  52. {icon: InstagramIcon, url: 'https://www.instagram.com/'},
  53. {icon: TwitterIcon, url: 'https://twitter.com/home'},
  54. {icon: YouTubeIcon, url: 'https://www.youtube.com/'},
  55. ],
  56. coordinates: {
  57. lat: 51.541663,
  58. lng: -0.136698
  59. }
  60. },
  61. 'PARIS':{
  62. phones: ['212-371-8500', '212-371-8555'],
  63. address: '22 Pass. Hébrard, 75010 Paris, France',
  64. email: ['paris@gmail.com'],
  65. "social networks": [
  66. {icon: FacebookIcon, url: 'https://www.facebook.com/'},
  67. {icon: InstagramIcon, url: 'https://www.instagram.com/'},
  68. {icon: TwitterIcon, url: 'https://twitter.com/home'},
  69. {icon: YouTubeIcon, url: 'https://www.youtube.com/'},
  70. ],
  71. coordinates: {
  72. lat: 48.873213,
  73. lng: 2.373185
  74. }
  75. },
  76. }
  77. function TabPanel(props) {
  78. const { children, value, index, ...other } = props;
  79. return (
  80. <div
  81. role="tabpanel"
  82. hidden={value !== index}
  83. id={`simple-tabpanel-${index}`}
  84. aria-labelledby={`simple-tab-${index}`}
  85. {...other}
  86. >
  87. {value === index && (
  88. <Box sx={{ p: 3 }}>
  89. {children}
  90. </Box>
  91. )}
  92. </div>
  93. );
  94. }
  95. TabPanel.propTypes = {
  96. children: PropTypes.node,
  97. index: PropTypes.number.isRequired,
  98. value: PropTypes.number.isRequired,
  99. };
  100. function a11yProps(index) {
  101. return {
  102. id: `simple-tab-${index}`,
  103. 'aria-controls': `simple-tabpanel-${index}`,
  104. };
  105. }
  106. export const ContactPage = ({address=defaultAddress}) => {
  107. const matches = useMediaQuery('(max-width:768px)');
  108. const matches2 = useMediaQuery('(max-width:420px)');
  109. const [value, setValue] = useState(0);
  110. const handleChange = (event, newValue) => {
  111. setValue(newValue);
  112. };
  113. return (
  114. <>
  115. <Breadcrumbs links={['contact']}/>
  116. <main
  117. style={{
  118. backgroundColor: "#f3f3f3",
  119. padding: matches ? "20px 0" : "50px 0",
  120. minHeight: '300px'
  121. }}
  122. >
  123. <Container maxWidth="lg">
  124. <Box sx={{ width: '100%' }}>
  125. <Box sx={{ color: "#616161" }}>
  126. <Tabs
  127. value={value}
  128. onChange={handleChange}
  129. aria-label="contact"
  130. textColor="inherit"
  131. variant={matches2 ? "scrollable" : "standard"}
  132. TabIndicatorProps={{style: {background:'#616161', height: '1px'}}}
  133. sx={{fontWeight: 300, marginBottom: '30px'}}
  134. centered
  135. >
  136. {Object.keys(address).map((value, index) =>
  137. <Tab
  138. key={index}
  139. sx={{borderBottom: '1px solid #dedede'}}
  140. label={value.toString() || 'value'}
  141. {...a11yProps(index)}
  142. />
  143. )}
  144. </Tabs>
  145. </Box>
  146. {Object.entries(address).map((item, index) => {
  147. return (
  148. <TabPanel
  149. key={index}
  150. value={value}
  151. index={index}
  152. >
  153. <Grid
  154. sx={{backgroundColor: '#fff',
  155. padding: '0px 0px',
  156. marginLeft: '-10px'
  157. }}
  158. container
  159. spacing={2}
  160. >
  161. <AddressItem key={index} item={item} />
  162. <Grid
  163. sx={{
  164. padding: '0px 0px !important',
  165. position: 'relative',
  166. height: matches ? '300px': '500px'
  167. }} item xs={12} md={6}
  168. >
  169. <GoogleMap
  170. lat={item[1].coordinates.lat}
  171. lng={item[1].coordinates.lng}
  172. key={index}
  173. />
  174. </Grid>
  175. </Grid>
  176. </TabPanel>
  177. )
  178. })}
  179. </Box>
  180. </Container>
  181. </main>
  182. </>
  183. )
  184. }