1- import React , { useState , useEffect , useRef } from 'react' ;
1+ import React , { useState , useEffect } from 'react' ;
22import { useLocation , useHistory } from 'react-router-dom' ;
3- import Button from 'react-bootstrap/Button' ;
43import Container from 'react-bootstrap/Container' ;
54import Row from 'react-bootstrap/Row' ;
65import Col from 'react-bootstrap/Col' ;
7- import Modal from 'react-bootstrap/Modal' ;
86import styles from './RouteView.module.css' ;
9- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' ;
10- import { faClone } from '@fortawesome/free-solid-svg-icons' ;
117import { getQueryParameters , handleRouting } from './routingUtils.js' ;
128import { createTrip , updateTrip } from './tripUtils.js' ;
139
@@ -17,6 +13,7 @@ import OptimizeButton from './route/OptimizeButton.js';
1713import SaveShareButtons from './route/SaveShareButtons.js' ;
1814import TripName from './trip-name/TripName.js' ;
1915import BackButton from './navbar/BackButton.js' ;
16+ import ShareTripModal from './share-trip/ShareTripModal.js' ;
2017
2118/**
2219 * Render the route page with list of locations in order and directions on a map between the locations.
@@ -28,14 +25,12 @@ function RouteView({ loggedIn, userEmail }) {
2825 const [ optimizedOrder , setOptimizedOrder ] = useState ( null ) ;
2926 const [ showShareModal , setShowShareModal ] = useState ( false ) ;
3027
31- const textAreaRef = useRef ( null ) ;
32- const handleShareClose = ( ) => setShowShareModal ( false ) ;
33- const handleShareShow = ( ) => setShowShareModal ( true ) ;
34-
3528 const urlParameters = useLocation ( ) ;
3629 const query = getQueryParameters ( urlParameters . search ) ;
3730 const history = useHistory ( ) ;
38- const tripObject = JSON . parse ( decodeURIComponent ( query . trip ) ) ;
31+ const [ tripObject , setTripObject ] = useState (
32+ JSON . parse ( decodeURIComponent ( query . trip ) )
33+ ) ;
3934 const [ attractions , setAttractions ] = useState ( tripObject . attractions ) ;
4035
4136 useEffect ( ( ) => {
@@ -56,18 +51,19 @@ function RouteView({ loggedIn, userEmail }) {
5651 }
5752 setIsOptimized ( true ) ;
5853 setIsOptimizing ( false ) ;
54+ setIsSaved ( false ) ;
5955 }
6056
6157 function save ( ) {
62- setIsSaved ( true ) ;
63- // save to back end database
6458 tripObject . isOptimized = isOptimized ;
65- console . log ( tripObject ) ;
66- if ( ! tripObject . id ) {
67- createTrip ( userEmail , tripObject ) . then ( ( tripId ) => console . log ( tripId ) ) ;
59+ if ( ! tripObject . tripId ) {
60+ createTrip ( userEmail , tripObject )
61+ . then ( ( res ) => res . json ( ) )
62+ . then ( ( json ) => setTripObject ( { ...tripObject , tripId : json . tripId } ) ) ;
6863 } else {
69- updateTrip ( tripObject . id , tripObject ) ;
64+ updateTrip ( tripObject . tripId , tripObject ) ;
7065 }
66+ setIsSaved ( true ) ;
7167 }
7268
7369 function onManualPlaceChange ( newAttractions ) {
@@ -77,57 +73,31 @@ function RouteView({ loggedIn, userEmail }) {
7773 handleRouting ( history , 'route' , tripObject , newAttractions ) ;
7874 }
7975
80- function copyToClipboard ( e ) {
81- textAreaRef . current . select ( ) ;
82- document . execCommand ( 'copy' ) ;
83- }
84-
8576 return (
8677 < >
87- < Modal show = { showShareModal } onHide = { handleShareClose } >
88- < Modal . Header closeButton >
89- < Modal . Title > Share Trip</ Modal . Title >
90- </ Modal . Header >
91- < Modal . Body >
92- < Container >
93- < Row className = { styles . copyContainer } >
94- < div className = { styles . modalText } > Copy link to share trip.</ div >
95- < input
96- ref = { textAreaRef }
97- value = { window . location . href }
98- className = { styles . copyText }
99- />
100- < FontAwesomeIcon
101- icon = { faClone }
102- onClick = { copyToClipboard }
103- className = { styles . copyBtn }
104- />
105- </ Row >
106- < Row className = { styles . modalBtnContainer } >
107- < Button
108- variant = "primary"
109- onClick = { handleShareClose }
110- className = { styles . modalBtn }
111- >
112- Close
113- </ Button >
114- </ Row >
115- </ Container >
116- </ Modal . Body >
117- </ Modal >
78+ < ShareTripModal
79+ showShareModal = { showShareModal }
80+ setShowShareModal = { setShowShareModal }
81+ tripName = { tripObject . tripName }
82+ url = { window . location . href }
83+ />
11884 < BackButton
11985 className = { styles . editBtnContainer }
12086 onClick = { ( ) => handleRouting ( history , 'explore' , tripObject , attractions ) }
12187 text = "Edit Attractions"
12288 />
12389 { loggedIn && (
124- < SaveShareButtons isSaved = { isSaved } save = { save } share = { handleShareShow } />
90+ < SaveShareButtons
91+ isSaved = { isSaved }
92+ save = { save }
93+ share = { ( ) => setShowShareModal ( true ) }
94+ />
12595 ) }
12696 < div className = { styles . container } >
12797 < Row className = { styles . row } >
12898 < Col sm = { 4 } >
12999 < Row className = { styles . row } >
130- < TripName />
100+ < TripName tripObject = { tripObject } setTripObject = { setTripObject } />
131101 </ Row >
132102 < Row className = { styles . routeListContainer } >
133103 < Route places = { attractions } onManualPlaceChange = { onManualPlaceChange } />
@@ -150,7 +120,10 @@ function RouteView({ loggedIn, userEmail }) {
150120 < Map
151121 mode = "directions"
152122 attractions = { attractions }
153- centerLocation = { tripObject . centerLocation }
123+ centerLocation = { {
124+ lat : tripObject . centerLat ,
125+ lng : tripObject . centerLng ,
126+ } }
154127 />
155128 </ div >
156129 </ Col >
0 commit comments