{"version":3,"sources":["store/ListingStore.ts","store/HomeStore.ts","store/SignupStore.ts","store/LoginStore.ts","store/FavoritesStore.ts","store/BrokerProfileStore.ts","store/ListingPageStore.ts","store/BrokerDashboardStore.ts","firebase/Firebase.tsx","models/User.ts","store/configureStore.js","models/Error.ts","components/GenericModalView.tsx","components/GenericModalContainer.tsx","components/InputGroup.tsx","utils/Strings2.ts","components/LoginView.tsx","components/LoginContainer.tsx","components/NavMenu.tsx","models/NotificationContext.ts","models/NotificationContextProvider.tsx","components/Layout.tsx","converters/GearInfoConverter.tsx","converters/ScoreInfoConverter.tsx","models/UserContext.ts","components/ListingItem.tsx","components/ListingItemContainer.tsx","components/MetaTags.tsx","components/Home.tsx","components/HomeContainer.tsx","components/SubfilterCountView.tsx","components/SubfilterCountContainer.tsx","components/NoResultsHeading.tsx","components/ListingView.tsx","components/ListingContainer.tsx","utils/SearchParameterUtils.ts","components/BadgeView.tsx","components/BadgeContainer.tsx","components/ListingPage.tsx","components/View404.tsx","components/ListingPageContainer.tsx","components/SignupView.tsx","components/SignupContainer.tsx","components/LogoutContainer.tsx","components/FavoritesView.tsx","components/FavoritesContainer.tsx","components/GoogleMapView.tsx","components/GoogleMapContainer.tsx","utils/TermsOfServiceInfo.tsx","utils/PrivacyPolicyInfo.tsx","brokers/BrokerProfileView.tsx","brokers/BrokerProfileContainer.tsx","brokers/BrokerDashboardView.tsx","brokers/BrokerDashboardContainer.tsx","components/ContactUsView.tsx","components/ContactUsContainer.tsx","App.tsx","registerServiceWorker.ts","models/UserContextProvider.tsx","index.tsx","store/AlertsStore.ts","store/BrokersListStore.ts","store/BrokerSignupStore.ts","store/ReviewStore.ts","store/index.ts","utils/http.ts"],"names":["debounceSearch","_","dispatch","searchParams","type","postRequest","then","content","listingResults","actionCreators","requestFilterData","url","name","value","debounceSearchParameters","sendSearchParameters","sendSearchParametersInitial","updateScrolling","getState","state","listings","undefined","isLoadingMoreResults","setText","clearFilters","clearListings","onFavorite","listing","userId","item","window","sessionStorage","getItem","favorites","JSON","parse","push","listingId","setItem","stringify","onAlert","alert","id","make","makes","model","models","minYear","maxYear","location","locations","minOdom","maxOdom","minScore","score","gearType","color","colors","includeRA","isRAchecked","includeR","isRchecked","minDisplacement","maxDisplacement","toast","dark","concat","toastId","error","catch","onRejected","onAlertError","message","unloadedState","isLoading","isFilteredResults","isFilteringResults","filterCount","pageId","lotNumber","listingCount","alertErrorMsg","reducer","incomingAction","action","count","Object","assign","length","tempParams","scrollTo","getRecentlyAdded","results","onSubmit","email","password","confirmPassword","errorMsg","firebase","auth","createUserWithEmailAndPassword","user","currentUser","uid","userInfo","res","code","updateState","errorMsgs","ErrorMessage","ErrorType","Email","Password","signInWithEmailAndPassword","getFavorites","c","removeFavorite","favorite","splice","indexOf","filtered","filter","f","getBrokerProfile","profileId","profile","document","title","brokerProfile","agreeTerms","Terms","firstName","FirstName","lastName","LastName","country","Country","phone","Phone","comments","Comment","contactRequest","brokerUri","uri","submitOk","updateCountry","bio","website","city","social","countryCode","zipCode","isIntl","stateProvince","longitude","latitude","isValid","getBrokerProfiles","localStorage","brokerProfiles","removeBroken","event","currentTarget","naturalWidth","naturalHeight","src","listingPage","imageSource","imageSrc","images","sc","brokenImages","share","resetLinkState","updateBrokerRequest","brokerRequest","updateSelectedBroker","brokerId","updateListing","successful","i","yearInfo","year","makeAndModelInfo","sendBrokerRequest","href","setErrorMessage","selectedBrokerId","isLinkCopied","relatedVehicles","getConnections","users","getConnectionRequests","connectionRequests","getBidRequests","bidRequests","acceptConnectionRequest","connectionRequest","result","rejectConnectionRequest","isLoadingConnectionRequests","isLoadingBidRequests","isLoadingConnections","connections","firebaseConfig","apiKey","authDomain","databaseURL","projectId","storageBucket","messagingSenderId","appId","measurementId","constructor","this","addFavorite","initializeApp","analytics","logEvent","err","__assign","t","s","n","arguments","p","prototype","hasOwnProperty","call","apply","__spreadArrays","il","r","Array","k","a","j","jl","__importDefault","mod","__esModule","defineProperty","exports","redux_1","require","redux_thunk_1","connected_react_router_1","_1","default","history","initialState","middleware","routerMiddleware","rootReducer","combineReducers","reducers","router","connectRouter","enhancers","windowIfDefined","__REDUX_DEVTOOLS_EXTENSION__","createStore","compose","applyMiddleware","errorTp","errorDesc","errorDescription","errorType","GenericModalView","props","okButtonOverride","okButtonTextOverride","classNameOverride","React","Modal","isOpen","toggle","className","ModalHeader","ModalBody","Row","children","ModalType","Ok","ModalFooter","Button","onClick","OkCancel","trySubmit","validateModal","GenericModalContainer","super","render","InputGroup","showErrorMsg","setShowErrorMsg","showErrors","validationClass","some","msg","FormGroup","Label","for","Input","placeholder","onChange","InnerInputGroup","check","CountryDropdownGroup","CountryDropdown","onCountryChange","classes","validationErrorEmail","LoginView","useHistory","isLoggedIn","reload","createElement","Container","Col","Form","block","LoginContainer","Component","bind","componentDidMount","onAuthStateChanged","setState","onLoginSuccessful","username","e","preventDefault","connect","mapStateToProps","ownProps","login","LoginStore","NavMenuContainer","isAuthenticated","close","NavMenu","loginModal","setLoginModal","toggleLogin","Navbar","light","NavbarBrand","tag","Link","to","alt","NavbarToggler","Collapse","navbar","NavItem","NavLink","None","closeLogin","NotificationContext","notifications","addNotification","notification","removeNotification","NotificationContextProvider","console","log","setTimeout","Provider","withRouter","Layout","useLocation","reportABug","setReportABug","toggleReportABug","setEmail","bugLocation","setBugLocation","bugDescription","setBugDescription","str","pathname","replace","substr","xs","md","sendBugReport","bugReport","validateBugReportInput","BugLocation","BugDescription","target","GearInfoConverter","numberOfGears","ScoreInfoConverter","UserContext","getUserInfo","clear","setUser","ListingItem","modal","setModal","useState","modelName","modelCodeName","toUpperCase","useContext","favoriteHandler","includes","favoriteLabel","mileageInfo","mileage","gearInfo","numGears","Badge","pill","scoreInfo","ListingItemContainer","context","isFavorited","find","contextType","HomeMetaTags","Helmet","property","AuctionMetaTags","imageUrl","auctionLocationInfo","dateInfo","dateTime","auctionNumberInfo","auctionNumber","AuctionsMetaTags","FavoritesMetaTags","SignupMetaTags","BrokerMetaTags","broker","image","ContactUsMetaTags","outline","size","map","key","lg","HomeContainer","Home","home","HomeStore","SubfilterCountView","SubfilterCountContainer","NoResultsHeading","ListingView","yearCount","odomCount","dispCount","xl","FontAwesomeIcon","icon","faTimes","toggleViewAll","faChevronDown","ListGroup","ListGroupItem","faAngleDown","UncontrolledCollapse","toggler","keys","index","makeEntry","checked","updateMakes","description","Select","modelValues","options","getOptionLabel","option","getOptionValue","toString","isMulti","updateModels","maxLength","updateMinYear","updateMaxYear","updateMinOdom","updateMaxOdom","updateMinDisplacement","updateMaxDisplacement","from","v","slice","idx","updateScore","updateRChecked","updateRAChecked","colorEntry","argb","updateColors","faCircle","hex","substring","charAt","updateGearType","updateLotNumber","ListingContainer","mScrollReference","m_debounceSearch","trackScrolling","updateSearchParams","updateModelsView","updateAlertName","isViewAllOpen","alertName","newParams","addEventListener","updatedParams","updatedMakes","m","updatedColors","updatedLocations","parsed","parseInt","isNaN","prevState","elemFilterscontainer","getElementsByClassName","elemFiltersinner","elemBody","getElementsByTagName","setAttribute","componentWillUnmount","removeEventListener","actionMeta","newModels","modelParams","modelIds","values","val","obj","searchParameters","updateLocations","ev","innerHeight","scrollY","body","offsetHeight","ListingStore","BadgeView","outerText","BadgeContainer","isIntExtScore","ListingPage","im","onLoad","usdFormatter","Intl","NumberFormat","style","currency","minimumFractionDigits","jpyFormatter","Table","exteriorScore","interiorScore","Carousel","showIndicators","showStatus","infiniteLoop","useKeyboardArrows","dynamicHeight","offset","CopyToClipboard","onCopy","text","onAnimationEnd","striped","displacementInfo","displacement","modelCode","format","startPriceInfo","price","Date","toLocaleDateString","toLocaleTimeString","onValidate","FullName","FormText","active","View404","ListingPageContainer","componentWillReceiveProps","match","params","ListingPageStore","SignupView","ConfirmPassword","SignupContainer","msgs","signup","SignupStore","LogoutContainer","isLoggedOut","signOut","Redirect","FavoritesView","FavoritesContainer","onRemoveFavorite","FavoritesStore","GoogleMapView","withProps","googleMapURL","loadingElement","height","containerElement","mapElement","withScriptjs","withGoogleMap","GoogleMap","defaultZoom","zoomLevel","defaultCenter","lat","lng","GoogleMapContainer","TermsOfServiceInfo","marginLeft","marginRight","PrivacyPolicyInfo","BrokerProfileView","privacyPolicyModal","setPrivacyPolicyModal","togglePrivacyPolicy","termsOfServiceModal","setTermsOfServiceModal","toggleTermsOfService","whiteSpace","Marker","position","BrokerProfileContainer","BrokerProfileStore","BrokerDashboardView","bidRequest","listingUid","locationInfo","bidAmount","BrokerDashboardContainer","acceptConnection","removeConnection","brokerDashboard","BrokerDashboard","ContactUsView","setFirstName","setLastName","brokerageName","setBrokerageName","setPhone","setMessage","newFeaturesList","setNewFeaturesList","setSubmitOk","sm","Message","contactUsRequest","mailList","ContactUsContainer","App","configure","transition","Slide","ipAddress","getRequest","Switch","Route","exact","path","component","isLocalhost","Boolean","hostname","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","UserContextProvider","tk","createBrowserHistory","store","configureStore","rrfProps","config","userProfile","ReactDOM","BrowserRouter","ReactReduxFirebaseProvider","getElementById","URL","process","origin","fetch","response","contentType","headers","get","status","ready","unregister","checkValidServiceWorker","registerServiceWorker","alerts","profiles","reviews","selectedRating","comment","Listings","Signup","Login","Favorites","alrts","firebaseReducer","brokersList","BrokerProfile","brokerSignup","rating","async","sendRequest_","method","parameters","json"],"mappings":"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","file":"static/js/main.1cbff404.chunk.js","sourcesContent":["import { Action, Reducer } from 'redux';\r\nimport { AppThunkAction } from '.';\r\nimport { Listing, MakeEntry, CurrentListingResults, ModelEntry, LocationEntry, ColorEntry, MakeRegion } from '../models/Listing';\r\nimport * as _ from 'lodash';\r\nimport SearchParameters from '../models/SearchParameters';\r\nimport { Favorite } from '../models/Favorite';\r\nimport {Alert} from '../models/Alert';\r\nimport {postRequest} from '../utils/http';\r\nimport { toast } from 'react-toastify';\r\n\r\n// -----------------\r\n// STATE - This defines the type of data maintained in the Redux store.\r\nexport interface ListingContainerState {\r\n isLoading: boolean;\r\n isLoadingMoreResults: boolean;\r\n isFilteredResults: boolean;\r\n isFilteringResults: boolean;\r\n filterCount: number;\r\n listings: Listing[];\r\n listingCount: number;\r\n makes: MakeRegion;\r\n models: ModelEntry[];\r\n locations: LocationEntry[];\r\n colors: ColorEntry[];\r\n minYear: string;\r\n maxYear: string;\r\n minOdom: string;\r\n maxOdom: string;\r\n minDisplacement: string;\r\n maxDisplacement: string;\r\n lotNumber: string;\r\n searchParams: SearchParameters;\r\n alertErrorMsg: string;\r\n}\r\nexport interface RecieveText {type: 'RECIEVE_TEXT'; name: string; value:string }\r\nexport interface RecieveFilterData {type: 'RECIEVE_FILTER_DATA', name: string; value: Promise }\r\nexport interface RequestSearchParameters {type: 'REQUEST_SEARCH'; searchParams?: SearchParameters }\r\nexport interface UpdateInputSearchParameters {type: 'UPDATE_INPUT_PARAMS'; searchParams?: SearchParameters }\r\nexport interface RecieveSearchParameters {type: 'RECIEVE_SEARCH'; listingResults: CurrentListingResults;}\r\nexport interface RequestSearchParametersInitial { type: 'REQUEST_SEARCH_INITIAL'; searchParams: SearchParameters; }\r\nexport interface RecieveSearchParametersInitial { type: 'RECIEVE_SEARCH_INITIAL'; listingResults: CurrentListingResults; }\r\nexport interface RequestScroll { type: 'REQUEST_SCROLL' }\r\nexport interface RecieveScroll { type: 'RECIEVE_SCROLL', listingResults: CurrentListingResults; }\r\nexport interface ClearFilters { type: 'CLEAR_FILTERS' };\r\nexport interface ClearListings {type: 'CLEAR_LISTINGS'};\r\nexport interface RequestAddAlert {type: 'REQUEST_ADD_ALERT'; }\r\nexport interface RecieveAddAlert {type: 'RECIEVE_ADD_ALERT'; } \r\nexport interface ClearErrorAddAlert {type: 'CLEAR_ERROR_ADD_ALERT';}\r\nexport interface ErrorAddAlert {type : 'ALERT_ERROR', message: string; }\r\n\r\nexport type KnownAction = RequestSearchParameters | RequestSearchParametersInitial | ClearFilters | RecieveFilterData | ClearListings \r\n | RecieveSearchParameters | RecieveSearchParametersInitial | RequestScroll | RecieveScroll | RecieveText\r\n | RequestAddAlert | RecieveAddAlert | ErrorAddAlert | ClearErrorAddAlert | UpdateInputSearchParameters;\r\n \r\nconst debounceSearch = _.debounce((dispatch, searchParams) => \r\n{ \r\n dispatch({type: 'REQUEST_SEARCH', searchParams: searchParams}); \r\n postRequest(`auctions/PostUpdateSearch`, searchParams)\r\n .then(content => { dispatch({type: 'RECIEVE_SEARCH', listingResults: content}) }); \r\n}, 800);\r\n\r\n\r\nexport const actionCreators = {\r\n\r\n requestFilterData: (url: string, name: string): AppThunkAction => (dispatch) => {\r\n\r\n postRequest(url, null)\r\n .then(content =>dispatch({ type: 'RECIEVE_FILTER_DATA', name: name, value: content}));\r\n },\r\n\r\n debounceSearchParameters : (searchParams?: SearchParameters): AppThunkAction => (dispatch) => {\r\n\r\n dispatch({type: 'UPDATE_INPUT_PARAMS', searchParams: searchParams}); \r\n debounceSearch(dispatch, searchParams);\r\n\r\n },\r\n\r\n sendSearchParameters: (searchParams?: SearchParameters): AppThunkAction => (dispatch) => {\r\n\r\n dispatch({type: 'REQUEST_SEARCH', searchParams: searchParams});\r\n \r\n postRequest(`auctions/PostUpdateSearch`, searchParams)\r\n .then(content => { dispatch({type: 'RECIEVE_SEARCH', listingResults: content}) });\r\n\r\n },\r\n\r\n sendSearchParametersInitial: (searchParams: SearchParameters): AppThunkAction => (dispatch) => {\r\n\r\n dispatch({type: 'REQUEST_SEARCH_INITIAL', searchParams: searchParams});\r\n\r\n postRequest(`auctions/PostUpdateSearch`, searchParams)\r\n .then(content => dispatch({type: 'RECIEVE_SEARCH_INITIAL', listingResults: content}));\r\n\r\n },\r\n\r\n updateScrolling: (searchParams: SearchParameters) : AppThunkAction => (dispatch, getState) => {\r\n\r\n const state = getState().listings;\r\n if(state === undefined || state.isLoadingMoreResults)\r\n return;\r\n \r\n dispatch({type: 'REQUEST_SCROLL'});\r\n\r\n postRequest(`auctions/PostUpdateSearch`, searchParams)\r\n .then(content => dispatch({type: 'RECIEVE_SCROLL', listingResults: content}));\r\n },\r\n\r\n setText: (name: string, value: string): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'RECIEVE_TEXT', name: name, value: value});\r\n },\r\n clearFilters: (): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'CLEAR_FILTERS'});\r\n },\r\n clearListings: (): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'CLEAR_LISTINGS'});\r\n },\r\n onFavorite: (listing: Listing, userId?: string): AppThunkAction => (dispatch) => {\r\n \r\n // const favorite: Favorite = { userId: userId, listingId: listing.listingId, time: listing.auctionLocationInfo.dateInfo.dateTime };\r\n\r\n // postRequest(`favorites/PostFavorite`, favorite)\r\n // .then(content => content);\r\n\r\n var item = window.sessionStorage.getItem(\"favorites\");\r\n if(item != null)\r\n {\r\n var favorites = JSON.parse(item);\r\n favorites.push(listing.listingId);\r\n\r\n window.sessionStorage.setItem(\"favorites\", JSON.stringify(favorites));\r\n }\r\n else\r\n {\r\n var favorites:any = [listing.listingId];\r\n window.sessionStorage.setItem(\"favorites\", JSON.stringify(favorites));\r\n\r\n }\r\n\r\n },\r\n onAlert: (searchParams: SearchParameters, userId: string, name: string): AppThunkAction => (dispatch) => {\r\n\r\n dispatch({type: 'CLEAR_ERROR_ADD_ALERT'});\r\n\r\n const alert: Alert = { id: -1, userId: userId, make: searchParams.makes, model: searchParams.models, minYear: searchParams.minYear, maxYear: searchParams.maxYear, location: searchParams.locations,\r\n minOdom: searchParams.minOdom, maxOdom: searchParams.maxOdom, minScore: searchParams.score, gearType: searchParams.gearType, color: searchParams.colors,\r\n includeRA: searchParams.isRAchecked, includeR: searchParams.isRchecked, name: name, minDisplacement: searchParams.minDisplacement, maxDisplacement: searchParams.maxDisplacement};\r\n\r\n postRequest(`alert/AddAlert`, alert)\r\n .then(content => { if(content){ toast.dark(`✅ Created alert with name: ${name}`, {toastId: name}); } else toast.error(`❌ Failed to create alert ${name}`)})\r\n .catch(onRejected => { toast.error(`❌ Failed to create alert ${name}`)});\r\n },\r\n onAlertError: (message: string): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'ALERT_ERROR', message: message});\r\n }\r\n\r\n\r\n};\r\n\r\nconst unloadedState: ListingContainerState = { listings: [], isLoading: false, isLoadingMoreResults: false, isFilteredResults: false, isFilteringResults: false, filterCount: 0, searchParams: { makes: [], models: [], colors: [], locations: [], pageId: 0, minYear: 0, maxYear: 0, minOdom: 0, maxOdom: 0, minDisplacement: 0, maxDisplacement: 0, score: 0, gearType: 0, isRAchecked: false, isRchecked: false, lotNumber: 0 }, listingCount: 0, makes: {}, models: [], locations: [], colors: [], minYear: \"\", maxYear: \"\", minOdom: \"\", maxOdom: \"\", minDisplacement: \"\", maxDisplacement: \"\", lotNumber: \"\", alertErrorMsg: \"\" }\r\n\r\nexport const reducer: Reducer = (state: ListingContainerState | undefined, incomingAction: Action): ListingContainerState => {\r\n if (state === undefined) {\r\n return unloadedState;\r\n }\r\n\r\n const action = incomingAction as KnownAction;\r\n switch (action.type) {\r\n case 'CLEAR_LISTINGS':\r\n return {\r\n ...state,\r\n listings: []\r\n }\r\n case 'CLEAR_ERROR_ADD_ALERT':\r\n return {\r\n ...state,\r\n alertErrorMsg: \"\"\r\n }\r\n case 'ALERT_ERROR':\r\n return {\r\n ...state,\r\n alertErrorMsg: action.message\r\n }\r\n case 'CLEAR_FILTERS':\r\n \r\n return {\r\n ...state,\r\n minYear: \"\",\r\n maxYear: \"\",\r\n minOdom: \"\",\r\n maxOdom: \"\",\r\n minDisplacement: \"\",\r\n maxDisplacement: \"\",\r\n lotNumber: \"\",\r\n searchParams: unloadedState.searchParams,\r\n isFilteredResults: false\r\n };\r\n case 'RECIEVE_FILTER_DATA':\r\n return {\r\n ...state,\r\n [action.name]: action.value\r\n }\r\n case 'RECIEVE_TEXT':\r\n return {\r\n ...state,\r\n [action.name]: action.value\r\n }\r\n case 'REQUEST_SEARCH_INITIAL':\r\n return {\r\n ...state,\r\n isLoading: true,\r\n searchParams: action.searchParams,\r\n listingCount: 0,\r\n isFilteredResults: false\r\n };\r\n case 'RECIEVE_SEARCH_INITIAL':\r\n return {\r\n ...state,\r\n isLoading: false,\r\n listings: action.listingResults.listings,\r\n listingCount: action.listingResults.count,\r\n searchParams: Object.assign({}, state.searchParams, { pageId: 1 }),\r\n isFilteredResults: false\r\n };\r\n case 'REQUEST_SEARCH':\r\n if(action.searchParams === undefined)\r\n {\r\n return unloadedState;\r\n }\r\n \r\n var count = 0;\r\n if(action.searchParams.makes.length > 0){ count++; }\r\n if(action.searchParams.models.length > 0) {count++;}\r\n if(action.searchParams.colors.length > 0) {count++;}\r\n if(action.searchParams.locations.length > 0) {count++;}\r\n if(action.searchParams.minYear !== 0 || action.searchParams.maxYear !== 0){count++;}\r\n if(action.searchParams.minOdom !== 0 || action.searchParams.maxOdom !== 0){count++;}\r\n if(action.searchParams.minDisplacement !== 0 || action.searchParams.maxDisplacement !== 0) {count++;}\r\n if(action.searchParams.score !== 0 || action.searchParams.isRAchecked || action.searchParams.isRchecked) {count++;}\r\n if(action.searchParams.gearType !== 0) {count++;}\r\n if(action.searchParams.lotNumber !== 0) {count++;}\r\n \r\n return {\r\n ...state,\r\n listingCount: 0,\r\n listings: [],\r\n searchParams: action.searchParams,\r\n isFilteringResults: true,\r\n isFilteredResults: action.searchParams.makes.length !== 0 || action.searchParams.models.length !== 0 || action.searchParams.colors.length !== 0 || action.searchParams.locations.length !== 0 || action.searchParams.minYear !== 0 || action.searchParams.gearType !== 0 ||\r\n action.searchParams.maxYear !== 0 || action.searchParams.minOdom !== 0 || action.searchParams.maxOdom !== 0 || action.searchParams.score !== 0 || action.searchParams.isRAchecked !== false || action.searchParams.isRchecked !== false ||\r\n action.searchParams.minDisplacement !== 0 || action.searchParams.maxDisplacement !== 0 || action.searchParams.lotNumber !== 0,\r\n filterCount: count\r\n };\r\n case 'UPDATE_INPUT_PARAMS':\r\n if(action.searchParams === undefined) {\r\n return unloadedState; }\r\n\r\n let tempParams: SearchParameters = state.searchParams;\r\n tempParams.minYear = action.searchParams.minYear;\r\n tempParams.maxYear = action.searchParams.maxYear;\r\n tempParams.minOdom = action.searchParams.minOdom;\r\n tempParams.maxOdom = action.searchParams.maxOdom;\r\n tempParams.minDisplacement = action.searchParams.minDisplacement;\r\n tempParams.maxDisplacement = action.searchParams.maxDisplacement;\r\n tempParams.lotNumber = action.searchParams.lotNumber;\r\n\r\n return {\r\n ...state,\r\n searchParams: tempParams,\r\n }\r\n\r\n \r\n case 'RECIEVE_SEARCH':\r\n //force scroll to top once results come in\r\n window.scrollTo(0,0);\r\n\r\n return {\r\n ...state,\r\n listings: action.listingResults.listings,\r\n listingCount: action.listingResults.count,\r\n searchParams: Object.assign({}, state.searchParams, { pageId: 1 }),\r\n isFilteringResults: false,\r\n isFilteredResults: state.searchParams.makes.length !== 0 || state.searchParams.models.length !== 0 || state.searchParams.colors.length !== 0 || state.searchParams.minYear !== 0 || state.searchParams.gearType !== 0 ||\r\n state.searchParams.maxYear !== 0 || state.searchParams.minOdom !== 0 || state.searchParams.maxOdom !== 0 || state.searchParams.score !== 0 || state.searchParams.isRAchecked !== false || state.searchParams.isRchecked !== false ||\r\n state.searchParams.minDisplacement !== 0 || state.searchParams.maxDisplacement !== 0 || state.searchParams.locations.length !== 0 || state.searchParams.lotNumber !== 0\r\n \r\n };\r\n case 'REQUEST_SCROLL':\r\n return {\r\n ...state,\r\n isLoadingMoreResults: true,\r\n };\r\n case 'RECIEVE_SCROLL':\r\n\r\n return {\r\n ...state,\r\n listings: state.listings.concat(action.listingResults.listings),\r\n listingCount: action.listingResults.count,\r\n isLoadingMoreResults: false,\r\n searchParams: Object.assign({}, state.searchParams, { pageId: state.searchParams.pageId + 1 })\r\n };\r\n\r\n case 'REQUEST_ADD_ALERT':\r\n return state;\r\n case 'RECIEVE_ADD_ALERT':\r\n return state;\r\n default:\r\n return state;\r\n }\r\n};","import { Action, Reducer } from 'redux';\r\nimport { AppThunkAction } from '.';\r\nimport { CurrentListingResults, Listing } from '../models/Listing';\r\nimport {postRequest} from '../utils/http';\r\n\r\n\r\nexport interface RequestRecentlyAdded {type: 'REQUEST_RECENT'; }\r\nexport interface RecieveRecentlyAdded {type: 'RECIEVE_RECENT'; listingResults: CurrentListingResults;}\r\n\r\nexport type KnownAction = RequestRecentlyAdded | RecieveRecentlyAdded;\r\n\r\nexport interface HomeState {\r\n listings: Listing[];\r\n isLoading: boolean;\r\n}\r\n\r\nexport const actionCreators = {\r\n getRecentlyAdded: (): AppThunkAction => (dispatch) => {\r\n\r\n dispatch({type: 'REQUEST_RECENT' });\r\n\r\n postRequest(`auctions/PostRecent`, '')\r\n .then(results => dispatch({type: 'RECIEVE_RECENT', listingResults: results}));\r\n\r\n }\r\n\r\n};\r\nconst unloadedState = { listings: [], isLoading: false};\r\nexport const reducer: Reducer = (state: HomeState | undefined, incomingAction: Action): HomeState => {\r\n if (state === undefined) {\r\n return unloadedState;\r\n }\r\n\r\n const action = incomingAction as KnownAction;\r\n switch (action.type) {\r\n case 'REQUEST_RECENT':\r\n return {\r\n isLoading: true,\r\n listings: []\r\n }\r\n case 'RECIEVE_RECENT':\r\n return {\r\n isLoading: false,\r\n listings: action.listingResults.listings\r\n }\r\n default:\r\n return state;\r\n }\r\n\r\n};","import { Action, Reducer } from 'redux';\r\nimport { AppThunkAction } from '.';\r\nimport {firebase} from '../firebase/Firebase';\r\nimport { routerActions } from 'connected-react-router';\r\nimport { postRequest } from '../utils/http';\r\nimport {UserInfo} from '../models/UserInfo';\r\n\r\n\r\nexport interface RequestSignup {type: 'REQUEST_SIGNUP'; }\r\nexport interface RecieveSignup {type: 'RECIEVE_SIGNUP'; errorMsg: string; }\r\nexport interface ErrorPassword {type: 'ERROR_SIGNUP'; errorMsg: string; }\r\nexport interface UpdateInput {type: 'UPDATE_INPUT', name: string, value: string};\r\n\r\nexport type KnownAction = RequestSignup | RecieveSignup | ErrorPassword | UpdateInput;\r\n\r\nexport interface SignupState {\r\n email: string;\r\n password: string;\r\n confirmPassword: string;\r\n errorMsg: string;\r\n}\r\nexport const actionCreators = {\r\n onSubmit: (email: string, password: string, confirmPassword: string): AppThunkAction => (dispatch) => {\r\n if(password !== confirmPassword) {\r\n dispatch({type: 'ERROR_SIGNUP', errorMsg: 'password does not match'});\r\n }\r\n\r\n var user = firebase.auth().createUserWithEmailAndPassword(email, password)\r\n .then((user: any) =>\r\n {\r\n let currentUser = firebase.auth().currentUser;\r\n\r\n //Is there a race condition where GetUser is called before CreateUser? Yes!!!\r\n if(currentUser)\r\n {\r\n let email = currentUser.email;\r\n let userId = currentUser.uid;\r\n\r\n let userInfo: UserInfo = {} as UserInfo\r\n userInfo.email = (!email) ? \"\" : email;\r\n userInfo.userId = userId;\r\n postRequest(`user/CreateUser`, userInfo)\r\n .then(res => res);\r\n }\r\n\r\n })\r\n .catch((error: firebase.auth.Error) => {\r\n \r\n const errorCode = error.code;\r\n if(errorCode !== ''){\r\n dispatch({type: 'ERROR_SIGNUP', errorMsg: error.message});\r\n }\r\n\r\n });\r\n if(user){\r\n }\r\n\r\n },\r\n updateState: (name: string, value: string): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'UPDATE_INPUT', name: name, value: value});\r\n }\r\n};\r\nconst unloadedState = { email: \"\", password: \"\", confirmPassword: \"\", errorMsg: \"\" };\r\nexport const reducer: Reducer = (state: SignupState | undefined, incomingAction: Action): SignupState => {\r\n if (state === undefined) {\r\n return unloadedState;\r\n }\r\n\r\n const action = incomingAction as KnownAction;\r\n switch (action.type) {\r\n case 'REQUEST_SIGNUP':\r\n return {\r\n ...state,\r\n errorMsg: \"\"\r\n }\r\n case 'RECIEVE_SIGNUP':\r\n return {\r\n ...state,\r\n errorMsg: action.errorMsg\r\n }\r\n case 'ERROR_SIGNUP':\r\n return {\r\n ...state,\r\n errorMsg: action.errorMsg\r\n }\r\n case 'UPDATE_INPUT':\r\n return {\r\n ...state,\r\n [action.name] : action.value\r\n }\r\n default:\r\n return state;\r\n }\r\n\r\n};","import { Action, Reducer } from 'redux';\r\nimport { AppThunkAction } from '.';\r\nimport {firebase} from '../firebase/Firebase';\r\nimport { ErrorMessage, ErrorType } from '../models/Error';\r\n\r\n\r\nexport interface RequestSignup {type: 'REQUEST_LOGIN'; }\r\nexport interface RecieveSignup {type: 'RECIEVE_LOGIN'; errorMsg: string; }\r\nexport interface ErrorPassword {type: 'ERROR_LOGIN'; errorMsg: string; }\r\nexport interface ERrorInput {type: 'ERROR_INPUT', errorMsgs: ErrorMessage[];}\r\nexport interface UpdateInput {type: 'UPDATE_INPUT', name: string, value: string};\r\n\r\nexport type KnownAction = RequestSignup | RecieveSignup | ErrorPassword | UpdateInput | ERrorInput;\r\n\r\nexport interface LoginState {\r\n email: string;\r\n password: string;\r\n errorMsg: string;\r\n errorMsgs: ErrorMessage[];\r\n}\r\nexport const actionCreators = {\r\n onSubmit: (email: string, password: string): AppThunkAction => (dispatch) => {\r\n\r\n let errorMsgs: ErrorMessage[] = [];\r\n dispatch({type: 'ERROR_INPUT', errorMsgs: errorMsgs});\r\n\r\n if(email === \"\"){\r\n errorMsgs.push(new ErrorMessage(ErrorType.Email, \"\"));\r\n }\r\n if(password == \"\"){\r\n errorMsgs.push(new ErrorMessage(ErrorType.Password, \"\"));\r\n }\r\n\r\n if(errorMsgs.length > 0) {\r\n dispatch({type: 'ERROR_INPUT', errorMsgs: errorMsgs});\r\n return;\r\n }\r\n\r\n \r\n \r\n \r\n firebase.auth().signInWithEmailAndPassword(email, password).catch((error: firebase.auth.Error) => {\r\n \r\n const errorCode = error.code;\r\n if(errorCode !== ''){\r\n dispatch({type: 'ERROR_LOGIN', errorMsg: error.message});\r\n }\r\n else {\r\n \r\n }\r\n\r\n\r\n });\r\n dispatch({type:'RECIEVE_LOGIN', errorMsg: \"\"});\r\n },\r\n updateState: (name: string, value: string): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'UPDATE_INPUT', name: name, value: value});\r\n }\r\n};\r\nconst unloadedState = { email: \"\", password: \"\", errorMsg: \"\", errorMsgs: [] };\r\nexport const reducer: Reducer = (state: LoginState | undefined, incomingAction: Action): LoginState => {\r\n if (state === undefined) {\r\n return unloadedState;\r\n }\r\n\r\n const action = incomingAction as KnownAction;\r\n switch (action.type) {\r\n case 'REQUEST_LOGIN':\r\n return {\r\n ...state,\r\n errorMsg: \"\"\r\n }\r\n case 'RECIEVE_LOGIN':\r\n return {\r\n ...state,\r\n errorMsg: action.errorMsg\r\n }\r\n case 'ERROR_LOGIN':\r\n return {\r\n ...state,\r\n errorMsg: action.errorMsg\r\n }\r\n case 'ERROR_INPUT':\r\n return {\r\n ...state,\r\n errorMsgs: action.errorMsgs\r\n }\r\n case 'UPDATE_INPUT':\r\n return {\r\n ...state,\r\n [action.name] : action.value\r\n }\r\n default:\r\n return state;\r\n }\r\n\r\n};","import { Action, Reducer } from 'redux';\r\nimport { AppThunkAction } from '.';\r\nimport { CurrentListingResults, Listing } from '../models/Listing';\r\nimport {postRequest} from '../utils/http'\r\n\r\nexport interface FavoritesState {\r\n listings: Listing[];\r\n listingCount: number;\r\n isLoading: boolean;\r\n}\r\n\r\n\r\nexport interface RequestFavorites{type: 'REQUEST_FAVORITES'; }\r\nexport interface RecieveFavorites {type: 'RECIEVE_FAVORITES'; listingResults: CurrentListingResults;}\r\nexport interface RemoveFavorite{type: 'REMOVE_FAVORITE', listingId: number};\r\n\r\nexport type KnownAction = RequestFavorites | RecieveFavorites | RemoveFavorite;\r\n\r\n\r\nexport const actionCreators = {\r\n getFavorites: (userId?: string): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'REQUEST_FAVORITES' });\r\n\r\n var item = window.sessionStorage.getItem(\"favorites\");\r\n\r\n var favorites:any = [];\r\n if(item != null)\r\n {\r\n favorites = JSON.parse(item); \r\n }\r\n\r\n postRequest(`favorites/Post`, favorites)\r\n .then(c => dispatch({type: 'RECIEVE_FAVORITES', listingResults: c}));\r\n\r\n },\r\n removeFavorite: (favorite: Listing): AppThunkAction => (dispatch) => {\r\n \r\n //removal from DB comes from UserContextProvider\r\n var item = window.sessionStorage.getItem(\"favorites\");\r\n\r\n var favorites:any = [];\r\n if(item != null)\r\n {\r\n favorites = JSON.parse(item); \r\n }\r\n\r\n favorites.splice(favorites.indexOf(favorite.listingId), 1);\r\n\r\n window.sessionStorage.setItem(\"favorites\", JSON.stringify(favorites));\r\n\r\n\r\n dispatch({type: 'REMOVE_FAVORITE', listingId: favorite.listingId});\r\n }\r\n\r\n\r\n};\r\nconst unloadedState = { listings: [], isLoading: true, listingCount: 0};\r\nexport const reducer: Reducer = (state: FavoritesState | undefined, incomingAction: Action): FavoritesState => {\r\n\r\n if (state === undefined) {\r\n return unloadedState;\r\n }\r\n\r\n const action = incomingAction as KnownAction;\r\n switch (action.type) {\r\n case 'REQUEST_FAVORITES':\r\n return {\r\n isLoading: true,\r\n listingCount: 0,\r\n listings: []\r\n }\r\n case 'RECIEVE_FAVORITES':\r\n return {\r\n isLoading: false,\r\n listings: action.listingResults.listings,\r\n listingCount: action.listingResults.count\r\n }\r\n case 'REMOVE_FAVORITE':\r\n var filtered = state.listings.filter(f => f.listingId !== action.listingId);\r\n \r\n return {\r\n ...state,\r\n listings: filtered,\r\n listingCount: filtered.length\r\n \r\n }\r\n default:\r\n return state;\r\n }\r\n\r\n};","import { Action, Reducer } from 'redux';\r\nimport { AppThunkAction } from '.';\r\nimport { BrokerProfile, BrokerContactRequest } from '../models/Broker';\r\nimport {postRequest} from '../utils/http';\r\nimport { ErrorMessage, ErrorType } from '../models/Error';\r\n\r\nexport interface BrokerProfileState {\r\n profile: BrokerProfile;\r\n isLoading: boolean;\r\n isValid: boolean;\r\n firstName: string;\r\n lastName: string;\r\n email: string;\r\n country: string;\r\n comments: string;\r\n phone:string;\r\n agreeTerms: boolean;\r\n errorMsgs: ErrorMessage[];\r\n submitOk: boolean;\r\n}\r\n\r\n\r\nexport interface RequestBrokerProfiles { type: 'REQUEST_BROKER_PROFILE'; }\r\nexport interface RecieveBrokerProfiles { type: 'RECIEVE_BROKER_PROFILE'; profile: BrokerProfile; }\r\nexport interface ErrorPassword {type: 'ERROR_SIGNUP'; errorMsgs: ErrorMessage[]; }\r\nexport interface UpdateCountry {type: 'UPDATE_COUNTRY'; country: string; }\r\nexport interface UpdateInput {type: 'UPDATE_INPUT', name: string, value: any };\r\nexport interface SubmitOk {type:'SUBMIT_OK', submitOk: boolean;}\r\n\r\nexport type KnownAction = RequestBrokerProfiles | RecieveBrokerProfiles | ErrorPassword | UpdateCountry | UpdateInput | SubmitOk;\r\n\r\n\r\nexport const actionCreators = {\r\n getBrokerProfile: (profileId: string): AppThunkAction => (dispatch) => {\r\n\r\n dispatch({ type: 'REQUEST_BROKER_PROFILE' });\r\n \r\n\r\n postRequest(`BrokerProfiles/PostBrokerProfile`, profileId)\r\n .then(content => \r\n {\r\n dispatch({ type: 'RECIEVE_BROKER_PROFILE', profile: content }); \r\n document.title = `Japan Global Auctions | ${content.name}` \r\n });\r\n },\r\n onSubmit: (): AppThunkAction => (dispatch, getState) => {\r\n \r\n const state = getState().brokerProfile;\r\n\r\n if(state === undefined){\r\n return;\r\n }\r\n\r\n let errorMsgs: ErrorMessage[] = [];\r\n dispatch({type: 'ERROR_SIGNUP', errorMsgs: errorMsgs});\r\n\r\n if(!state.agreeTerms){\r\n errorMsgs.push(new ErrorMessage(ErrorType.Terms, 'You must agree to the Terms of Service'));\r\n }\r\n if( state.firstName === \"\") {\r\n errorMsgs.push(new ErrorMessage(ErrorType.FirstName, 'Please enter your first name.'));\r\n }\r\n if( state.lastName === \"\") {\r\n errorMsgs.push(new ErrorMessage(ErrorType.LastName, 'Please enter your last name.'));\r\n }\r\n if( state.country === \"\") {\r\n errorMsgs.push(new ErrorMessage(ErrorType.Country, \"Please select a country.\"));\r\n }\r\n if( state.email === \"\") {\r\n errorMsgs.push(new ErrorMessage(ErrorType.Email, 'Please enter your email.'));\r\n }\r\n if( state.phone === \"\") {\r\n errorMsgs.push(new ErrorMessage(ErrorType.Phone, 'Please enter a phone number'));\r\n }\r\n if(state.comments === \"\"){\r\n errorMsgs.push(new ErrorMessage(ErrorType.Comment, 'Please enter a comment'));\r\n }\r\n\r\n if(errorMsgs.length == 0){\r\n\r\n const contactRequest: BrokerContactRequest = { firstName: state.firstName, lastName: state.lastName, country: state.country, email: state.email, phone: state.phone, brokerUri: state.profile.uri, comments: state.comments };\r\n postRequest(`Email/SendBrokerContact`, contactRequest); \r\n\r\n dispatch({type: 'SUBMIT_OK', submitOk: true});\r\n }\r\n else {\r\n dispatch({type: 'ERROR_SIGNUP', errorMsgs: errorMsgs});\r\n }\r\n \r\n \r\n\r\n },\r\n updateState: (name: string, value: any): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'UPDATE_INPUT', name: name, value: value});\r\n },\r\n updateCountry: (country: string): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'UPDATE_COUNTRY', country: country});\r\n }\r\n\r\n\r\n};\r\nconst unloadedState = { firstName: \"\", lastName: \"\", email: \"\", country: \"\", phone: \"\", comments: \"\",\r\n profile: { name: \"\", bio: \"\", uri: \"\", website: \"\", id: 0, city: \"\", social: \"\", country: \"\", countryCode: \"\", zipCode: \"\", isIntl: false, stateProvince: \"\", longitude: 0.0, latitude: 0.0}, \r\n isLoading: true, isValid: true, agreeTerms: false, submitOk: false, errorMsgs: []};\r\n\r\nexport const reducer: Reducer = (state: BrokerProfileState | undefined, incomingAction: Action): BrokerProfileState => {\r\n\r\n if (state === undefined) {\r\n return unloadedState;\r\n }\r\n\r\n const action = incomingAction as KnownAction;\r\n switch (action.type) {\r\n case 'REQUEST_BROKER_PROFILE':\r\n return {\r\n ...state,\r\n isLoading: true,\r\n profile: unloadedState.profile,\r\n submitOk: false\r\n }\r\n case 'RECIEVE_BROKER_PROFILE':\r\n return {\r\n ...state,\r\n isValid: action.profile.id !== 0,\r\n isLoading: false,\r\n profile: action.profile\r\n }\r\n case 'ERROR_SIGNUP':\r\n return {\r\n ...state,\r\n errorMsgs: action.errorMsgs\r\n }\r\n case 'UPDATE_INPUT':\r\n return {\r\n ...state,\r\n [action.name] : action.value\r\n }\r\n case 'UPDATE_COUNTRY':\r\n return {\r\n ...state,\r\n country: action.country\r\n }\r\n case 'SUBMIT_OK':\r\n return {\r\n ...state,\r\n submitOk: action.submitOk\r\n }\r\n default:\r\n return state;\r\n }\r\n\r\n};","import { Action, Reducer } from 'redux';\r\nimport { AppThunkAction } from '.';\r\nimport { CurrentListingResults, Listing, ListingPageResults } from '../models/Listing';\r\nimport * as _ from 'lodash';\r\nimport BrokerRequest, { BrokerProfile } from '../models/Broker';\r\nimport {postRequest} from '../utils/http';\r\nimport { ErrorMessage, ErrorType } from '../models/Error';\r\n\r\nexport interface ListingPageState {\r\n imageSrc: string[] | undefined;\r\n listing: Listing;\r\n relatedVehicles: Listing[];\r\n isLoading: boolean;\r\n isLinkCopied: boolean;\r\n brokerProfiles: BrokerProfile[];\r\n brokerRequest: BrokerRequest;\r\n brokenImages: string[] | undefined;\r\n uid: string;\r\n selectedBrokerId: number;\r\n latitude: number;\r\n longitude: number;\r\n errorMsg: ErrorMessage[];\r\n successful: boolean;\r\n}\r\n\r\n\r\nexport interface SetLinkState{type: 'SET_LINK_STATE'; value: boolean; }\r\nexport interface GetBrokers{type: 'GET_BROKERS'; brokerProfiles: BrokerProfile[];}\r\nexport interface RemoveBrokenImages{type: 'REMOVE_BROKEN', imageSrc: string[]|undefined; brokenImages: string[]|undefined; }\r\nexport interface RecieveFavorites {type: 'RECIEVE_FAVORITES'; listingResults: CurrentListingResults;}\r\nexport interface RemoveFavorite{type: 'REMOVE_FAVORITE', listingId: number};\r\nexport interface RequestListing{type: 'REQUEST_LISTING', uid: string };\r\nexport interface RecieveListing{type: 'RECIEVE_LISTING', listing: Listing, imageSrc: string[]; latitude: number; longitude: number; successful: boolean }\r\nexport interface UpdateBrokerRequest{type: 'UPDATE_BROKER_REQUEST', brokerRequest: BrokerRequest;}\r\nexport interface UpdateSelectedBroker {type: 'UPDATE_SELECTED_BROKER', brokerId: number;}\r\nexport interface UpdateErrorMessage {type: 'UPDATE_ERROR_MESSAGE', errorMsg: ErrorMessage[];}\r\nexport interface RecieveListingFailed{type: 'FAILED_LISTING'}\r\n\r\nexport type KnownAction = SetLinkState | GetBrokers | RecieveFavorites | RemoveFavorite | RemoveBrokenImages\r\n | RequestListing | RecieveListing | UpdateBrokerRequest | UpdateSelectedBroker | UpdateErrorMessage | RecieveListingFailed;\r\n\r\n\r\nexport const actionCreators = {\r\n\r\n getBrokerProfiles: () : AppThunkAction => (dispatch) => {\r\n\r\n var localStorage = window.localStorage;\r\n var countryCode = localStorage.getItem(\"clientCountryCode\");\r\n \r\n if(countryCode != null)\r\n {\r\n postRequest(`auction/GetBrokerProfiles`, countryCode)\r\n .then(c => dispatch({type: 'GET_BROKERS', brokerProfiles: c }));\r\n }\r\n },\r\n removeBroken: (event: React.SyntheticEvent): AppThunkAction => (dispatch, getState) => {\r\n\r\n //magic numbers for image not found\r\n if(event.currentTarget.naturalWidth === 128 && event.currentTarget.naturalHeight === 96)\r\n {\r\n var src = event.currentTarget.src;\r\n var state = getState().listingPage;\r\n if(state !== undefined)\r\n {\r\n var imageSource = state.imageSrc;\r\n if(imageSource !== undefined)\r\n {\r\n var images = imageSource.filter(sc => sc !== src);\r\n var brokenImages = state.brokenImages;\r\n if(brokenImages !== undefined)\r\n brokenImages.push(src);\r\n\r\n _.delay(() => dispatch({type: 'REMOVE_BROKEN', imageSrc: images, brokenImages: brokenImages}), 16);\r\n }\r\n }\r\n }\r\n },\r\n share: (): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'SET_LINK_STATE', value: true});\r\n },\r\n\r\n resetLinkState: (): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'SET_LINK_STATE', value: false});\r\n },\r\n updateBrokerRequest: (brokerRequest: BrokerRequest): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'UPDATE_BROKER_REQUEST', brokerRequest: brokerRequest});\r\n },\r\n updateSelectedBroker: (brokerId: number): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'UPDATE_SELECTED_BROKER', brokerId: brokerId});\r\n },\r\n \r\n updateListing: (uid: string) : AppThunkAction => (dispatch, getState) => {\r\n\r\n document.title = \"JGA | Loading...\" \r\n dispatch({type: 'REQUEST_LISTING', uid: uid});\r\n postRequest(`auction/PostListing`, uid)\r\n .then(content => {\r\n\r\n if(content.successful)\r\n {\r\n let images = [];\r\n for(let i = 1; i < 4; i++) {\r\n images.push(`auction/${content.listing.listingId}-${i}.jpg`);\r\n }\r\n //images.push(`https://p3.aleado.com/pic?system=auto&date=${content.listing.auctionLocationInfo.dateInfo.dateTime}&auct=${content.listing.auctionNumberInfo.auctionNumber}&bid=${content.listing.auctionLocationInfo.lotNumber}&number=0`);\r\n\r\n dispatch({type: 'RECIEVE_LISTING', listing: content.listing, imageSrc: images, latitude: content.latitude, longitude: content.longitude, successful: content.successful});\r\n \r\n document.title = `JGA | ${content.listing.yearInfo.year} ${content.listing.makeAndModelInfo.make} ${content.listing.makeAndModelInfo.model}`;\r\n }\r\n else{\r\n document.title = \"JGA | 404 Not Found\";\r\n dispatch({type: 'FAILED_LISTING' });\r\n }\r\n })\r\n },\r\n\r\n sendBrokerRequest: (brokerRequest: BrokerRequest): AppThunkAction => (dispatch) => {\r\n\r\n brokerRequest = Object.assign({}, brokerRequest, {url : window.location.href});\r\n postRequest(`Email/SendBrokerRequest`, brokerRequest);\r\n },\r\n setErrorMessage: (errorMsg: ErrorMessage[]): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'UPDATE_ERROR_MESSAGE', errorMsg: errorMsg});\r\n }\r\n\r\n\r\n};\r\nconst unloadedState = {latitude: 0.0, longitude: 0.0, selectedBrokerId: 0, uid: \"\", errorMsg: [], brokenImages: [], imageSrc:[], isLinkCopied: false, relatedVehicles: [], isLoading: true, brokerProfiles: [], listing: {} as Listing, brokerRequest: {name: \"\", email: \"\", country: \"\", comments: \"\", brokerId: 0, url: \"\"}, successful: false};\r\nexport const reducer: Reducer = (state: ListingPageState | undefined, incomingAction: Action): ListingPageState => {\r\n\r\n if (state === undefined) {\r\n return unloadedState;\r\n }\r\n\r\n const action = incomingAction as KnownAction;\r\n switch (action.type) {\r\n case 'SET_LINK_STATE':\r\n return {\r\n ...state,\r\n isLinkCopied: action.value\r\n }\r\n case 'GET_BROKERS':\r\n return {\r\n ...state,\r\n brokerProfiles: action.brokerProfiles\r\n }\r\n case 'REMOVE_BROKEN':\r\n return {\r\n ...state,\r\n imageSrc: action.imageSrc,\r\n brokenImages: action.brokenImages\r\n \r\n }\r\n case 'REQUEST_LISTING':\r\n return {\r\n ...state,\r\n uid: action.uid,\r\n isLoading: true\r\n }\r\n case 'RECIEVE_LISTING':\r\n return {\r\n ...state,\r\n isLoading: false,\r\n listing: action.listing,\r\n latitude: action.latitude,\r\n longitude: action.longitude,\r\n imageSrc: action.imageSrc,\r\n successful: true\r\n }\r\n case 'FAILED_LISTING':\r\n return {\r\n ...state,\r\n isLoading: false,\r\n successful: false\r\n }\r\n case 'UPDATE_BROKER_REQUEST':\r\n return {\r\n ...state,\r\n brokerRequest: action.brokerRequest\r\n }\r\n case 'UPDATE_SELECTED_BROKER':\r\n return {\r\n ...state,\r\n selectedBrokerId: action.brokerId\r\n }\r\n case 'UPDATE_ERROR_MESSAGE':\r\n return {\r\n ...state,\r\n errorMsg: action.errorMsg\r\n }\r\n default:\r\n return state;\r\n }\r\n\r\n};","import { Action, Reducer } from 'redux';\r\nimport { AppThunkAction } from '.';\r\nimport {postRequest} from '../utils/http';\r\nimport { ConnectionRequest, BidRequest } from '../models/ConnectionRequest';\r\nimport { Connect } from 'react-redux';\r\nimport {UserInfo} from '../models/UserInfo';\r\nimport User from '../models/User';\r\n\r\n\r\nexport interface RequestConnectionRequests {type: 'REQUEST_CONN_REQ'; }\r\nexport interface RequestConnections {type: 'REQUEST_CONN'};\r\nexport interface ReceiveConnections {type: 'RECEIVE_CONN', users: UserInfo[] }\r\nexport interface ReceiveConnectionRequests {type: 'RECEIVE_CONN_REQ', connectionRequests: ConnectionRequest[] }\r\nexport interface RequestBidRequests {type: 'REQUEST_BID_REQ';}\r\nexport interface ReceiveBidRequests {type: 'RECEIVE_BID_REQ', bidRequests: BidRequest[] }\r\nexport interface AcceptConnectionRequest {type: 'ACCEPT_CONN_REQ', result: boolean }\r\nexport interface RejectConnectionRequest {type: 'REJECT_CONN_REQ', result: boolean }\r\n\r\nexport type KnownAction = RequestConnectionRequests | ReceiveConnectionRequests | RequestBidRequests | ReceiveBidRequests\r\n | AcceptConnectionRequest | RejectConnectionRequest | RequestConnections | ReceiveConnections;\r\n\r\nexport interface BrokerDashboardState {\r\n isLoadingConnectionRequests: boolean;\r\n isLoadingBidRequests: boolean;\r\n isLoadingConnections: boolean;\r\n connectionRequests: ConnectionRequest[];\r\n bidRequests: BidRequest[];\r\n connections: UserInfo[];\r\n}\r\n\r\nexport const actionCreators = {\r\n\r\n getConnections: (brokerId: number, userId: string) : AppThunkAction => (dispatch) => {\r\n\r\n dispatch({type: 'REQUEST_CONN'});\r\n let userInfo: UserInfo = {brokerId: brokerId, userId: userId} as UserInfo;\r\n\r\n postRequest(`BrokerProfiles/GetConnections`, userInfo)\r\n .then(results => dispatch({type: 'RECEIVE_CONN', users: results}));\r\n\r\n\r\n\r\n },\r\n\r\n getConnectionRequests: (brokerId: number, userId: string): AppThunkAction => (dispatch) => {\r\n\r\n dispatch({type: 'REQUEST_CONN_REQ' });\r\n\r\n let userInfo: UserInfo = {brokerId: brokerId, userId: userId} as UserInfo;\r\n postRequest(`BrokerProfiles/GetPendingConnectionRequests`, userInfo)\r\n .then(results => dispatch({type: 'RECEIVE_CONN_REQ', connectionRequests: results}));\r\n\r\n },\r\n\r\n getBidRequests: (brokerId: number, userId: string): AppThunkAction => (dispatch) => {\r\n\r\n dispatch({type: 'REQUEST_BID_REQ'});\r\n\r\n let userInfo: UserInfo = {brokerId: brokerId, userId: userId} as UserInfo;\r\n postRequest(`BrokerProfiles/GetBidRequests`, userInfo)\r\n .then(results => dispatch({type: 'RECEIVE_BID_REQ', bidRequests: results}));\r\n },\r\n\r\n acceptConnectionRequest(connectionRequest: ConnectionRequest){\r\n postRequest(`BrokerProfiles/AcceptConnectionRequest`, connectionRequest)\r\n .then(result => result);\r\n },\r\n rejectConnectionRequest(connectionRequest: ConnectionRequest){\r\n postRequest(`BrokerProfiles/RejectConnectionRequest`, connectionRequest)\r\n .then(result => result);\r\n }\r\n\r\n};\r\nconst unloadedState = { isLoadingConnectionRequests: true, isLoadingBidRequests: true, isLoadingConnections: true, connections: [], connectionRequests: [], bidRequests: []};\r\nexport const reducer: Reducer = (state: BrokerDashboardState | undefined, incomingAction: Action): BrokerDashboardState => {\r\n if (state === undefined) {\r\n return unloadedState;\r\n }\r\n\r\n const action = incomingAction as KnownAction;\r\n switch (action.type) {\r\n case 'REQUEST_CONN_REQ':\r\n return {\r\n ...state,\r\n isLoadingConnectionRequests: true\r\n }\r\n case 'RECEIVE_CONN_REQ':\r\n return {\r\n ...state,\r\n connectionRequests: action.connectionRequests,\r\n isLoadingConnectionRequests: false\r\n }\r\n case 'REQUEST_BID_REQ':\r\n return {\r\n ...state,\r\n isLoadingBidRequests: true\r\n }\r\n case 'RECEIVE_BID_REQ':\r\n return {\r\n ...state,\r\n bidRequests: action.bidRequests,\r\n isLoadingBidRequests: false\r\n \r\n }\r\n case 'REQUEST_CONN':\r\n return {\r\n ...state,\r\n isLoadingConnections: true\r\n }\r\n case 'RECEIVE_CONN':\r\n return {\r\n ...state,\r\n isLoadingConnections: false,\r\n connections: action.users\r\n }\r\n default:\r\n return state;\r\n }\r\n\r\n};","import firebase from 'firebase/app';\r\nimport 'firebase/auth';\r\nimport 'firebase/analytics';\r\nimport User from '../models/User';\r\n\r\nconst firebaseConfig = {\r\n apiKey: \"AIzaSyC-6Lvx9N54I8r6NCMcDvS6p2blsURVHWM\",\r\n authDomain: \"japanauctiontool.firebaseapp.com\",\r\n databaseURL: \"https://japanauctiontool.firebaseio.com\",\r\n projectId: \"japanauctiontool\",\r\n storageBucket: \"japanauctiontool.appspot.com\",\r\n messagingSenderId: \"89072923284\",\r\n appId: \"1:89072923284:web:9dff6bfeaa4f6893637a81\",\r\n measurementId: \"G-XQCYDVB8HL\"\r\n };\r\n\r\nvar userSession: User = new User();\r\n\r\ntry {\r\n firebase.initializeApp(firebaseConfig);\r\n firebase.analytics().logEvent(\"site_visit\");\r\n}\r\ncatch(err) { }\r\n\r\nexport {firebase, userSession };\r\n","import { Favorite } from './Favorite';\r\n\r\n\r\nclass User {\r\n favorites: Favorite[];\r\n\r\n constructor(){\r\n this.favorites = [];\r\n }\r\n\r\n public getFavorites(userId: string){\r\n }\r\n\r\n public addFavorite() {\r\n\r\n }\r\n\r\n public removeFavorite() {\r\n\r\n }\r\n\r\n\r\n}\r\n\r\nexport default User;\r\n","\"use strict\";\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar redux_1 = require(\"redux\");\r\nvar redux_thunk_1 = __importDefault(require(\"redux-thunk\"));\r\nvar connected_react_router_1 = require(\"connected-react-router\");\r\nvar _1 = require(\"./\");\r\nfunction configureStore(history, initialState) {\r\n var middleware = [\r\n redux_thunk_1.default,\r\n connected_react_router_1.routerMiddleware(history)\r\n ];\r\n var rootReducer = redux_1.combineReducers(__assign(__assign({}, _1.reducers), { router: connected_react_router_1.connectRouter(history) }));\r\n var enhancers = [];\r\n var windowIfDefined = typeof window === 'undefined' ? null : window;\r\n if (windowIfDefined && windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__) {\r\n enhancers.push(windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__());\r\n }\r\n return redux_1.createStore(rootReducer, initialState, redux_1.compose.apply(void 0, __spreadArrays([redux_1.applyMiddleware.apply(void 0, middleware)], enhancers)));\r\n}\r\nexports.default = configureStore;\r\n","enum ErrorType {\r\n None,\r\n FirstName,\r\n LastName,\r\n FullName,\r\n Email,\r\n Phone,\r\n Country,\r\n BrokerageName,\r\n Message,\r\n BugLocation,\r\n BugDescription,\r\n Password,\r\n ConfirmPassword,\r\n Terms,\r\n Comment\r\n}\r\n\r\nclass ErrorMessage {\r\n\r\n constructor(errorTp: ErrorType, errorDesc: string){\r\n this.errorDescription = errorDesc;\r\n this.errorType = errorTp;\r\n }\r\n \r\n errorDescription: string;\r\n errorType: ErrorType;\r\n}\r\n\r\nexport {ErrorType, ErrorMessage}","import * as React from 'react';\r\nimport {Modal, ModalHeader, ModalBody, Row, ModalFooter, Button} from 'reactstrap';\r\nimport { GenericModalProps, ModalType } from './GenericModalContainer';\r\n\r\nconst GenericModalView = (props: GenericModalProps) => {\r\n\r\n const okButtonOverride = !props.okButtonTextOverride ? \"Ok\" : props.okButtonTextOverride;\r\n const classNameOverride = !props.classNameOverride ? \"modal-dialog\" : props.classNameOverride;\r\n\r\n const trySubmit = () => {\r\n\r\n if(props.validateModal !== undefined && !props.validateModal())\r\n {\r\n return;\r\n }\r\n\r\n if(props.onSubmit !== undefined) \r\n {\r\n props.onSubmit();\r\n } \r\n props.toggle();\r\n\r\n };\r\n\r\n\r\n return (\r\n \r\n {props.title}\r\n \r\n \r\n {props.children}\r\n \r\n \r\n {props.type === ModalType.Ok ?\r\n \r\n \r\n \r\n :\r\n props.type === ModalType.OkCancel ?\r\n \r\n \r\n {' '}\r\n \r\n :\r\n null\r\n }\r\n \r\n );\r\n}\r\n\r\nexport default GenericModalView;","import * as React from 'react';\r\nimport GenericModalView from '../components/GenericModalView';\r\n\r\nexport enum ModalType\r\n{\r\n Ok,\r\n OkCancel,\r\n None\r\n}\r\n\r\nexport interface GenericModalProps\r\n{\r\n isOpen: boolean;\r\n title: string;\r\n okButtonTextOverride?: string;\r\n type: ModalType;\r\n children?: React.ReactNode;\r\n toggle(): void;\r\n onSubmit?(): void;\r\n validateModal?(): boolean;\r\n classNameOverride?: string;\r\n}\r\n\r\nclass GenericModalContainer extends React.Component {\r\n\r\n public constructor(props: GenericModalProps){\r\n super(props);\r\n }\r\n\r\n public render(){\r\n return \r\n }\r\n}\r\n\r\nexport default GenericModalContainer;","import * as React from 'react';\r\nimport { ErrorMessage, ErrorType} from '../models/Error';\r\nimport { Label, Input, FormGroup } from 'reactstrap';\r\nimport { InputType } from 'reactstrap/lib/Input';\r\nimport { CountryDropdown } from 'react-country-region-selector';\r\n\r\nexport interface InputGroupProps {\r\n name: string;\r\n for?: string;\r\n type?: InputType;\r\n children?: React.ReactNode;\r\n id: string;\r\n errorType?: ErrorType;\r\n errorMsg?: string;\r\n errorMsgs?: ErrorMessage[];\r\n placeholder?: string;\r\n onChange?(e: React.ChangeEvent) : void;\r\n}\r\n\r\nconst InputGroup = (props: InputGroupProps) => {\r\n\r\n const [showErrorMsg, setShowErrorMsg] = React.useState(false);\r\n\r\n let showErrors: boolean = false;\r\n let validationClass: string = \"\";\r\n if(props.errorMsgs && props.errorMsgs.some((msg) => msg.errorType === props.errorType)){\r\n showErrors = true;\r\n validationClass = \"validation-error-input\";\r\n }\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {props.children}\r\n {showErrors && }\r\n \r\n\r\n );\r\n} \r\n\r\nconst InnerInputGroup = (props: InputGroupProps) => {\r\n\r\n const [showErrorMsg, setShowErrorMsg] = React.useState(false);\r\n\r\n let showErrors: boolean = false;\r\n let validationClass: string = \"\";\r\n if(props.errorMsgs && props.errorMsgs.some((msg) => msg.errorType === props.errorType)){\r\n showErrors = true;\r\n validationClass = \"validation-error-input\";\r\n }\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n );\r\n}\r\n\r\n\r\nexport interface CountryDropdownGroupProps extends InputGroupProps {\r\n value: string;\r\n onCountryChange(val: string, e: React.ChangeEvent | undefined): any;\r\n}\r\n\r\nconst CountryDropdownGroup = (props: CountryDropdownGroupProps) => {\r\n\r\n const [showErrorMsg, setShowErrorMsg] = React.useState(false);\r\n\r\n let showErrors: boolean = false;\r\n let validationClass: string = \"\";\r\n if(props.errorMsgs && props.errorMsgs.some((msg) => msg.errorType === props.errorType)){\r\n showErrors = true;\r\n validationClass = \"validation-error-input\";\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {props.children}\r\n {showErrors && }\r\n \r\n\r\n );\r\n}\r\n\r\n\r\n\r\nexport { InputGroup, CountryDropdownGroup, InnerInputGroup};","\r\nexport function sanitizePathname(str: string) : string {\r\n return str.replace(/\\//g, '-').substr(1, str.length - 1);\r\n}\r\n\r\nexport const privacyPolicyInfo = \"some privacy policy here!\";\r\nexport const termsOfServiceInfo = \"some terms of service here!\";\r\n\r\nexport const validationErrorFirstName = \"Please enter your first name.\";\r\nexport const validationErrorLastName = \"Please enter your last name.\";\r\nexport const validationErrorFullName = \"Please enter your name.\";\r\n\r\nexport const validationErrorBrokerageName = \"Please enter your brokerage name.\";\r\nexport const validationErrorEmail = \"Please enter a valid email address.\";\r\nexport const validationErrorCountry = \"Please select a country.\";\r\nexport const validationErrorPhone = \"Please enter a valid phone number.\";\r\nexport const validationErrorAgreeTerms = \"You must agree to the terms of service.\"\r\nexport const validationErrorMessage = \"Please enter a message.\";\r\nexport const validationErrorBugDescription = \"Please enter a bug description.\";\r\nexport const validationErrorBugLocation = \"Please enter a bug location.\";\r\nexport const validationErrorPassword =\"Please enter your password.\";\r\nexport const validationErrorConfirmPassword = \"Please confirm your password.\";\r\nexport const validationErrorComments = \"Please enter a comment.\";\r\n\r\nexport const titleLoading = \"Japan Global Auctions | Loading...\";\r\nexport const titleBrokers = \"Japan Global Auctions | All Brokers\";\r\nexport const titleAuctions = \"Japan Global Auctions | Auctions\";\r\nexport const titleHome = \"Japan Global Auctions | Find, buy and import your dream car\";\r\nexport const titleContactUs = \"Japan Global Auctions | Contact Us\";\r\nexport const titleBecomeABroker = \"Japan Global Auctions | Become A Broker\";\r\nexport const titleFavorites = \"Japan Global Auctions | Favorites\";\r\nexport const titleAlerts = \"Japan Global Auctions | Alerts\";\r\nexport const titleSignup = \"Japan Global Auctions | Signup\";\r\nexport const titleLogin = \"Japan Global Auctions | Login\";\r\n","import React, { useState } from 'react';\r\nimport {FormGroup, Form, Label, Input, Button, Container, Row, Col} from 'reactstrap';\r\nimport { UserContext } from '../models/UserContext';\r\nimport { useContext } from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { ErrorMessage, ErrorType } from '../models/Error';\r\nimport { InputGroup } from './InputGroup';\r\nimport { validationErrorEmail, validationErrorPassword } from '../utils/Strings2';\r\n\r\nexport interface LoginViewProps {\r\n onSubmit(e: React.FormEvent): any,\r\n updateState(event: React.FormEvent): any,\r\n username: string,\r\n password: string,\r\n errorMsg: string,\r\n errorMsgs: ErrorMessage[],\r\n isLoggedIn: boolean\r\n}\r\n\r\nconst LoginView = (props: LoginViewProps) => {\r\n\r\n const history = useHistory();\r\n\r\n if(props.isLoggedIn)\r\n {\r\n window.location.reload();\r\n return null;\r\n }\r\n \r\n return (\r\n \r\n \r\n \r\n

Log in

\r\n

Don't have an account yet? Create one now

\r\n
\r\n \r\n \r\n\r\n {props.errorMsg &&
{props.errorMsg}
}\r\n\r\n \r\n \r\n \r\n
\r\n
\r\n )}\r\n \r\n\r\n\r\nexport default LoginView;","import React, { useContext } from 'react';\r\nimport { ApplicationState } from '../store';\r\nimport { connect } from 'react-redux';\r\nimport * as LoginStore from '../store/LoginStore';\r\nimport {firebase} from '../firebase/Firebase';\r\n\r\nimport LoginView from '../components/LoginView';\r\nimport { Redirect, RouteComponentProps } from 'react-router-dom';\r\nimport { titleLogin } from '../utils/Strings2';\r\n\r\nexport interface MyLoginProps {\r\n onLoginSuccessful?(): any;\r\n}\r\n\r\ntype LoginContainerProps = LoginStore.LoginState &\r\n typeof LoginStore.actionCreators & RouteComponentProps & MyLoginProps;\r\n\r\nclass LoginContainer extends React.Component {\r\n\r\n constructor(props: LoginContainerProps) {\r\n super(props);\r\n document.title = titleLogin;\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n this.updateState = this.updateState.bind(this);\r\n \r\n\r\n this.state = {\r\n isLoggedIn: false\r\n }\r\n\r\n }\r\n\r\n public componentDidMount(){\r\n firebase.auth().onAuthStateChanged((user) => {\r\n if(user){\r\n this.setState({isLoggedIn: true});\r\n if(this.props.onLoginSuccessful){\r\n this.props.onLoginSuccessful();\r\n }\r\n }\r\n\r\n });\r\n }\r\n\r\n public render() {\r\n\r\n return ( \r\n );\r\n }\r\n\r\n public onSubmit(e: React.FormEvent) {\r\n e.preventDefault();\r\n this.props.onSubmit(this.props.email, this.props.password);\r\n }\r\n\r\n public updateState(event: React.FormEvent) {\r\n const {name, value} = event.currentTarget;\r\n this.props.updateState(name, value);\r\n\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (state: ApplicationState, ownProps: MyLoginProps) => state.login;\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n LoginStore.actionCreators\r\n)(LoginContainer as any);","import * as React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport {firebase} from '../firebase/Firebase';\r\nimport { Collapse, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink } from 'reactstrap';\r\n\r\nimport './NavMenu.css';\r\nimport GenericModalContainer, { ModalType } from './GenericModalContainer';\r\nimport LoginContainer from './LoginContainer';\r\nimport { NotificationTray } from '../models/NotificationContextProvider';\r\n\r\nexport class NavMenuContainer extends React.Component<{}, { isOpen: boolean, isAuthenticated: boolean }> {\r\n\r\n public state = {\r\n isOpen: false,\r\n isAuthenticated: false\r\n };\r\n\r\n constructor(props: any){\r\n super(props);\r\n this.toggle = this.toggle.bind(this);\r\n this.close = this.close.bind(this);\r\n }\r\n\r\n public componentDidMount(){\r\n firebase.auth().onAuthStateChanged((user) => {\r\n var isAuthenticated = (!user) ? false: true;\r\n this.setState({isAuthenticated: isAuthenticated});\r\n\r\n });\r\n }\r\n\r\n public render() {\r\n return \r\n }\r\n\r\n private toggle = () => {\r\n this.setState({\r\n isOpen: !this.state.isOpen\r\n });\r\n }\r\n private close = (e: React.MouseEvent) => {\r\n this.setState({isOpen: false});\r\n }\r\n};\r\n\r\nconst NavMenu = (props: {isOpen: boolean, isAuthenticated: boolean, toggle(): any, close(e: React.MouseEvent): void }) => {\r\n\r\n const [loginModal, setLoginModal] = React.useState(false);\r\n const toggleLogin = () => setLoginModal(!loginModal);\r\n\r\n const closeLogin = () => {\r\n setLoginModal(false);\r\n }\r\n\r\n return (\r\n\r\n
\r\n \r\n
\r\n \"logo\"\r\n \r\n \r\n {!props.isAuthenticated ?\r\n \r\n : \r\n
    \r\n \r\n Auctions\r\n \r\n {/* \r\n Brokers\r\n \r\n \r\n Become a Broker\r\n */}\r\n \r\n Favorites\r\n \r\n {/* \r\n Alerts\r\n */}\r\n \r\n Sign out\r\n \r\n \r\n
\r\n }\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","import * as React from 'react';\r\n\r\nexport interface Notification {\r\n title: string;\r\n body: string;\r\n isOpen: boolean;\r\n}\r\n\r\nexport interface NotificationContextType \r\n{\r\n notifications: Notification[];\r\n addNotification(notification: Notification): any;\r\n removeNotification(notification: Notification): any;\r\n\r\n};\r\n\r\nexport const NotificationContext = React.createContext({\r\n notifications: [],\r\n addNotification: (notification: Notification) => { },\r\n removeNotification: (notification: Notification) => {},\r\n});","\r\nimport * as React from 'react';\r\nimport { withRouter, RouteComponentProps} from 'react-router-dom';\r\n\r\nimport { NotificationContext, Notification } from './NotificationContext';\r\n\r\n\r\n\r\n\r\n\r\nclass NotificationContextProvider extends React.Component {\r\n\r\n private initialState: any;\r\n\r\n constructor(props: any){\r\n super(props);\r\n\r\n this.addNotification = this.addNotification.bind(this);\r\n this.removeNotification = this.removeNotification.bind(this);\r\n\r\n this.state = {\r\n notifications: [],\r\n addNotification: this.addNotification,\r\n removeNotification: this.removeNotification\r\n }\r\n\r\n this.initialState = this.state;\r\n \r\n }\r\n\r\n public addNotification(notification: Notification){\r\n\r\n console.log(notification);\r\n let notifications = this.state.notifications;\r\n\r\n notification.isOpen = true;\r\n\r\n notifications.push(notification);\r\n\r\n setTimeout(() => this.removeNotification(notification), 5000);\r\n\r\n\r\n this.setState({notifications: notifications});\r\n }\r\n\r\n public removeNotification(notification: Notification){\r\n let notifications = this.state.notifications;\r\n \r\n notifications = notifications.filter(n => n !== notification);\r\n notification.isOpen = false;\r\n\r\n this.setState({notifications: notifications});\r\n }\r\n\r\n\r\n public render()\r\n {\r\n return (\r\n \r\n {this.props.children} \r\n \r\n );\r\n }\r\n\r\n \r\n}\r\n\r\nexport default withRouter(NotificationContextProvider);\r\n\r\n\r\n \r\nconst NotificationTray = () => {\r\n\r\n const {notifications} = React.useContext(NotificationContext);\r\n \r\n // return (\r\n //
\r\n // {notifications.map((notification: Notification) => \r\n //
\r\n // \r\n // \r\n // {notification.title}\r\n // \r\n // \r\n // {notification.body}\r\n // \r\n // \r\n //
\r\n \r\n // )}\r\n //
\r\n // );\r\n\r\n\r\n }\r\n \r\n export {NotificationTray}","import * as React from 'react';\r\nimport { Container, Row, Col, Form, FormGroup, Label, Input, Button } from 'reactstrap';\r\nimport {NavMenuContainer} from './NavMenu';\r\nimport {sanitizePathname, privacyPolicyInfo, validationErrorEmail, validationErrorBugLocation, validationErrorBugDescription} from '../utils/Strings2';\r\nimport { useLocation, useHistory } from 'react-router-dom';\r\nimport GenericModalContainer, { ModalType } from './GenericModalContainer';\r\nimport {BugReport} from '../models/BugReport';\r\nimport { postRequest } from '../utils/http';\r\nimport {ErrorMessage, ErrorType } from '../models/Error';\r\nimport { InputGroup } from './InputGroup';\r\nimport NotificationContextProvider from '../models/NotificationContextProvider';\r\n\r\n\r\n\r\n\r\nconst Layout = (props: { children?: React.ReactNode }) => {\r\n\r\n let location = useLocation();\r\n\r\n \r\n const [reportABug, setReportABug] = React.useState(false);\r\n const toggleReportABug = () => setReportABug(!reportABug);\r\n\r\n const [email, setEmail] = React.useState(\"\");\r\n const [bugLocation, setBugLocation] = React.useState(\"\");\r\n const [bugDescription, setBugDescription] = React.useState(\"\");\r\n const [errorMsgs, setErrorMessage] = React.useState([]);\r\n\r\n const sendBugReport = () => { \r\n const bugReport: BugReport = { email: email, bugLocation: bugLocation, bugDescription: bugDescription};\r\n postRequest(`Email/ReportABug`, bugReport).then(c => c);\r\n }\r\n\r\n const validateBugReportInput = () : boolean => {\r\n\r\n let errorMsgs: ErrorMessage[] = [];\r\n setErrorMessage(errorMsgs);\r\n if(bugLocation === \"\") { errorMsgs.push(new ErrorMessage(ErrorType.BugLocation, \"\")); }\r\n if(bugDescription === \"\") { errorMsgs.push(new ErrorMessage(ErrorType.BugDescription, \"\")); }\r\n\r\n setErrorMessage(errorMsgs);\r\n return errorMsgs.length == 0;\r\n }\r\n\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n {props.children}\r\n
\r\n
\r\n \r\n
\r\n\r\n );\r\n};\r\n\r\nexport default Layout;\r\n","import * as React from 'react';\r\n\r\ninterface GearInfoProps {\r\n gearType: number;\r\n numberOfGears: number;\r\n}\r\n\r\ninterface GearInfoState {\r\n gearType: number;\r\n numberOfGears: number;\r\n}\r\n\r\nclass GearInfoConverter extends React.Component {\r\n\r\n constructor(props: GearInfoProps) {\r\n super(props);\r\n this.state = {\r\n gearType: 0,\r\n numberOfGears: 0\r\n }\r\n }\r\n\r\n public render() {\r\n if(this.props.gearType === 2 && this.props.numberOfGears > 0) return {this.props.numberOfGears}-Speed \r\n else if(this.props.gearType === 2) return Manual\r\n else if(this.props.gearType === 3) return Sequential\r\n else return Automatic\r\n }\r\n};\r\n\r\nexport default GearInfoConverter;","import * as React from 'react';\r\n\r\ninterface ScoreInfoProps {\r\n score: number\r\n}\r\n\r\ninterface ScoreInfoState {\r\n score: number\r\n}\r\n\r\nexport class ScoreInfoConverter extends React.Component {\r\n\r\n constructor(props: ScoreInfoProps){\r\n super(props);\r\n }\r\n\r\n public render() {\r\n if (this.props.score === 0) {\r\n return N/A\r\n }\r\n else if (this.props.score === 1) {\r\n return 0\r\n }\r\n else if (this.props.score === 2) {\r\n return A\r\n }\r\n else if (this.props.score === 3) {\r\n return 1\r\n }\r\n else if (this.props.score === 4) {\r\n return 2\r\n }\r\n else if (this.props.score === 5) {\r\n return 3\r\n }\r\n else if (this.props.score === 6) {\r\n return 3.5\r\n }\r\n else if (this.props.score === 7) {\r\n return 4\r\n }\r\n else if (this.props.score === 8) {\r\n return 4.5\r\n }\r\n else if (this.props.score === 9) {\r\n return 5\r\n }\r\n else if (this.props.score === 10) {\r\n return 6\r\n }\r\n else if (this.props.score === 11) {\r\n return 7\r\n }\r\n else if (this.props.score === 12) {\r\n return 8\r\n }\r\n else if (this.props.score === 13) {\r\n return 9\r\n }\r\n else if (this.props.score === 14) {\r\n return S\r\n }\r\n else if (this.props.score === 15) {\r\n return R\r\n }\r\n else if (this.props.score === 16) {\r\n return RA\r\n }\r\n else {\r\n return {this.props.score - 1}\r\n }\r\n }\r\n}\r\n\r\nexport default ScoreInfoConverter;","import * as React from 'react';\r\nimport { Favorite } from './Favorite';\r\nimport { Listing } from './Listing';\r\nimport { UserInfo } from './UserInfo';\r\n\r\nexport interface UserType \r\n{\r\n getFavorites(): any,\r\n getUserInfo(userId: string): void,\r\n addFavorite(event: React.MouseEvent, listing: Listing): any,\r\n removeFavorite(event: React.MouseEvent, listing: Listing): any,\r\n setUser(user: firebase.User): any,\r\n userId: string,\r\n user: firebase.User|undefined,\r\n favorites: Favorite[],\r\n clear(): any,\r\n userInfo: UserInfo\r\n\r\n};\r\n\r\nexport const UserContext = React.createContext({\r\n getFavorites: () => {}, \r\n getUserInfo: (userId: string) => {},\r\n clear: () => {},\r\n addFavorite: (event: React.MouseEvent, listing: Listing) => {}, \r\n removeFavorite: (event: React.MouseEvent, listing: Listing) => {}, \r\n userId: \"\", \r\n user: undefined, \r\n setUser: (user: firebase.User) => {}, \r\n favorites: [],\r\n userInfo: {} as UserInfo}\r\n);\r\n\r\n","import React from 'react';\r\nimport { Listing } from '../models/Listing';\r\nimport { Link } from 'react-router-dom';\r\nimport GearInfoConverter from '../converters/GearInfoConverter';\r\nimport { ScoreInfoConverter } from '../converters/ScoreInfoConverter';\r\nimport { Badge, Button, Label } from 'reactstrap';\r\nimport { useContext } from 'react';\r\nimport { UserContext } from '../models/UserContext';\r\nimport GenericModalContainer, { ModalType } from './GenericModalContainer';\r\nimport LoginContainer from './LoginContainer';\r\n\r\ninterface ListingItemProps {\r\n listing: Listing;\r\n userId: string;\r\n onFavorite(event: React.MouseEvent): any;\r\n isFavorited: boolean;\r\n}\r\n\r\nconst ListingItem = (props: ListingItemProps) => {\r\n const [modal, setModal] = React.useState(false);\r\n const toggle = () => setModal(!modal);\r\n\r\n const item = window.sessionStorage.getItem(\"favorites\");\r\n\r\n var favorites:any = [];\r\n if(item != null)\r\n {\r\n favorites = JSON.parse(item);\r\n }\r\n\r\n\r\n const modelName = (props.listing.modelCodeName != null) ? props.listing.modelCodeName.toUpperCase() : null;\r\n const {addFavorite, removeFavorite, user} = useContext(UserContext);\r\n const favoriteHandler = favorites.includes(props.listing.listingId) ? {removeFavorite(e, props.listing)}} > : { if(!user){ e.preventDefault(); toggle(); } else { addFavorite(e, props.listing)}}} >;\r\n const favoriteLabel = favorites.includes(props.listing.listingId) ? : null;\r\n\r\n const closeLogin = () => { setModal(false); }\r\n\r\n \r\n return (\r\n \r\n
\r\n {favoriteHandler}\r\n \r\n
\r\n {favoriteLabel}\r\n \"photo1\"\r\n
\r\n
\r\n
{props.listing.yearInfo.year} {props.listing.makeAndModelInfo.make}
\r\n

{props.listing.makeAndModelInfo.model} {modelName}

\r\n
\r\n
\r\n {props.listing.mileageInfo.mileage } km\r\n
\r\n
\r\n \r\n
\r\n
\r\n Score: \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n );\r\n}\r\n\r\nexport default ListingItem;\r\n","import React from 'react';\r\nimport ListingItem from '../components/ListingItem';\r\nimport { Listing } from '../models/Listing';\r\nimport { Favorite } from '../models/Favorite';\r\nimport { userSession } from '../firebase/Firebase';\r\nimport { useReducer, useEffect } from 'react';\r\nimport { UserContext } from '../models/UserContext';\r\n\r\n\r\ninterface ListingItemContainerProps {\r\n listing: Listing;\r\n userId: string;\r\n onFavorite(event: React.MouseEvent, listing: Listing): any;\r\n favorites: Favorite[];\r\n}\r\n\r\nclass ListingItemContainer extends React.Component {\r\n\r\n static contextType = UserContext;\r\n\r\n constructor(props: ListingItemContainerProps){\r\n super(props);\r\n\r\n }\r\n\r\n public onFavorite(event: React.MouseEvent) {\r\n event.preventDefault();\r\n }\r\n\r\n\r\n public render() {\r\n var {favorites} = this.context;\r\n\r\n\r\n var isFavorited = false;\r\n\r\n if(favorites){\r\n isFavorited = favorites.find((f: Favorite) => f.listingId === this.props.listing.listingId) !== undefined;\r\n }\r\n\r\n return \r\n }\r\n};\r\n\r\n\r\nexport default ListingItemContainer;\r\nListingItemContainer.contextType = UserContext;\r\n","import * as React from 'react';\r\nimport { Helmet} from 'react-helmet';\r\nimport { Listing } from '../models/Listing';\r\nimport { BrokerProfile } from '../models/Broker';\r\n\r\nconst HomeMetaTags = () => {\r\n return (\r\n \r\n JDM Auctions | Find, buy, and import your dream car.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n );\r\n}\r\n\r\nconst AlertsMetaTags = () => {\r\n return (\r\n \r\n JDM Auctions | My Alerts\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n )\r\n}\r\n\r\nexport interface AuctionMetaTagsProps {\r\n listing: Listing;\r\n}\r\n\r\nconst AuctionMetaTags = (props: AuctionMetaTagsProps ) => {\r\n\r\n const imageUrl = `https://p3.aleado.com/pic?system=auto&date=${props.listing.auctionLocationInfo.dateInfo.dateTime}&auct=${props.listing.auctionNumberInfo.auctionNumber}&bid=${props.listing.auctionLocationInfo.lotNumber}&number=1`;\r\n const title = `JGA | ${props.listing.yearInfo.year} ${props.listing.makeAndModelInfo.make} ${props.listing.makeAndModelInfo.model}`;\r\n const url = `https://www.japanglobalauctions.com/auction/${props.listing.uid}`;\r\n return (\r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n )\r\n}\r\n\r\nconst AuctionsMetaTags = () => {\r\n return (\r\n \r\n JDM Auctions | Auctions\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n );\r\n}\r\n\r\nconst FavoritesMetaTags = () => {\r\n return (\r\n \r\n JDM Auctions | Favorites\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst SignupMetaTags = () => {\r\n return (\r\n \r\n Japan Global Auctions | Signup\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst BrokerSignupMetaTags = () => {\r\n return (\r\n \r\n Japan Global Auctions | Become A Broker\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst BrokersMetaTags = () => {\r\n return (\r\n \r\n Japan Global Auctions | All Brokers\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport interface BrokerMetaTagsProps {\r\n broker: BrokerProfile;\r\n}\r\n\r\nconst BrokerMetaTags = (props: BrokerMetaTagsProps) => {\r\n\r\n const title = `Japan Global Auctions | ${props.broker.name}`;\r\n const url = `https://www.japanglobalauctions.com/broker/${props.broker.uri}`;\r\n const image = `https://static.japanglobalauctions.com/profiles/${props.broker.uri}/profile.jpg`;\r\n\r\n return (\r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst ContactUsMetaTags = () => {\r\n return (\r\n \r\n Japan Global Auctions | Contact Us\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\n\r\n\r\nexport {HomeMetaTags, AlertsMetaTags, AuctionMetaTags, AuctionsMetaTags, FavoritesMetaTags, SignupMetaTags, BrokerSignupMetaTags, BrokersMetaTags, BrokerMetaTags, ContactUsMetaTags};","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Row, Col, Label, Input, Button } from 'reactstrap';\r\nimport ReactDOM from 'react-dom';\r\nimport { Listing } from '../models/Listing';\r\nimport ListingItemContainer from './ListingItemContainer';\r\nimport {useHistory} from 'react-router-dom';\r\nimport {HomeMetaTags} from '../components/MetaTags';\r\n\r\nexport interface HomeViewProps {\r\n listings: Listing[],\r\n isLoading: boolean\r\n}\r\n\r\nconst Home = (props: HomeViewProps) => {\r\n \r\n const history = useHistory();\r\n\r\n return (
\r\n \r\n
\r\n
\r\n

JDM Auctions

\r\n

Find, buy, and import your dream car.

\r\n

Start browsing or sign up to save your favorites and get notified of new search results

\r\n \r\n \r\n \r\n
\r\n \"jga-hero\"\r\n
\r\n
\r\n \r\n \r\n
\r\n 1\r\n
\r\n

Browse inventory

\r\n

Find the JDM cars you've always wanted on the world's most comprehensive Japanese auto auction catalog, updated every day

\r\n \r\n \r\n
\r\n 2\r\n
\r\n

Bid on cars

\r\n

Our Japanese auction experts will assist you with the bidding process so you can be sure you're always getting a great deal

\r\n \r\n \r\n
\r\n 3\r\n
\r\n

Bring 'em home

\r\n

We've partnered with licensed auto import brokers to handle the paperwork, all you need to do is make space in your garage

\r\n \r\n
\r\n \r\n \r\n \r\n

Recently added auctions

\r\n \r\n
\r\n \r\n\r\n {props.isLoading?
: props.listings.map((listing: Listing) =>\r\n \r\n
\r\n {}} listing={listing} favorites={[]} />\r\n
\r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n);\r\n}\r\n\r\nexport default connect()(Home);\r\n","import React from 'react';\r\nimport Home from '../components/Home';\r\nimport * as HomeStore from '../store/HomeStore';\r\nimport { ApplicationState } from '../store';\r\nimport { connect } from 'react-redux';\r\nimport { UserContext } from '../models/UserContext';\r\nimport { titleHome } from '../utils/Strings2';\r\n\r\ntype HomeContainerProps = HomeStore.HomeState &\r\n typeof HomeStore.actionCreators;\r\n\r\nclass HomeContainer extends React.Component\r\n{\r\n\r\n constructor(props: HomeContainerProps){\r\n super(props);\r\n document.title = titleHome;\r\n }\r\n\r\n public componentDidMount() {\r\n this.props.getRecentlyAdded();\r\n\r\n\r\n }\r\n\r\n public render()\r\n {\r\n return \r\n }\r\n};\r\n\r\nconst mapStateToProps = (state: ApplicationState) => state.home;\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n HomeStore.actionCreators\r\n)(HomeContainer as any);\r\n","import * as React from 'react';\r\nimport {Badge} from 'reactstrap';\r\nimport { SubfilterCountProps } from './SubfilterCountContainer';\r\n\r\n\r\nconst SubfilterCountView = (props: SubfilterCountProps) => (\r\n props.count > 0 ? {props.count} : null\r\n);\r\n\r\nexport default SubfilterCountView;","import * as React from 'react';\r\nimport SubfilterCountView from '../components/SubfilterCountView';\r\n\r\nexport interface SubfilterCountProps\r\n{\r\n count: number;\r\n}\r\n\r\nexport default class SubfilterCountContainer extends React.Component\r\n{\r\n constructor(props: SubfilterCountProps)\r\n {\r\n super(props);\r\n }\r\n\r\n public render()\r\n {\r\n return ( );\r\n }\r\n};\r\n","import * as React from 'react';\r\n\r\nconst NoResultsHeading = () => (\r\n
\r\n

No results

\r\n

Try adjusting your filter settings, or clear all filters to start again.

\r\n
\r\n)\r\n\r\nexport default NoResultsHeading;","import * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { Listing, MakeEntry, ColorEntry, ModelEntry, MakeRegion, LocationEntry } from '../models/Listing';\r\nimport ListingItem from '../components/ListingItem';\r\nimport ListingItemContainer from '../components/ListingItemContainer';\r\nimport SubfilterCountContainer from '../components/SubfilterCountContainer';\r\nimport { Row, Col, FormGroup, Label, Input, ListGroup, ListGroupItem, UncontrolledCollapse, Badge, Button, ButtonGroup, InputGroup, InputGroupAddon} from 'reactstrap';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faAngleDown, faTimes, faChevronDown, faRssSquare, faCircle } from '@fortawesome/free-solid-svg-icons';\r\nimport SearchParameters from '../models/SearchParameters';\r\nimport ScoreInfoConverter from '../converters/ScoreInfoConverter';\r\nimport Select from 'react-select';\r\nimport NoResultsHeading from './NoResultsHeading';\r\nimport * as _ from 'lodash';\r\nimport GenericModalContainer, { ModalType } from './GenericModalContainer';\r\nimport LoginContainer from './LoginContainer';\r\nimport { UserContext } from '../models/UserContext';\r\nimport { AuctionsMetaTags } from './MetaTags';\r\nimport { NotificationContext, Notification } from '../models/NotificationContext';\r\n\r\ninterface ListingViewProps {\r\n isLoading: boolean;\r\n isLoadingMoreResults: boolean;\r\n isFilteredResults: boolean;\r\n isFilteringResults: boolean;\r\n isViewAllOpen: boolean;\r\n filterCount: number;\r\n listings: Listing[];\r\n makes: MakeRegion;\r\n models: ModelEntry[];\r\n locations: LocationEntry[];\r\n modelValues: ModelEntry[];\r\n colors: ColorEntry[];\r\n searchParams: SearchParameters;\r\n updateMakes(event: React.FormEvent): any;\r\n updateModels(value: any, actionMeta: any): any;\r\n updateColors(event: React.FormEvent): any;\r\n updateLocations(event: React.FormEvent): any;\r\n updateMinYear(event: React.FormEvent): any;\r\n updateMaxYear(event: React.FormEvent): any;\r\n updateMinOdom(event: React.FormEvent): any;\r\n updateMaxOdom(event: React.FormEvent): any;\r\n updateMinDisplacement(event: React.FormEvent): any;\r\n updateMaxDisplacement(event: React.FormEvent): any;\r\n updateLotNumber(event: React.FormEvent): any;\r\n updateScore(event: React.FormEvent): any;\r\n updateRChecked(event: React.FormEvent): any;\r\n updateRAChecked(event: React.FormEvent): any;\r\n updateGearType(event: React.FormEvent): any;\r\n clearFilters(event: React.MouseEvent): any;\r\n toggleViewAll(event: React.MouseEvent): any;\r\n onFavorite(event: React.MouseEvent, listing: Listing): any;\r\n onAlert(event: React.MouseEvent): any;\r\n updateAlertName(event: React.FormEvent): any;\r\n minYear: string;\r\n maxYear: string;\r\n minOdom: string;\r\n maxOdom: string;\r\n minDisplacement: string;\r\n maxDisplacement: string;\r\n lotNumber: string;\r\n alertErrorMsg: string;\r\n alertName: string;\r\n}\r\n\r\nconst ListingView = (props: ListingViewProps) => {\r\n \r\n const [loginModal, setLoginModal] = React.useState(false);\r\n const toggle = () => setLoginModal(!loginModal);\r\n\r\n const filterCount = props.filterCount > 0 ? ({props.filterCount} active) : null;\r\n const yearCount = props.searchParams.minYear === 0 ? props.searchParams.maxYear === 0 ? 0 : 1 : props.searchParams.maxYear === 0 ? 1 : 2;\r\n const odomCount = props.searchParams.minOdom === 0 ? props.searchParams.maxOdom === 0 ? 0 : 1 : props.searchParams.maxOdom === 0 ? 1 : 2;\r\n const dispCount = props.searchParams.minDisplacement === 0 ? props.searchParams.maxDisplacement === 0 ? 0 : 1 : props.searchParams.maxDisplacement === 0 ? 1 : 2;\r\n const {user} = React.useContext(UserContext);\r\n // const {addNotification} = React.useContext(NotificationContext);\r\n\r\n const closeLogin = () => {\r\n setLoginModal(false);\r\n }\r\n\r\n \r\n return (\r\n props.isLoading ?
: !props.listings \r\n ? (null) \r\n : ( \r\n \r\n \r\n
\r\n
\r\n
\r\n

Filters

\r\n clear all {filterCount} \r\n view all \r\n
\r\n
\r\n \r\n \r\n Make / Manufacturer \r\n \r\n \r\n {Object.keys(props.makes).map((key:string,index: number) => (\r\n
\r\n {key}\r\n {props.makes[key].map((makeEntry: MakeEntry) =>\r\n \r\n \r\n \r\n )}\r\n
\r\n ))}\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n Odometer \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n Displacement \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n Auction Score \r\n \r\n \r\n \r\n \r\n {Array.from({ length: 10},( v, i) => i).slice(4, 10).filter(i => i !== 6 && i !== 8).map((idx : number) =>\r\n \r\n \r\n \r\n )} {/* S and above */}\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n Color \r\n \r\n\r\n \r\n \r\n \r\n {props.colors.map((colorEntry: ColorEntry) => \r\n \r\n )}\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n Transmission \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* Auction House \r\n \r\n \r\n {props.locations.map((locationEntry: LocationEntry) =>\r\n \r\n \r\n \r\n )}\r\n \r\n */}\r\n\r\n {/* \r\n Create an alert\r\n \r\n \r\n \r\n \r\n \r\n {props.alertErrorMsg && }\r\n

Get daily email alerts with new results that match the above filter criteria

\r\n
\r\n \r\n \r\n\r\n \r\n\r\n
\r\n
*/}\r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n {props.isFilteringResults ?\r\n \r\n
\r\n \r\n :\r\n \r\n {props.listings.length === 0 ? \r\n \r\n \r\n : \r\n
\r\n {props.listings.map((listing: Listing) =>\r\n
\r\n \r\n
\r\n\r\n )}\r\n
\r\n}\r\n {props.isLoadingMoreResults ?\r\n
\r\n :\r\n
\r\n }\r\n \r\n\r\n }\r\n\r\n
\r\n )\r\n );\r\n}\r\n\r\nexport default ListingView;\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport * as _ from 'lodash';\r\n\r\nimport ListingView from '../components/ListingView';\r\nimport { ModelEntry, Listing } from '../models/Listing';\r\nimport SearchParameters from '../models/SearchParameters';\r\nimport {isEmpty} from '../utils/SearchParameterUtils';\r\n\r\nimport { ApplicationState } from '../store';\r\nimport * as ListingStore from '../store/ListingStore';\r\nimport {firebase, userSession} from '../firebase/Firebase';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport {withRouter} from 'react-router-dom';\r\nimport { AuctionsMetaTags } from './MetaTags';\r\nimport { titleAuctions } from '../utils/Strings2';\r\n\r\n\r\ntype ListingContainerProps = ListingStore.ListingContainerState &\r\n typeof ListingStore.actionCreators & RouteComponentProps;\r\n\r\nclass ListingContainer extends React.Component {\r\n\r\n private mScrollReference: any;\r\n private m_debounceSearch: any;\r\n\r\n constructor(props: any){\r\n super(props);\r\n\r\n document.title = titleAuctions;\r\n this.trackScrolling = this.trackScrolling.bind(this);\r\n this.updateSearchParams = this.updateSearchParams.bind(this);\r\n this.clearFilters = this.clearFilters.bind(this);\r\n this.updateModels = this.updateModels.bind(this);\r\n this.toggleViewAll = this.toggleViewAll.bind(this);\r\n this.updateModelsView = this.updateModelsView.bind(this);\r\n this.updateAlertName = this.updateAlertName.bind(this);\r\n this.onFavorite = this.onFavorite.bind(this);\r\n this.onAlert = this.onAlert.bind(this);\r\n this.mScrollReference = _.throttle(this.trackScrolling, 1000);\r\n this.m_debounceSearch = _.debounce(this.props.sendSearchParameters, 800);\r\n\r\n \r\n \r\n this.state = {\r\n modelValues: this.updateModelsView(),\r\n isViewAllOpen: false,\r\n alertName: \"\"\r\n }\r\n\r\n var newParams = Object.assign({}, this.props.searchParams, {pageId: 0 });\r\n this.props.sendSearchParameters(newParams);\r\n }\r\n\r\n public componentDidMount() {\r\n\r\n window.addEventListener('scroll', this.mScrollReference);\r\n\r\n if(_.isEmpty(this.props.makes)){\r\n this.props.requestFilterData(`auctions/PostMakes`, 'makes');\r\n }\r\n if(this.props.models.length === 0){\r\n this.props.requestFilterData(`auctions/PostModels`, 'models');\r\n }\r\n if(this.props.colors.length === 0){\r\n this.props.requestFilterData(`auctions/PostColors`, 'colors');\r\n }\r\n //if(this.props.locations.length === 0){\r\n // this.props.requestFilterData(`auctions/PostLocations`, 'locations');\r\n //}\r\n }\r\n\r\n public updateSearchParams(event: React.FormEvent)\r\n {\r\n const {name, value, type, checked} = event.currentTarget;\r\n var updatedParams;\r\n\r\n if(name === \"makes\" && type === \"checkbox\")\r\n {\r\n var updatedMakes;\r\n if(checked)\r\n {\r\n updatedMakes = this.props.searchParams.makes;\r\n updatedMakes.push(+value);\r\n updatedParams = Object.assign({}, this.props.searchParams, { makes: updatedMakes}, {pageId: 0});\r\n }\r\n else\r\n {\r\n updatedMakes = this.props.searchParams.makes.filter(m => m !== +value);\r\n updatedParams = Object.assign({}, this.props.searchParams, { makes: this.props.searchParams.makes.filter(m => m !== +value) }, {pageId: 0 });\r\n }\r\n }\r\n else if(name === \"colors\" && type === \"checkbox\")\r\n {\r\n if(checked)\r\n {\r\n var updatedColors = this.props.searchParams.colors;\r\n updatedColors.push(+value);\r\n updatedParams = Object.assign({}, this.props.searchParams, {colors: updatedColors}, {pageId: 0});\r\n }\r\n else\r\n {\r\n updatedParams = Object.assign({}, this.props.searchParams, {colors: this.props.searchParams.colors.filter(c => c !== +value)}, {pageId: 0});\r\n }\r\n }\r\n else if(name === \"locations\" && type === \"checkbox\")\r\n {\r\n if(checked)\r\n {\r\n var updatedLocations = this.props.searchParams.locations;\r\n updatedLocations.push(+value);\r\n updatedParams = Object.assign({}, this.props.searchParams, {locations: updatedLocations}, {pageId: 0});\r\n }\r\n else\r\n {\r\n updatedParams = Object.assign({}, this.props.searchParams, {locations: this.props.searchParams.locations.filter(c => c !== +value)}, {pageId: 0});\r\n }\r\n }\r\n else if(type === \"text\")\r\n {\r\n var parsed = parseInt(value);\r\n parsed = (isNaN(parsed)) ? 0 : parsed;\r\n updatedParams = Object.assign({}, this.props.searchParams, {[name]: parsed}, {pageId: 0});\r\n\r\n this.props.setText(name, value);\r\n this.props.debounceSearchParameters(updatedParams);\r\n return;\r\n }\r\n else if(type === \"checkbox\")\r\n {\r\n updatedParams = Object.assign({}, this.props.searchParams, {[name]: checked }, {pageId: 0});\r\n }\r\n else if(type === \"radio\")\r\n {\r\n updatedParams = Object.assign({}, this.props.searchParams, {[name]: +value}, {pageId: 0});\r\n }\r\n \r\n this.props.sendSearchParameters(updatedParams);\r\n }\r\n public clearFilters(event: React.MouseEvent){\r\n event.preventDefault();\r\n \r\n const clearedParams: SearchParameters = { makes: [], models: [], colors: [], locations: [], pageId: 0, minYear: 0, maxYear: 0, minOdom: 0, maxOdom: 0, gearType: 0, score: 0, isRAchecked: false, isRchecked: false, minDisplacement: 0, maxDisplacement: 0, lotNumber: 0 };\r\n\r\n this.props.clearFilters();\r\n this.setState({modelValues: []});\r\n this.props.sendSearchParameters(clearedParams);\r\n\r\n }\r\n\r\n public updateAlertName(event: React.FormEvent){\r\n this.setState({alertName: event.currentTarget.value});\r\n }\r\n\r\n public toggleViewAll(event: React.MouseEvent){\r\n this.setState((prevState) => ({ isViewAllOpen: !prevState.isViewAllOpen }));\r\n var elemFilterscontainer = document.getElementsByClassName('filters-container')[0];\r\n var elemFiltersinner = document.getElementsByClassName('filters-inner')[0];\r\n var icon = document.getElementsByClassName('expandFiltersIcon')[0];\r\n var elemBody= document.getElementsByTagName('BODY')[0];\r\n\r\n if (elemFilterscontainer == null || elemFiltersinner == null || icon == null || elemBody == null)\r\n return;\r\n\r\n if(this.state.isViewAllOpen)\r\n {\r\n elemFilterscontainer.setAttribute(\"style\", \"\");\r\n elemFiltersinner.setAttribute(\"style\", \"overflow-y: hidden;\");\r\n icon.setAttribute(\"style\", \"\");\r\n elemBody.setAttribute(\"style\", \"\");\r\n \r\n }\r\n else { \r\n elemFilterscontainer.setAttribute(\"style\", \"height: 100vh; z-index:10; padding-bottom:2em; margin-bottom:2em;\");\r\n elemFiltersinner.setAttribute(\"style\", \"margin-bottom:2em;\");\r\n icon.setAttribute(\"style\", \"transform: rotate(180deg)\");\r\n elemBody.setAttribute(\"style\", \"overflow:hidden\");\r\n \r\n }\r\n }\r\n\r\n\r\n public componentWillUnmount() {\r\n window.removeEventListener('scroll', this.mScrollReference);\r\n }\r\n\r\n public updateModels(value: ModelEntry[], actionMeta: any)\r\n {\r\n var newModels = value !== null ? value.map(v => v.id) : [];\r\n this.setState({ modelValues: value});\r\n var modelParams = Object.assign({}, this.props.searchParams, {models: newModels}, {pageId: 0});\r\n this.props.sendSearchParameters(modelParams);\r\n }\r\n\r\n \r\n public updateModelsView()\r\n {\r\n const modelIds = this.props.searchParams.models;\r\n\r\n let values: ModelEntry[] = [];\r\n for(let i = 0; i < modelIds.length; i++)\r\n { \r\n let val = this.props.models.find(obj => {\r\n return obj.id === modelIds[i];\r\n });\r\n\r\n if(val !== undefined)\r\n values.push(val);\r\n\r\n }\r\n return values;\r\n }\r\n\r\n public onFavorite(event: React.MouseEvent, listing: Listing)\r\n {\r\n event.preventDefault();\r\n\r\n var currentUser = firebase.auth().currentUser;\r\n\r\n if(currentUser != null){\r\n this.props.onFavorite(listing, currentUser.uid);\r\n }\r\n else {\r\n this.props.history.push(\"/accounts/login\");\r\n }\r\n }\r\n\r\n public onAlert(event: React.MouseEvent)\r\n {\r\n event.preventDefault();\r\n if(this.state.alertName.length > 25)\r\n {\r\n this.props.onAlertError(\"Alert name must be less than 25 characters\");\r\n return;\r\n }\r\n if(this.state.alertName.length < 2)\r\n {\r\n this.props.onAlertError(\"Alert name must be at least 2 characters\");\r\n return;\r\n }\r\n\r\n if(isEmpty(this.props.searchParams))\r\n {\r\n this.props.onAlertError(\"Please select at least one filter criteria\");\r\n return;\r\n }\r\n\r\n\r\n var currentUser = firebase.auth().currentUser;\r\n\r\n if(currentUser != null)\r\n {\r\n this.props.onAlert(this.props.searchParams, currentUser.uid, this.state.alertName);\r\n }\r\n else {\r\n this.props.history.push(\"/accounts/login\");\r\n }\r\n }\r\n\r\n public render() {\r\n return (
)\r\n }\r\n\r\n\r\n private trackScrolling(ev: Event){\r\n\r\n if(this.props.isLoadingMoreResults)\r\n return;\r\n //THIS WONT WORK WITH SMALLER WINDOWS, WILL CAAUSE RESULTS NOT TO SHOW\r\n //var gridContainer = document.querySelector('.grid-container');\r\n \r\n if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight - 1000) {//figure out better height system\r\n \r\n if(this.props.listings.length >= this.props.listingCount)\r\n {\r\n return;\r\n }\r\n \r\n this.props.updateScrolling(this.props.searchParams);\r\n }\r\n }\r\n \r\n}\r\n\r\nconst mapStateToProps = (state: ApplicationState) => state.listings;\r\n\r\nexport default withRouter(connect(\r\n mapStateToProps,\r\n ListingStore.actionCreators\r\n)(ListingContainer));\r\n","import SearchParameters from \"../models/SearchParameters\";\r\n\r\nexport function isEmpty(searchParameters: SearchParameters) : boolean {\r\n return searchParameters.makes.length === 0 && searchParameters.models.length === 0 && searchParameters.locations.length === 0 &&\r\n searchParameters.colors.length === 0 && searchParameters.gearType === 0 && searchParameters.score === 0 \r\n && searchParameters.minOdom === 0 && searchParameters.maxOdom === 0 && searchParameters.minYear === 0 && searchParameters.lotNumber === 0\r\n && searchParameters.maxYear === 0 && searchParameters.minDisplacement === 0 && searchParameters.maxDisplacement === 0;\r\n\r\n}","import * as React from 'react';\r\nimport { Badge} from 'reactstrap';\r\nimport { ScoreInfoConverter } from '../converters/ScoreInfoConverter';\r\nimport { BadgeProps } from './BadgeContainer';\r\n\r\nconst BadgeView = (props : BadgeProps) => {\r\n\r\n return ( \r\n {props.outerText}\r\n \r\n \r\n \r\n \r\n\r\n );\r\n\r\n}\r\n\r\n\r\nexport default BadgeView;","import React from 'react';\r\nimport BadgeView from '../components/BadgeView';\r\n\r\nexport interface BadgeProps {\r\n isIntExtScore?: boolean;\r\n score: number;\r\n outerText: string;\r\n color?: string;\r\n \r\n}\r\n\r\nexport default class BadgeContainer extends React.Component\r\n{\r\n constructor(props: BadgeProps) {\r\n super(props);\r\n\r\n this.state = {\r\n color: \"primary\"\r\n }\r\n }\r\n\r\n public componentDidMount()\r\n {\r\n if(this.props.isIntExtScore){\r\n if(this.props.score <= 2)\r\n {\r\n this.setState({color: \"success\"});\r\n }\r\n else if(this.props.score <= 4)\r\n {\r\n this.setState({color: \"warning\"});\r\n }\r\n else\r\n {\r\n this.setState({color: \"danger\"});\r\n }\r\n }\r\n\r\n\r\n }\r\n\r\n public render()\r\n { \r\n return this.props.score !== 0 ?\r\n : null;\r\n\r\n }\r\n\r\n\r\n}","import * as React from 'react';\r\n\r\nimport { Listing } from '../models/Listing';\r\nimport GearInfoConverter from '../converters/GearInfoConverter';\r\nimport RelatedVehiclesContainer from '../components/RelatedVehiclesContainer';\r\nimport BadgeContainer from '../components/BadgeContainer';\r\nimport { Container, Row, Col, Button, Table, Form, FormGroup, Label, Input, FormText, ListGroup, ListGroupItem} from 'reactstrap';\r\nimport { Carousel } from 'react-responsive-carousel';\r\nimport \"react-responsive-carousel/lib/styles/carousel.min.css\";\r\nimport CopyToClipboard from 'react-copy-to-clipboard';\r\nimport * as _ from 'lodash';\r\nimport { useState } from 'react';\r\nimport { useContext } from 'react';\r\nimport { UserContext } from '../models/UserContext';\r\nimport BrokerRequest, { BrokerProfile } from '../models/Broker';\r\nimport {CountryDropdown} from 'react-country-region-selector';\r\nimport GoogleMapContainer from '../components/GoogleMapContainer';\r\nimport { Marker } from 'react-google-maps';\r\nimport GenericModalContainer, { ModalType } from './GenericModalContainer';\r\nimport LoginContainer from './LoginContainer';\r\nimport {ErrorMessage, ErrorType } from '../models/Error';\r\nimport { reduce } from 'lodash';\r\nimport { AuctionMetaTags } from './MetaTags';\r\nimport {InputGroup, InnerInputGroup, CountryDropdownGroup} from '../components/InputGroup';\r\nimport { validationErrorFullName, validationErrorEmail, validationErrorCountry } from '../utils/Strings2';\r\n\r\nexport interface ListingPageProps {\r\n listing: Listing;\r\n imageSrc: string[] | undefined;\r\n brokerRequest: BrokerRequest;\r\n brokerProfiles: BrokerProfile[];\r\n isLinkCopied: boolean;\r\n isLoading: boolean;\r\n isFavorited: boolean;\r\n selectedBrokerId: number;\r\n latitude: number;\r\n longitude: number;\r\n errorMsg: ErrorMessage[];\r\n share(): any;\r\n resetLinkState(): any;\r\n removeBroken(event: React.SyntheticEvent): any; \r\n updateBrokerRequest(event: React.FormEvent): any;\r\n updateSelectedBroker(event: React.MouseEvent, brokerId: number): any;\r\n updateCountry(value: string, e: React.ChangeEvent | undefined): any;\r\n sendBrokerRequest(): any;\r\n onValidate(): boolean;\r\n}\r\n\r\n\r\n\r\nconst ListingPage = (props: ListingPageProps) => {\r\n\r\n const {addFavorite, removeFavorite, user} = useContext(UserContext);\r\n\r\n \r\n const [loginModal, setLoginModal] = useState(false);\r\n const toggleLogin = () => setLoginModal(!loginModal);\r\n\r\n const item = window.sessionStorage.getItem(\"favorites\");\r\n\r\n var favorites:any = [];\r\n if(item != null)\r\n {\r\n favorites = JSON.parse(item);\r\n }\r\n\r\n const favoriteHandler = favorites.includes(props.listing.listingId)? { removeFavorite(e, props.listing) }} > : { if(!user){ e.preventDefault(); toggleLogin(); } else { addFavorite(e, props.listing)}}} >;\r\n const favoriteLabel = favorites.includes(props.listing.listingId) ? : null;\r\n\r\n var images;\r\n if(props.imageSrc !== undefined)\r\n {\r\n images = props.imageSrc.map((im, index) => {\r\n return
\r\n {`photo${index}`}\r\n
\r\n });\r\n }\r\n\r\n const usdToJpyRate = .009;\r\n const usdFormatter = Intl.NumberFormat('en-US', {style: 'currency', currency: 'USD', minimumFractionDigits: 0});\r\n const jpyFormatter = Intl.NumberFormat('en-US', {style: 'currency', currency: 'JPY', minimumFractionDigits: 0 });\r\n\r\n const [modal, setModal] = useState(false);\r\n const toggle = () => setModal(!modal);\r\n\r\n const closeLogin = () => {\r\n setLoginModal(false);\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n const modelName = (props.listing.modelCodeName != null) ? props.listing.modelCodeName.toUpperCase() : null;\r\n\r\n return props.isLoading ? \r\n
\r\n :\r\n \r\n \r\n \r\n {/* this div only visible on mobile/tablet, so the headings appear above the images */}\r\n \r\n \r\n
{props.listing.yearInfo.year} {props.listing.makeAndModelInfo.make}
\r\n

{props.listing.makeAndModelInfo.model} {modelName}

\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n {favoriteHandler}\r\n {favoriteLabel}\r\n \r\n {images}\r\n \r\n
\r\n \r\n {/* { props.latitude === 0.0 && props.longitude === 0.0 ? null :\r\n
\r\n \r\n \r\n \r\n
\r\n } */}\r\n \r\n\r\n \r\n \r\n \r\n
{/* this div only visible on desktop, so the headings appear in the right column */}\r\n
{props.listing.yearInfo.year} {props.listing.makeAndModelInfo.make}
\r\n

{props.listing.makeAndModelInfo.model} {modelName}

\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n {/* */}\r\n \r\n \r\n \r\n {props.isLinkCopied ? Link copied : null }\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Odometer{props.listing.mileageInfo.mileage} km
Transmission
Displacement{props.listing.displacementInfo.displacement} cc
Model Code{props.listing.modelCode}
Location{props.listing.auctionLocationInfo.location}
Lot No.{props.listing.auctionLocationInfo.lotNumber}
Starting Bid {jpyFormatter.format(props.listing.startPriceInfo.price)} YEN ({usdFormatter.format(props.listing.startPriceInfo.price * usdToJpyRate)} USD)
Auction Date{new Date(props.listing.auctionLocationInfo.dateInfo.dateTime).toLocaleDateString()} {new Date(props.listing.auctionLocationInfo.dateInfo.dateTime).toLocaleTimeString()}
\r\n \r\n
\r\n {/* */}\r\n \r\n\r\n \r\n Let's get you connected with a broker to begin the bidding process. We'll need the following information to get started:\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n \r\n Please select the country you're importing to—this will help us get you the right broker.\r\n \r\n \r\n\r\n \r\n \r\n\r\n\r\n {/* \r\n \r\n msg.errorType === ErrorType.FullName) ? \"validation-error-input\" : \"\"} placeholder=\"Your first and last name\" onChange={props.updateBrokerRequest} required={true} />\r\n {props.errorMsg.find((msg) => msg.errorType === ErrorType.FullName) && }\r\n \r\n \r\n \r\n msg.errorType === ErrorType.Email) ? \"validation-error-input\" : \"\"} placeholder=\"email@example.com\" onChange={props.updateBrokerRequest} />\r\n {props.errorMsg.find((msg) => msg.errorType === ErrorType.Email) && }\r\n \r\n \r\n \r\n \r\n msg.errorType === ErrorType.Country) ? \"validation-error-input\" : \"\"} value={props.brokerRequest.country} onChange={props.updateCountry} />\r\n \r\n \r\n Please select the country you're importing to—this will help us get you the right broker.\r\n \r\n {props.errorMsg.find((msg) => msg.errorType === ErrorType.Country) && }\r\n \r\n \r\n \r\n \r\n */}\r\n \r\n By filling out this form you're consenting to be contacted by one of our affiliated brokers.\r\n \r\n \r\n \r\n \r\n \r\n

Select a broker (optional)

\r\n\r\n { props.brokerProfiles.length === 0 ? \r\n
Thanks for your interest. Currently there are no brokers in your region, but we're adding more brokers all time. Fill out your contact details on the left and we'll connect you to a broker that can work with you.
\r\n : \r\n {props.brokerProfiles.map((broker: BrokerProfile) =>\r\n \r\n \r\n \r\n \"profile\"\r\n \r\n \r\n {/* */}\r\n

{broker.name}

\r\n

{broker.city}, {broker.countryCode}

\r\n \r\n
\r\n
\r\n\r\n \r\n )}\r\n
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n }\r\n \r\n\r\nexport default ListingPage;","import * as React from 'react';\r\nimport Container from 'reactstrap/lib/Container';\r\nimport Row from 'reactstrap/lib/Row';\r\nimport Col from 'reactstrap/lib/Col';\r\n\r\nconst View404 = () => (\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
Error 404: page not found
\r\n

Whoops—looks like you took a wrong turn

\r\n

We couldn't find that page. The links below should help you get back on the track.

\r\n
\r\n View all auctions\r\n
\r\n Back to home\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )\r\n\r\nexport default View404;","import React from 'react';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport ListingPage from '../components/ListingPage';\r\nimport * as _ from 'lodash';\r\nimport { UserContext } from '../models/UserContext';\r\nimport { Favorite } from '../models/Favorite';\r\nimport * as ListingPageStore from '../store/ListingPageStore';\r\nimport { ApplicationState } from '../store';\r\nimport { connect } from 'react-redux';\r\nimport { ErrorMessage, ErrorType } from '../models/Error';\r\nimport View404 from './View404';\r\n\r\n\r\ntype ListingPageContainerProps = ListingPageStore.ListingPageState & typeof ListingPageStore.actionCreators & RouteComponentProps<{uid: string}>;\r\n\r\n\r\n\r\nclass ListingPageContainer extends React.Component {\r\n\r\n constructor(props: ListingPageContainerProps){\r\n super(props);\r\n\r\n this.updateSelectedBroker = this.updateSelectedBroker.bind(this);\r\n this.updateBrokerRequest = this.updateBrokerRequest.bind(this);\r\n this.sendBrokerRequest = this.sendBrokerRequest.bind(this);\r\n this.updateCountry = this.updateCountry.bind(this);\r\n this.onValidate = this.onValidate.bind(this);\r\n }\r\n\r\n public componentWillReceiveProps(props: ListingPageContainerProps) {\r\n if(this.props.uid !== props.match.params.uid){\r\n this.props.setErrorMessage([]);\r\n this.props.updateListing(props.match.params.uid);\r\n window.scrollTo(0,0);\r\n \r\n }\r\n }\r\n\r\n public componentDidMount(){\r\n window.scrollTo(0,0);\r\n this.props.updateListing(this.props.match.params.uid);\r\n // this.props.getBrokerProfiles();\r\n this.props.setErrorMessage([]);\r\n }\r\n\r\n public updateBrokerRequest(event: React.FormEvent) {\r\n const {name, value} = event.currentTarget;\r\n this.props.updateBrokerRequest(Object.assign({}, this.props.brokerRequest, {[name]: value}));\r\n }\r\n\r\n public updateCountry(value: string, e: React.ChangeEvent | undefined)\r\n {\r\n this.props.updateBrokerRequest(Object.assign({}, this.props.brokerRequest, {country: value}));\r\n }\r\n\r\n public sendBrokerRequest()\r\n {\r\n this.props.sendBrokerRequest(this.props.brokerRequest); \r\n }\r\n\r\n public onValidate(): boolean {\r\n \r\n var errorMsgs: ErrorMessage[] = [];\r\n\r\n this.props.setErrorMessage(errorMsgs);\r\n\r\n\r\n if(this.props.brokerRequest.name === \"\"){\r\n errorMsgs.push(new ErrorMessage(ErrorType.FullName, \"Please enter your name.\"));\r\n }\r\n if(this.props.brokerRequest.email === \"\"){\r\n errorMsgs.push(new ErrorMessage(ErrorType.Email, \"Please enter a valid email address.\"));\r\n }\r\n if(this.props.brokerRequest.country === \"\"){\r\n errorMsgs.push(new ErrorMessage(ErrorType.Country, \"Please select a country.\"));\r\n }\r\n\r\n this.props.setErrorMessage(errorMsgs);\r\n return errorMsgs.length == 0;\r\n }\r\n\r\n public updateSelectedBroker(event: React.MouseEvent, brokerId: number)\r\n {\r\n this.props.updateBrokerRequest(Object.assign({}, this.props.brokerRequest, {brokerId: (this.props.brokerRequest.brokerId == brokerId) ? 0 : +brokerId}));\r\n }\r\n\r\n\r\n public render() {\r\n\r\n var {favorites} = this.context;\r\n var isFavorited = false;\r\n\r\n if (favorites !== []) {\r\n isFavorited = favorites.find((f: Favorite) => f.listingId === this.props.listing.listingId) !== undefined;\r\n }\r\n\r\n return ( this.props.isLoading || this.props.successful ? : \r\n )\r\n }\r\n\r\n}\r\nListingPageContainer.contextType = UserContext;\r\n\r\nconst mapStateToProps = (state: ApplicationState) => state.listingPage;\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n ListingPageStore.actionCreators\r\n)(ListingPageContainer as any);\r\n","import React from 'react';\r\nimport {FormGroup, Form, Label, Input, FormText, Button, Container, Row, Col} from 'reactstrap';\r\nimport { SignupMetaTags } from './MetaTags';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { ErrorMessage, ErrorType } from '../models/Error';\r\nimport { validationErrorEmail, validationErrorPassword, validationErrorConfirmPassword } from '../utils/Strings2';\r\nimport { InputGroup } from './InputGroup';\r\n\r\nexport interface SignupViewProps {\r\n onSubmit(): any,\r\n updateState(event: React.FormEvent): any,\r\n username: string,\r\n password: string,\r\n confirmPassword: string,\r\n errorMsg: string,\r\n errorMsgs: ErrorMessage[],\r\n isLoggedIn: boolean\r\n}\r\n\r\nconst SignupView = (props: SignupViewProps) => {\r\n\r\n const history = useHistory();\r\n\r\n if(props.isLoggedIn)\r\n {\r\n if(history.location.pathname === \"/\"){\r\n window.location.reload();\r\n }\r\n else {\r\n history.push(\"/\");\r\n }\r\n\r\n return null;\r\n }\r\n\r\n\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n

Save your favorite cars, create custom alerts, and more

\r\n

Create your free account and you'll be able to save auctions to your favorites page as well as create email alerts for your custom search criteria. That way you'll be the first to know about rare finds!

\r\n \r\n \r\n

Sign up, it's free

\r\n
\r\n \r\n\r\n \r\n\r\n \r\n \r\n {props.errorMsg &&
{props.errorMsg}
}\r\n\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default SignupView;","import React from 'react';\r\nimport { ApplicationState } from '../store';\r\nimport { connect } from 'react-redux';\r\nimport * as SignupStore from '../store/SignupStore';\r\nimport {firebase} from '../firebase/Firebase';\r\n\r\nimport SignupView from '../components/SignupView';\r\nimport { Redirect } from 'react-router';\r\nimport { ErrorMessage, ErrorType } from '../models/Error';\r\nimport { titleSignup } from '../utils/Strings2';\r\n\r\ntype SignupContainerProps = SignupStore.SignupState &\r\n typeof SignupStore.actionCreators;\r\n\r\nclass SignupContainer extends React.Component {\r\n\r\n constructor(props: any) {\r\n super(props);\r\n document.title = titleSignup;\r\n\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n this.updateState = this.updateState.bind(this);\r\n\r\n this.state = {\r\n isLoggedIn: false,\r\n errorMsgs: []\r\n }\r\n\r\n\r\n }\r\n\r\n public componentDidMount(){\r\n firebase.auth().onAuthStateChanged((user) => {\r\n if(user){\r\n this.setState({isLoggedIn: true});\r\n }\r\n\r\n });\r\n }\r\n\r\n public render() {\r\n return \r\n }\r\n\r\n public onSubmit() {\r\n\r\n \r\n let msgs: ErrorMessage[] = [];\r\n this.setState({errorMsgs: msgs});\r\n\r\n if(this.props.email === \"\") { msgs.push(new ErrorMessage(ErrorType.Email, \"Please fill out your email\")); }\r\n if(this.props.password === \"\") {msgs.push(new ErrorMessage(ErrorType.Password, \"Please enter a password\")); }\r\n if(this.props.confirmPassword === \"\") {msgs.push(new ErrorMessage(ErrorType.ConfirmPassword, \"Please confirm your password\")); }\r\n\r\n if(msgs.length > 0){\r\n this.setState({errorMsgs: msgs});\r\n return;\r\n }\r\n\r\n this.props.onSubmit(this.props.email, this.props.password, this.props.confirmPassword);\r\n }\r\n\r\n public updateState(event: React.FormEvent) {\r\n const {name, value} = event.currentTarget;\r\n this.props.updateState(name, value);\r\n\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (state: ApplicationState) => state.signup;\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n SignupStore.actionCreators\r\n)(SignupContainer as any);","import React from 'react';\r\nimport {firebase} from '../firebase/Firebase';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { reducers } from '../store';\r\nimport { useReducer } from 'react';\r\n\r\nexport default class LogoutContainer extends React.Component<{}, {isLoggedOut: boolean }>{\r\n\r\n constructor(props: any){\r\n super(props);\r\n\r\n this.state = {\r\n isLoggedOut: false\r\n }\r\n\r\n firebase.auth().onAuthStateChanged((user) => {\r\n\r\n var isLoggedOut = !user ? true: false;\r\n this.setState({isLoggedOut: isLoggedOut});\r\n });\r\n \r\n firebase.auth().signOut();\r\n\r\n }\r\n\r\n public render() {\r\n return !this.state.isLoggedOut ?

Logging Out..

: \r\n }\r\n}","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Row, Col, Label, Input, Button, Badge } from 'reactstrap';\r\nimport ReactDOM from 'react-dom';\r\nimport { Listing } from '../models/Listing';\r\nimport { Redirect } from 'react-router';\r\nimport { UserContext } from '../models/UserContext';\r\nimport { useContext } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport GearInfoConverter from '../converters/GearInfoConverter';\r\nimport ScoreInfoConverter from '../converters/ScoreInfoConverter';\r\n\r\nexport interface FavoritesViewProps {\r\n isLoading: boolean,\r\n favorites: Listing[]\r\n removeFavorite(event: React.MouseEvent, favorite: Listing): any\r\n}\r\n\r\nconst FavoritesView = (props: FavoritesViewProps) => {\r\n\r\n const {removeFavorite} = useContext(UserContext);\r\n\r\n\r\n return ( props.isLoading ?
:\r\n
\r\n {props.favorites.map((favorite: Listing) => (\r\n \r\n
\r\n \r\n
\r\n
\r\n \"photo1\" \r\n
\r\n
\r\n
{favorite.yearInfo.year} {favorite.makeAndModelInfo.make}
\r\n

{favorite.makeAndModelInfo.model}

\r\n
\r\n
\r\n {favorite.mileageInfo.mileage} km\r\n
\r\n
\r\n \r\n
\r\n
\r\n Score: \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n )\r\n )}\r\n
\r\n )\r\n};\r\n\r\nexport default FavoritesView;","import React from 'react';\r\nimport * as FavoritesStore from '../store/FavoritesStore';\r\nimport { ApplicationState } from '../store';\r\nimport { connect } from 'react-redux';\r\nimport FavoritesView from '../components/FavoritesView';\r\nimport {firebase} from '../firebase/Firebase';\r\nimport { Listing } from '../models/Listing';\r\nimport Row from 'reactstrap/lib/Row';\r\nimport Col from 'reactstrap/lib/Col';\r\nimport { FavoritesMetaTags } from './MetaTags';\r\nimport { titleFavorites } from '../utils/Strings2';\r\n\r\ntype FavoritesContainerProps = FavoritesStore.FavoritesState &\r\ntypeof FavoritesStore.actionCreators;\r\n\r\nclass FavoritesContainer extends React.Component {\r\n\r\n constructor(props: FavoritesContainerProps){\r\n super(props);\r\n document.title = titleFavorites;\r\n this.onRemoveFavorite = this.onRemoveFavorite.bind(this);\r\n }\r\n\r\n public componentDidMount()\r\n {\r\n window.scrollTo(0,0);\r\n\r\n firebase.auth().onAuthStateChanged((user) => {\r\n if(user != null)\r\n {\r\n this.props.getFavorites(user.uid);\r\n }\r\n });\r\n\r\n }\r\n\r\n public onRemoveFavorite(event: React.MouseEvent, favorite: Listing){\r\n event.preventDefault();\r\n this.props.removeFavorite(favorite);\r\n }\r\n\r\n public render() {\r\n return (\r\n
\r\n \r\n \r\n\r\n \r\n

Favorites

\r\n

This page shows all listings you have favorited. If a listing you previously favorited isn't shown here, the auction may have ended.

\r\n \r\n\r\n \r\n \r\n \r\n\r\n
\r\n\r\n
\r\n )\r\n }\r\n\r\n};\r\n\r\n\r\nconst mapStateToProps = (state: ApplicationState) => state.favorites;\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n FavoritesStore.actionCreators\r\n)(FavoritesContainer as any);","import * as React from 'react';\r\nimport {compose, withProps} from \"recompose\";\r\nimport { withScriptjs, withGoogleMap, GoogleMap } from \"react-google-maps\";\r\nimport {GoogleMapProps} from '../components/GoogleMapContainer';\r\n\r\nconst GoogleMapView = compose(\r\n withProps({\r\n googleMapURL: \"https://maps.googleapis.com/maps/api/js?key=AIzaSyAjGn8Yjw5pCQUiuS_245Xmep3GFRqxDBQ&v=3.exp&libraries=geometry,drawing,places\",\r\n loadingElement:
,\r\n containerElement:
,\r\n mapElement:
,\r\n }),\r\n withScriptjs,\r\n withGoogleMap)\r\n ((props) => {\r\n return ( \r\n\r\n {props.children}\r\n\r\n );\r\n }\r\n )\r\n\r\n export default GoogleMapView;","import * as React from \"react\";\r\nimport GoogleMapView from \"../components/GoogleMapView\";\r\n \r\nexport interface GoogleMapProps \r\n{\r\n longitude: number;\r\n latitude: number;\r\n zoomLevel: number;\r\n}\r\n\r\nclass GoogleMapContainer extends React.Component\r\n{\r\n constructor(props: GoogleMapProps){\r\n super(props);\r\n }\r\n\r\n\r\n public render()\r\n {\r\n return \r\n {this.props.children}\r\n \r\n }\r\n}\r\n\r\nexport default GoogleMapContainer;","import * as React from 'react';\r\n\r\nconst TermsOfServiceInfo = () => {\r\n return (
\r\n

Website Terms and Conditions of Use

\r\n\r\n

1. Terms

\r\n\r\n

By accessing this Website, accessible from https://www.japanglobalauctions.com, you are agreeing to be bound by these Website Terms and Conditions of Use and agree that you are responsible for the agreement with any applicable local laws. If you disagree with any of these terms, you are prohibited from accessing this site. The materials contained in this Website are protected by copyright and trade mark law. These Terms of Service has been created with the help of the Terms of Service Generator and the Terms & Conditions Example.

\r\n\r\n

2. Use License

\r\n\r\n

Permission is granted to temporarily download one copy of the materials on Japan Global Auctions's Website for personal, non-commercial transitory viewing only. This is the grant of a license, not a transfer of title, and under this license you may not:

\r\n\r\n
    \r\n
  • modify or copy the materials;
  • \r\n
  • use the materials for any commercial purpose or for any public display;
  • \r\n
  • attempt to reverse engineer any software contained on Japan Global Auctions's Website;
  • \r\n
  • remove any copyright or other proprietary notations from the materials; or
  • \r\n
  • transferring the materials to another person or \"mirror\" the materials on any other server.
  • \r\n
\r\n\r\n

This will let Japan Global Auctions to terminate upon violations of any of these restrictions. Upon termination, your viewing right will also be terminated and you should destroy any downloaded materials in your possession whether it is printed or electronic format.

\r\n\r\n

3. Disclaimer

\r\n\r\n

All the materials on Japan Global Auctions’s Website are provided \"as is\". Japan Global Auctions makes no warranties, may it be expressed or implied, therefore negates all other warranties. Furthermore, Japan Global Auctions does not make any representations concerning the accuracy or reliability of the use of the materials on its Website or otherwise relating to such materials or any sites linked to this Website.

\r\n\r\n

4. Limitations

\r\n\r\n

Japan Global Auctions or its suppliers will not be hold accountable for any damages that will arise with the use or inability to use the materials on Japan Global Auctions’s Website, even if Japan Global Auctions or an authorize representative of this Website has been notified, orally or written, of the possibility of such damage. Some jurisdiction does not allow limitations on implied warranties or limitations of liability for incidental damages, these limitations may not apply to you.

\r\n\r\n

5. Revisions and Errata

\r\n\r\n

The materials appearing on Japan Global Auctions’s Website may include technical, typographical, or photographic errors. Japan Global Auctions will not promise that any of the materials in this Website are accurate, complete, or current. Japan Global Auctions may change the materials contained on its Website at any time without notice. Japan Global Auctions does not make any commitment to update the materials.

\r\n\r\n

6. Links

\r\n\r\n

Japan Global Auctions has not reviewed all of the sites linked to its Website and is not responsible for the contents of any such linked site. The presence of any link does not imply endorsement by Japan Global Auctions of the site. The use of any linked website is at the user’s own risk.

\r\n\r\n

7. Site Terms of Use Modifications

\r\n\r\n

Japan Global Auctions may revise these Terms of Use for its Website at any time without prior notice. By using this Website, you are agreeing to be bound by the current version of these Terms and Conditions of Use.

\r\n\r\n

8. Your Privacy

\r\n\r\n

Please read our Privacy Policy.

\r\n\r\n

9. Governing Law

\r\n\r\n

Any claim related to Japan Global Auctions's Website shall be governed by the laws of ca without regards to its conflict of law provisions.

\r\n
\r\n );\r\n}\r\n\r\nexport default TermsOfServiceInfo;","import * as React from 'react';\r\n\r\nconst PrivacyPolicyInfo = () => {\r\n return (
\r\n

Privacy Policy for Japan Global Auctions

\r\n\r\n

At japanglobalauctions.com, accessible from https://www.japanglobalauctions.com, one of our main priorities is the privacy of our visitors. This Privacy Policy document contains types of information that is collected and recorded by japanglobalauctions.com and how we use it.

\r\n\r\n

If you have additional questions or require more information about our Privacy Policy, do not hesitate to contact us.

\r\n\r\n

This Privacy Policy applies only to our online activities and is valid for visitors to our website with regards to the information that they shared and/or collect in japanglobalauctions.com. This policy is not applicable to any information collected offline or via channels other than this website.

\r\n\r\n

Consent

\r\n\r\n

By using our website, you hereby consent to our Privacy Policy and agree to its terms.

\r\n\r\n

Information we collect

\r\n\r\n

The personal information that you are asked to provide, and the reasons why you are asked to provide it, will be made clear to you at the point we ask you to provide your personal information.

\r\n

If you contact us directly, we may receive additional information about you such as your name, email address, phone number, the contents of the message and/or attachments you may send us, and any other information you may choose to provide.

\r\n

When you register for an Account, we may ask for your contact information, including items such as name, company name, address, email address, and telephone number.

\r\n\r\n

How we use your information

\r\n\r\n

We use the information we collect in various ways, including to:

\r\n\r\n
    \r\n
  • Provide, operate, and maintain our webste
  • \r\n
  • Improve, personalize, and expand our webste
  • \r\n
  • Understand and analyze how you use our webste
  • \r\n
  • Develop new products, services, features, and functionality
  • \r\n
  • Communicate with you, either directly or through one of our partners, including for customer service, to provide you with updates and other information relating to the webste, and for marketing and promotional purposes
  • \r\n
  • Send you emails
  • \r\n
  • Find and prevent fraud
  • \r\n
\r\n\r\n

Log Files

\r\n\r\n

japanglobalauctions.com follows a standard procedure of using log files. These files log visitors when they visit websites. All hosting companies do this and a part of hosting services' analytics. The information collected by log files include internet protocol (IP) addresses, browser type, Internet Service Provider (ISP), date and time stamp, referring/exit pages, and possibly the number of clicks. These are not linked to any information that is personally identifiable. The purpose of the information is for analyzing trends, administering the site, tracking users' movement on the website, and gathering demographic information. Our Privacy Policy was created with the help of the Privacy Policy Generator and the Online Privacy Policy Generator.

\r\n\r\n\r\n

Google DoubleClick DART Cookie

\r\n\r\n

Google is one of a third-party vendor on our site. It also uses cookies, known as DART cookies, to serve ads to our site visitors based upon their visit to www.website.com and other sites on the internet. However, visitors may choose to decline the use of DART cookies by visiting the Google ad and content network Privacy Policy at the following URL – https://policies.google.com/technologies/ads

\r\n\r\n\r\n

Advertising Partners Privacy Policies

\r\n\r\n

You may consult this list to find the Privacy Policy for each of the advertising partners of japanglobalauctions.com.

\r\n\r\n

Third-party ad servers or ad networks uses technologies like cookies, JavaScript, or Web Beacons that are used in their respective advertisements and links that appear on japanglobalauctions.com, which are sent directly to users' browser. They automatically receive your IP address when this occurs. These technologies are used to measure the effectiveness of their advertising campaigns and/or to personalize the advertising content that you see on websites that you visit.

\r\n\r\n

Note that japanglobalauctions.com has no access to or control over these cookies that are used by third-party advertisers.

\r\n\r\n

Third Party Privacy Policies

\r\n\r\n

japanglobalauctions.com's Privacy Policy does not apply to other advertisers or websites. Thus, we are advising you to consult the respective Privacy Policies of these third-party ad servers for more detailed information. It may include their practices and instructions about how to opt-out of certain options.

\r\n\r\n

You can choose to disable cookies through your individual browser options. To know more detailed information about cookie management with specific web browsers, it can be found at the browsers' respective websites.

\r\n\r\n

CCPA Privacy Rights (Do Not Sell My Personal Information)

\r\n\r\n

Under the CCPA, among other rights, California consumers have the right to:

\r\n

Request that a business that collects a consumer's personal data disclose the categories and specific pieces of personal data that a business has collected about consumers.

\r\n

Request that a business delete any personal data about the consumer that a business has collected.

\r\n

Request that a business that sells a consumer's personal data, not sell the consumer's personal data.

\r\n

If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us.

\r\n\r\n

GDPR Data Protection Rights

\r\n\r\n

We would like to make sure you are fully aware of all of your data protection rights. Every user is entitled to the following:

\r\n

The right to access – You have the right to request copies of your personal data. We may charge you a small fee for this service.

\r\n

The right to rectification – You have the right to request that we correct any information you believe is inaccurate. You also have the right to request that we complete the information you believe is incomplete.

\r\n

The right to erasure – You have the right to request that we erase your personal data, under certain conditions.

\r\n

The right to restrict processing – You have the right to request that we restrict the processing of your personal data, under certain conditions.

\r\n

The right to object to processing – You have the right to object to our processing of your personal data, under certain conditions.

\r\n

The right to data portability – You have the right to request that we transfer the data that we have collected to another organization, or directly to you, under certain conditions.

\r\n

If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us.

\r\n\r\n

Children's Information

\r\n\r\n

Another part of our priority is adding protection for children while using the internet. We encourage parents and guardians to observe, participate in, and/or monitor and guide their online activity.

\r\n\r\n

japanglobalauctions.com does not knowingly collect any Personal Identifiable Information from children under the age of 13. If you think that your child provided this kind of information on our website, we strongly encourage you to contact us immediately and we will do our best efforts to promptly remove such information from our records.

\r\n
\r\n );\r\n}\r\n\r\nexport default PrivacyPolicyInfo;","import * as React from 'react';\r\nimport { Row, Col, Label, Input, Button, Form, FormGroup } from 'reactstrap';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faStar} from '@fortawesome/free-solid-svg-icons';\r\nimport { BrokerProfile } from '../models/Broker';\r\nimport {CountryDropdown} from 'react-country-region-selector';\r\nimport GoogleMapContainer from '../components/GoogleMapContainer';\r\nimport OverallRatingView from '../components/OverallRatingView';\r\nimport { Marker } from 'react-google-maps';\r\nimport GenericModalContainer, { ModalType } from '../components/GenericModalContainer';\r\nimport { privacyPolicyInfo, termsOfServiceInfo, validationErrorFirstName, validationErrorEmail, validationErrorCountry, validationErrorAgreeTerms, validationErrorComments } from '../utils/Strings2';\r\nimport {ErrorMessage, ErrorType } from '../models/Error';\r\nimport {InputGroup, InnerInputGroup, CountryDropdownGroup} from '../components/InputGroup';\r\nimport TermsOfServiceInfo from '../utils/TermsOfServiceInfo';\r\nimport PrivacyPolicyInfo from '../utils/PrivacyPolicyInfo';\r\nimport ReviewContainer from '../components/ReviewContainer';\r\n\r\n\r\nexport interface BrokerProfileViewProps {\r\n isLoading: boolean;\r\n profile: BrokerProfile;\r\n uri: string;\r\n country: string;\r\n errorMsgs: ErrorMessage[];\r\n submitOk: boolean;\r\n updateCountry(val: string, e: React.ChangeEvent | undefined): any;\r\n updateState(e: React.FormEvent): any;\r\n onSubmit(e: React.MouseEvent): any;\r\n}\r\n\r\nconst BrokerProfileView = (props: BrokerProfileViewProps) => {\r\n\r\n const [privacyPolicyModal, setPrivacyPolicyModal] = React.useState(false);\r\n const togglePrivacyPolicy = () => setPrivacyPolicyModal(!privacyPolicyModal);\r\n\r\n const [termsOfServiceModal, setTermsOfServiceModal] = React.useState(false);\r\n const toggleTermsOfService = () => setTermsOfServiceModal(!termsOfServiceModal);\r\n\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \"cover\"\r\n \r\n
\r\n \r\n \r\n \"profile\"/\r\n \r\n \r\n

{props.profile.name}

\r\n

{props.profile.city}, {props.profile.countryCode}

\r\n {props.profile.website}\r\n
\r\n @{props.profile.social}\r\n
\r\n {/* */}\r\n {/* */}\r\n {/*\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 4.1see all reviews\r\n \r\n \r\n \r\n \r\n \r\n \r\n */}\r\n \r\n
\r\n\r\n \r\n \r\n

{props.profile.bio}

\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n {!props.submitOk ?\r\n
\r\n

Contact {props.profile.name}

\r\n
\r\n \r\n\r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n I agree to the {e.preventDefault(); togglePrivacyPolicy();}}>privacy policy \r\n and {e.preventDefault(); toggleTermsOfService();}}> terms \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n :\r\n
\r\n

Thanks for your interest

\r\n

{props.profile.name} will get back to you shortly.

\r\n Back to home\r\n
\r\n }\r\n \r\n
\r\n
\r\n )\r\n};\r\n\r\nexport default BrokerProfileView;","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { ApplicationState } from '../store';\r\nimport * as BrokerProfileStore from '../store/BrokerProfileStore';\r\nimport BrokerProfileView from './BrokerProfileView';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport View404 from '../components/View404';\r\nimport { BrokerMetaTags } from '../components/MetaTags';\r\nimport { titleLoading } from '../utils/Strings2';\r\n\r\ntype BrokerProfileContainerProps = BrokerProfileStore.BrokerProfileState &\r\n typeof BrokerProfileStore.actionCreators & RouteComponentProps<{uri: string}>;\r\n\r\nclass BrokerProfileContainer extends React.Component {\r\n\r\n\r\n constructor(props: BrokerProfileContainerProps){\r\n super(props);\r\n\r\n document.title = titleLoading;\r\n }\r\n\r\n public componentDidMount()\r\n {\r\n this.props.getBrokerProfile(this.props.match.params.uri);\r\n this.updateCountry = this.updateCountry.bind(this);\r\n this.updateState = this.updateState.bind(this);\r\n this.onSubmit = this.onSubmit.bind(this);\r\n }\r\n \r\n\r\n public render()\r\n {\r\n var View = this.props.isValid ? \r\n (this.props.isLoading) \r\n ?
\r\n : \r\n
\r\n \r\n \r\n
: \r\n\r\n return ( View )\r\n }\r\n\r\n public updateState(event: React.FormEvent) {\r\n const {name, value, checked} = event.currentTarget;\r\n if(event.currentTarget.type === \"checkbox\"){\r\n this.props.updateState(name, checked);\r\n }\r\n else {\r\n this.props.updateState(name, value);\r\n }\r\n\r\n \r\n\r\n }\r\n\r\n public updateCountry(val: string, e: React.ChangeEvent | undefined)\r\n {\r\n this.props.updateCountry(val);\r\n }\r\n\r\n public onSubmit(e: React.MouseEvent) {\r\n e.preventDefault();\r\n this.props.onSubmit();\r\n }\r\n};\r\n\r\nconst mapStateToProps = (state: ApplicationState) => state.brokerProfile;\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n BrokerProfileStore.actionCreators\r\n)(BrokerProfileContainer as any);","import * as React from 'react';\r\nimport {Col, Row, FormGroup, Button, Label, Form, ListGroup, ListGroupItem, Table} from 'reactstrap';\r\nimport { BrokerDashboardState } from '../store/BrokerDashboardStore';\r\nimport { ConnectionRequest, BidRequest } from '../models/ConnectionRequest';\r\nimport User from '../models/User';\r\nimport { UserInfo } from '../models/UserInfo';\r\nimport { Link } from 'react-router-dom';\r\n\r\nexport interface BrokerDashboardViewProps {\r\n connectionRequests: ConnectionRequest[];\r\n bidRequests: BidRequest[];\r\n connections: UserInfo[];\r\n acceptConnection(e: React.MouseEvent, connectionRequest: ConnectionRequest): void;\r\n removeConnection(e: React.MouseEvent, connectionRequest: ConnectionRequest): void;\r\n}\r\n\r\nconst BrokerDashboardView = (props: BrokerDashboardViewProps) => {\r\n\r\n return ( \r\n
\r\n \r\n \r\n Connection Requests:\r\n \r\n \r\n
\r\n {props.connectionRequests.map((connectionRequest: ConnectionRequest) => \r\n
\r\n
\r\n
\r\n

{connectionRequest.firstName } {connectionRequest.lastName}

\r\n
\r\n
\r\n Email: {connectionRequest.email}\r\n
\r\n
\r\n Phone: {connectionRequest.phone}\r\n
\r\n
\r\n Country: {connectionRequest.country}\r\n
\r\n
\r\n Comments: Lorem ipsum dolor sit amet, consectetur adipiscing elit. \r\n Nam molestie quis purus vel blandit. Nam id mi sed elit blandit elementum. \r\n Nullam vehicula aliquam lectus, eget laoreet risus hendrerit at. \r\n Donec vitae ultrices nibh. Fusce feugiat convallis nisi, nec molestie felis tincidunt at.\r\n Sed egestas justo id pharetra rutrum\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n \r\n \r\n Bid Requests:\r\n \r\n \r\n \r\n
\r\n {props.bidRequests.map((bidRequest: BidRequest) => \r\n
\r\n \r\n
\r\n
\r\n \"photo1\"\r\n
\r\n
\r\n
{bidRequest.yearInfo.year} {bidRequest.makeAndModelInfo.make}
\r\n

{bidRequest.makeAndModelInfo.model}

\r\n\r\n
\r\n
\r\n Requestor: {bidRequest.firstName} {bidRequest.lastName}\r\n
\r\n
\r\n Bid Amount: ¥{bidRequest.bidAmount}\r\n
\r\n
\r\n Lot No.: {bidRequest.lotNumber}\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n
\r\n \r\n Connections: \r\n \r\n \r\n {props.connections.map((user: UserInfo) => \r\n
\r\n \r\n {user.firstName} {user.lastName}
\r\n \r\n {user.email}\r\n \r\n
\r\n
\r\n )}\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default BrokerDashboardView;","import * as React from 'react';\r\nimport * as BrokerDashboard from '../store/BrokerDashboardStore';\r\nimport BrokerDashboardView from './BrokerDashboardView';\r\nimport { ApplicationState } from '../store';\r\nimport { connect } from 'react-redux';\r\nimport { UserContext } from '../models/UserContext';\r\nimport firebase from 'firebase';\r\nimport { ConnectionRequest } from '../models/ConnectionRequest';\r\n\r\n\r\n\r\ntype BrokerDashboardContainerProps = BrokerDashboard.BrokerDashboardState &\r\ntypeof BrokerDashboard.actionCreators;\r\n\r\nclass BrokerDashboardContainer extends React.Component {\r\n\r\n constructor(props: BrokerDashboardContainerProps){\r\n super(props);\r\n this.acceptConnection = this.acceptConnection.bind(this);\r\n this.removeConnection = this.removeConnection.bind(this);\r\n }\r\n\r\n public componentDidMount()\r\n {\r\n firebase.auth().onAuthStateChanged((user) => {\r\n if(user != null)\r\n {\r\n this.props.getConnectionRequests(1, user.uid);\r\n this.props.getBidRequests(1, user.uid);\r\n this.props.getConnections(1, user.uid);\r\n }\r\n });\r\n }\r\n\r\n public render()\r\n {\r\n return (this.props.isLoadingBidRequests || this.props.isLoadingConnectionRequests || this.props.isLoadingConnections) \r\n ?
\r\n : \r\n }\r\n\r\n public acceptConnection(e: React.MouseEvent, connectionRequest: ConnectionRequest)\r\n {\r\n e.preventDefault();\r\n this.props.acceptConnectionRequest(connectionRequest);\r\n }\r\n public removeConnection(e: React.MouseEvent, connectionRequest: ConnectionRequest)\r\n {\r\n e.preventDefault();\r\n this.props.rejectConnectionRequest(connectionRequest);\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: ApplicationState) => state.brokerDashboard;\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n BrokerDashboard.actionCreators\r\n)(BrokerDashboardContainer as any);\r\n\r\nBrokerDashboardContainer.contextType = UserContext;","import * as React from 'react';\r\nimport { Badge, Row, Col, Form, FormGroup, Label, Input, Button } from 'reactstrap';\r\nimport {InputGroup, InnerInputGroup, CountryDropdownGroup} from '../components/InputGroup';\r\nimport GenericModalContainer, { ModalType } from './GenericModalContainer';\r\nimport { privacyPolicyInfo, termsOfServiceInfo, validationErrorFirstName, validationErrorEmail, validationErrorMessage } from '../utils/Strings2';\r\nimport { ContactUsRequest } from '../models/Broker';\r\nimport { postRequest } from '../utils/http';\r\nimport { ContactUsMetaTags } from './MetaTags';\r\nimport { ErrorMessage, ErrorType } from '../models/Error';\r\n\r\nconst ContactUsView = (props: any) => {\r\n\r\n const [firstName, setFirstName] = React.useState(\"\");\r\n const [lastName, setLastName] = React.useState(\"\");\r\n const [email, setEmail] = React.useState(\"\");\r\n const [brokerageName, setBrokerageName] = React.useState(\"\");\r\n const [phone, setPhone] = React.useState(\"\");\r\n const [message, setMessage] = React.useState(\"\");\r\n const [newFeaturesList, setNewFeaturesList] = React.useState(false);\r\n const [errorMsgs, setErrorMessage] = React.useState([]);\r\n const [submitOk, setSubmitOk] = React.useState(false);\r\n\r\n const onSubmit = (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n\r\n let errorMsgs: ErrorMessage[] = [];\r\n\r\n setErrorMessage(errorMsgs);\r\n\r\n if(firstName === \"\") { errorMsgs.push(new ErrorMessage(ErrorType.FirstName, \"Please fill out your first name\"));}\r\n if (lastName === \"\") { errorMsgs.push(new ErrorMessage(ErrorType.LastName, \"Please fill out your last name\")); }\r\n if(email === \"\") { errorMsgs.push(new ErrorMessage(ErrorType.Email, \"Please fill out your email\")); }\r\n if(message === \"\") {errorMsgs.push(new ErrorMessage(ErrorType.Message, \"Please fill out the message field\")); }\r\n\r\n if(errorMsgs.length > 0)\r\n return;\r\n \r\n const contactUsRequest: ContactUsRequest = {firstName: firstName, lastName: lastName, email: email, brokerageName: brokerageName, phone: phone, comments: message, mailList: newFeaturesList };\r\n postRequest(`Email/SendContactUsRequest`, contactUsRequest).then(c => c);\r\n setSubmitOk(true);\r\n\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n\r\n \r\n

Contact us

\r\n
\r\n
\r\n

\r\n We'd love to hear from you\r\n

\r\n

\r\n We're a small, passionate team devoted to creating the best possible experience for buying and importing Japanese-made cars. We're still hard at work adding more great features, so if you have ideas, general inquiries, or if you'd like to work with us, please send us a message using the contact form.\r\n

\r\n \r\n \r\n {!submitOk ?\r\n
\r\n

Contact form

\r\n
\r\n
\r\n \r\n \r\n setFirstName(e.target.value)} id=\"firstName\"\r\n errorMsg={validationErrorFirstName} errorMsgs={errorMsgs} errorType={ErrorType.FirstName} />\r\n \r\n \r\n setLastName(e.target.value)} \r\n errorMsg={validationErrorFirstName} errorMsgs={errorMsgs} errorType={ErrorType.LastName} />\r\n \r\n \r\n \r\n\r\n setEmail(e.target.value)}\r\n errorMsg={validationErrorEmail} errorMsgs={errorMsgs} errorType={ErrorType.Email} />\r\n\r\n setPhone(e.target.value)} />\r\n\r\n setMessage(e.target.value)}\r\n errorMsg={validationErrorMessage} errorMsgs={errorMsgs} errorType={ErrorType.Message} />\r\n\r\n setNewFeaturesList(e.target.checked)}>\r\n Also add me to the new features mailing list\r\n \r\n \r\n \r\n
\r\n :\r\n
\r\n

Thanks for your message

\r\n

We'll get back to you as soon as we can.

\r\n
\r\n }\r\n \r\n
\r\n
\r\n );\r\n\r\n}\r\n\r\n\r\nexport default ContactUsView;","import * as React from 'react';\r\nimport ContactUsView from '../components/ContactUsView';\r\nimport { titleContactUs } from '../utils/Strings2';\r\n\r\n\r\nclass ContactUsContainer extends React.Component {\r\n\r\n constructor(props: any){\r\n super(props);\r\n document.title = titleContactUs;\r\n }\r\n\r\n public render() {\r\n return \r\n }\r\n\r\n}\r\n\r\nexport default ContactUsContainer;","import * as React from 'react';\r\nimport Layout from './components/Layout';\r\nimport HomeContainer from './components/HomeContainer';\r\nimport ListingContainer from './components/ListingContainer';\r\nimport ListingPageContainer from './components/ListingPageContainer';\r\nimport SignupContainer from './components/SignupContainer';\r\nimport LogoutContainer from './components/LogoutContainer';\r\nimport LoginContainer from './components/LoginContainer';\r\nimport FavoritesContainer from './components/FavoritesContainer';\r\nimport AlertsContainer from './components/AlertsContainer';\r\nimport BrokersListContainer from './brokers/BrokersListContainer';\r\nimport BrokerSignupContainer from './components/BrokerSignupContainer';\r\nimport BrokerProfileContainer from './brokers/BrokerProfileContainer';\r\nimport BrokerDashboardContainer from './brokers/BrokerDashboardContainer';\r\nimport ContactUsContainer from './components/ContactUsContainer';\r\nimport View404 from './components/View404';\r\nimport { UserContext } from './models/UserContext';\r\nimport firebase from 'firebase/app';\r\nimport 'firebase/auth';\r\nimport 'firebase/database';\r\nimport './custom.css'\r\nimport { BrowserRouter as Router, Route, Link, Switch } from 'react-router-dom';\r\nimport { toast, Slide } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport { UserInfo } from './models/UserInfo';\r\nimport { getRequest, postRequest } from './utils/http';\r\n\r\nexport default class App extends React.Component {\r\n\r\n constructor(props: any){\r\n super(props);\r\n\r\n toast.configure({transition: Slide});\r\n }\r\n\r\n public componentDidMount() {\r\n var localStorage = window.localStorage\r\n var ipAddress = localStorage.getItem(\"ipAddress\");\r\n var countryCode = localStorage.getItem(\"clientCountryCode\");\r\n \r\n if(countryCode == null || ipAddress == null)\r\n {\r\n getRequest(`user/GetGeolocationInfo`)\r\n .then(userInfo => {\r\n localStorage.setItem(\"ipAddress\", userInfo.ipAddress);\r\n localStorage.setItem(\"clientCountryCode\", userInfo.country);\r\n });\r\n //send request\r\n\r\n //localStorage.setItem(\"ipAddress\", response.ipAddress);\r\n //localStorage.setItem(\"clientCountryCode\", response.countryCode);\r\n }\r\n\r\n firebase.auth().onAuthStateChanged((user) => {\r\n \r\n if(user != null){\r\n\r\n const {getFavorites, setUser, getUserInfo} = this.context;\r\n \r\n setUser(user);\r\n getFavorites();\r\n getUserInfo(user.uid);\r\n \r\n \r\n }\r\n else {\r\n const {clear} = this.context;\r\n clear();\r\n }\r\n\r\n });\r\n }\r\n\r\n public render() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n {/* \r\n \r\n */}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nApp.contextType = UserContext;\r\n\r\n\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register() {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const url = process.env.PUBLIC_URL as string;\r\n const publicUrl = new URL(url, window.location.toString());\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing as ServiceWorker;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (response.status === 404 || (contentType && contentType.indexOf('javascript') === -1)) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log('No internet connection found. App is running in offline mode.');\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import {UserContext} from './UserContext';\r\nimport * as React from 'react';\r\nimport {withRouter, RouteComponentProps} from 'react-router-dom';\r\nimport { Favorite } from './Favorite';\r\nimport {firebase} from '../firebase/Firebase';\r\nimport { Listing } from './Listing';\r\nimport {postRequest} from '../utils/http';\r\nimport { UserInfo } from './UserInfo';\r\n\r\nclass UserContextProvider extends React.Component, listing: Listing): any,\r\n removeFavorite(event: React.MouseEvent, listing: Listing): any,\r\n setUser(user: firebase.User): any, \r\n favorites: Favorite[], \r\n clear(): any,\r\n user: firebase.User|undefined,\r\n userInfo: UserInfo}> {\r\n\r\n private initialState: any;\r\n\r\n constructor(props: any){\r\n super(props);\r\n\r\n this.getFavorites = this.getFavorites.bind(this);\r\n this.setUser = this.setUser.bind(this);\r\n this.addFavorite = this.addFavorite.bind(this);\r\n this.removeFavorite = this.removeFavorite.bind(this);\r\n this.clear = this.clear.bind(this);\r\n this.getUserInfo = this.getUserInfo.bind(this);\r\n\r\n this.state = {\r\n userId: \"\",\r\n getFavorites: this.getFavorites,\r\n setUser: this.setUser,\r\n addFavorite: this.addFavorite,\r\n removeFavorite: this.removeFavorite,\r\n getUserInfo: this.getUserInfo,\r\n clear: this.clear,\r\n favorites: [],\r\n user: undefined,\r\n userInfo: {} as UserInfo\r\n }\r\n\r\n this.initialState = this.state;\r\n \r\n }\r\n\r\n public setUser(user: firebase.User){\r\n this.setState({user: user});\r\n }\r\n\r\n public clear() {\r\n this.setState(this.initialState);\r\n }\r\n\r\n public getUserInfo(userId: string) {\r\n\r\n //entry point get user info\r\n if(this.state.user != null)\r\n {\r\n console.log(userId);\r\n\r\n var localStorage = window.localStorage;\r\n var token = localStorage.getItem(\"token\");\r\n if(!token)\r\n {\r\n postRequest(`user/GetUserToken`, userId)\r\n .then(tk => \r\n {\r\n console.log(tk);\r\n localStorage.setItem(\"token\", tk);\r\n })\r\n }\r\n\r\n\r\n\r\n \r\n\r\n \r\n \r\n\r\n postRequest(`user/GetUser`, userId)\r\n .then(userInfo => this.setState({userInfo: userInfo}));\r\n }\r\n }\r\n\r\n public getFavorites() {\r\n\r\n if(this.state.user != null)\r\n {\r\n const userId = this.state.user.uid;\r\n\r\n // postRequest(`favorites/PostFavoriteList`, userId)\r\n // .then(favorites => this.setState({favorites: favorites}));\r\n }\r\n }\r\n\r\n public addFavorite(event: React.MouseEvent, listing: Listing) {\r\n\r\n event.preventDefault();\r\n\r\n if(!this.state.user){\r\n this.props.history.push(\"/accounts/login\");\r\n return;\r\n }\r\n\r\n const userId = this.state.user.uid;\r\n\r\n const favorite: Favorite = { userId: userId, listingId: listing.listingId, time: listing.auctionLocationInfo.dateInfo.dateTime };\r\n\r\n var item = window.sessionStorage.getItem(\"favorites\");\r\n var favorites:any = [];\r\n if(item != null)\r\n {\r\n favorites = JSON.parse(item);\r\n }\r\n\r\n if(!favorites.includes(listing.listingId))\r\n {\r\n favorites.push(listing.listingId);\r\n }\r\n\r\n window.sessionStorage.setItem(\"favorites\", JSON.stringify(favorites));\r\n\r\n this.setState({favorites: favorites});\r\n\r\n //postRequest(`favorites/PostFavorite`, favorite)\r\n //.then((success) => { if(success) { this.state.favorites.push(favorite); this.setState({favorites: this.state.favorites })}});\r\n }\r\n\r\n public removeFavorite(event: React.MouseEvent, listing: Listing){\r\n\r\n event.preventDefault();\r\n\r\n if(!this.state.user)\r\n {\r\n this.props.history.push(\"/accounts/login\");\r\n return;\r\n }\r\n\r\n const userId = this.state.user.uid;\r\n\r\n const favorite: Favorite = { userId: userId, listingId: listing.listingId, time: listing.auctionLocationInfo.dateInfo.dateTime };\r\n\r\n var item = window.sessionStorage.getItem(\"favorites\");\r\n var favorites:any = [];\r\n if(item != null)\r\n {\r\n favorites = JSON.parse(item);\r\n }\r\n\r\n if(favorites.includes(listing.listingId))\r\n {\r\n favorites.splice(favorites.indexOf(listing.listingId));\r\n }\r\n\r\n window.sessionStorage.setItem(\"favorites\", JSON.stringify(favorites));\r\n\r\n this.setState({favorites: favorites});\r\n\r\n // postRequest(`favorites/PostFavorite`, favorite)\r\n // .then((success) => { if(success) { var favorites = this.state.favorites; favorites = favorites.filter(f => f.listingId !== favorite.listingId); this.setState({favorites: favorites}); } });\r\n }\r\n\r\n public render() {\r\n\r\n return (\r\n \r\n {this.props.children}\r\n \r\n\r\n );\r\n }\r\n}\r\n\r\nexport default withRouter(UserContextProvider);","import 'bootstrap/dist/css/bootstrap.css';\r\n\r\nimport * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { firebase, userSession } from './firebase/Firebase';\r\nimport { Provider } from 'react-redux';\r\nimport { ReactReduxFirebaseProvider} from 'react-redux-firebase';\r\n//import { ConnectedRouter } from 'connected-react-router';\r\nimport { createBrowserHistory } from 'history';\r\nimport configureStore from './store/configureStore';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\nimport UserContextProvider from './models/UserContextProvider';\r\nimport { BrowserRouter } from 'react-router-dom';\r\n\r\n// Create browser history to use in the Redux store\r\n//const baseUrl = document.getElementsByTagName('base')[0].getAttribute('href') as string;\r\nconst history = createBrowserHistory();\r\n\r\n\r\n\r\n\r\n// Get the application-wide store instance, prepopulating with state from the server where available.\r\nconst store = configureStore(history);\r\n\r\n\r\nconst rrfProps = {\r\n firebase,\r\n config: {\r\n userProfile: \"users\"\r\n },\r\n dispatch: store.dispatch,\r\n };\r\n\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root'));\r\n\r\nregisterServiceWorker();\r\n","import { Action, Reducer } from 'redux';\r\nimport { AppThunkAction } from '.';\r\nimport { Alert } from '../models/Alert';\r\nimport { MakeRegion, ModelEntry, ColorEntry, LocationEntry } from '../models/Listing';\r\nimport { postRequest } from '../utils/http';\r\nimport { toast } from 'react-toastify';\r\n\r\nexport interface AlertsState {\r\n isLoading: boolean;\r\n alerts: Alert[];\r\n makes: MakeRegion;\r\n models: ModelEntry[];\r\n colors: ColorEntry[];\r\n locations: LocationEntry[];\r\n}\r\n\r\nexport interface RequestAlerts{type: 'REQUEST_ALERTS'; }\r\nexport interface RecieveAlerts{type: 'RECIEVE_ALERTS'; alerts: Alert[] }\r\nexport interface RemoveAlert{type: 'REMOVE_ALERT', alert: Alert };\r\nexport interface UpdateAlert {type: 'UPDATE_ALERT', alert: Alert, index: number};\r\nexport interface UpdateAlertMakes {type: 'UPDATE_ALERT_MAKES', alert: Alert, index: number};\r\nexport interface RecieveFilterData {type: 'RECIEVE_FILTER_DATA', name: string; value: Promise };\r\n\r\nexport type KnownAction = RequestAlerts | RecieveAlerts | RemoveAlert | UpdateAlert | RecieveFilterData | UpdateAlertMakes;\r\n\r\nexport const actionCreators = {\r\n getAlerts: (userId: string): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'REQUEST_ALERTS' });\r\n\r\n postRequest(`alert/GetAlerts`, userId)\r\n .then(alerts => dispatch({type: 'RECIEVE_ALERTS', alerts: alerts}));\r\n },\r\n removeAlert: (alert: Alert): AppThunkAction => (dispatch) => {\r\n\r\n\r\n dispatch({type: 'REMOVE_ALERT', alert: alert});\r\n\r\n postRequest(`alert/RemoveAlert`, alert)\r\n .then(content => { if(content){ toast.dark(`✅ Removed alert ${alert.name}`, {toastId: alert.name}); } else toast.error(`❌ Failed to remove alert ${alert.name}`)})\r\n .catch(onRejected => { toast.error(`❌ Failed to remove alert ${alert.name}`)});\r\n },\r\n updateAlert: (alert: Alert, index: number): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'UPDATE_ALERT', alert: alert, index: index});\r\n },\r\n\r\n updateAlertMakes: (alert: Alert, index: number): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'UPDATE_ALERT_MAKES', alert: alert, index: index });\r\n },\r\n\r\n updateAlertToServer: (alert: Alert): AppThunkAction => (dispatch) => {\r\n\r\n postRequest(`alert/UpdateAlert`, alert)\r\n .then(content => { if(content){ toast.dark(`✅ Updated alert ${alert.name}`, {toastId: alert.name}); } else toast.error(`❌ Failed to create alert ${alert.name}`)})\r\n .catch(onRejected => { toast.error(`❌ Failed to update alert ${alert.name}`)});\r\n },\r\n\r\n requestFilterData: (url: string, name: string): AppThunkAction => (dispatch) => {\r\n\r\n postRequest(url, null)\r\n .then(content => dispatch({ type: 'RECIEVE_FILTER_DATA', name: name, value: content}));\r\n },\r\n\r\n\r\n};\r\nconst unloadedState = { alerts: [], isLoading: false, makes: {}, models: [], colors: [], locations: []};\r\nexport const reducer: Reducer = (state: AlertsState | undefined, incomingAction: Action): AlertsState => {\r\n\r\n if (state === undefined) {\r\n return unloadedState;\r\n }\r\n\r\n const action = incomingAction as KnownAction;\r\n switch (action.type) {\r\n case 'REQUEST_ALERTS':\r\n return {\r\n ...state,\r\n isLoading: true,\r\n alerts: []\r\n }\r\n case 'RECIEVE_ALERTS':\r\n return {\r\n ...state,\r\n isLoading: false,\r\n alerts: action.alerts\r\n }\r\n case 'REMOVE_ALERT':\r\n \r\n var alerts = state.alerts.filter(a => action.alert.id !== a.id);\r\n \r\n return {\r\n ...state,\r\n alerts: alerts\r\n }\r\n case 'UPDATE_ALERT':\r\n\r\n \r\n var alrts: Alert[] = [];\r\n\r\n for(var i = 0; i < state.alerts.length; i++)\r\n {\r\n if(i !== action.index){\r\n alrts.push(state.alerts[i]);\r\n }\r\n else{\r\n alrts.push(action.alert);\r\n }\r\n\r\n }\r\n\r\n return {\r\n ...state,\r\n alerts: alrts\r\n }\r\n case 'UPDATE_ALERT_MAKES':\r\n return {\r\n ...state,\r\n alerts: []\r\n }\r\n \r\n case 'RECIEVE_FILTER_DATA':\r\n return {\r\n ...state,\r\n [action.name]: action.value\r\n }\r\n default:\r\n return state;\r\n }\r\n\r\n};","import { Action, Reducer } from 'redux';\r\nimport { AppThunkAction } from '.';\r\nimport { BrokerProfile } from '../models/Broker';\r\nimport { getRequest } from '../utils/http';\r\n\r\nexport interface BrokersListState {\r\n profiles: BrokerProfile[];\r\n isLoading: boolean;\r\n}\r\n\r\n\r\nexport interface RequestBrokerProfiles { type: 'REQUEST_BROKER_PROFILES'; }\r\nexport interface RecieveBrokerProfiles { type: 'RECIEVE_BROKER_PROFILES'; profiles: BrokerProfile[]; }\r\n\r\nexport type KnownAction = RequestBrokerProfiles | RecieveBrokerProfiles;\r\n\r\n\r\nexport const actionCreators = {\r\n getBrokerProfiles: (): AppThunkAction => (dispatch) => {\r\n\r\n dispatch({ type: 'REQUEST_BROKER_PROFILES' });\r\n getRequest(`BrokerProfiles/Get`)\r\n .then(content => dispatch({ type: 'RECIEVE_BROKER_PROFILES', profiles: content }));\r\n\r\n // (async () => {\r\n // const response = await fetch(`BrokerProfiles/Get`, {\r\n // method: 'GET',\r\n // headers: {\r\n // 'Accept': 'application/json',\r\n // 'Content-Type': 'application/json'\r\n // }\r\n // });\r\n\r\n // const content = await response.json() as BrokerProfile[];\r\n // dispatch({ type: 'RECIEVE_BROKER_PROFILES', profiles: content })\r\n // })();\r\n }\r\n\r\n\r\n};\r\nconst unloadedState = { profiles: [], isLoading: true };\r\nexport const reducer: Reducer = (state: BrokersListState | undefined, incomingAction: Action): BrokersListState => {\r\n\r\n if (state === undefined) {\r\n return unloadedState;\r\n }\r\n\r\n const action = incomingAction as KnownAction;\r\n switch (action.type) {\r\n case 'REQUEST_BROKER_PROFILES':\r\n return {\r\n isLoading: true,\r\n profiles: []\r\n }\r\n case 'RECIEVE_BROKER_PROFILES':\r\n return {\r\n isLoading: false,\r\n profiles: action.profiles\r\n }\r\n default:\r\n return state;\r\n }\r\n\r\n};","import { Action, Reducer } from 'redux';\r\nimport { AppThunkAction } from '.';\r\nimport {postRequest} from '../utils/http';\r\nimport { BrokerSignupRequest } from '../models/Broker';\r\nimport { ErrorMessage, ErrorType } from '../models/Error';\r\n\r\n\r\nexport interface RequestSignup {type: 'REQUEST_SIGNUP'; }\r\nexport interface RecieveSignup {type: 'RECIEVE_SIGNUP'; errorMsgs: ErrorMessage[]; }\r\nexport interface ErrorPassword {type: 'ERROR_SIGNUP'; errorMsgs: ErrorMessage[]; }\r\nexport interface UpdateCountry {type: 'UPDATE_COUNTRY'; country: string; }\r\nexport interface UpdateInput {type: 'UPDATE_INPUT', name: string, value: any };\r\nexport interface SubmitOk {type:'SUBMIT_OK', submitOk: boolean;}\r\n\r\nexport type KnownAction = RequestSignup | RecieveSignup | ErrorPassword | UpdateInput | UpdateCountry | SubmitOk;\r\n\r\nexport interface BrokerSignupState {\r\n firstName: string;\r\n lastName: string;\r\n brokerageName: string;\r\n email: string;\r\n country: string;\r\n phone: string;\r\n agreeTerms: boolean;\r\n mailList: boolean;\r\n errorMsgs: ErrorMessage[];\r\n submitOk: boolean;\r\n}\r\nexport const actionCreators = {\r\n\r\n onMount: (): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'REQUEST_SIGNUP'});\r\n },\r\n\r\n onSubmit: (): AppThunkAction => (dispatch, getState) => {\r\n \r\n const state = getState().brokerSignup;\r\n\r\n \r\n\r\n if(state === undefined)\r\n return;\r\n\r\n let errorMsgs: ErrorMessage[] = [];\r\n dispatch({type: 'ERROR_SIGNUP', errorMsgs: errorMsgs});\r\n\r\n if(!state.agreeTerms){\r\n errorMsgs.push(new ErrorMessage(ErrorType.Terms, 'You must agree to the Terms of Service'));\r\n }\r\n if( state.firstName === \"\") {\r\n errorMsgs.push(new ErrorMessage(ErrorType.FirstName, 'Please enter your first name.'));\r\n }\r\n if( state.lastName === \"\") {\r\n errorMsgs.push(new ErrorMessage(ErrorType.LastName, 'Please enter your last name.'));\r\n }\r\n if( state.brokerageName === \"\") {\r\n errorMsgs.push(new ErrorMessage(ErrorType.BrokerageName,'Please enter your brokerage name.'));\r\n }\r\n if( state.country === \"\") {\r\n errorMsgs.push(new ErrorMessage(ErrorType.Country, \"Please select a country.\"));\r\n }\r\n if( state.email === \"\") {\r\n errorMsgs.push(new ErrorMessage(ErrorType.Email, 'Please enter your email.'));\r\n }\r\n if( state.phone === \"\") {\r\n errorMsgs.push(new ErrorMessage(ErrorType.Phone, 'Please enter a phone number'));\r\n }\r\n \r\n\r\n if(errorMsgs.length == 0){\r\n\r\n const signupRequest: BrokerSignupRequest = { firstName: state.firstName, lastName: state.lastName, brokerageName: state.brokerageName, country: state.country, email: state.email, phone: state.phone, mailList: state.mailList };\r\n postRequest(`Email/SendBrokerSignup`, signupRequest); \r\n\r\n dispatch({type: 'SUBMIT_OK', submitOk: true});\r\n }\r\n else {\r\n dispatch({type: 'ERROR_SIGNUP', errorMsgs: errorMsgs});\r\n }\r\n\r\n },\r\n updateState: (name: string, value: any): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'UPDATE_INPUT', name: name, value: value});\r\n },\r\n updateCountry: (country: string): AppThunkAction => (dispatch) => {\r\n dispatch({type: 'UPDATE_COUNTRY', country: country});\r\n }\r\n};\r\nconst unloadedState = { email: \"\", firstName: \"\", lastName: \"\", brokerageName: \"\", country: \"\", phone:\"\", errorMsgs: [], agreeTerms: false, mailList: false, submitOk: false };\r\nexport const reducer: Reducer = (state: BrokerSignupState | undefined, incomingAction: Action): BrokerSignupState => {\r\n if (state === undefined) {\r\n return unloadedState;\r\n }\r\n\r\n const action = incomingAction as KnownAction;\r\n switch (action.type) {\r\n case 'REQUEST_SIGNUP':\r\n return unloadedState;\r\n case 'RECIEVE_SIGNUP':\r\n return {\r\n ...state,\r\n errorMsgs: action.errorMsgs\r\n }\r\n case 'ERROR_SIGNUP':\r\n return {\r\n ...state,\r\n errorMsgs: action.errorMsgs\r\n }\r\n case 'UPDATE_INPUT':\r\n return {\r\n ...state,\r\n [action.name] : action.value\r\n }\r\n case 'UPDATE_COUNTRY':\r\n return {\r\n ...state,\r\n country: action.country\r\n }\r\n case 'SUBMIT_OK':\r\n return {\r\n ...state,\r\n submitOk: action.submitOk\r\n }\r\n default:\r\n return state;\r\n }\r\n};","import { Action, Reducer } from 'redux';\r\nimport { AppThunkAction } from '.';\r\nimport { CurrentListingResults, Listing } from '../models/Listing';\r\nimport { Review } from '../models/Review';\r\nimport {postRequest} from '../utils/http';\r\nimport * as ReviewStore from '../store/ReviewStore';\r\n\r\n\r\nexport interface RequestReviews {type: 'REQUEST_REVIEWS'; brokerId: number; }\r\nexport interface RecieveReviews {type: 'RECIEVE_REVIEWS'; reviews: Review[];}\r\nexport interface RequestSubmitReview {type: 'REQUEST_SUBMIT_REVIEW' }\r\nexport interface RecieveSubmitReview {type: 'RECIEVE_SUBMIT_REVIEW', success: boolean }\r\nexport interface UpdateSelectedRating{type: 'UPDATE_SELECTED_RATING', rating: number;}\r\nexport interface UpdateComment {type: 'UPDATE_COMMENT', comment: string }\r\n\r\nexport type KnownAction = RequestReviews | RecieveReviews | RequestSubmitReview | RecieveSubmitReview | UpdateSelectedRating | UpdateComment;\r\n\r\nexport interface ReviewState {\r\n reviews: Review[];\r\n isLoading: boolean;\r\n selectedRating: number;\r\n comment: string;\r\n}\r\n\r\nexport const actionCreators = {\r\n getReviews: (brokerId: number): AppThunkAction => (dispatch) => {\r\n\r\n dispatch({type: 'REQUEST_REVIEWS', brokerId: brokerId });\r\n\r\n postRequest(`Review/GetReviews`, brokerId)\r\n .then(reviews => dispatch({type: 'RECIEVE_REVIEWS', reviews: reviews}));\r\n\r\n },\r\n\r\n submitReview: (selectedRating: number, brokerId: number, comment: string, userId: string, firstName: string) : AppThunkAction => (dispatch) => {\r\n dispatch({type: 'REQUEST_SUBMIT_REVIEW', });\r\n\r\n const review: Review = { brokerId: brokerId, rating: selectedRating, comment: comment, userId: userId, reviewerFirstName: firstName, time: new Date() };\r\n\r\n postRequest(`Review/PostReview`, review)\r\n .then(success => { if(success) { \r\n dispatch({type: 'REQUEST_REVIEWS', brokerId: brokerId });\r\n\r\n postRequest(`Review/GetReviews`, brokerId)\r\n .then(reviews => dispatch({type: 'RECIEVE_REVIEWS', reviews: reviews})); }})\r\n },\r\n\r\n onCommentChange: (comment: string): AppThunkAction => (dispatch) => {\r\n dispatch({type: \"UPDATE_COMMENT\", comment: comment});\r\n },\r\n\r\n onRatingChange: (newRating: number): AppThunkAction => (dispatch) => {\r\n dispatch({type: \"UPDATE_SELECTED_RATING\", rating: newRating});\r\n }\r\n\r\n};\r\nconst unloadedState = { reviews: [], isLoading: false, selectedRating: 0, comment: \"\"};\r\nexport const reducer: Reducer = (state: ReviewState | undefined, incomingAction: Action): ReviewState => {\r\n if (state === undefined) {\r\n return unloadedState;\r\n }\r\n\r\n const action = incomingAction as KnownAction;\r\n switch (action.type) {\r\n case 'REQUEST_REVIEWS':\r\n return {\r\n isLoading: true,\r\n reviews: [],\r\n comment: \"\",\r\n selectedRating: 0\r\n }\r\n case 'RECIEVE_REVIEWS':\r\n return {\r\n ...state,\r\n isLoading: false,\r\n reviews: action.reviews\r\n }\r\n case 'REQUEST_SUBMIT_REVIEW':\r\n return {\r\n ...state\r\n }\r\n case 'UPDATE_SELECTED_RATING':\r\n return {\r\n ...state,\r\n selectedRating: action.rating\r\n }\r\n case 'UPDATE_COMMENT':\r\n return {\r\n ...state,\r\n comment: action.comment\r\n }\r\n default:\r\n return state;\r\n }\r\n\r\n};","import * as Listings from './ListingStore';\r\nimport * as Home from './HomeStore';\r\nimport * as Signup from './SignupStore';\r\nimport * as Login from './LoginStore';\r\nimport * as Favorites from './FavoritesStore';\r\nimport * as Alerts from './AlertsStore';\r\nimport * as BrokersList from './BrokersListStore';\r\nimport * as BrokerProfile from './BrokerProfileStore';\r\nimport * as BrokerSignup from './BrokerSignupStore';\r\nimport * as ListingPage from './ListingPageStore';\r\nimport * as BrokerDashboard from './BrokerDashboardStore';\r\nimport * as Review from './ReviewStore';\r\nimport {firebaseReducer} from 'react-redux-firebase';\r\n\r\n\r\n// The top-level state object\r\nexport interface ApplicationState {\r\n listings: Listings.ListingContainerState | undefined;\r\n home: Home.HomeState | undefined;\r\n signup: Signup.SignupState | undefined;\r\n login: Login.LoginState | undefined;\r\n favorites: Favorites.FavoritesState | undefined;\r\n alerts: Alerts.AlertsState | undefined;\r\n brokersList: BrokersList.BrokersListState | undefined;\r\n brokerProfile: BrokerProfile.BrokerProfileState | undefined;\r\n brokerSignup: BrokerSignup.BrokerSignupState | undefined;\r\n brokerDashboard: BrokerDashboard.BrokerDashboardState | undefined;\r\n listingPage: ListingPage.ListingPageState | undefined;\r\n reviews: Review.ReviewState | undefined;\r\n}\r\n\r\n// Whenever an action is dispatched, Redux will update each top-level application state property using\r\n// the reducer with the matching name. It's important that the names match exactly, and that the reducer\r\n// acts on the corresponding ApplicationState property type.\r\nexport const reducers = {\r\n listings: Listings.reducer,\r\n home: Home.reducer,\r\n signup: Signup.reducer,\r\n login: Login.reducer,\r\n favorites: Favorites.reducer,\r\n alerts: Alerts.reducer,\r\n firebase: firebaseReducer,\r\n brokersList: BrokersList.reducer,\r\n brokerProfile: BrokerProfile.reducer,\r\n brokerSignup: BrokerSignup.reducer,\r\n brokerDashboard: BrokerDashboard.reducer,\r\n listingPage: ListingPage.reducer,\r\n reviews: Review.reducer\r\n};\r\n\r\n// This type can be used as a hint on action creators so that its 'dispatch' and 'getState' params are\r\n// correctly typed to match your store.\r\nexport interface AppThunkAction {\r\n (dispatch: (action: TAction) => void, getState: () => ApplicationState): void;\r\n}\r\n","const publicIP = require('react-public-ip');\r\n\r\nasync function sendRequest_(uri: string, method: string, parameters: any): Promise {\r\n\r\n const response = await fetch(uri, {\r\n method: method,\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json'\r\n },\r\n body: parameters\r\n });\r\n var content = await response.json() as T;\r\n return content;\r\n\r\n}\r\n\r\nexport async function postRequest(uri: string, parameters: any): Promise {\r\n return await sendRequest_(uri, 'POST', JSON.stringify(parameters));\r\n}\r\n\r\nexport async function getRequest(uri: string): Promise {\r\n return await sendRequest_(uri, 'GET', null);\r\n}\r\n\r\nexport async function getIpV6(): Promise {\r\n return await publicIP.v6();\r\n}\r\n\r\nexport async function getIpV4(): Promise {\r\n return await publicIP.v4();\r\n}"],"sourceRoot":""}