{"version":3,"file":"js/Index-cb3f88d64b13510c0922.js","mappings":"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","sources":["webpack://despark/./app/javascript/components/user_portal/UserContext.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/standard_components/LoadingIcon.jsx","webpack://despark/./app/javascript/components/user_portal/preauth_portal/api/apiConfig.js","webpack://despark/./app/javascript/components/user_portal/preauth_portal/api/apiUtils.js","webpack://despark/./app/javascript/components/user_portal/preauth_portal/api/api_calls/sessionAPI.js","webpack://despark/./app/javascript/components/utility_components/routing_components/auth_routes.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/LoadingIcon.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/api/apiConfig.js","webpack://despark/./app/javascript/components/user_portal/main_portal/api/apiUtils.js","webpack://despark/./app/javascript/components/user_portal/main_portal/api/api_calls/ScheduledEventAPI.js","webpack://despark/./app/javascript/components/user_portal/main_portal/components/dashboard_components/CardUpcomingInterviews.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/dashboard_components/CardPastInterviews.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/dashboard_components/ButtonSmallCTA.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/dashboard_components/CardAccount.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/LayoutComponents.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/menu_components/LogoutButton.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/menu_components/HeaderUser.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/pages/Dashboard.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/menu_components/Placeholder.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/api/api_calls/UserDemographicAPI.js","webpack://despark/./app/javascript/components/user_portal/main_portal/components/dashboard_components/CardExtendedProfile.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/pages/ExtendedProfile.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/api/api_calls/MissionUserListAPI.js","webpack://despark/./app/javascript/components/user_portal/main_portal/components/missions_components/MissionCard.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/api/api_calls/MissionAPI.js","webpack://despark/./app/javascript/components/user_portal/main_portal/components/missions_components/MissionsListCard.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/pages/ExploreMissions.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/api/api_calls/CashOutAPI.js","webpack://despark/./app/javascript/components/user_portal/main_portal/components/cashout_components/CashOutHistory.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/cashout_components/CashOutNew.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/cashout_components/ContentCashOut.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/cashout_components/CardCashOut.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/pages/CashOutPage.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/CenteredLoadingIcon.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/api/api_calls/UserWalletAPI.js","webpack://despark/./app/javascript/components/user_portal/main_portal/components/profile_components/WalletsCard.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/pages/Wallets.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/menu_components/HeaderBasicNew.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/menu_components/HeaderOnboarding.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/api/api_calls/SurveyAPI.js","webpack://despark/./app/javascript/components/user_portal/main_portal/components/survey_components/SurveyContent.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/api/api_calls/MissionEventAvailabilityAPI.js","webpack://despark/./app/javascript/components/user_portal/main_portal/components/schedule_components/AppointmentSubmitButton.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/schedule_components/SimpleScheduler.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/schedule_components/ScheduleContent.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/completed_components/CompletedContent.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/screener_components/ScreenerContent.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/review_components/ReviewContent.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/menu_components/DefaultContent.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/components/exploration_components/ExplorationContent.jsx","webpack://despark/./app/javascript/components/user_portal/main_portal/pages/ContentOutline.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/standard_components/HeaderPublic.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/standard_components/FullPageBackground.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/overview_components/CommonOverviewComponents.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/pages/landing_page/WalletRequirements.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/api/apiConfig.js","webpack://despark/./app/javascript/components/user_portal/public_portal/api/apiUtils.js","webpack://despark/./app/javascript/components/user_portal/public_portal/api/api_calls/SessionAPI.js","webpack://despark/./app/javascript/components/user_portal/public_portal/api/api_calls/PublicMissionAPI.js","webpack://despark/./app/javascript/components/user_portal/public_portal/pages/landing_page/PMOverview.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/api/api_calls/SurveyAPI.js","webpack://despark/./app/javascript/components/user_portal/public_portal/pages/screener/PublicScreener.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/pages/survey/PublicSurvey.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/api/api_calls/CashOutAPI.js","webpack://despark/./app/javascript/components/user_portal/public_portal/pages/complete/PublicCashOut.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/api/api_calls/SignUpApiCall.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/pages/complete/PublicSignUpCard.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/pages/complete/PublicCashOutTable.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/pages/complete/PublicComplete.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/pages/schedule/DateTimeSelects.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/pages/schedule/EmailSelect.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/api/api_calls/ScheduleAPI.js","webpack://despark/./app/javascript/components/user_portal/public_portal/pages/schedule/PublicSimpleScheduler.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/pages/schedule/PublicScheduledSessionList.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/pages/schedule/PublicSchedulePlaceholder.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/pages/schedule/PublicSchedule.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/pages/rejected/PublicRejected.jsx","webpack://despark/./app/javascript/components/user_portal/public_portal/PublicMission.jsx","webpack://despark/./app/javascript/components/user_portal/preauth_portal/components/SliderComponents.jsx","webpack://despark/./app/javascript/components/user_portal/onboarding_portal/api/apiConfig.js","webpack://despark/./app/javascript/components/user_portal/onboarding_portal/api/apiUtils.js","webpack://despark/./app/javascript/components/user_portal/onboarding_portal/api/api_calls/OnboardingAPI.js","webpack://despark/./app/javascript/components/user_portal/onboarding_portal/SignUpQuestions.jsx","webpack://despark/./app/javascript/components/user_portal/preauth_portal/api/api_calls/MeetingsAPI.js","webpack://despark/./app/javascript/components/user_portal/meetings/JoinMeetingContent.jsx","webpack://despark/./app/javascript/components/user_portal/preauth_portal/pages/SignIn.jsx","webpack://despark/./app/javascript/components/user_portal/preauth_portal/api/api_calls/RegistrationAPI.js","webpack://despark/./app/javascript/components/user_portal/preauth_portal/pages/SignInWallet.jsx","webpack://despark/./app/javascript/components/user_portal/preauth_portal/pages/SignUp.jsx","webpack://despark/./app/javascript/components/user_portal/preauth_portal/pages/SignUpWallet.jsx","webpack://despark/./app/javascript/components/user_portal/preauth_portal/pages/SignUpPostWalletCredentialCollection.jsx","webpack://despark/./app/javascript/components/user_portal/preauth_portal/api/api_calls/PasswordAPI.js","webpack://despark/./app/javascript/components/user_portal/preauth_portal/pages/ForgotPassword.jsx","webpack://despark/./app/javascript/components/user_portal/preauth_portal/pages/ResetPassword.jsx","webpack://despark/./app/javascript/components/user_portal/preauth_portal/pages/EmailValidation.jsx","webpack://despark/./app/javascript/components/utility_components/routing_components/PageNotFound.jsx","webpack://despark/./app/javascript/components/utility_components/routing_components/PostSignUp.jsx","webpack://despark/./app/javascript/components/user_portal/App.jsx","webpack://despark/./app/javascript/components/user_portal/AppWrapper.jsx","webpack://despark/./app/javascript/packs/Index.jsx"],"sourcesContent":["import React, { createContext } from \"react\";\n\nexport const UserContext = createContext({});","import React from \"react\";\nimport PulseLoader from \"react-spinners/PulseLoader\";\n\nfunction LoadingIcon() {\n return (\n
\n
\n
\n \n
\n
\n Loading...\n
\n
\n
\n )\n}\n\nexport default LoadingIcon;","\n\nconst apiConfig = {\n // Set the base URL for your API\n apiUrl: '/',\n};\n\nexport { apiConfig };\n","// import usenavigate\nimport { apiConfig } from './apiConfig';\n\n\n\n// Helper function to add common headers to the API request\nexport const addCommonHeaders = (headers = {}) => {\n // const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n const commonHeaders = {\n 'Content-Type': 'application/json',\n \"X-CSRF-Token\": getCSRFToken(),\n // Add any other common headers here\n };\n\n return {\n ...commonHeaders,\n ...headers,\n };\n};\n\n\n\nexport async function handleResponse(response, handleRedirect) {\n\n\n // RULES:\n // Always retrun success: true if the response is good\n // Always return success: false otherwise; unless we navigate from here.\n\n if (response.status === 200 || response.status === 201) { //ok or created\n const data = await response.json();\n data[\"success\"] = true\n return data;\n\n } else if (response.status === 204) { // no content\n // For successful POST or PUT requests without any response body\n return { success: true };\n\n } else if (response.status === 302) { // 302 Found - Temporary Redirect\n // For redirects, we return the redirect path\n // In the future, allow components to pass in a callback function \n // to handle the redirects\n const data = await response.json();\n\n if (data.redirect_path) {\n handleRedirect(data.redirect_path)\n return {}\n } else {\n throw new Error('Redirect: Redirect path not found.');\n }\n\n } else if (response.status === 400) {\n // Bad Request\n const errorData = await response.json();\n throw new Error(`Bad Request: ${errorData.message || 'Unknown error'}`);\n\n } else if (response.status === 401) {\n // Unauthorized\n const contentType = response.headers.get(\"content-type\");\n if (contentType && contentType.indexOf(\"application/json\") !== -1) {\n const errorData = await response.json();\n throw new Error(`Unauthorized: ${errorData.message || 'Unknown error'}`);\n } else {\n const errorMessage = await response.text();\n throw new Error(`${errorMessage || 'Unknown error. Please try again later.'}`);\n }\n } else if (response.status === 403) {\n // Forbidden\n throw new Error('Forbidden: You do not have permission to access this resource.');\n } else if (response.status === 404) {\n // Not Found\n throw new Error('Not Found: The requested resource was not found.');\n } else if (response.status === 422) {\n // Unprocessable Entity\n const errorData = await response.json();\n const errorMessages = CleanUpErrors(errorData.errors)\n throw new Error(`Unprocessable Entity: ${errorMessages || 'Unknown error'}`);\n } else if (response.status === 500) {\n // Internal Server Error\n throw new Error('Internal Server Error: Something went wrong on the server.');\n } else {\n throw new Error(`Request failed with status ${response.status}. Please contact info@despark.io`);\n }\n};\n\nexport const handleErrors = (error) => {\n console.log('API Error:', error);\n return { success: false, error: error.message };\n};\n\n// ----------------------------------\n// ----------------------------------\n// -------- Helper Functions --------\n// ----------------------------------\n// ----------------------------------\n\n\n// Clean up 422 errors\nfunction CleanUpErrors(errors) {\n if (errors) {\n let failureReasons = \"\"\n if (errors.constructor === Object) {\n failureReasons = CleanUpMultipleErrors(errors)\n } else {\n failureReasons = errors\n }\n return failureReasons\n } else {\n return \"Unable to complete request. Please try again later. If this issue persists, contact us at info@despark.io\"\n }\n}\n\nfunction CleanUpMultipleErrors(errors) {\n\n var errorString = \"\";\n Object.keys(errors).forEach(function (key) {\n const objectName = key == \"email\" ? \"Email\" : (key == \"password\" ? \"Password\" : (key == \"password_confirmation\" ? \"Password Confirmation\" : key))\n errorString += objectName + \" \" + errors[key] + \"\\n\";\n });\n return errorString\n}\n\nfunction getCSRFToken() {\n const cookies = document.cookie;\n const splitCookies = cookies.split('; ');\n const desparkToken = splitCookies.find(cookie => cookie.startsWith(\"_despark_token=\"))\n return desparkToken ? desparkToken.split('=')[1] : null\n}\n\n","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n\n create: async (email, password, log_hash = null, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"users/signin\";\n\n\n const body = JSON.stringify({\n user: {\n email,\n password\n },\n sign_in_log: log_hash\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n createFromWallet: async (wallet_address, signature_data, log_hash = null, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"users/signin\";\n\n const body = JSON.stringify({\n signature: {\n signature_data: signature_data,\n address: wallet_address\n },\n sign_in_log: log_hash\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n destroy: async (handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"users/signout\";\n\n try {\n const response = await fetch(url, {\n method: \"DELETE\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n checkUser: async (handleRedirect = null) => {\n // This doesn't use the api/v1 format. \n const url = \"/users/checkuser\";\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n userInfo: async (handleRedirect = null) => {\n // This doesn't use the api/v1 format. \n const url = \"/users/user_info\";\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n}","import React, { useContext } from \"react\";\nimport { UserContext } from \"../../user_portal/UserContext\";\nimport { Outlet, useNavigate, Navigate } from \"react-router-dom\";\nimport LoadingIcon from \"../../user_portal/public_portal/standard_components/LoadingIcon\";\n\n// Api Calls\nimport sessionAPI from \"../../user_portal/preauth_portal/api/api_calls/sessionAPI\";\n\n// Expected - that user.authStatus is set to \"user\" and user.onboarding_status is set to \"complete\"\nfunction ProtectedRoute({\n children\n}) {\n return (\n \n {children ? children : }\n \n )\n};\n\nfunction PreAuthRoute({\n children\n}) {\n return (\n \n {children ? children : }\n \n )\n\n};\n\n// Not used today. \nfunction UnconfirmedUserRoute({\n children\n}) {\n return (\n \n {children ? children : }\n \n )\n};\n\nfunction ConfirmedNoProfileRoute({\n children\n}) {\n return (\n \n {children ? children : }\n \n )\n};\n\n// Public route - auth doesn't actually matter. \n// Hypothetically, a user could be logged in and connected and go here. \n// That should be fine. \nfunction PublicRoute({\n children\n}) {\n return children ? children : ;\n};\n\n\n// -----------------------------------------------\n// -----------------------------------------------\n// -----------------------------------------------\n\nfunction AuthRoute({\n expectedUserStatus,\n expectedOnboardingStatus\n}) {\n const { user, setUser, refreshUser } = useContext(UserContext);\n const navigate = useNavigate()\n\n if (Object.keys(user).length === 0) {\n return \n } else {\n if (user.auth_status == expectedUserStatus && user.onboarding_status == expectedOnboardingStatus) {\n return ;\n } else {\n return \n }\n }\n};\n\n\n// -----------------------------------------------\n// -----------------------------------------------\n// -----------------------------------------------\n// -----------------------------------------------\n// -------------- HELPER FUNCTIONS----------------\n// -----------------------------------------------\n// -----------------------------------------------\n// -----------------------------------------------\n// -----------------------------------------------\n\n\n// Check the user status against the expected status.\n// Call check user api call.\n// Compare current status to expected status.\n// If there is no user, redirect to redirectPath.\n// async function CheckUser(expectedStatus, userDetails, navigate) {\n// const response = await sessionAPI.checkUser(navigate)\n// const data = response.data\n\n// let currentStatus = \"\"\n// let redirectPath = \"\"\n// if (response.success) {\n// // There is a user! We were wrong. Just Set the User and carry on. \n// const userEmail = data.email\n// currentStatus = data.onboarding_status\n// redirectPath = data.onboarding_redirect\n\n// userDetails.setUser(userEmail)\n// userDetails.setUserStatus(currentStatus)\n// localStorage.setItem(\"user\", JSON.stringify(userEmail));\n// localStorage.setItem(\"userStatus\", JSON.stringify(currentStatus));\n\n// } else {\n// // There is no user. \n// currentStatus = \"\"\n// redirectPath = \"/signin\"\n\n// userDetails.setUser(\"\")\n// userDetails.setUserStatus(\"\")\n\n// localStorage.removeItem(\"user\");\n// localStorage.removeItem(\"userStatus\");\n// }\n\n// // Check if correct status. If not, redirect.\n// if (currentStatus == expectedStatus) {\n// // All is good.\n// return\n// } else {\n// // Not good. Redirect.\n// navigate(redirectPath)\n// return\n// }\n\n// }\n\n// -----------------------------------------------\n// -----------------------------------------------\n// --------- ADMIN HELPER FUNCTIONS --------------\n// -----------------------------------------------\n// -----------------------------------------------\n\n\nfunction AdminRoute({\n userDetails,\n children\n}) {\n AdminAuthRoute({ userDetails: userDetails, children: children })\n return children ? children : ;\n};\n\n\nfunction AdminAuthRoute({\n userDetails,\n children\n}) {\n // Always check for admin\n const navigate = useNavigate()\n CheckAdmin(userDetails, navigate)\n};\n\n\n\nasync function CheckAdmin(userDetails, navigate) {\n const { user, setUser, refreshUser } = useContext(UserContext);\n\n const response = await sessionAPI.checkUser(navigate)\n\n const redirectPath = \"/signin\"\n let admin = false\n\n\n\n if (response.success) {\n // There is a user! We were wrong. Just Set the User and carry on. \n admin = response.data.admin\n\n } else {\n if (Object.keys(user).length === 0) {\n return \n } else {\n refreshUser();\n }\n\n // Check if correct status. If not, redirect.\n if (admin) {\n // All is good.\n return true\n } else {\n // Not good. Redirect.\n navigate(redirectPath)\n return false\n }\n }\n\n}\n\n\n\nexport { ProtectedRoute, PreAuthRoute, UnconfirmedUserRoute, ConfirmedNoProfileRoute, PublicRoute, AdminRoute };\n","import React from \"react\";\nimport PulseLoader from \"react-spinners/PulseLoader\";\n\nfunction LoadingIcon() {\n return (\n
\n
\n
\n \n
\n
\n Loading...\n
\n
\n
\n )\n}\n\nexport default LoadingIcon;","\n\nconst apiConfig = {\n // Set the base URL for your API\n apiUrl: '/api/v1/',\n};\n\nexport { apiConfig };\n","// import usenavigate\nimport { apiConfig } from './apiConfig';\n\n\n\n// Helper function to add common headers to the API request\nexport const addCommonHeaders = (headers = {}) => {\n // const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n const commonHeaders = {\n 'Content-Type': 'application/json',\n \"X-CSRF-Token\": getCSRFToken(),\n // Add any other common headers here\n };\n\n return {\n ...commonHeaders,\n ...headers,\n };\n};\n\n\n\nexport async function handleResponse(response, handleRedirect) {\n\n // RULES:\n // Always retrun success: true if the response is good\n // Always return success: false otherwise; unless we navigate from here.\n\n if (response.status === 200 || response.status === 201) { //ok or created\n const data = await response.json();\n data[\"success\"] = true\n return data;\n\n } else if (response.status === 204) { // no content\n // For successful POST or PUT requests without any response body\n return { success: true };\n\n } else if (response.status === 302) { // 302 Found - Temporary Redirect\n // For redirects, we return the redirect path\n // In the future, allow components to pass in a callback function \n // to handle the redirects\n const data = await response.json();\n\n if (data.redirect_path) {\n handleRedirect(data.redirect_path)\n return {}\n } else {\n throw new Error('Redirect: Redirect path not found.');\n }\n\n } else if (response.status === 400) {\n // Bad Request\n const errorData = await response.json();\n throw new Error(`Bad Request: ${errorData.message || 'Unknown error'}`);\n\n } else if (response.status === 401) {\n // Unauthorized\n\n handleRedirect(\"/signin\")\n throw new Error('Unauthorized: Please log in.');\n } else if (response.status === 403) {\n // Forbidden\n throw new Error('Forbidden: You do not have permission to access this resource.');\n } else if (response.status === 404) {\n // Not Found\n throw new Error('Not Found: The requested resource was not found.');\n } else if (response.status === 422) {\n // Unprocessable Entity\n const errorData = await response.json();\n var errorMessages = \"\"\n if (errorData.errors) {\n errorMessages = CleanUpErrors(errorData.errors)\n } else if (errorData.error) {\n errorMessages = errorData.error\n }\n throw new Error(`Unprocessable Entity: ${errorMessages || 'Unknown error'}`);\n } else if (response.status === 500) {\n // Internal Server Error\n throw new Error('Internal Server Error: Something went wrong on the server.');\n } else {\n throw new Error(`Request failed with status ${response.status}. Please contact info@despark.io`);\n }\n};\n\nexport const handleErrors = (error) => {\n console.log('API Error:', error);\n return { success: false, error: error.message };\n};\n\n// ----------------------------------\n// ----------------------------------\n// -------- Helper Functions --------\n// ----------------------------------\n// ----------------------------------\n\n\n// Clean up 422 errors\nfunction CleanUpErrors(errors) {\n\n if (errors) {\n let failureReasons = \"\"\n if (errors.constructor === Object) {\n failureReasons = CleanUpMultipleErrors(errors)\n } else {\n failureReasons = errors\n }\n return failureReasons\n } else {\n return \"Unable to complete request. Please try again later. If this issue persists, contact us at info@despark.io\"\n }\n}\n\nfunction CleanUpMultipleErrors(errors) {\n\n var errorString = \"\";\n Object.keys(errors).forEach(function (key) {\n const objectName = key == \"email\" ? \"Email\" : (key == \"password\" ? \"Password\" : (key == \"password_confirmation\" ? \"Password Confirmation\" : key))\n errorString += objectName + \" \" + errors[key] + \"\\n\";\n });\n return errorString\n}\n\nfunction getCSRFToken() {\n const cookies = document.cookie;\n const splitCookies = cookies.split('; ');\n const desparkToken = splitCookies.find(cookie => cookie.startsWith(\"_despark_token=\"))\n return desparkToken ? desparkToken.split('=')[1] : null\n}\n\n","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n pastEvents: async (handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"scheduled_events/past_events\";\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n futureEvents: async (handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"scheduled_events/future_events/\";\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n cancel: async (scheduledEventId, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"scheduled_events/\" + scheduledEventId + \"/cancel\";;\n\n try {\n const response = await fetch(url, {\n method: \"PUT\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n}","import React, { useState, useEffect } from \"react\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport LoadingIcon from \"../LoadingIcon\";\n\n// API Calls\nimport ScheduledEventAPI from \"../../api/api_calls/ScheduledEventAPI\";\n\n\n\nfunction CardUpcomingInterviews(props) {\n const [upcomingEvents, setUpcomingEvents] = useState([]);\n const [eventsLoaded, setEventsLoaded] = useState(false);\n const navigate = useNavigate();\n\n // Load the screener\n useEffect(() => {\n //Grab information on this user\n const GetUpcoming = async () => {\n const data = await ScheduledEventAPI.futureEvents(navigate);\n\n if (data.success) {\n setEventsLoaded(true);\n setUpcomingEvents(data);\n }\n }\n\n GetUpcoming();\n }, []);\n\n return (\n
\n
\n

\n Upcoming Interviews\n

\n
\n
\n
\n {eventsLoaded ? : }\n\n
\n \n Explore Missions\n \n
\n
\n
\n )\n}\n\nfunction EventTable(props) {\n const eventList = props.events;\n const eventListArray = eventList.map((event, index) => (\n \n \n
\n {(new Date(event.start_time)).toLocaleDateString('en-us', { weekday: \"long\" })},\n
\n
\n {(new Date(event.start_time)).toLocaleDateString('en-us', { month: \"long\", day: \"numeric\" })}\n
\n \n \n
\n {(new Date(event.start_time)).toLocaleTimeString('en-us', { hour: \"numeric\", minute: \"numeric\", hour12: true })}\n
\n \n \n
\n {Intl.DateTimeFormat().resolvedOptions().timeZone}\n
\n \n \n {event.mission_user_list.mission.name}\n \n \n {\n View\n }\n \n \n ));\n\n const emptyCard = (\n
\n No scheduled interviews yet\n
\n )\n\n const fullCard = (\n
\n \n \n \n \n \n \n \n \n \n \n \n {eventListArray}\n \n
DateTimeTimezoneMission
\n
\n )\n return (\n
\n {eventListArray.length > 0 ? fullCard : emptyCard}\n
\n )\n}\n\n\n// // This function is called when the page is loaded \n// async function ScheduleApiCall() {\n// const url = \"/api/v1/scheduledevents/\"\n// const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n\n\n// try {\n// const response = await fetch(url, {\n// method: \"GET\",\n// headers: {\n// \"X-CSRF-Token\": token,\n// \"Content-Type\": \"application/json\"\n// }\n// })\n// if (response.ok) {\n// const body = await response.json();\n\n// return body\n// } else {\n// throw new Error(\"Network response was not ok.\");\n// }\n// } catch (error) {\n// console.log(error.message)\n// return { error: true }\n// }\n// }\nexport default CardUpcomingInterviews;","import React, { useState, useEffect } from \"react\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport LoadingIcon from \"../LoadingIcon\";\n\n// Api Calls\nimport ScheduledEventAPI from \"../../api/api_calls/ScheduledEventAPI\";\n\n\nfunction CardPastInterviews(props) {\n const [pastEvents, setPastEvents] = useState([]);\n const [eventsLoaded, setEventsLoaded] = useState(false);\n const navigate = useNavigate();\n\n // Load the screener\n useEffect(() => {\n //Grab information on this user\n const GetPast = async () => {\n const data = await ScheduledEventAPI.pastEvents(navigate);\n\n if (data.success) {\n setEventsLoaded(true);\n setPastEvents(data);\n }\n }\n\n GetPast();\n }, []);\n\n return (\n
\n
\n

\n Past Interviews\n

\n
\n
\n
\n {eventsLoaded ? : }\n\n
\n
\n
\n )\n}\n\nfunction EventTable(props) {\n\n function toTitleCase(str) {\n return str.replace(\n /\\w\\S*/g,\n function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n }\n );\n }\n\n const eventList = props.events;\n const eventListArray = eventList.map((event, index) => (\n \n \n
\n {(new Date(event.start_time)).toLocaleDateString('en-us', { weekday: \"long\" })},\n
\n
\n {(new Date(event.start_time)).toLocaleDateString('en-us', { month: \"long\", day: \"numeric\" })}\n
\n \n \n
\n {(new Date(event.start_time)).toLocaleTimeString('en-us', { hour: \"numeric\", minute: \"numeric\", hour12: true })}\n
\n \n \n
\n {Intl.DateTimeFormat().resolvedOptions().timeZone}\n
\n \n \n
\n {toTitleCase(event.status)}\n
\n \n \n {event.mission_user_list.mission.name}\n \n \n {event.status == \"completed\" ? \n View\n \n :\n \n View\n \n }\n \n \n ));\n\n const emptyCard = (\n
\n No past interviews\n
\n )\n\n const fullCard = (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n {eventListArray}\n \n
DateTimeTimezoneStatusMission
\n
\n )\n return (\n
\n {eventListArray.length > 0 ? fullCard : emptyCard}\n
\n )\n}\n\n\n// // This function is called when the page is loaded \n// async function PastScheduleApiCall() {\n// const url = \"/api/v1/pastevents/\"\n// const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n\n// try {\n// const response = await fetch(url, {\n// method: \"GET\",\n// headers: {\n// \"X-CSRF-Token\": token,\n// \"Content-Type\": \"application/json\"\n// }\n// })\n// if (response.ok) {\n// const body = await response.json();\n\n// return body\n// } else {\n// throw new Error(\"Network response was not ok.\");\n// }\n// } catch (error) {\n// console.log(error.message)\n// return { error: true }\n// }\n// }\nexport default CardPastInterviews;","import React from \"react\";\nimport { Link, useNavigate } from \"react-router-dom\";\n\nfunction ButtonSmallCTA(props) {\n\n return (\n \n {props.text}\n \n\n )\n\n}\n\nexport default ButtonSmallCTA","import React from \"react\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport PulseLoader from \"react-spinners/PulseLoader\";\n\nimport ButtonSmallCTA from \"./ButtonSmallCTA\";\n\nfunction CardAccount(props) {\n\n\n\n return (\n
\n\n
\n

\n Account\n

\n
\n
\n
\n \n \n
\n \n {props.bonusInterviewBalance > 0 || props.bonusSurveyBalance > 0 ?\n \n : null}\n
\n
\n
\n\n
\n )\n}\n\nfunction AccountInfo(props) {\n return (\n
\n
\n
\n Email\n
\n
\n {props.email}\n
\n
\n
\n
\n Extended Profile\n
\n
\n {props.extendedProfileComplete ? : }\n
\n
\n
\n )\n}\n\nfunction AccountDivider(props) {\n return (\n
\n
\n )\n}\n\nfunction BalanceInfo(props) {\n return (\n
\n
\n Balance\n
\n
\n
\n ${props.balance}\n
\n
\n \n Cash Out\n \n
\n
\n )\n}\n\nfunction CompleteExtendedProfileInfo(props) {\n return (\n\n
\n
\n Complete\n
\n
\n \n Edit\n \n
\n\n )\n}\n\nfunction NotCompleteExtendedProfileInfo(props) {\n return (\n\n
\n
\n Incomplete\n
\n
\n
\n \n
\n
\n\n )\n}\n\nfunction BonusBalanceCard(props) {\n\n return (\n
\n
\n You have a bonus waiting:\n
\n
\n {props.bonusInterviewBalance > 0 ? : null}\n {props.bonusSurveyBalance > 0 ? : null}\n
\n
\n )\n}\n\nfunction BonusBalanceRow(props) {\n return (\n
\n
\n ${props.balance}\n
\n
\n {props.description}\n
\n
\n )\n}\n\n// function Placeholder() {\n// return (\n//
\n//
\n//
\n// \n//
\n//
\n// Loading...\n//
\n//
\n//
\n// )\n// }\n\nexport default CardAccount;","import React, { useContext } from \"react\";\nimport { UserContext } from \"../../UserContext\";\nimport CardAccount from \"./dashboard_components/CardAccount\";\n\n\nfunction UserPortalContainer(props) {\n // Commenting to get it to save\n return (\n
\n
\n {props.children}\n
\n
\n )\n}\n\nfunction AccountColumn(props) {\n const { user, setUser, refreshUser } = useContext(UserContext);\n\n return (\n
\n \n
\n )\n}\n\n\n\nexport { UserPortalContainer, AccountColumn }","import React, { useContext } from \"react\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { disconnect } from '@wagmi/core'\nimport { useAlert } from 'react-alert';\nimport { UserContext } from \"../../../UserContext\";\n\n// API Calls \nimport SessionAPI from \"../../../preauth_portal/api/api_calls/sessionAPI\"\n\n\n\n{/*
\n\n\n\n
*/}\n\n\nfunction LogoutButton(props) {\n const navigate = useNavigate();\n const alert = useAlert();\n const { user, setUser, refreshUser } = useContext(UserContext);\n\n\n async function disconnectWallet() {\n await disconnect()\n }\n\n async function logout(event) {\n event.preventDefault();\n\n const response = await SessionAPI.destroy();\n\n if (response.success) {\n disconnectWallet()\n refreshUser()\n\n navigate(\"/signin\")\n } else {\n alert.show(\"Unable to log out, please contact info@despark.io\", { type: 'error' })\n }\n }\n\n\n return (\n //
\n // \n \n //
\n )\n}\n\nexport default LogoutButton\n","import React from \"react\";\nimport { Link, useNavigate, Outlet } from \"react-router-dom\";\nimport LogoutButton from \"./LogoutButton\";\n\n\nfunction HeaderUser(props) {\n return (\n <>\n
\n \n\n
\n ;\n \n )\n}\n\nexport default HeaderUser;","import React, { useEffect, useState, useContext } from \"react\";\nimport CardUpcomingInterviews from \"../components/dashboard_components/CardUpcomingInterviews\";\nimport CardPastInterviews from \"../components/dashboard_components/CardPastInterviews\";\nimport CardAccount from \"../components/dashboard_components/CardAccount\";\n\nimport { UserPortalContainer, AccountColumn } from \"../components/LayoutComponents\";\nimport HeaderUser from \"../components/menu_components/HeaderUser\";\n\nfunction Dashboard(props) {\n\n return (\n <>\n \n \n \n
\n \n \n
\n
\n \n\n )\n\n}\n\n\nexport default Dashboard;","import React, {useState, useEffect} from \"react\";\nimport PropagateLoader from \"react-spinners/PropagateLoader\";\n\n\nfunction Placeholder() {\n return ( \n
\n
\n \n
\n
\n )\n}\n\nexport default Placeholder;","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n update: async (age, education, industry, jobTitle, income, gender, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"userdemographic\";\n\n\n\n const body = JSON.stringify({\n age: age,\n education_id: education,\n industry_id: (industry == 0 ? null : industry),\n job_title: jobTitle,\n income_id: income,\n gender_id: gender\n });\n\n try {\n const response = await fetch(url, {\n method: \"PUT\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n show: async (handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"userdemographic\";\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n\n}","import React, { useState, useEffect, useContext } from \"react\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\nimport Placeholder from \"../menu_components/Placeholder\";\nimport { UserContext } from \"../../../UserContext\";\n\n\nimport UserDemographicAPI from \"../../api/api_calls/UserDemographicAPI\";\n\nfunction CardExtendedProfile(props) {\n const navigate = useNavigate();\n const alert = useAlert()\n const { user, setUser, refreshUser } = useContext(UserContext);\n\n\n\n // store the props in local state\n const [age, setAge] = useState((props.age || \"\"));\n const [education, setEducation] = useState((props.education || \"\"));\n const [industry, setIndustry] = useState((props.industry == [] || \"0\"));\n const [jobTitle, setJobTitle] = useState((props.jobTitle || \"\"));\n const [income, setIncome] = useState((props.income || \"\"));\n const [gender, setGender] = useState((props.gender || \"\"));\n const [loaded, setLoaded] = useState(props.loadExtendedComplete);\n let [propsAge, propsEducation, propsIndustry, propsJobTitle, propsIncome, propsGender, propsLoaded] = [age, education, industry, jobTitle, income, gender, loaded]\n\n // Checks if there are props that don't match most recent props,\n // If so, updates local state\n useEffect(() => {\n if (props.education !== propsEducation) {\n setEducation(props.education);\n propsEducation = props.education;\n }\n if (props.age !== propsAge) {\n setAge(props.age);\n propsAge = props.age;\n }\n if (props.industry !== null && props.industry.length != 0 && props.industry !== propsIndustry) {\n setIndustry(props.industry);\n propsIndustry = props.industry;\n }\n if (props.jobTitle !== propsJobTitle) {\n setJobTitle(props.jobTitle);\n propsJobTitle = props.jobTitle;\n }\n if (props.income !== propsIncome) {\n setIncome(props.income);\n propsIncome = props.income;\n }\n if (props.gender !== propsGender) {\n setGender(props.gender);\n propsGender = props.gender;\n }\n if (props.loadExtendedComplete !== propsLoaded) {\n setLoaded(props.loadExtendedComplete);\n propsLoaded = props.loadExtendedComplete;\n }\n }, [props.education, props.age, props.industry, props.jobTitle, props.income, props.gender, props.loadExtendedComplete]\n\n );\n\n\n\n const onChangeAge = (event) => {\n setAge(event.target.value);\n }\n const onChangeEducation = (event) => {\n setEducation(event.target.value);\n }\n const onChangeIndustry = (event) => {\n setIndustry(event.target.value);\n }\n const onChangeJobTitle = (event) => {\n setJobTitle(event.target.value);\n //setEducation(event.target.value);\n }\n const onChangeIncome = (event) => {\n setIncome(event.target.value);\n //setEducation(event.target.value);\n }\n const onChangeGender = (event) => {\n setGender(event.target.value);\n //setEducation(event.target.value);\n }\n\n //To change\n async function onSubmit(event) {\n event.preventDefault();\n\n const response = await UserDemographicAPI.update(age, education, industry, jobTitle, income, gender, navigate)\n\n if (response.success) {\n refreshUser();\n alert.show('Profile Updated',\n {\n type: 'success'\n })\n }\n }\n\n return (\n
\n
\n

\n Extended Profile\n

\n
\n
\n
\n These optional questions will help you match additional missions.\n
\n {!loaded ? : (\n
\n
\n
\n
\n \"\"\n
\n
\n \n \n
\n
\n
\n
\n \"\"\n
\n
\n \n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n \"\"\n
\n
\n \n \n
\n
\n
\n
\n \"\"\n
\n
\n \n \n
\n
\n
\n
\n \"\"\n
\n
\n \n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n \"\"\n
\n
\n \n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n
\n
\n
\n )}\n
\n
\n )\n\n}\n\n// Moved to own component\n// function Placeholder() {\n// return ( \n//
\n//
\n// \n//
\n//
\n// )\n// }\n\n\nexport default CardExtendedProfile;\n\n","import React, { useEffect, useState, useContext } from \"react\";\nimport { useAlert } from 'react-alert';\nimport CardAccount from \"../components/dashboard_components/CardAccount\";\nimport CardExtendedProfile from \"../components/dashboard_components/CardExtendedProfile\";\nimport { UserContext } from \"../../UserContext\";\n\nimport { UserPortalContainer, AccountColumn } from \"../components/LayoutComponents\";\nimport HeaderUser from \"../components/menu_components/HeaderUser\";\n\n// API Calls\nimport UserDemographicAPI from \"../api/api_calls/UserDemographicAPI\";\n\n\nfunction ExtendedProfile(props) {\n const { user, setUser, refreshUser } = useContext(UserContext);\n\n const alert = useAlert();\n const [age, setAge] = useState([]);\n const [education, setEducation] = useState([]);\n const [industry, setIndustry] = useState([]);\n const [jobTitle, setJobTitle] = useState([]);\n const [income, setIncome] = useState([]);\n const [gender, setGender] = useState([]);\n const [loadExtendedComplete, setLoadExtendedComplete] = useState(false);\n\n useEffect(() => {\n // Grab extended profile info on this user\n const extendedProfileData = async () => {\n const data = await UserDemographicAPI.show();\n\n if (data.success) {\n\n setAge(data.age);\n setEducation(data.education_id);\n setIndustry(data.industry_id);\n setJobTitle(data.job_title);\n setIncome(data.income_id);\n setGender(data.gender_id);\n setLoadExtendedComplete(true);\n } else {\n alert.show(\"Unable to load extended profile info. Try again later\", { type: 'error' })\n }\n }\n\n extendedProfileData();\n }, []);\n\n\n return (\n <>\n \n \n \n
\n \n
\n
\n \n\n )\n}\n\n\nexport default ExtendedProfile;","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n update: async (missionId, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"missionuserlists/\";\n\n const body = JSON.stringify({\n mission_user_list: {\n mission_id: missionId\n }\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n}","import React, { useState, useEffect } from \"react\";\nimport { Link, useNavigate } from 'react-router-dom';\nimport { useAlert } from 'react-alert';\nimport { SecondaryButton } from \"../../../../researcher/main_portal/components/common_components/Buttons\";\nimport WarningIcon from '../../../../../../assets/images/user_app/warning_triangle_white.svg';\nimport LockIcon from '../../../../../../assets/images/user_app/lock_icon.svg';\n\n\n// Api Calls\nimport MissionUserListAPI from \"../../api/api_calls/MissionUserListAPI\";\n\nfunction MissionCard(props) {\n const alert = useAlert()\n const navigate = useNavigate();\n const [applied, setApplied] = useState(false);\n\n\n useEffect(() => {\n if (props.user_status == \"applied\") {\n setApplied(true);\n }\n })\n\n async function submit(e) {\n e.preventDefault();\n\n const response = await MissionUserListAPI.update(props.mission_id, navigate);\n\n if (response.success) {\n // Okay, so right now, this is the logic for where to go next.\n if (response.next_path) {\n navigate(response.next_path);\n }\n } else {\n alert.show('Something went wrong. Please try again later.', { type: 'error' })\n }\n }\n\n\n\n return (\n
\n
\n
\n
\n
\n
\n
\n Name\n
\n
\n {props.mission_name}\n
\n
\n
\n
\n Audience\n
\n
\n {props.audience_description}\n
\n
\n
\n
\n Format\n
\n
\n {props.format}\n
\n
\n
\n {props.mission_locked ?\n \n :\n // Just pass all props in\n \n }\n\n
\n {props.mission_locked ?\n \n :\n <>\n }\n
\n
\n
\n )\n}\n\nexport default MissionCard\n\nfunction CTASection(props) {\n return (\n
\n
Reward
\n
${Math.round(props.reward_amount_usd)}
\n
Paid in USDC
\n
\n
\n \n \n
\n {props.user_status == \"rejected\" || props.user_status == \"completed\" ?\n
:\n \n }\n
\n )\n}\n\nfunction LockedCTASection(props) {\n return (\n
\n
Reward
\n
${Math.round(props.reward_amount_usd)}
\n
Paid in USDC
\n
\n \n
\n
\n )\n}\n\nfunction SpotsRemainingText(props) {\n if (props.number_of_spots < 5) {\n return (\n
\n <5 spots remaining\n
\n )\n } else if (props.number_of_spots < 20) {\n return (\n
\n {props.number_of_spots} spots remaining\n
\n )\n } else {\n return (\n
\n More than 20 spots remaining\n
\n )\n }\n}\n\nfunction LockedOverlay(props) {\n const navigate = useNavigate();\n const locked_type = props.rejection_reason_json && props.rejection_reason_json[\"unmet_requirements\"] && props.rejection_reason_json[\"unmet_requirements\"][0][\"missing_info\"];\n\n const headline = locked_type == \"wallet\" ? \"Unlock this mission by verifying wallets\" : \"Unlock this mission by adding profile info\"\n\n return (\n
\n
\n
\n \n
\n {headline}\n
\n
\n
\n {locked_type == \"wallet\" ?\n // Don't wrap text.\n navigate(\"/wallets\")} text=\"Edit Wallets\" style={{ whiteSpace: \"nowrap\" }} />\n :\n navigate(\"/profile\")} text=\"Edit Profile\" style={{ whiteSpace: \"nowrap\" }} />\n }\n {/*
*/}\n
    \n {props.rejection_reason_json && props.rejection_reason_json[\"unmet_requirements\"] && props.rejection_reason_json[\"unmet_requirements\"].map((rejection_hash, index) => {\n return
  • \n {rejection_hash[\"reason_details\"]}\n
  • \n })}\n
\n {/*
*/}\n
\n
\n
\n )\n}\n\nfunction ButtonByStyle(props) {\n // # List of statuses:\n // # null - line does not exist\n // # prescreen - user has not completed screener\n // # applied - user applied\n // # scheduled - user is scheduled for the mission\n // # rejected - user was rejected\n // # completed - user completed the mission\n\n // If the user has applied, show the \"Applied\" button\n const updatedButtonType = props.applied ? \"applied\" : props.buttonType;\n\n\n switch (updatedButtonType) {\n case \"none\":\n // For surveys, the button should say \"Take Survey\"\n if (props.missionType == \"survey\") {\n return (\n \n )\n } else {\n return (\n \n )\n }\n case \"prescreen\":\n return (\n \n )\n case \"in_review\":\n return (\n \n )\n case \"applied\":\n if (props.missionType == \"survey\") {\n return (\n \n )\n } else if (props.missionType == \"exploration\") {\n return (\n \n )\n } else {\n return (\n \n )\n }\n\n case \"scheduled\":\n return (\n \n )\n case \"rejected\":\n return (\n \n )\n case \"completed\":\n return (\n \n )\n }\n}","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n index: async (handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"missions/\";\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n show: async (missionId, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"missions/\" + missionId;\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n}","import React, { useState, useEffect } from \"react\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport LoadingIcon from \"../LoadingIcon\";\n\nimport MissionCard from \"./MissionCard\";\n\n// Api Calls\nimport MissionsAPI from \"../../api/api_calls/MissionAPI\";\n\n\nfunction MissionsListCard(props) {\n const navigate = useNavigate();\n\n const [availableMissions, setAvailableMissions] = useState({});\n const [completedMissions, setCompletedMissions] = useState({});\n const [rejectedMissions, setRejectedMissions] = useState({});\n const [loadMissionsComplete, setLoadMissionsComplete] = useState(false);\n const [activeTab, setActiveTab] = useState(\"available\");\n\n\n\n // --------------------------------------------\n // --------------------------------------------\n // --------------UseEffects------------------\n // --------------------------------------------\n // --------------------------------------------\n\n\n useEffect(() => {\n // Grab information on this user\n\n async function getMissions() {\n const result = await MissionsAPI.index(navigate);\n\n if (result.success) {\n setAvailableMissions(result.available_missions);\n setCompletedMissions(result.completed_missions);\n setRejectedMissions(result.rejected_missions);\n setLoadMissionsComplete(true);\n\n } else {\n setLoadMissionsComplete(false);\n }\n\n }\n\n getMissions();\n }, []);\n\n // --------------------------------------------\n // --------------------------------------------\n // --------------Helper Functions------------------\n // --------------------------------------------\n // --------------------------------------------\n\n function updateTab(tab) {\n setActiveTab(tab)\n }\n\n // --------------------------------------------\n // --------------------------------------------\n // --------------Render------------------\n // --------------------------------------------\n // --------------------------------------------\n\n\n const activeClass = \"nav-link active card-nav text-white\";\n const inactiveClass = \"nav-link card-nav text-white\";\n\n return (\n
\n
\n

\n Missions\n

\n
\n
\n
    \n
  • \n
    updateTab(\"available\")}>\n Available\n
    \n
  • \n
  • \n
    updateTab(\"rejected\")}>\n Rejected\n
    \n
  • \n
  • \n
    updateTab(\"completed\")}>\n Completed\n
    \n\n
  • \n
\n
\n {/* THIS IS WHERE AVAILABLE IS SET */}\n {!loadMissionsComplete ? :\n }\n
\n )\n}\n\n\n\nfunction MissionCardChoice(props) {\n let currentMissions = props.activeTab == \"available\" ? props.available : (props.activeTab == \"completed\" ? props.completed : props.rejected);\n\n if (currentMissions.length == 0) {\n return (\n props.activeTab == \"available\" ? availableText(props) : nonAvailableText(props)\n )\n } else {\n return (\n
\n {currentMissions.map((missionWrapper) => {\n return (\n \n )\n })}\n
\n )\n }\n}\n\nfunction nonAvailableText(props) {\n return (\n
\n

You have no {props.activeTab} missions

\n
\n )\n}\n\nfunction availableText(props) {\n const endingText = props.extendedProfileCompleteBool ? \"Check back again soon!\" : \"Complete your extended profile to match with more missions. Check back again soon!\"\n return (\n
\n

You have no {props.activeTab} missions. {endingText}

\n
\n )\n}\n\n\nexport default MissionsListCard;\n","import React, { useEffect, useState, useContext } from \"react\";\nimport CardAccount from \"../components/dashboard_components/CardAccount\";\nimport MissionsListCard from \"../components/missions_components/MissionsListCard\";\nimport { UserContext } from \"../../UserContext\";\nimport { UserPortalContainer, AccountColumn } from \"../components/LayoutComponents\";\nimport HeaderUser from \"../components/menu_components/HeaderUser\";\n\n\n\n\n\n\nfunction ExploreMissions(props) {\n const { user, setUser, refreshUser } = useContext(UserContext);\n\n return (\n <>\n \n \n \n
\n \n\n
\n
\n \n )\n}\n\n\nexport default ExploreMissions","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n index: async (handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"cashouts/\";\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n create: async (eth_address, usd_amount, blockchain, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"cashouts/\";\n\n const body = JSON.stringify({\n cash_out: {\n eth_address,\n usd_amount,\n blockchain\n }\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n destroy: async (cashOutId, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"cashouts/\" + cashOutId;\n\n const body = JSON.stringify({ cash_out: { id: cashOutId } });\n\n try {\n const response = await fetch(url, {\n method: \"DELETE\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n\n\n}","import React, { useState, useEffect } from \"react\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport Placeholder from \"../menu_components/Placeholder\";\nimport { useAlert } from \"react-alert\";\n\n// API Calls\nimport CashOutAPI from \"../../api/api_calls/CashOutAPI\";\n\n\nfunction CashOutHistory(props) {\n const navigate = useNavigate();\n const alert = useAlert();\n\n const cashOutHistory = props.cashOutHistory;\n const cashOutHistoryList = cashOutHistory.map((cashOut, index) => (\n \n {(new Date(cashOut.created_at)).toLocaleDateString('en-us', { year: \"numeric\", month: \"long\", day: \"numeric\" })}\n {cashOut.status}\n ${cashOut.usd_amount}\n {cashOut.blockchain}\n {cashOut.eth_address}\n {\n [\"processing\", \"completed\"].indexOf(cashOut.status) > -1 ?\n View\n : \"N/A\"\n }\n \n {cashOut.status == \"requested\" ? : \"\"}\n \n ));\n\n const emptyCard = (\n
\n
\n No existing cash out requests\n
\n
\n )\n\n const fullCard = (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n {cashOutHistoryList}\n \n
Date CreatedStatusAmountBlockchainWallet AddressTransaction LinkDelete
\n
\n )\n return (\n
\n {cashOutHistory.length > 0 ? fullCard : emptyCard}\n
\n )\n}\n\nfunction CashOutDeleteButton(props) {\n const alert = props.alert\n\n async function onClick(event) {\n event.preventDefault();\n const response = await CashOutAPI.destroy(props.cashOutId, props.navigate);\n\n if (response.success) {\n // Refresh the page\n alert.show(\"Cash out request deleted\",\n { type: 'success' })\n props.navigate(0)\n return\n } else {\n alert.show(response.error.message,\n { type: 'error' })\n return\n }\n }\n\n return (\n \n )\n}\n\nexport default CashOutHistory;","import React, { useState, useEffect } from \"react\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport Placeholder from \"../menu_components/Placeholder\";\nimport CurrencyInput from 'react-currency-input-field';\nimport { useAlert } from 'react-alert';\nimport IsValidEVMAddress from \"../../../../utility_components/IsValidAddress\";\n\n// API Calls\nimport CashOutAPI from \"../../api/api_calls/CashOutAPI\";\n\n\n\n\nfunction CashOutNew(props) {\n const [cashOutAmount, setCashOutAmount] = useState(0.00);\n const [ethAddress, setEthAddress] = useState(\"\");\n const [confirmedEthAddress, setConfirmedEthAddress] = useState(\"\");\n const [blockchain, setBlockchain] = useState(\"Polygon\");\n\n const alert = useAlert();\n const navigate = useNavigate();\n\n\n const onAmountChange = (value) => {\n setCashOutAmount(value);\n }\n const onEthChange = (event) => {\n setEthAddress(event.target.value);\n }\n const onConfirmedEthChange = (event) => {\n setConfirmedEthAddress(event.target.value);\n }\n\n async function onSubmit(event) {\n event.preventDefault();\n\n // Make sure cash out amount is less than user's balance \n // Vetted on back end as well.\n if (parseFloat(cashOutAmount) > parseFloat(props.balance)) {\n alert.show(\"Request larger than balance\",\n { type: 'error' })\n return;\n }\n\n // Minimum withdrawal amount is $10 \n // Also covers the field being blank\n if (cashOutAmount < 10 && blockchain == \"Ethereum\") {\n alert.show(\"Minimum Ethereum cash out is $10\",\n { type: 'error' })\n return;\n }\n\n // Make sure eth address matches confirmed eth address\n if (ethAddress != confirmedEthAddress) {\n alert.show(\"Ethereum addresses do not match\",\n { type: 'error' })\n return;\n }\n\n // Make sure eth address is valid\n if (IsValidEVMAddress(ethAddress) == false) {\n alert.show(\"Not a valid Ethereum address\",\n { type: 'error' })\n return;\n }\n\n const response = await CashOutAPI.create(ethAddress, cashOutAmount, blockchain, navigate)\n\n if (response.success) {\n alert.show(\"Cash out request created\",\n { type: 'success' })\n navigate(0)\n }\n\n }\n\n\n\n return (\n
\n
\n
\n\n
\n
\n \"\"\n
\n
\n \n onAmountChange(value)}\n allowNegativeValue={false}\n prefix=\"$\"\n // Good example: onValueChange={(value, name) => onAmountChange(value, name)}\n />\n
\n
\n
\n
\n \"\"\n
\n
\n \n \n
\n
\n
\n
\n \"\"\n
\n
\n \n \n
\n
\n
\n
\n \"\"\n
\n
\n \n \n
\n
\n
Cash out requests will be paid in USDC on the specified blockchain (Polygon or Ethereum).
\n
Please allow up to 7 days for processing.
\n
\n \n
\n
\n
\n
\n )\n}\n\nexport default CashOutNew;","import React, { useState, useEffect } from \"react\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport Placeholder from \"../menu_components/Placeholder\";\nimport CashOutHistory from \"./CashOutHistory\";\nimport CashOutNew from \"./CashOutNew\";\n\n\nfunction ContentCashOut(props) {\n return (\n
\n {props.activeTab == \"history\" ?\n :\n }\n
\n\n )\n}\n\nexport default ContentCashOut;","import React, { useState, useEffect } from \"react\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport Placeholder from \"../menu_components/Placeholder\";\nimport ContentCashOut from \"./ContentCashOut\";\nimport CashOutNew from \"./CashOutNew\";\nimport CashOutAPI from \"../../api/api_calls/CashOutAPI\";\n\n\nfunction CardCashOut(props) {\n\n const [cashOutHistory, setCashOutHistory] = useState([]);\n const [loadCashOutListComplete, setLoadCashOutListComplete] = useState(false);\n const [activeTab, setActiveTab] = useState(\"history\");\n\n\n\n function updateTab(tab) {\n setActiveTab(tab);\n }\n\n useEffect(() => {\n //Grab this user's history of cash outs\n const cashOutHistoryData = async () => {\n const response = await CashOutAPI.index();\n\n if (response.success) {\n const cashOutHistory = response.cash_outs ? response.cash_outs : [];\n setCashOutHistory(cashOutHistory);\n setLoadCashOutListComplete(true);\n }\n\n }\n\n cashOutHistoryData()\n }, []);\n\n\n const activeClass = \"nav-link active card-nav text-white\";\n const inactiveClass = \"nav-link card-nav text-white\";\n\n return (\n
\n
\n

\n Cash Out Requests\n

\n
\n
\n
    \n
  • \n
    updateTab(\"new\")}>\n Create New\n
    \n
  • \n
  • \n
    updateTab(\"history\")}>\n History\n
    \n
  • \n
\n {!loadCashOutListComplete ?\n :\n \n }\n
\n
\n\n )\n}\n\n\n\nexport default CardCashOut;","import React, { useEffect, useState, useContext } from \"react\";\nimport CardAccount from \"../components/dashboard_components/CardAccount\";\nimport CardCashOut from \"../components/cashout_components/CardCashOut\";\nimport { UserContext } from \"../../UserContext\";\n\nimport { UserPortalContainer, AccountColumn } from \"../components/LayoutComponents\";\nimport HeaderUser from \"../components/menu_components/HeaderUser\";\n\nfunction CashOutPage(props) {\n const { user, setUser, refreshUser } = useContext(UserContext);\n\n return (\n\n <>\n \n \n \n
\n \n
\n
\n \n\n\n )\n}\n\nexport default CashOutPage;","import React from \"react\";\nimport PulseLoader from \"react-spinners/PulseLoader\";\n\nfunction CenteredLoadingIcon() {\n return (\n
\n
\n
\n
\n \n
\n
\n Loading...\n
\n
\n
\n
\n )\n}\n\nexport default CenteredLoadingIcon;","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n index: async (handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"user_wallets/\";\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n destroy: async ({ walletId, handleRedirect = null }) => {\n const url = apiConfig.apiUrl + \"user_wallets/\" + walletId.toString();\n\n try {\n const response = await fetch(url, {\n method: \"DELETE\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n create: async ({ address, handleRedirect = null }) => {\n const url = apiConfig.apiUrl + \"user_wallets/\";\n\n const body = JSON.stringify({\n user_wallet: {\n address: address,\n }\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n credentials: 'include',\n body: body,\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n verify: async ({ walletId, address, signature_data, handleRedirect = null }) => {\n const url = apiConfig.apiUrl + \"user_wallets/\" + walletId + \"/verify/\";\n\n const body = JSON.stringify({\n signature: {\n signature_data: signature_data,\n address: address\n },\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n credentials: 'include',\n body: body,\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n getNonce: async ({ walletId, handleRedirect = null }) => {\n const url = apiConfig.apiUrl + \"user_wallets/\" + walletId + \"/get_nonce/\";\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n }\n\n}","import React, { useState, useEffect, useContext } from \"react\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\nimport Placeholder from \"../menu_components/Placeholder\";\nimport { UserContext } from \"../../../UserContext\";\nimport CenteredLoadingIcon from \"../CenteredLoadingIcon\"\n\nimport InfoIcon from \"../../../../../../assets/images/user_app/info_icon_gray.png\"\nimport UserWalletAPI from \"../../api/api_calls/UserWalletAPI\";\nimport { ConnectButton } from \"@rainbow-me/rainbowkit\";\nimport { useSignMessage, useAccount } from \"wagmi\";\nimport { recoverMessageAddress } from 'viem'\nimport { PrimaryButton } from \"../../../preauth_portal/components/CommonComponents\";\n\n\n\nfunction WalletsCard(props) {\n const navigate = useNavigate();\n const alert = useAlert()\n const { user, setUser, refreshUser } = useContext(UserContext);\n\n const { address } = useAccount()\n const [messageToSign, setMessageToSign] = useState(\"Despark is having a server error. Signing this is harmless, but won't log you in. Please try again later.\");\n const { data, isError, isLoading, isSuccess, signMessage } = useSignMessage();\n\n const walletExists = address && props.wallets.length > 0 && props.wallets.find(wallet => wallet.address.toLowerCase() == address.toLowerCase())\n const walletConnectedAndVerified = walletExists && walletExists.signature_verified // If the wallet exists and is verified\n const walletUnverified = walletExists && !walletConnectedAndVerified // If the wallet exists but isn't verified\n\n\n const unconnectedInfoText = \"Connect and verify your wallets to qualify for missions\"\n const connectedNotVerifiedInfoText = \"Sign your wallet to verify it, or disconnect and add a new one to qualify for more missions\"\n const connectedAndVerifiedInfoText = \"Disconnect and add a new wallet to qualify for more missions\"\n\n const connectInfoText = walletUnverified ? connectedNotVerifiedInfoText : walletConnectedAndVerified ? connectedAndVerifiedInfoText : unconnectedInfoText\n\n // --------------------------------------------\n // --------------------------------------------\n // --------------UseEffects------------------\n // --------------------------------------------\n // --------------------------------------------\n\n useEffect(() => {\n // console.log(\"Address: \", address)\n // console.log(\"Wallet exists: \", walletExists)\n // console.log(\"Unverified (New): \", walletUnverified)\n // console.log(\"Connected and Verified (New): \", walletConnectedAndVerified)\n\n\n const AddWallet = async (address) => {\n console.log(\"Adding wallet\")\n const data = await UserWalletAPI.create({ address: address, handleRedirect: navigate })\n\n if (data[\"success\"]) {\n props.updateWallets()\n alert.success(\"Wallet added\")\n } else {\n alert.error(data[\"error\"])\n }\n }\n\n const GetNonceAndPrepareSignature = async (address) => {\n console.log(\"Getting nonce\")\n const wallet = address && props.wallets.find(wallet => wallet.address.toLowerCase() == address.toLowerCase())\n const result = await UserWalletAPI.getNonce({ walletId: wallet.id, navigate });\n\n if (result.success) {\n // Update the message to have the correct nonce.\n setMessageToSign(result.signature_message)\n } else {\n // Display an error message\n alert.error(\"Something went wrong - our servers can't currently handle wallet signatures. Please try again later or sign up using email. \")\n }\n }\n\n // Okay, so we're connected.\n // Things to do:\n // 1. If !address, do nothing. \n // 2. If address exists (!!address), check if it's in our wallets list and whether it's verified. \n\n // Once we're loaded, check if the wallet is in our list of wallets.\n if (!!address && props.loaded) {\n // Check if the wallet is in our list of wallets\n if (!walletExists) {\n // Wallet doesn't exist. Add it to our list of wallets for this user.\n AddWallet(address)\n } else if (walletUnverified) {\n /// Wallet exists but isn't verified. Prompt a signature.\n GetNonceAndPrepareSignature(address)\n } else {\n // Wallet exists and is verified. Do nothing.\n }\n }\n }, [address, props.loaded, props.wallets]);\n\n // Upon successful signature, verify the signature.\n useEffect(() => {\n // They've successfully signed.\n if (isSuccess) {\n const VerifySignature = async () => {\n console.log(\"Verifying signature\")\n const wallet = address && props.wallets.find(wallet => wallet.address.toLowerCase() == address.toLowerCase())\n const result = await UserWalletAPI.verify({ walletId: wallet.id, address: address, signature_data: data, handleRedirect: navigate })\n\n if (result.success) {\n // Update the wallets.\n props.updateWallets()\n\n alert.success(\"Wallet verified. Updating mission approvals, this may take a couple of minutes.\")\n } else {\n // Display an error message\n alert.error(\"Something went wrong. Please try again later. \")\n }\n }\n\n VerifySignature()\n }\n }, [isSuccess]);\n\n // Reset the sign in message if the address changess\n useEffect(() => {\n if (!address) {\n setMessageToSign(\"Despark is having a server error. Signing this is harmless, but won't log you in. Please try again later.\")\n }\n }, [address])\n\n\n function PromptSignMessage() {\n if (messageToSign.startsWith(\"Logging\")) {\n signMessage({ message: messageToSign });\n }\n }\n\n\n\n // --------------------------------------------\n // --------------------------------------------\n // --------------Helper Functions------------------\n // --------------------------------------------\n // --------------------------------------------\n\n function ConnectButtonRow() {\n\n return (\n
\n
\n \n
\n {walletExists && walletUnverified ?\n PromptSignMessage()} />\n :\n walletConnectedAndVerified ?\n
\n Verified\n
\n :\n null\n }\n
\n )\n }\n\n\n\n\n return (\n
\n
\n

\n My Wallets\n

\n
\n
\n {!props.loaded ? :\n
\n
\n
\n Connect Wallet\n
\n
\n \n \n
\n
\n
\n
\n All Wallets\n
\n
\n \n \n
\n
\n
\n }\n
\n
\n )\n\n}\n\nfunction InfoCallOut(props) {\n return (\n
\n \n
\n {props.text}\n
\n
\n )\n}\n\nfunction AllWalletsTable(props) {\n const alert = useAlert()\n const navigate = useNavigate();\n\n function shortAddress(address) {\n if (address.length > 0) {\n const first = address.substring(0, 6)\n const last = address.substring(address.length - 4, address.length)\n return first + \"...\" + last\n }\n }\n\n function ForgetWallet(wallet) {\n\n const DeleteWallet = async () => {\n const data = await UserWalletAPI.destroy({ walletId: wallet.id, handleRedirect: navigate })\n\n if (data.success) {\n props.updateWallets()\n alert.success(\"Wallet deleted\")\n } else {\n alert.error(\"Unable to delete wallet. Try again later or contact info@despark.io\")\n }\n }\n\n DeleteWallet()\n }\n\n return (\n <>\n {\n props.wallets.length == 0 ?\n
\n You have not connected any wallets\n
\n :\n
\n \n \n \n \n \n \n \n \n \n {\n props.wallets.map((wallet, index) => {\n return (\n \n \n \n \n \n )\n })\n }\n \n
Wallet Verified Forget Wallet
{shortAddress(wallet.address)} \n {wallet.signature_verified ?\n
Yes
\n :\n
No
\n }\n
\n
ForgetWallet(wallet)}>\n Forget\n
\n
\n
\n }\n \n )\n}\n\n\n\nexport default WalletsCard;\n\n","import React, { useEffect, useState, useContext } from \"react\";\nimport { useAlert } from 'react-alert';\nimport { UserContext } from \"../../UserContext\";\nimport CardWallets from \"../components/profile_components/WalletsCard\"\n\nimport { UserPortalContainer, AccountColumn } from \"../components/LayoutComponents\";\nimport HeaderUser from \"../components/menu_components/HeaderUser\";\n\n// API Calls\nimport UserWalletAPI from \"../api/api_calls/UserWalletAPI\";\n\n\nfunction Wallets(props) {\n const { user, setUser, refreshUser } = useContext(UserContext);\n\n const alert = useAlert();\n const [wallets, setWallets] = useState([]);\n const [refreshWallets, setRefreshWallets] = useState(0);\n const [loadComplete, setLoadComplete] = useState(false);\n\n useEffect(() => {\n // Grab extended profile info on this user\n const getUserWallets = async () => {\n const data = await UserWalletAPI.index();\n\n if (data.success) {\n\n setWallets(data.user_wallets)\n setLoadComplete(true);\n } else {\n alert.show(\"Unable to load wallets. Try again later\", { type: 'error' })\n }\n }\n\n getUserWallets();\n }, [refreshWallets]);\n\n function UpdateWallets() {\n setRefreshWallets(refreshWallets + 1)\n }\n\n\n return (\n <>\n \n \n \n
\n \n
\n
\n \n\n )\n}\n\n\nexport default Wallets;","import React from \"react\";\nimport { Link } from \"react-router-dom\";\n\n\nfunction HeaderBasicNew(props) {\n const toRoute = (props.logoRoute == \"homepage\") ? \"https://despark.io\" : \"/signin\";\n if (props.logoRoute == \"homepage\") {\n return (\n
\n
\n
\n \n \n \n \n
\n
\n
\n )\n\n } else {\n return (\n
\n
\n
\n \n \n despark\n \n \n\n
\n
\n
\n )\n }\n}\n\nexport default HeaderBasicNew;","import React from \"react\";\nimport { Link, useNavigate, Outlet } from \"react-router-dom\";\nimport LogoutButton from \"./LogoutButton\";\n\n\nfunction HeaderOnboarding(props) {\n return (\n <>\n
\n
\n
\n \n \n despark\n \n \n
\n \n
\n
\n
\n\n
\n \n \n )\n}\n\nexport default HeaderOnboarding;","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n show: async (surveyId, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"surveys/\" + surveyId;\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n create_response: async (surveyData, surveyId, isScreener, handleRedirect = null) => {\n let url_ending = \"/survey_responses\"\n // if (isScreener) { // NO LONGER NEEDED\n // url_ending = \"/screener_responses\"\n // }\n const url = apiConfig.apiUrl + \"surveys/\" + surveyId + url_ending;\n const body = JSON.stringify({\n survey_response: surveyData\n })\n\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n\n}","import React, { useState, useEffect, useCallback, useContext } from \"react\";\nimport { Link, useNavigate, useOutletContext, useParams } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\nimport { Survey, Model, StylesManager } from \"survey-react\";\nimport \"../../../../../../../node_modules/survey-react/defaultV2.css\";\nimport \"survey-react/defaultV2.css\";\nimport { UserContext } from \"../../../UserContext\";\n\n\n// API Calls\nimport SurveyAPI from \"../../api/api_calls/SurveyAPI\";\n\n\n\n\nfunction SurveyContent(props) {\n const { user, setUser, refreshUser } = useContext(UserContext);\n\n const alert = useAlert();\n const navigate = useNavigate();\n const [survey, setSurvey] = useState(null);\n const [surveyComplete, setSurveyComplete] = useState(false);\n const [surveyTitle, setSurveyTitle] = useState(\"Loading...\");\n const [missionTitle, setMissionTitle] = useState(\"Loading...\");\n const [missionReward, setMissionReward] = useState(\"Loading...\");\n const [failedLoading, setFailedLoading] = useState(false);\n\n const [surveyLoaded, setSurveyLoaded] = useState(false);\n const exampleProp = useOutletContext();\n let params = useParams()\n const surveyId = params.surveyId;\n const STORAGE_ITEM_KEY = \"survey-\" + user.first_name + \"-\" + surveyId;\n\n StylesManager.applyTheme(\"defaultV2\");\n\n\n // On complete, save the survey results\n const onSurveyComplete = useCallback(async (sender) => {\n // This is for the admin survey display. \n // Stops from actually submitting the results. \n if (props.adminResponse) {\n alert.show(\"Admin does not submit surveys\", { type: \"info\" });\n } else {\n\n const isScreener = false\n const response = await SurveyAPI.create_response(sender.data, surveyId, isScreener, navigate)\n\n // This is all we actually do - there's no more steps for the user. \n // They just see a message and a \"back to missions\" button. \n setSurveyComplete(true);\n\n if (response.success) {\n alert.show(\"Survey submitted!\", { type: 'success' })\n refreshUser();\n navigate(\"/missions\")\n } else {\n alert.show(\"Unable to save survey. Please contact info@despark.io\", { type: 'error' })\n }\n }\n }, []);\n\n // Save the survey data to local storage\n function saveSurveyData(survey) {\n const data = survey.data;\n data.pageNo = survey.currentPageNo;\n window.localStorage.setItem(STORAGE_ITEM_KEY, JSON.stringify(data));\n }\n\n // Restore the survey data from local storage\n function restoreSurveyData(survey) {\n const prevData = window.localStorage.getItem(STORAGE_ITEM_KEY) || null;\n if (prevData) {\n const data = JSON.parse(prevData);\n survey.data = data;\n if (data.pageNo) {\n survey.currentPageNo = data.pageNo;\n }\n }\n }\n\n // Load the survey\n useEffect(() => {\n //Grab information on this user\n const GetSurvey = async () => {\n const response = await SurveyAPI.show(surveyId);\n\n if (response.success) {\n // Once it loads, then run through and set all the survey stuff\n const tempSurvey = new Model(await response.survey);\n // Save survey results when users change a question value...\n tempSurvey.onValueChanged.add(saveSurveyData);\n // ... and switch to the next page\n tempSurvey.onCurrentPageChanged.add(saveSurveyData);\n // Save the survey results when the survey is complete\n tempSurvey.onComplete.add(onSurveyComplete);\n // Restore the survey data from local storage\n restoreSurveyData(tempSurvey);\n setSurvey(tempSurvey);\n setSurveyLoaded(true);\n setSurveyTitle(response.title);\n setMissionTitle(response.mission_title);\n setMissionReward(response.mission_reward);\n } else {\n setFailedLoading(true);\n }\n\n }\n\n GetSurvey();\n }, []);\n\n\n return (\n
\n
\n {surveyLoaded ? missionTitle :
Loading...
}\n
\n Complete the survey below. Upon completion, the reward of ${Math.round(missionReward)} will be added to your balance.\n
\n
\n \n
\n )\n\n}\n\nfunction SwitchCompleteAndFailedSurvey(props) {\n if (props.failedLoading) {\n return (\n
\n
\n Survey not found.\n
\n \n Back to Missions\n \n
\n )\n } else if (props.surveyComplete) {\n return (\n
\n
\n You've completed the mission. Your balance will be updated shortly.\n
\n \n Back to Missions\n \n
\n )\n } else {\n return (\n
\n {props.surveyLoaded ? :
Loading...
}\n
\n )\n }\n}\n\nexport default SurveyContent","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n claim: async (missionEventAvailabilityId, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"missioneventavailabilities/\" + missionEventAvailabilityId;\n\n try {\n const response = await fetch(url, {\n method: \"PATCH\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n index: async (missionId, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"missions/\" + missionId + \"/availableappointments\";\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n\n\n}","import React, { useState } from \"react\";\nimport { useNavigate } from 'react-router-dom';\nimport { useAlert } from 'react-alert';\n\n// API Calls\nimport MissionEventAvailabilityAPI from \"../../api/api_calls/MissionEventAvailabilityAPI\";\n\n\nfunction AppointmentSubmitButton(props) {\n const navigate = useNavigate();\n const alert = useAlert();\n\n const [submitting, setSubmitting] = useState(false);\n\n\n function onClick() {\n async function submitAppointment() {\n const response = await MissionEventAvailabilityAPI.claim(props.selectedAppointmentId, navigate)\n\n if (response.success) {\n navigate(0);\n } else {\n console.log(\"Network response was not ok.\")\n setSubmitting(false)\n if (response.error) {\n alert.show(response.error, { type: 'error' })\n } else {\n alert.show(\"Unable to submit. Try again later\", { type: 'error' })\n }\n }\n }\n\n if (submitting) return;\n setSubmitting(true)\n submitAppointment();\n }\n\n\n const activeClassString = \"btn btn-md btn-primary-color btn-shadow text-white no-outline no-text-wrap px-3 my-3\"\n const disabledClassString = \"btn btn-gray btn-disabled no-text-wrap px-3 my-3 disabled\"\n let classString = props.selectedAppointmentId ? (submitting ? disabledClassString : activeClassString) : disabledClassString\n\n return (\n
\n {submitting ? \"Submitting...\" : \"Submit Appointment\"}\n
\n )\n}\n\n\n\n// async function SubmitAppointmentApiCall(missionEventAvailabilityId, navigate, alert, setSubmitting) {\n// const url = \"/api/v1/missioneventavailabilities/\" + missionEventAvailabilityId;\n// const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n// setSubmitting(true)\n\n// const body = JSON.stringify({\n// mission_event_availability: {\n// missionEventAvailabilityId\n// }\n// });\n\n// try {\n// const response = await fetch(url, {\n// method: \"PATCH\",\n// headers: {\n// \"X-CSRF-Token\": token,\n// \"Content-Type\": \"application/json\"\n// },\n// body: body\n// })\n// if (response.ok) {\n// const body = await response.json();\n\n// // Refresh the page\n// navigate(0);\n\n// return body\n// } else {\n// setSubmitting(false)\n// alert.show(\"Unable to submit. Try again later\", { type: 'error' })\n// throw new Error(\"Network response was not ok.\");\n// }\n// } catch (error) {\n// console.log(error.message)\n// setSubmitting(false)\n// return { error: true }\n// }\n// }\n\nexport default AppointmentSubmitButton; ","import React, { useState, useEffect, useCallback, useReducer } from \"react\";\nimport AppointmentSubmitButton from \"./AppointmentSubmitButton\";\n\n\n\nfunction SimpleScheduler(props) {\n\n const [appointmentList, setAppointmentList] = useState(props.appointmentList)\n const [selectedAppointmentId, setSelectedAppointmentId] = useState(null)\n const [selectedDate, setSelectedDate] = useState(null)\n const [selectedTime, setSelectedTime] = useState(null)\n const [timeOptionSelectHelper, setTimeOptionSelectHelper] = useState(\"0\")\n\n\n // Set the date selected\n function setDate(value) {\n setSelectedDate(value)\n\n // Reset the time variables\n setTimeOptionSelectHelper(\"0\")\n setSelectedAppointmentId(null)\n setSelectedTime(null)\n }\n\n // Set the time selected\n // Also set the id\n function setTime(value) {\n setTimeOptionSelectHelper(value)\n setSelectedTime(value)\n const id = appointmentList.days.find(day => day.date_text == selectedDate).appointments.find(appointment => appointment.start_time_text == value).mission_event_availability_id\n setSelectedAppointmentId(id)\n }\n\n\n // Function to get the time list.\n function getTimeList() {\n if (selectedDate) {\n return appointmentList.days.find(day => day.date_text == selectedDate).appointments.map(appointment => {\n const time = appointment.start_time_text\n return (\n \n )\n })\n }\n }\n \n // Get hte list of dates\n let dateList = appointmentList.days.map(day => {\n const date = day.date_text\n return (\n \n )\n })\n // Get the list of times\n let timeList = getTimeList()\n\n\n function DateSelector() {\n return (\n
\n )\n }\n\n function BackButton() {\n if (props.reschedule) {\n return (\n
\n
props.setShowReschedule(false)}>Back
\n
\n )\n } else {\n return <>\n }\n\n }\n\n // Hack - instead of having viewport breaks in css, just do a single one here. \n let viewportClassModifer = window.innerWidth < 1100 ? 'col-8' : \"col-4\"\n\n return (\n
\n
\n
\n Select a time slot for your mission.\n
\n
\n
\n
\n
\n Available dates:\n
\n
\n
\n
\n {/* setDate(e.target.value)} id=\"date\" aria-label=\"Date select\" defaultValue=\"0\">\n \n {dateList}\n \n
\n
\n
\n
\n
\n
\n Available times:\n
\n
\n
\n
\n \n
Timezone: {props.timezone}
\n
\n
\n
\n
\n
\n
\n \n
\n {BackButton()}\n
\n
\n
\n )\n}\n\n\n\nexport default SimpleScheduler\n\n// appointmentList = { appointmentList }\n// local = { props.local }\n// onSelect = { selectNewAppointment }\n// timezone = { props.timezone }","import React, { useState, useEffect, useCallback, useReducer } from \"react\";\nimport { Link, useNavigate, useOutletContext, useParams } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\nimport Placeholder from '../menu_components/Placeholder';\n// import ScheduleGrid from './ScheduleGrid';\nimport SimpleScheduler from './SimpleScheduler';\n\n// Api Calls\nimport MissionEventAvailabilityAPI from \"../../api/api_calls/MissionEventAvailabilityAPI\";\nimport MissionAPI from \"../../api/api_calls/MissionAPI\";\nimport ScheduledEventAPI from \"../../api/api_calls/ScheduledEventAPI\";\n\n\n\n\n\nfunction ScheduleContent(props) {\n const [missionLoaded, setMissionLoaded] = useState(false);\n const [missionFormat, setMissionFormat] = useState(\"\");\n const [missionTitle, setMissionTitle] = useState(\"\");\n const [missionReward, setMissionReward] = useState(\"0.0\");\n const [missionAudience, setMissionAudience] = useState(\"\");\n\n const [upcomingEvents, setUpcomingEvents] = useState([]);\n const [pastEvents, setPastEvents] = useState([]);\n\n const exampleProp = useOutletContext();\n let params = useParams()\n const missionId = params.missionId;\n const alert = useAlert();\n const navigate = useNavigate();\n\n const [availabilityLoaded, setAvailabilityLoaded] = useState(false);\n const [missionEvent, setMissionEvent] = useState(null);\n const [timezone, setTimezone] = useState(\"\");\n const [appointmentList, setAppointmentList] = useState({});\n const [showReschedule, setShowReschedule] = useState(false);\n\n // Load needed data\n useEffect(() => {\n //Grab information on this user\n const GetSchedule = async () => {\n const response = await MissionAPI.show(missionId, navigate);\n\n if (response.success) {\n setMissionLoaded(true);\n setMissionFormat(response.mission.format_descriptive);\n setMissionTitle(response.mission.name);\n setMissionReward(response.mission.reward_amount_usd);\n setMissionAudience(response.mission.audience_description);\n setUpcomingEvents(response.upcoming_events)\n setPastEvents(response.past_events)\n } else {\n alert.error(\"Unable to load mission details. Please try again later.\")\n }\n }\n\n const GetAvailability = async () => {\n const response = await MissionEventAvailabilityAPI.index(missionId, navigate);\n\n if (response.success) {\n setAvailabilityLoaded(true);\n setMissionEvent(response.mission_event);\n setTimezone(response.timezone);\n setAppointmentList(response.appointment_list);\n } else {\n if (response.error) {\n alert.error(response.error)\n } else {\n alert.error(\"Unable to load mission availability. Please try again later.\")\n }\n }\n }\n\n GetSchedule();\n GetAvailability();\n }, []);\n\n\n function reschedule() {\n setShowReschedule(true);\n }\n function stopReschedule() {\n setShowReschedule(false);\n }\n\n function cancelEvent(scheduledEventId) {\n const CancelAppointment = async () => {\n const response = await ScheduledEventAPI.cancel(scheduledEventId, navigate);\n if (response.success) {\n alert.success(\"Appointment cancelled.\")\n navigate(0)\n } else {\n alert.error(\"Error canceling scheduled event. Please try again or contact us.\")\n }\n }\n CancelAppointment();\n }\n\n\n function BackToMissionLink() {\n if (!showReschedule) {\n return (\n
\n \n Back to Missions\n \n
\n )\n } else {\n return <>\n }\n\n }\n\n // Set up the events portion\n function eventComponent() {\n // If not loaded, show placeholder.\n if (!missionLoaded || !availabilityLoaded) {\n return ()\n\n // If loaded, and we have events, then show them. \n } else if (upcomingEvents.length > 0 && !showReschedule) {\n return ()\n\n } else if (pastEvents.length > 0 && !showReschedule) {\n // ONLY SHOWS PAST COMPLETED EVENTS\n return ()\n // Else, if there are event openings, then show the schedule grid.\n // From https://stackoverflow.com/questions/6072590/how-to-match-an-empty-dictionary-in-javascript\n } else if (appointmentList && Object.keys(appointmentList).length > 0 && appointmentList.days.length > 0) {\n return ()\n\n // else, if trying to reschedule and there is no availability, then show placeholder text.\n } else if (showReschedule) {\n return ()\n // else, if there are no events, and no event openings, then show default placeholder text.\n } else {\n return ()\n }\n }\n\n\n\n // Return function for ScheduleContent\n return (\n
\n
\n {missionLoaded ? missionTitle : \"Loading...\"}\n
\n Format: \n {missionLoaded ? missionFormat : \"Loading...\"}\n
\n
\n Reward: \n {missionLoaded ? \"$\" + Math.round(parseFloat(missionReward)) : \"Loading...\"}\n
\n
\n Audience: \n {missionLoaded ? missionAudience : \"Loading...\"}\n
\n
\n {/* This is where the logic renders. */}\n {/* If events -> show it. */}\n {/* If no event, then pull */}\n
\n {eventComponent()}\n {BackToMissionLink()}\n
\n
\n )\n\n}\n\n// This function will return the html based on whether events is empty or not\nfunction ShowEvents(props) {\n const events = props.events;\n\n function toTitleCase(str) {\n return str.replace(\n /\\w\\S*/g,\n function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n }\n );\n }\n\n const eventList = events.map((event, index) => (\n \n {new Date(event.start_time).toLocaleDateString('en-us', { year: \"numeric\", month: \"long\", day: \"numeric\" })}\n {new Date(event.start_time).toLocaleTimeString('en-us', { hour: \"numeric\", minute: \"numeric\", hour12: true })}\n {new Date(event.end_time).toLocaleTimeString('en-us', { hour: \"numeric\", minute: \"numeric\", hour12: true })}\n {toTitleCase(event.status)}\n {event.event_type}\n {props.title == \"Upcoming Events\" ?\n (\n \n
props.rescheduleFunction()}>Reschedule
\n \n ) : (<>)\n }\n {props.title == \"Upcoming Events\" ?\n (\n \n
props.cancelFunction(event.id)}>Cancel
\n \n ) : (<>)\n }\n \n ));\n\n const fullCard = (\n <>\n
\n \n \n \n \n \n \n \n \n {props.title == \"Upcoming Events\" ? (\n \n ) : (<>)}\n {props.title == \"Upcoming Events\" ? (\n \n ) : (<>)}\n \n \n \n {eventList}\n \n
DateStart TimeEnd TimeStatusFormatRescheduleCancel
\n
\n
\n Timezone: {Intl.DateTimeFormat().resolvedOptions().timeZone}\n
\n \n )\n\n const noteSection = !props.note ? <> : (\n
\n {props.note}\n
\n )\n\n // if (events.length > 0) {\n return (\n <>\n
\n {props.title}\n
\n
\n {fullCard}\n
\n {noteSection}\n \n )\n // } else {\n // return (\n //
\n // You've successfully applied for this mission. We'll reach out via email shortly\n // to schedule a time for you to complete the mission.\n //
\n // Questions or concerns? Please contact us at info@despark.io\n //
\n //
\n // )\n // }\n}\n\nfunction SchedulePlaceHolderText() {\n return (\n\n
\n
\n You've successfully applied for this mission.\n There are currently no available times within the next two weeks.\n We'll reach out via email to schedule a time for you to complete the mission.\n
\n
\n Questions or concerns? Please contact us at info@despark.io\n
\n
\n )\n}\n\nfunction ReschedulePlaceholderText(props) {\n return (\n
\n
\n There aren't any available times within the next two weeks. Please check back later.\n
\n
\n Urgently need to reschedule? Contact us at info@despark.io and we'll help you directly.\n
\n
\n
Back
\n
\n
\n )\n}\n\n// // This function is called when the page is loaded \n// async function ScheduleApiCall(missionId) {\n// const url = \"/api/v1/missions/\" + missionId;\n// const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n// try {\n// const response = await fetch(url, {\n// method: \"GET\",\n// headers: {\n// \"X-CSRF-Token\": token,\n// \"Content-Type\": \"application/json\"\n// }\n// })\n// if (response.ok) {\n// const body = await response.json();\n\n// return body\n// } else {\n// throw new Error(\"Network response was not ok.\");\n// }\n// } catch (error) {\n// console.log(error.message)\n// return { error: true }\n// }\n// }\n\n// async function AvailableAppointmentsApiCall(missionId) {\n// const url = \"/api/v1/missions/\" + missionId + \"/availableappointments\";\n// const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n// try {\n// const response = await fetch(url, {\n// method: \"GET\",\n// headers: {\n// \"X-CSRF-Token\": token,\n// \"Content-Type\": \"application/json\"\n// }\n// })\n// if (response.ok) {\n// const body = await response.json();\n\n// return body\n// } else {\n// throw new Error(\"Network response was not ok.\");\n// }\n// } catch (error) {\n// console.log(error.message)\n// return { error: true }\n// }\n// }\n\n// async function CancelAppointmentApiCall(scheduledEventId) {\n// const url = \"/api/v1/scheduled_events/\" + scheduledEventId + \"/cancel\";\n// const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n// try {\n// const response = await fetch(url, {\n// method: \"PUT\",\n// headers: {\n// \"X-CSRF-Token\": token,\n// \"Content-Type\": \"application/json\"\n// }\n// })\n// if (response.ok) {\n// const body = await response.json();\n// body[\"error\"] = false\n\n// return body\n// } else {\n// throw new Error(\"Network response was not ok.\");\n// }\n// } catch (error) {\n// console.log(error.message)\n// return { error: true, message: \"Error canceling scheduled event. Please try again or contact us.\" }\n// }\n// }\n\nexport default ScheduleContent","import React, { useState, useEffect, useCallback, useReducer } from \"react\";\nimport { Link, useNavigate, useOutletContext, useParams } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\nimport Placeholder from '../menu_components/Placeholder';\n\n// Api Calls\nimport MissionAPI from \"../../api/api_calls/MissionAPI\";\n\n\n\n\n\nfunction CompletedContent(props) {\n const [missionLoaded, setMissionLoaded] = useState(false);\n const [missionFormat, setMissionFormat] = useState(\"\");\n const [missionTitle, setMissionTitle] = useState(\"\");\n const [missionReward, setMissionReward] = useState(\"0.0\");\n const [missionAudience, setMissionAudience] = useState(\"\");\n\n const [upcomingEvents, setUpcomingEvents] = useState([]);\n const [pastEvents, setPastEvents] = useState([]);\n\n const exampleProp = useOutletContext();\n let params = useParams()\n const missionId = params.missionId;\n const alert = useAlert();\n const navigate = useNavigate();\n\n const [availabilityLoaded, setAvailabilityLoaded] = useState(false);\n const [missionEvent, setMissionEvent] = useState(null);\n const [timezone, setTimezone] = useState(\"\");\n const [appointmentList, setAppointmentList] = useState({});\n const [showReschedule, setShowReschedule] = useState(false);\n\n // Load needed data\n useEffect(() => {\n //Grab information on this user\n const GetSchedule = async () => {\n const response = await MissionAPI.show(missionId, navigate);\n\n if (response.success) {\n // if (response.mission.status != \"completed\") {\n // alert.error(\"This mission is not completed. It may still be processing. Please check back later.\")\n // } else {\n setMissionLoaded(true);\n setMissionFormat(response.mission.format_descriptive);\n setMissionTitle(response.mission.name);\n setMissionReward(response.mission.reward_amount_usd);\n setMissionAudience(response.mission.audience_description);\n setUpcomingEvents(response.upcoming_events)\n setPastEvents(response.past_events)\n // }\n } else {\n alert.error(\"Unable to load mission details. Please try again later.\")\n }\n }\n\n GetSchedule();\n }, []);\n\n\n function BackToMissionLink() {\n if (!showReschedule) {\n return (\n
\n \n Back to Missions\n \n
\n )\n } else {\n return <>\n }\n\n }\n\n // Set up the events portion\n function eventComponent() {\n // If not loaded, show placeholder.\n if (!missionLoaded) {\n return ()\n\n // If loaded, and we have events, then show them. \n } else if (pastEvents.length > 0 && !showReschedule) {\n // ONLY SHOWS PAST COMPLETED EVENTS\n return ()\n } else {\n return (<>)\n }\n }\n\n\n\n // Return function for ScheduleContent\n return (\n
\n
\n {missionLoaded ? missionTitle : \"Loading...\"}\n
\n Format: \n {missionLoaded ? missionFormat : \"Loading...\"}\n
\n
\n Reward: \n {missionLoaded ? \"$\" + Math.round(parseFloat(missionReward)) : \"Loading...\"}\n
\n
\n Audience: \n {missionLoaded ? missionAudience : \"Loading...\"}\n
\n
\n {/* This is where the logic renders. */}\n {/* If events -> show it. */}\n {/* If no event, then pull */}\n
\n You've completed this mission! Your balance has been updated. Issues? Contact us at info@despark.io\n
\n
\n {eventComponent()}\n {BackToMissionLink()}\n
\n
\n )\n\n}\n\n// This function will return the html based on whether events is empty or not\nfunction ShowEvents(props) {\n const events = props.events;\n\n function toTitleCase(str) {\n return str.replace(\n /\\w\\S*/g,\n function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n }\n );\n }\n\n const eventList = events.map((event, index) => (\n \n {new Date(event.start_time).toLocaleDateString('en-us', { year: \"numeric\", month: \"long\", day: \"numeric\" })}\n {new Date(event.start_time).toLocaleTimeString('en-us', { hour: \"numeric\", minute: \"numeric\", hour12: true })}\n {new Date(event.end_time).toLocaleTimeString('en-us', { hour: \"numeric\", minute: \"numeric\", hour12: true })}\n {toTitleCase(event.status)}\n {event.event_type}\n {props.title == \"Upcoming Events\" ?\n (\n \n
props.rescheduleFunction()}>Reschedule
\n \n ) : (<>)\n }\n {props.title == \"Upcoming Events\" ?\n (\n \n
props.cancelFunction(event.id)}>Cancel
\n \n ) : (<>)\n }\n \n ));\n\n const fullCard = (\n <>\n
\n \n \n \n \n \n \n \n \n {props.title == \"Upcoming Events\" ? (\n \n ) : (<>)}\n {props.title == \"Upcoming Events\" ? (\n \n ) : (<>)}\n \n \n \n {eventList}\n \n
DateStart TimeEnd TimeStatusFormatRescheduleCancel
\n
\n
\n Timezone: {Intl.DateTimeFormat().resolvedOptions().timeZone}\n
\n \n )\n\n const noteSection = !props.note ? <> : (\n
\n {props.note}\n
\n )\n\n // if (events.length > 0) {\n return (\n <>\n
\n {props.title}\n
\n
\n {fullCard}\n
\n {noteSection}\n \n )\n // } else {\n // return (\n //
\n // You've successfully applied for this mission. We'll reach out via email shortly\n // to schedule a time for you to complete the mission.\n //
\n // Questions or concerns? Please contact us at info@despark.io\n //
\n //
\n // )\n // }\n}\n\n\n\nexport default CompletedContent","import React, { useState, useEffect, useCallback, useReducer } from \"react\";\nimport { Link, useNavigate, useOutletContext, useParams } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\nimport { Survey, Model, StylesManager } from \"survey-react\";\nimport 'survey-react/defaultV2.min.css';\n\n// API Calls\nimport SurveyAPI from \"../../api/api_calls/SurveyAPI\";\n\n\n\n\nfunction ScreenerContent(props) {\n const alert = useAlert();\n const [screener, setScreener] = useState(null);\n const [screenerComplete, setScreenerComplete] = useState(false);\n const [screenerTitle, setScreenerTitle] = useState(\"Loading...\");\n const [missionTitle, setMissionTitle] = useState(\"Loading...\");\n const [missionReward, setMissionReward] = useState(\"Loading...\");\n const [failedLoading, setFailedLoading] = useState(false);\n const [screenerFailed, setScreenerFailed] = useState(false);\n\n const [screenerLoaded, setScreenerLoaded] = useState(false);\n const exampleProp = useOutletContext();\n let params = useParams()\n const screenerId = params.screenerId;\n const missionId = params.missionId;\n\n StylesManager.applyTheme(\"defaultV2\");\n\n const navigate = useNavigate();\n\n\n\n // On complete, save the screener results\n const onScreenerComplete = useCallback(async (sender) => {\n // This is for the admin survey display. \n // Stops from actually submitting the results. \n if (props.adminResponse) {\n alert.show(\"Admin does not submit surveys\", { type: \"info\" });\n } else {\n\n const isScreener = true\n const response = await SurveyAPI.create_response(sender.data, screenerId, isScreener, navigate)\n\n setScreenerComplete(true);\n\n if (response.success) {\n if (response.next == \"missions\") {\n // Set it to failed, and let user go back to missions themself\n setScreenerFailed(true);\n } else if (response.next == \"review\") {\n navigate(\"/mission/\" + response.mission_id + \"/review/\")\n } else if (response.next == \"schedule\") {\n navigate(\"/mission/\" + response.mission_id + \"/schedule/\")\n } else if (response.next == \"survey\") {\n navigate(\"/mission/\" + response.mission_id + \"/surveys/\" + response.survey_id)\n } else if (response.next == \"autonomous\") {\n navigate(\"/mission/\" + response.mission_id + \"/exploration/\")\n }\n } else {\n alert.show(\"Unable to save survey. Please contact info@despark.io\", { type: 'error' })\n }\n }\n\n }, []);\n\n // Load the screener\n useEffect(() => {\n //Grab information on this user\n const GetScreener = async () => {\n const response = await SurveyAPI.show(screenerId);\n\n if (response.success) {\n // Once it loads, then run through and set all the screener stuff\n const tempScreener = new Model(response.survey);\n tempScreener.onComplete.add(onScreenerComplete);\n setScreener(tempScreener);\n setScreenerLoaded(true);\n setScreenerTitle(response.title);\n setMissionTitle(response.mission_title);\n setMissionReward(response.mission_reward);\n } else {\n setFailedLoading(true);\n }\n\n }\n\n GetScreener();\n }, []);\n\n\n return (\n
\n
\n {screenerLoaded || failedLoading ? missionTitle :
Loading...
}\n
\n This mission requires users to complete a brief screener before starting the mission. Please answer the short list of questions below.\n
\n
\n \n
\n )\n\n}\n\nfunction SwitchCompleteAndFailedScreener(props) {\n if (props.failedLoading) {\n return (\n
\n
\n Screener not available. Have you already taken this screener?\n
\n \n Back to Missions\n \n
\n )\n } else if (props.screenerFailed) {\n return (\n
\n
\n Unfortunately, you aren't the target audience for this mission. Please try another mission.\n
\n \n Back to Missions\n \n
\n )\n } else if (props.screenerComplete) {\n return (\n
\n
\n Thank you for completing the screener. Saving your responses...\n
\n
\n )\n } else {\n return (\n
\n {props.screenerLoaded ? :
Loading...
}\n
\n )\n }\n}\n\n// // This function is called when the screener is completed and sends the results to the server\n// function saveScreenerResults(url, json, setComplete, setFailed, navigate) {\n// //const navigate = useNavigate();\n\n// // Keeping it as survey to keep closer to survey hadnling. \n// const body = JSON.stringify({ survey_response: json })\n// const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n// setComplete(true);\n\n// // Need to update this to have the \"push\" function go to user's homepage\n// fetch(url, {\n// method: \"POST\",\n// headers: {\n// \"X-CSRF-Token\": token,\n// \"Content-Type\": \"application/json\"\n// },\n// credentials: \"include\",\n// body: body\n// })\n// .then(response => {\n// if (response.ok) {\n// return response.json();\n// }\n// throw new Error(\"Network response was not ok.\");\n// console.log(body)\n// })\n// .then(response => {\n\n// // PAss: message: \"Thanks for your submission!\", next: \"schedule\"}\n// // Fail: message: \"Unfortunately, you're not the target audience\", next: \"missions\"}\n\n// if (response.next == \"missions\") {\n// // Set it to failed, and let user go back to missions themself\n// setFailed(true);\n// } else if (response.next == \"review\") {\n// navigate(\"/review/\" + response.mission_id)\n// } else if (response.next == \"schedule\") {\n// navigate(\"/schedule/\" + response.mission_id)\n// } else if (response.next == \"survey\") {\n// navigate(\"/surveys/\" + response.survey_id)\n// } else if (response.next == \"autonomous\") {\n// navigate(\"/exploration/\" + response.mission_id)\n// }\n// return response\n// })\n// .catch(error => console.log(error.message));\n// }\n\n// // This function is called when the screener is loaded and grabs the screener from the server\n// async function ScreenerApiCall(screenerId) {\n// const url = \"/api/v1/surveys/\" + screenerId;\n// const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n// try {\n// const response = await fetch(url, {\n// method: \"GET\",\n// headers: {\n// \"X-CSRF-Token\": token,\n// \"Content-Type\": \"application/json\"\n// }\n// })\n\n\n// if (response.ok) {\n// const body = await response.json();\n// return body\n\n// } else if (response.status == 403) {\n// const body = await response.json()\n// console.log(\"Got here\")\n// return body\n\n// } else {\n// throw new Error(\"Network response was not ok.\");\n// }\n// } catch (error) {\n// console.log(error.message)\n// return { error: true }\n// }\n// }\n\nexport default ScreenerContent","import React, { useState, useEffect, useCallback, useReducer } from \"react\";\nimport { Link, useNavigate, useOutletContext, useParams } from \"react-router-dom\";\nimport Placeholder from '../menu_components/Placeholder';\n\n// Api Calls\nimport MissionAPI from \"../../api/api_calls/MissionAPI\";\n\n\n\n\n\nfunction ReviewContent(props) {\n const [missionLoaded, setMissionLoaded] = useState(false);\n const [missionFormat, setMissionFormat] = useState(\"\");\n const [missionTitle, setMissionTitle] = useState(\"\");\n const [missionReward, setMissionReward] = useState(\"0.0\");\n const [missionAudience, setMissionAudience] = useState(\"\");\n\n let params = useParams()\n const missionId = params.missionId;\n\n\n // Load needed data\n useEffect(() => {\n //Grab information on this user\n const GetSchedule = async () => {\n const data = await MissionAPI.show(missionId);\n\n setMissionLoaded(true);\n setMissionFormat(data.mission.format_descriptive);\n setMissionTitle(data.mission.name);\n setMissionReward(data.mission.reward_amount_usd);\n setMissionAudience(data.mission.audience_description);\n }\n\n GetSchedule();\n }, []);\n\n\n function BackToMissionLink() {\n return (\n
\n \n Back to Missions\n \n
\n )\n\n }\n\n // Set up the events portion\n function ReviewComponent() {\n // If not loaded, show placeholder.\n if (!missionLoaded) {\n return ()\n } else {\n return ()\n }\n }\n\n\n\n // Return function for ScheduleContent\n return (\n
\n
\n {missionLoaded ? missionTitle : \"Loading...\"}\n
\n Format: \n {missionLoaded ? missionFormat : \"Loading...\"}\n
\n
\n Reward: \n {missionLoaded ? \"$\" + Math.round(parseFloat(missionReward)) : \"Loading...\"}\n
\n
\n Audience: \n {missionLoaded ? missionAudience : \"Loading...\"}\n
\n
\n {/* This is where the logic renders. */}\n {/* If events -> show it. */}\n {/* If no event, then pull */}\n
\n {ReviewComponent()}\n {BackToMissionLink()}\n
\n
\n )\n\n}\n\n\nfunction ReviewText() {\n return (\n\n
\n
\n You've successfully applied for this mission. The researchers for this mission will review your profile and get back to you shortly.\n If approved, We'll reach out via email to schedule a time for you to complete the mission.\n
\n
\n Questions or concerns? Please contact us at info@despark.io\n
\n
\n )\n}\n\n\n// This function is called when the page is loaded \nasync function ScheduleApiCall(missionId) {\n const url = \"/api/v1/missions/\" + missionId;\n const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n \"X-CSRF-Token\": token,\n \"Content-Type\": \"application/json\"\n }\n })\n if (response.ok) {\n const body = await response.json();\n\n return body\n } else {\n throw new Error(\"Network response was not ok.\");\n }\n } catch (error) {\n console.log(error.message)\n return { error: true }\n }\n}\n\n\n\n\nexport default ReviewContent","import React, { useState, useEffect, useCallback } from \"react\";\nimport { Link, useNavigate, useOutletContext, useParams } from \"react-router-dom\";\nimport \"survey-react/defaultV2.css\";\n\n\n\n\n\nfunction DefaultContent(props) {\n\n\n return (\n
\n
\n No Mission Selected\n
\n
\n
\n No mission selected. Please go back to missions and choose one.\n
\n \n Back to Missions\n \n
\n
\n )\n\n}\n\n\nexport default DefaultContent","import React, { useState, useEffect, useCallback } from \"react\";\nimport { Link, useNavigate, useOutletContext, useParams } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\nimport { Survey, Model, StylesManager } from \"survey-react\";\nimport DOMPurify from \"dompurify\";\n\n\n\n// Okay, so this has two pages. \n// The first page is the generic page that is used for all missions.\n// Explains what an autonomous mission is.\n// The second page is the detailed instructions and the zoom link\n// Includes a button to get emailed the instructions. \n// Bottom of second page is a link to the closing survey. \n\n\nfunction ExplorationContent(props) {\n const [missionTitle, setMissionTitle] = useState(\"Loading...\");\n const [missionReward, setMissionReward] = useState(\"{Loading...}\");\n const [failedLoading, setFailedLoading] = useState(false);\n const [missionLoaded, setMissionLoaded] = useState(false);\n const [checkingCompletion, setCheckingCompletion] = useState(false);\n const [missionInstructions, setMissionInstructions] = useState(\"Loading...\");\n const [pageOne, setPageOne] = useState(true);\n const [zoomLink, setZoomLink] = useState(\"Loading...\");\n const [surveyId, setSurveyId] = useState(null);\n\n\n const navigate = useNavigate();\n const alert = useAlert();\n const exampleProp = useOutletContext();\n let params = useParams()\n const missionId = params.missionId;\n\n // Function that will call the api to check the length of the zoom recording. If it's long enough (more than 1 minute), then it will return true.\n async function submitAndGoToSurvey() {\n // Check the length of the zoom recording\n // If it's long enough, then go to the survey\n // If it's not long enough, then alert the user\n setCheckingCompletion(true)\n const zoomCompletion = await CheckZoomRecordingLengthApiCall(missionId)\n\n if (zoomCompletion.meeting_duration > 2) {\n // There is a recording, we can go to the survey.\n // Go to the survey\n console.log(\"Success! There is a recording. Going to the survey.\")\n navigate(`mission/${missionId}/surveys/${surveyId}`)\n } else {\n // There is no recording, alert the user\n console.log(\"There is no recording. Alerting the user.\")\n setCheckingCompletion(false)\n alert.show(\"You have not completed the mission while recording your screen\", { type: 'error' })\n }\n }\n\n\n // Load the survey\n useEffect(() => {\n //Grab information on this user\n const GetMission = async () => {\n const response = await AutonomousMissionApiCall(missionId);\n\n if (response.error) {\n setFailedLoading(true);\n return;\n }\n const data = response.data;\n setMissionTitle(data.mission_title);\n setMissionReward(data.mission_reward);\n setMissionInstructions(data.mission_instructions);\n setSurveyId(data.survey_id);\n setMissionLoaded(true);\n }\n\n const GetZoom = async () => {\n const response = await GetInstantMissionApiCall(missionId);\n if (response.error) {\n setFailedLoading(true);\n return;\n }\n const data = response.data;\n setZoomLink(data.meeting_link);\n }\n\n GetMission();\n GetZoom();\n\n\n }, []);\n\n const autonomousPageSwitcher = pageOne ?\n :\n // Add in props here\n\n return (\n
\n
\n {missionLoaded ? missionTitle :
Loading...
}\n
\n This is an exploration mission. Upon completion, the reward of ${Math.round(missionReward)} will be added to your balance.\n
\n
\n {autonomousPageSwitcher}\n
\n )\n\n}\n\nfunction AutonomousMissionPageOne(props) {\n\n return (\n
\n
\n
This mission will ask you to complete a series of tasks while recording your screen. You'll be given a set of instructions and a link to a Zoom meeting on the next page.
\n
    \n
  1. Once you've read the instructions on the next page, join the Zoom meeting on your device.
  2. \n
  3. Share your screen to the zoom meeting.
  4. \n
  5. Complete the tasks as instructed.
  6. \n
  7. When you are done, come back and fill out a short survey on your experience.
  8. \n
\n
\n \n
\n )\n\n}\n\nfunction AutonomousMissionPageTwo(props) {\n\n return (\n
\n
\n

Please complete the following tasks while sharing your screen on zoom. Then come back and complete the survey.

\n
Instructions
\n
\n
\n

These instructions have been emailed to you.

\n
\n
\n
Zoom Link
\n \n
\n

Click this link on the device you'll use for this mission. Then share your screen. This zoom link will expire in two hours

\n
\n {/* Text link that goes back to the prior page */}\n \n\n \n\n
\n )\n\n}\n\n\n// This function is called when the survey is loaded and grabs the survey from the server\nasync function AutonomousMissionApiCall(missionId) {\n // Mock it up for now. \n // return {\n // mission_title: \"Test Mission\",\n // mission_reward: 10,\n // mission_instructions: \"This is a test mission. Please do the following:
  1. Do this
  2. Do that
\",\n // survey_id: 1\n // }\n\n\n\n const url = \"/api/v1/autonomousmissions/\" + missionId;\n const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n \"X-CSRF-Token\": token,\n \"Content-Type\": \"application/json\"\n }\n })\n if (response.ok) {\n const body = await response.json();\n body[\"error\"] = false;\n return body\n } else {\n throw new Error(\"Network response was not ok.\");\n }\n } catch (error) {\n console.log(error.message)\n return { error: true }\n }\n}\n\n\nasync function GetInstantMissionApiCall(missionId) {\n // Mock it up for now. \n // return {\n // zoom_link: \"https://zoom.us/j/123456789\"\n // }\n\n const url = \"/api/v1/autonomousmissions/\" + missionId + '/getrecordinglink'\n const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n \"X-CSRF-Token\": token,\n \"Content-Type\": \"application/json\"\n }\n })\n if (response.ok) {\n const body = await response.json();\n body[\"error\"] = false;\n return body\n } else {\n throw new Error(\"Network response was not ok.\");\n }\n } catch (error) {\n console.log(error.message)\n return { error: true }\n }\n}\n\nasync function CheckZoomRecordingLengthApiCall(missionId) {\n const url = \"/api/v1/autonomousmissions/\" + missionId + '/checkrecording'\n const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n \"X-CSRF-Token\": token,\n \"Content-Type\": \"application/json\"\n }\n })\n if (response.ok) {\n const body = await response.json();\n body[\"error\"] = false;\n return body.data\n } else {\n throw new Error(\"Network response was not ok.\");\n }\n } catch (error) {\n console.log(error.message)\n return { error: true }\n }\n}\n\nexport default ExplorationContent","import React, { useEffect, useState, useContext } from \"react\";\nimport { Outlet, Routes, Route } from \"react-router-dom\";\nimport { UserPortalContainer, AccountColumn } from \"../components/LayoutComponents\";\nimport HeaderUser from \"../components/menu_components/HeaderUser\";\n\nimport SurveyContent from \"../components/survey_components/SurveyContent\";\nimport ScheduleContent from \"../components/schedule_components/ScheduleContent\";\nimport CompletedContent from \"../components/completed_components/CompletedContent\";\nimport ScreenerContent from \"../components/screener_components/ScreenerContent\";\nimport ReviewContent from \"../components/review_components/ReviewContent\";\nimport DefaultContent from \"../components/menu_components/DefaultContent\";\nimport ExplorationContent from \"../components/exploration_components/ExplorationContent\";\n\n\n\nfunction ContentOutline(props) {\n\n const exampleProp = \"This is a prop passed from ScreenerContainer to ScreenerCard\"\n\n\n\n return (\n <>\n \n \n \n
\n
\n
\n

\n {props.title}\n

\n
\n
\n
\n {/* This renders the right card through the nested Routing in App*/}\n \n {/* No id required here. */}\n } />\n } />\n } />\n\n {/* This section isn't ideal - I'd prefer missions to do the nesting. Refactor later. */}\n {/*A nested route! - https://dev.to/tywenk/how-to-use-nested-routes-in-react-router-6-4jhd*/}\n \n } />\n } />\n \n \n } />\n } />\n \n\n\n \n } />\n } />\n \n\n \n\n
\n
\n
\n \n\n )\n}\n\nexport default ContentOutline;","import React, { useEffect } from \"react\";\nimport { Link, Outlet } from \"react-router-dom\";\nimport { ConnectButton } from '@rainbow-me/rainbowkit';\n\n\n\nfunction HeaderPublic(props) {\n //Use effect that sets body, html background color to #0c0c0c\n\n useEffect(() => {\n document.body.style.backgroundColor = \"#0c0c0c\";\n }, []);\n\n const toRoute = (props.logoRoute == \"homepage\") ? \"https://despark.io\" : \"/signin\";\n\n return (\n <>\n
\n
\n
\n
\n \n despark\n \n
\n
\n \n
\n
\n
\n
\n \n \n )\n\n}\n\nexport default HeaderPublic","import React, { useState, useEffect } from \"react\";\n\nfunction FullPageBackground(props) {\n return (\n
\n
\n )\n}\n\nexport default FullPageBackground","import React from \"react\";\nimport TooltipIcon from '../../../../../assets/images/info_icon.svg';\n\n\nfunction MissionDetailsHeader(props) {\n return (\n
\n {props.children}\n
\n )\n}\n\nfunction MissionDetailsTitle(props) {\n return (\n
\n

{props.title}

\n
\n )\n}\n\nfunction MissionDetailsIconRow(props) {\n return (\n
\n {props.children}\n
\n )\n}\n\nfunction MissionDetailsIconComponent(props) {\n return (\n
\n \n \n
\n )\n}\n\nfunction MissionDetailsIcon(props) {\n return (\n
\n \n
\n )\n}\n\nfunction MissionDetailsIconText(props) {\n return (\n
\n {props.text}\n
\n )\n}\n\nfunction MissionDetailsHighlight(props) {\n return (\n
\n {props.children}\n
\n )\n}\n\nfunction MissionDetailsConnectAndVerifyTextAndTooltip(props) {\n const verifyTooltip = \"Signing your wallet verifies that you own that address. It prevents other users from impersonating you and allows us to verify that you meet the requirements for this mission.\"\n\n return (\n
\n
\n Please connect and verify your wallet to continue.\n
\n \n
\n )\n}\n\nfunction VertSpacer(props) {\n return (\n
\n )\n}\n\nexport { MissionDetailsIconRow, MissionDetailsIconComponent, MissionDetailsHeader, MissionDetailsTitle, MissionDetailsHighlight, MissionDetailsConnectAndVerifyTextAndTooltip, VertSpacer }","import React from \"react\";\nimport GrayCircleIcon from '../../../../../../assets/images/mission_detail_icons/gray_circle_icon.svg';\nimport GreenCircleIcon from '../../../../../../assets/images/mission_detail_icons/green_circle_icon.svg';\nimport RedCircleIcon from '../../../../../../assets/images/mission_detail_icons/red_circle_icon.svg';\n\n\nfunction WalletRequirements(props) {\n\n\n\n return (\n props.requirements.length === 0 ?\n \n :\n \n\n )\n}\n\nfunction WalletRequirementsEmpty(props) {\n\n return (\n
\n
\n {props.company ? props.company + \" is\" : \"We are\"} interested in feedback from users.\n
\n
\n )\n}\n\nfunction WalletRequirementsFull(props) {\n\n const walletRequirements = props.requirements.map((requirement, index) => {\n return (\n \n\n )\n });\n\n return (\n
\n
\n {props.company ? props.company + \" is\" : \"We are\"} interested in feedback from users that meet\n ALL of the following requirements:\n
\n
\n
\n {walletRequirements}\n
\n
\n
\n )\n}\n\nfunction WalletRequirement(props) {\n const classColor = props.status ? \"requirement-green\" : props.status === null ? \"requirement-gray\" : \"requirement-red\";\n const icon = props.status ? GreenCircleIcon : props.status === null ? GrayCircleIcon : RedCircleIcon;\n\n return (\n
\n
\n \n
\n
\n {props.text}\n
\n
\n\n )\n}\n\nexport default WalletRequirements;","\n\nconst apiConfig = {\n // Set the base URL for your API\n apiUrl: '/api/public/v1/missions/',\n };\n\nexport { apiConfig};\n ","// import usenavigate\nimport { apiConfig } from './apiConfig';\n\n\n\n// Helper function to add common headers to the API request\nexport const addCommonHeaders = (headers = {}) => {\n // const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n const commonHeaders = {\n 'Content-Type': 'application/json',\n \"X-CSRF-Token\": getCSRFToken(),\n // Add any other common headers here\n };\n\n return {\n ...commonHeaders,\n ...headers,\n };\n};\n\n\n\nexport async function handleResponse(response, handleRedirect) {\n\n // RULES:\n // Always retrun success: true if the response is good\n // Always return success: false otherwise; unless we navigate from here.\n\n if (response.status === 200 || response.status === 201) { //ok or created\n const data = await response.json();\n data[\"success\"] = true\n return data;\n\n } else if (response.status === 204) { // no content\n // For successful POST or PUT requests without any response body\n return { success: true };\n\n } else if (response.status === 302) { // 302 Found - Temporary Redirect\n // For redirects, we return the redirect path\n // In the future, allow components to pass in a callback function \n // to handle the redirects\n const data = await response.json();\n\n if (data.redirect_path) {\n handleRedirect(data.redirect_path)\n return {}\n } else {\n throw new Error('Redirect: Redirect path not found.');\n }\n\n } else if (response.status === 400) {\n // Bad Request\n const errorData = await response.json();\n throw new Error(`Bad Request: ${errorData.message || 'Unknown error'}`);\n\n } else if (response.status === 401) {\n // Unauthorized\n // Take the current URL, which looks like: \"/public/missions/1/screener\" or like \"public/missions/1\"\n // And limit it to the content before the last slash, which is the missionId\n const browserRouterUrl = window.location.href.split(\"#\")[1];\n // Get the first 4 elements of the URL when split by \"/\"\n const unauthorizedRedirect = browserRouterUrl.split(\"/\").slice(0, 4).join(\"/\");\n\n handleRedirect(unauthorizedRedirect)\n throw new Error('Unauthorized: Please log in.');\n } else if (response.status === 403) {\n // Forbidden\n throw new Error('Forbidden: You do not have permission to access this resource.');\n } else if (response.status === 404) {\n // Not Found\n throw new Error('Not Found: The requested resource was not found.');\n } else if (response.status === 422) {\n // Unprocessable Entity\n const errorData = await response.json();\n var errorMessages = \"\"\n if (errorData.errors) {\n errorMessages = CleanUpErrors(errorData.errors)\n } else if (errorData.error) {\n errorMessages = errorData.error\n }\n throw new Error(`Unprocessable Entity: ${errorMessages || 'Unknown error'}`);\n } else if (response.status === 500) {\n // Internal Server Error\n throw new Error('Internal Server Error: Something went wrong on the server.');\n } else {\n throw new Error(`Request failed with status ${response.status}. Please contact info@despark.io`);\n }\n};\n\nexport const handleErrors = (error) => {\n console.log('API Error:', error);\n return { success: false, error: error.message };\n};\n\n// ----------------------------------\n// ----------------------------------\n// -------- Helper Functions --------\n// ----------------------------------\n// ----------------------------------\n\n\n// Clean up 422 errors\nfunction CleanUpErrors(errors) {\n if (errors) {\n let failureReasons = \"\"\n if (errors.constructor === Object) {\n failureReasons = CleanUpMultipleErrors(errors)\n } else {\n failureReasons = errors\n }\n return failureReasons\n } else {\n return \"Unable to complete request. Please try again later. If this issue persists, contact us at info@despark.io\"\n }\n}\n\nfunction CleanUpMultipleErrors(errors) {\n\n var errorString = \"\";\n Object.keys(errors).forEach(function (key) {\n const objectName = key == \"email\" ? \"Email\" : (key == \"password\" ? \"Password\" : (key == \"password_confirmation\" ? \"Password Confirmation\" : key))\n errorString += objectName + \" \" + errors[key] + \"\\n\";\n });\n return errorString\n}\n\nfunction getCSRFToken() {\n const cookies = document.cookie;\n const splitCookies = cookies.split('; ');\n const desparkToken = splitCookies.find(cookie => cookie.startsWith(\"_despark_token=\"))\n return desparkToken ? desparkToken.split('=')[1] : null\n}\n","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n // Get the signature message based on this wallet\n getSignatureMessage: async (wallet_address, mission_id, handleRedirect = null) => {\n const url = apiConfig.apiUrl + mission_id + \"/get_signature_message\";\n\n const body = JSON.stringify({\n wallet_address: wallet_address\n })\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n credentials: 'include',\n body: body\n })\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n result = handleErrors(error);\n result[\"signature_message\"] = null\n return result\n }\n },\n\n // Check if the user is on the correct page when they click into the app\n checkInitialPage: async (pathname, mission_id, handleRedirect = null) => {\n const lastUrlSlug = pathname.split(\"missions/\" + mission_id)[1]\n const url = apiConfig.apiUrl + mission_id + \"/check_page?current_page=\" + lastUrlSlug;\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n // Create a new session for this user\n createSession: async (wallet_address, signature_data, mission_id, handleRedirect = null) => {\n const url = apiConfig.apiUrl + mission_id + \"/session\";\n\n const body = JSON.stringify({\n wallet: {\n address: wallet_address,\n signature: signature_data\n }\n })\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n // Destroy the session for this user\n destroySession: async (mission_id, handleRedirect = null) => {\n const url = apiConfig.apiUrl + mission_id + \"/session\";\n\n try {\n const response = await fetch(url, {\n method: \"DELETE\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n}\n\n","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n // Get the signature message based on this wallet\n getMission: async (mission_id, handleRedirect = null) => {\n const url = apiConfig.apiUrl + mission_id;\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n const returnData = handleErrors(error);\n returnData[\"mission\"] = null\n return returnData\n }\n },\n\n // Check whether the wallet meets the mission requirements\n checkWalletRequirements: async (wallet_address, mission_id, handleRedirect) => {\n const url = apiConfig.apiUrl + mission_id + \"/check_wallet_requirements\";\n\n\n const body = JSON.stringify({\n wallet_address: wallet_address\n })\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n }\n\n\n}\n\n","import React, { useState, useEffect } from \"react\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\n\nimport { ConnectButton } from '@rainbow-me/rainbowkit';\nimport { MissionDetailsHighlight, MissionDetailsConnectAndVerifyTextAndTooltip, VertSpacer } from \"../../overview_components/CommonOverviewComponents\";\nimport WalletRequirements from \"./WalletRequirements\";\nimport { useSignMessage, useAccount } from \"wagmi\";\nimport { PrimaryButtonSmall, SecondaryButtonSmall } from \"../../../preauth_portal/components/CommonComponents\";\n\n// API Calls\nimport SessionAPI from \"../../api/api_calls/SessionAPI\";\nimport PublicMissionAPI from \"../../api/api_calls/PublicMissionAPI\";\n\n\n\n\n\nfunction PMOverview(props) {\n let params = useParams()\n const navigate = useNavigate();\n const alert = useAlert();\n const missionId = params.missionId;\n const { address } = useAccount();\n const [isConnected, setIsConnected] = useState(false);\n const [loggedIn, setLoggedIn] = useState(false);\n const [meetsRequirements, setMeetsRequirements] = useState(false);\n const [requirementsLoading, setRequirementsLoading] = useState(false)\n const [showNextButton, setShowNextButton] = useState(false)\n\n const [messageToSign, setMessageToSign] = useState(\"Despark is having a server error. Signing this is harmless, but won't log you in. Please try again later.\");\n const { data, isError, isLoading, isSuccess, signMessage } = useSignMessage();\n const mockedRequirements = [\n {\n status: null,\n text: \"Wallet has used Uniswap on Ethereum\"\n },\n {\n status: null,\n text: \"Wallet has balance of at least 0.1 ETH\"\n },\n ]\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n // Initialize tooltips \n useEffect(() => {\n const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle=\"tooltip\"]')\n const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))\n }, []);\n\n // Set isConnected & get signature message\n useEffect(() => {\n setIsConnected(!!address);\n\n async function GetMessage(address) {\n const message = await SessionAPI.getSignatureMessage(address, missionId, navigate)\n if (message.success) {\n setMessageToSign(message.signature_message)\n } else {\n console.log(\"Error getting signature message\")\n }\n }\n\n if (address) {\n GetMessage(address)\n // This is where we will start the address prep.\n }\n }, [address]);\n\n // Check Signature validity and whether the wallet meets teh requirements\n useEffect(() => {\n\n async function CreateSession() {\n const session = await SessionAPI.createSession(address, data, missionId, navigate)\n if (session.success) {\n // This is where the new checkwalletrequirements will go.\n setLoggedIn(true)\n } else {\n setLoggedIn(false)\n console.log(session.error)\n alert.show(session.error, { type: 'error' })\n }\n }\n\n async function CheckWalletRequirements() {\n const response = await PublicMissionAPI.checkWalletRequirements(address, missionId, navigate)\n if (response.success) {\n props.setWalletRequirements(response.wallet_requirements)\n setMeetsRequirements(response.meets_requirements)\n } else {\n console.log(response.error)\n }\n setRequirementsLoading(false)\n }\n\n // So, if we signed the message, in parallel: \n // 1. Check if we meet the requirements\n // 2. Check signature validity and create a session\n if (isSuccess) {\n CreateSession()\n CheckWalletRequirements()\n setRequirementsLoading(true)\n }\n }, [isSuccess]);\n\n useEffect(() => {\n if (loggedIn && meetsRequirements) {\n setShowNextButton(true)\n }\n\n }, [loggedIn, meetsRequirements]);\n\n function signAndAlert() {\n signMessage({ message: messageToSign })\n alert.show(\"Please open your wallet to sign the login message\", { type: 'info' })\n }\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n const SecondButton = () => {\n if (showNextButton) {\n return ( navigate(props.nextPath)} />)\n } else if (isConnected) {\n return ( signAndAlert()} signatureLoading={isLoading} />)\n } else {\n return (<>)\n }\n }\n\n\n\n return (\n <>\n \n {props.description}\n \n \n {props.missionStatus != \"open\" ? :\n <>\n \n
\n {!loggedIn ? : <> }\n
\n \n \n {requirementsLoading ?
\"Loading...\"
: <>}\n
\n }\n\n \n )\n\n}\n\nfunction ClosedMissionText() {\n\n return (\n
\n
This feedback mission is now closed. Thank you for your interest.
\n
\n )\n}\n\n\nfunction ButtonOrLoadingMessage(props) {\n if (props.signatureLoading) {\n return (\n \n )\n } else {\n return (\n \n )\n }\n}\n\nexport default PMOverview;","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n\n getSurvey: async (missionId, surveyType = \"\", handleRedirect = null) => {\n // This function is called when the screener is loaded and grabs the screener from the server\n const paramString = surveyType ? \"?survey_type=\" + surveyType : \"\"\n const url = apiConfig.apiUrl + missionId + \"/survey\" + paramString;\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include'\n })\n\n return await handleResponse(response, handleRedirect);\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n createSurveyResponse: async (missionId, surveyId, json, handleRedirect = null) => {\n const url = apiConfig.apiUrl + missionId + \"/survey_responses\";\n\n const body = JSON.stringify(\n {\n survey_response: json,\n survey_id: surveyId\n })\n\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n credentials: 'include',\n body: body\n })\n\n return await handleResponse(response, handleRedirect);\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n}","import React, { useState, useEffect, useCallback, useRef } from \"react\";\nimport { Link, useNavigate, useOutletContext, useParams } from \"react-router-dom\";\nimport { Survey, Model, StylesManager } from \"survey-react\";\nimport 'survey-react/defaultV2.min.css';\n\nimport { PrimaryButtonSmall } from \"../../../preauth_portal/components/CommonComponents\";\nimport LoadingIcon from \"../../standard_components/LoadingIcon\";\n\n\n// API Calls\nimport SurveyAPI from \"../../api/api_calls/SurveyAPI\";\n\n\n\n\nfunction PublicScreener(props) {\n const [screener, setScreener] = useState(null);\n const [screenerComplete, setScreenerComplete] = useState(false);\n const [failedLoading, setFailedLoading] = useState(false);\n const [screenerFailed, setScreenerFailed] = useState(false);\n const [screenerLoaded, setScreenerLoaded] = useState(false);\n const [screenerId, setScreenerId] = useState(null);\n const stateRef = useRef();\n\n stateRef.current = screenerId;\n\n\n let params = useParams()\n const missionId = params.missionId;\n StylesManager.applyTheme(\"defaultV2\");\n const navigate = useNavigate();\n\n\n\n // On complete, save the screener results\n const onScreenerComplete = useCallback(async (sender) => {\n\n setScreenerComplete(true);\n\n const response = await SurveyAPI.createSurveyResponse(\n missionId,\n stateRef.current, // This lets us send the screenerId to the API call (otherwise it's stale and null)\n sender.data, // This is the survey data\n navigate\n )\n\n if (!response.pass) {\n // Set it to failed and show the user the failed status.\n setScreenerFailed(true);\n } else {\n navigate(response.next_path)\n }\n\n }, []);\n\n // Load the screener\n useEffect(() => {\n // Grab information on this user\n async function GetScreener() {\n const data = await SurveyAPI.getSurvey(missionId, \"screener\", navigate);\n\n if (data.success == false) {\n setFailedLoading(true);\n return;\n }\n // Once it loads, then run through and set all the screener stuff\n const tempScreener = new Model(await data.survey);\n tempScreener.onComplete.add(onScreenerComplete);\n setScreener(tempScreener);\n setScreenerLoaded(true);\n setScreenerId(data.survey_id);\n }\n\n GetScreener();\n }, []);\n\n\n return (\n <>\n
\n Screener required: To help us gather the most relevant insights, please complete this short screener before proceeding to the main feedback session.\n
\n \n \n )\n\n}\n\nfunction SwitchCompleteAndFailedScreener(props) {\n const lastRoute = \"/public/missions/\" + props.missionId;\n if (props.failedLoading) {\n return (\n
\n
\n Screener not available at this time.\n
\n props.navigate(lastRoute)} />\n
\n )\n } else if (props.screenerFailed) {\n return (\n
\n
\n Unfortunately, you aren't the target audience for this feedback session. Thank you for your interest.\n
\n props.navigate(lastRoute)} />\n\n
\n )\n } else if (props.screenerComplete) {\n return (\n
\n
\n Thank you for completing the screener. Saving your responses...\n
\n
\n )\n } else {\n return (\n
\n {props.screenerLoaded ? : }\n
\n )\n }\n}\n\n\n\nexport default PublicScreener","import React, { useState, useEffect, useCallback, useRef } from \"react\";\nimport { Link, useNavigate, useOutletContext, useParams } from \"react-router-dom\";\nimport { Survey, Model, StylesManager } from \"survey-react\";\nimport 'survey-react/defaultV2.min.css';\n\nimport { PrimaryButtonSmall } from \"../../../preauth_portal/components/CommonComponents\";\nimport LoadingIcon from \"../../standard_components/LoadingIcon\";\n\n// API Calls\nimport SurveyAPI from \"../../api/api_calls/SurveyAPI\";\n\n\n\n\n\nfunction PublicSurvey(props) {\n const [survey, setSurvey] = useState(null);\n const [surveyComplete, setSurveyComplete] = useState(false);\n const [failedLoading, setFailedLoading] = useState(false);\n const [surveyLoaded, setSurveyLoaded] = useState(false);\n const [surveyFailed, setSurveyFailed] = useState(false);\n const [surveyId, setSurveyId] = useState(null);\n const stateRef = useRef();\n\n stateRef.current = surveyId;\n const STORAGE_ITEM_KEY = \"survey-\" + surveyId;\n\n\n\n let params = useParams()\n const missionId = params.missionId;\n StylesManager.applyTheme(\"defaultV2\");\n const navigate = useNavigate();\n\n\n\n // On complete, save the survey results\n const onSurveyComplete = useCallback(async (sender) => {\n\n setSurveyComplete(true);\n\n const response = await SurveyAPI.createSurveyResponse(\n missionId,\n stateRef.current, // This lets us send the screenerId to the API call (otherwise it's stale and null)\n sender.data, // This is the survey data\n navigate\n )\n navigate(response.next_path)\n\n\n }, []);\n\n // Save the survey data to local storage\n function saveSurveyData(survey) {\n const data = survey.data;\n data.pageNo = survey.currentPageNo;\n window.localStorage.setItem(STORAGE_ITEM_KEY, JSON.stringify(data));\n }\n\n // Restore the survey data from local storage\n function restoreSurveyData(survey) {\n const prevData = window.localStorage.getItem(STORAGE_ITEM_KEY) || null;\n if (prevData) {\n const data = JSON.parse(prevData);\n survey.data = data;\n if (data.pageNo) {\n survey.currentPageNo = data.pageNo;\n }\n }\n }\n\n // Load the survey\n useEffect(() => {\n // Grab information on this user\n async function GetSurvey() {\n const data = await SurveyAPI.getSurvey(missionId, \"survey\", navigate);\n\n if (data.success == false) {\n setFailedLoading(true);\n return;\n }\n // Once it loads, then run through and set all the survey stuff\n const surveyData = await data.survey;\n // Manually turn off autofocus for these.\n // Not working, but based on https://surveyjs.answerdesk.io/ticket/details/t8403/first-question-gets-focused-automatically\n // surveyData[\"focusFirstQuestionAutomatic\"] = false;\n const tempSurvey = new Model(surveyData);\n // Save survey results when users change a question value...\n tempSurvey.onValueChanged.add(saveSurveyData);\n // ... and switch to the next page\n tempSurvey.onCurrentPageChanged.add(saveSurveyData);\n // Save the survey results when the survey is complete\n tempSurvey.onComplete.add(onSurveyComplete);\n // Restore the survey data from local storage\n restoreSurveyData(tempSurvey);\n setSurvey(tempSurvey);\n setSurveyLoaded(true);\n setSurveyId(data.survey_id);\n }\n\n GetSurvey();\n }, []);\n\n\n return (\n <>\n
\n Please complete the survey below.\n
\n \n \n )\n\n}\n\nfunction SwitchCompleteAndFailedSurvey(props) {\n const lastRoute = \"/public/missions/\" + props.missionId;\n if (props.failedLoading) {\n return (\n
\n
\n Survey not available at this time.\n
\n props.navigate(lastRoute)} />\n
\n )\n } else if (props.surveyFailed) {\n return (\n
\n
\n Unfortunately, you aren't the target audience for this feedback session. Thank you for your interest.\n
\n props.navigate(lastRoute)} />\n\n
\n )\n } else if (props.surveyComplete) {\n return (\n
\n
\n Thank you for completing the survey. Saving your responses...\n
\n
\n )\n } else {\n return (\n
\n {props.surveyLoaded ? : }\n
\n )\n }\n}\n\n\n\nexport default PublicSurvey","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n createCashOut: async (missionId, walletAddress, blockchain, handleRedirect = null) => {\n const url = apiConfig.apiUrl + missionId + \"/cash_outs\";\n\n\n const body = JSON.stringify({\n cash_out: {\n eth_address: walletAddress,\n blockchain: blockchain\n }\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n getCashOuts: async (missionId, handleRedirect = null) => {\n const url = apiConfig.apiUrl + missionId + \"/cash_outs\";\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n deleteCashOut: async (missionId, cashOutId, handleRedirect = null) => {\n const url = apiConfig.apiUrl + missionId + \"/cash_outs/\" + cashOutId;\n\n const body = JSON.stringify({\n cash_out: {\n id: cashOutId,\n }\n });\n\n try {\n const response = await fetch(url, {\n method: \"DELETE\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n}","import React, { useState, useEffect } from \"react\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\n\nimport { MissionDetailsHighlight, VertSpacer } from \"../../overview_components/CommonOverviewComponents\";\nimport { FormField, PrimaryButtonSmall } from \"../../../preauth_portal/components/CommonComponents\";\nimport IsValidEVMAddress from \"../../../../utility_components/IsValidAddress\";\n\n// API Calls\nimport CashOutAPI from \"../../api/api_calls/CashOutAPI\";\n\n\nfunction PublicCashOut(props) {\n const [blockchain, setBlockchain] = useState(\"Polygon\");\n const [walletAddress, setWalletAddress] = useState(\"\");\n const [confirmAddress, setConfirmAddress] = useState(\"\");\n\n let params = useParams()\n const missionId = params.missionId;\n const navigate = useNavigate();\n const alert = useAlert();\n\n\n\n\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n //Update state on input change\n function onChange(event) {\n switch (event.target.name) {\n case 'address':\n setWalletAddress(event.target.value)\n case 'confirmAddress':\n setConfirmAddress(event.target.value)\n }\n }\n\n function onSubmit(event) {\n event.preventDefault();\n\n // Make sure eth address matches confirmed eth address\n if (walletAddress != confirmAddress) {\n alert.show(\"Wallet addresses do not match\", { type: 'error' })\n return;\n }\n\n // Make sure eth address is valid\n if (IsValidEVMAddress(walletAddress) == false) {\n alert.show(\"Not a valid \" + blockchain + \" address\",\n { type: 'error' })\n return;\n }\n\n async function CashOutRequest() {\n const returnData = await CashOutAPI.createCashOut(missionId, walletAddress, blockchain, navigate)\n\n if (returnData.success) {\n props.setRefreshCashOuts(props.refreshCashOuts + 1)\n alert.show(\"Thank you for participating! Your reward will be sent within 48 hours\", { type: \"success\" })\n } else {\n alert.show(returnData.error.message, { type: 'error' })\n }\n }\n\n CashOutRequest();\n }\n\n\n\n return (\n <>\n \n \n )\n\n}\n\nfunction CashOutForm(props) {\n\n return (\n
props.onSubmit(event)} className=\"form row d-flex row-gap-4 \">\n
\n What wallet should we send the reward to? This will be sent on {props.blockchain} within 48 hours.\n
\n
\n
\n \n \n \n
\n\n \n )\n}\n\n\nexport default PublicCashOut;","\n\n\n// // Sign up the User\nasync function SignUpApiCall(body) {\n const url = \"/users/signupnew\";\n const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n try {\n const myResponse = await fetch(url, {\n method: \"POST\",\n headers: {\n \"X-CSRF-Token\": token,\n \"Content-Type\": \"application/json\"\n },\n body: body\n })\n\n if (myResponse.ok) {\n const responseBody = await myResponse.json();\n\n const returnData = {\n userEmail: responseBody.user_email,\n success: true,\n next_path: responseBody.next_path,\n failureReason: []\n }\n return returnData\n\n } else if (myResponse.status == 422) {\n const responseBody = await myResponse.json();\n let failureReasons = null;\n // Sometimes Rails returns a dcitionary of errors. Handle it. \n if (responseBody.errors.constructor === Object) {\n failureReasons = responseBody.errors ? CleanUpErrors(responseBody.errors) : [\"Unable to complete request. Please try again later. If this issue persists, contact us at info@despark.io\"]\n } else {\n failureReasons = responseBody.errors ? responseBody.errors : \"Something went wrong.\"\n }\n const returnData = {\n success: false,\n failureReasonArray: failureReasons\n }\n return returnData\n } else {\n console.log(\"Other Issue\")\n throw new Error(\"Network response was not ok.\");\n }\n\n } catch (error) {\n const returnData = {\n success: false,\n failureReasonArray: [\"Unable to complete request. Please try again later. If this issue persists, contact us at info@despark.io.\"]\n }\n return returnData\n }\n}\n\nfunction CleanUpErrors(errors) {\n var errorArray = [];\n Object.keys(errors).forEach(function (key) {\n const objectName = key == \"email\" ? \"Email\" : (key == \"password\" ? \"Password\" : \"Password Confirmation\")\n errorArray.push(objectName + \" \" + errors[key]);\n });\n return errorArray\n}\n\nexport default SignUpApiCall;","import React, { useState, useEffect } from \"react\";\nimport { LogInCard, FormField, PrimaryButton } from \"../../../preauth_portal/components/CommonComponents\";\nimport { useAlert } from 'react-alert';\nimport SignUpApiCall from \"../../api/api_calls/SignUpApiCall\";\n\n\nfunction PublicSignUpCard(props) {\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [passwordConfirmation, setPasswordConfirmation] = useState(\"\")\n const alert = useAlert();\n\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n //Update state on input change\n function onChange(event) {\n switch (event.target.name) {\n case 'email':\n setEmail(event.target.value)\n case 'password':\n setPassword(event.target.value)\n case 'passwordConfirmation':\n setPasswordConfirmation(event.target.value)\n }\n }\n\n // The log in function called on submit\n function onSubmit(event) {\n event.preventDefault();\n const url = \"/users/signupnew\";\n\n\n\n if (email.length == 0 || password.length == 0) { return; }\n if (password != passwordConfirmation) { alert.show(\"Passwords do not match\", { type: 'error' }); return; }\n if (password.length <= 7) { alert.show(\"Password must be at least 8 characters long\", { type: 'error' }); return; }\n\n // You must do it this way, with the user on the outside. \n const body = JSON.stringify({\n user: {\n email: email,\n password: password,\n password_confirmation: passwordConfirmation\n }\n });\n\n const SignUpUser = async (body) => {\n const result = await SignUpApiCall(body);\n\n if (result.success) {\n\n //We no longer set this, as they aren't logged in under confirmable.\n // props.setUserEmail && props.setUserEmail(result.userEmail); \n // localStorage.removeItem(\"user\");\n // localStorage.setItem(\"user\", JSON.stringify(result.userEmail));\n // We use the javascript here to force it reload.\n // We pass through a rails route to force cSRF token to reload.\n window.location.href = result.next_path\n } else {\n // sets the message to display to user\n result.failureReasonArray.forEach((reason) => {\n alert.show(reason, { type: 'error' });\n })\n }\n }\n\n\n SignUpUser(body)\n }\n\n return (\n
\n
{/* This sets the width and margins */}\n \n
Give Feedback, Get Paid
\n
\n Enjoy giving feedback? Create a Despark account and you can get paid to help improve web3\n
\n\n
\n
onSubmit(event)} className=\"form bg-transparent-color no-outline text-white w-100 mt-5\">\n \n \n \n
\n \n
\n \n
\n
\n
\n
\n )\n\n}\n\nexport default PublicSignUpCard;","import React, { useState, useEffect } from \"react\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\n\nimport { MissionDetailsHighlight, VertSpacer } from \"../../overview_components/CommonOverviewComponents\";\nimport { SecondaryButtonSmall } from \"../../../preauth_portal/components/CommonComponents\";\nimport LoadingIcon from \"../../standard_components/LoadingIcon\";\n\n// API Calls\nimport CashOutAPI from \"../../api/api_calls/CashOutAPI\";\n\n\nfunction PublicCashOutTable(props) {\n let params = useParams()\n const missionId = params.missionId;\n const navigate = useNavigate();\n const alert = useAlert();\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n // Delete the cash out and send to create a new one\n function onSubmit(cashOutId) {\n\n async function CashOutRequest() {\n const returnData = await CashOutAPI.deleteCashOut(missionId, cashOutId, navigate)\n\n if (returnData.success) {\n props.setRefreshCashOuts(props.refreshCashOuts + 1)\n alert.show(\"Request deleted\", { type: \"success\" })\n // Can't do state here because of the Rails backend. \n } else {\n alert.show(returnData.error.message, { type: 'error' })\n }\n }\n\n CashOutRequest();\n }\n\n function StatusLink({ cashOut }) {\n if (cashOut.status == \"completed\") {\n return (\n Completed - Link \n )\n } else {\n return (\n cashOut.status\n )\n }\n }\n\n function CashOutRows() {\n const rows = props.cashOutList.map((cashOut) => {\n return (\n \n {cashOut.eth_address} \n {cashOut.blockchain} \n ${cashOut.usd_amount_formatted} \n \n {cashOut.status == \"requested\" ?\n ( onSubmit(cashOut.id)} text=\"Delete & Update\" />)\n :\n <>\n }\n \n \n )\n })\n\n return (\n \n {rows}\n \n )\n }\n\n function CashOutHeader() {\n return (\n \n \n Address \n Chain \n Amount \n Status \n Edit \n \n \n )\n\n }\n\n function CashOutTableHelper() {\n return (\n
\n
\n \n \n \n
\n
\n
\n Cash outs are generally processed within 48 hours.\n
\n
\n )\n }\n\n\n // ADD IN THE LINK FOR COMPLETED ONES\n return (\n <>\n
Cash Out Status
\n {props.cashOutLoaded ? : }\n \n )\n\n}\n\n\nexport default PublicCashOutTable;","import React, { useState, useEffect } from \"react\";\nimport { useNavigate, useParams, useLocation } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\nimport { MissionDetailsHighlight, VertSpacer } from \"../../overview_components/CommonOverviewComponents\";\nimport PublicSignUpCard from \"./PublicSignUpCard\";\nimport PublicCashOutTable from \"./PublicCashOutTable\";\nimport PublicCashOut from \"./PublicCashOut\";\nimport LoadingIcon from \"../../standard_components/LoadingIcon\";\n\n// API Calls\nimport CashOutAPI from \"../../api/api_calls/CashOutAPI\";\n\nfunction PublicComplete(props) {\n const [completionNotice, setCompletionNotice] = useState(\"Thank you for participating!\");\n const [cashOutList, setCashOutList] = useState([])\n const [cashOutLoaded, setCashOutLoaded] = useState(false)\n const [cashOutCount, setCashOutCount] = useState(0)\n const [refreshCashOuts, setRefreshCashOuts] = useState(0)\n\n const location = useLocation();\n const navigate = useNavigate();\n let params = useParams()\n const missionId = params.missionId;\n const alert = useAlert();\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n useEffect(() => {\n if (location.state) {\n if (location.state.receivedReward) {\n setCompletionNotice(\"Thank you for participating! Your reward will be sent within 48 hours\")\n }\n }\n\n\n\n // Get the list of current cashouts\n async function GetCashOuts() {\n const cashOutData = await CashOutAPI.getCashOuts(missionId, navigate)\n if (cashOutData.success) {\n setCashOutList(cashOutData.cash_outs)\n setCashOutCount(cashOutData.cash_outs.length)\n setCashOutLoaded(true)\n }\n }\n\n GetCashOuts()\n }, [refreshCashOuts]);\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n function CashOutSection() {\n if (props.hasReward) {\n if (cashOutLoaded) {\n if (cashOutCount > 0) {\n // If there are cashouts, show the table\n return (\n <>\n \n \n \n \n )\n } else {\n // If there are no cashouts, show the cashout form\n return (\n <>\n \n \n )\n }\n } else {\n // If the cashouts are still loading, show a loading message\n return (\n <>\n \n \n )\n }\n } else {\n // If the mission has no reward, show the sign up card\n return (\n <>\n \n \n )\n }\n }\n\n\n return (\n <>\n \n {completionNotice}\n \n \n \n\n \n )\n\n}\n\nexport default PublicComplete;","import React, { useState } from \"react\";\nimport { DropdownQuestion, DropdownOption, PrimaryButtonSmall } from \"../../../preauth_portal/components/CommonComponents\";\n\n\n\nfunction DateTimeSelects(props) {\n const [appointmentList, setAppointmentList] = useState(props.appointmentList)\n const [timeOptionSelectHelper, setTimeOptionSelectHelper] = useState(\"0\")\n\n const [selectedAppointmentId, setSelectedAppointmentId] = useState(null)\n const [selectedDate, setSelectedDate] = useState(null)\n const [selectedTime, setSelectedTime] = useState(null)\n\n // ----------------------------------------\n // Date and Time Set Up\n // ----------------------------------------\n\n function finalizeAppointment() {\n props.onSelect(selectedAppointmentId, selectedDate, selectedTime)\n }\n\n // Set the date selected\n function setDate(value) {\n setSelectedDate(value)\n\n // Reset the time variables\n setTimeOptionSelectHelper(\"0\")\n setSelectedAppointmentId(null)\n setSelectedTime(null)\n }\n\n // Set the time selected\n // Also set the id\n function setTime(value) {\n setTimeOptionSelectHelper(value)\n setSelectedTime(value)\n const id = appointmentList.days.find(day => day.date_text == selectedDate).appointments.find(appointment => appointment.start_time_text == value).mission_event_availability_id\n setSelectedAppointmentId(id)\n }\n\n // Function to get the time list.\n function getTimeList() {\n if (selectedDate) {\n return appointmentList.days.find(day => day.date_text == selectedDate).appointments.map(appointment => {\n const time = appointment.start_time_text\n return (\n \n )\n })\n }\n }\n\n // Get hte list of dates\n let dateList = appointmentList.days.map(day => {\n const date = day.date_text\n return (\n \n )\n })\n\n let timeList = getTimeList()\n\n const buttonText = props.submitting ? \"Loading...\" : (props.rescheduleClicked ? \"Submit\" : \"Next\")\n\n function BackButton() {\n if (props.rescheduleClicked) {\n return (\n \n )\n } else {\n return (<>)\n }\n }\n // ----------------------------------------\n // ----------------------------------------\n // ------------ Rendering ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n\n return (\n <>\n
\n
\n
\n
\n Timezone:\n
\n
\n
\n
\n {props.timezone}\n
\n
\n
\n
\n
\n
\n Available Days:\n
\n
\n
\n \n {dateList}\n \n
\n
\n
\n
\n
\n Available Times:\n
\n
\n
\n \n \n {timeList}\n \n
\n
\n
\n
\n
\n finalizeAppointment()} isDisabled={selectedTime == null || props.submitting} />\n
\n \n
\n\n \n )\n}\n\nexport default DateTimeSelects;","import React, { useState, } from \"react\";\nimport { MissionDetailsHighlight, VertSpacer } from \"../../overview_components/CommonOverviewComponents\";\nimport { PrimaryButton, PrimaryButtonSmall, FormField } from \"../../../preauth_portal/components/CommonComponents\";\n\nfunction EmailSelect(props) {\n const [email, setEmail] = useState(\"\")\n const [name, setName] = useState(\"\")\n\n\n function onChange(event) {\n if (event.target.name == \"email\") {\n setEmail(event.target.value)\n } else if (event.target.name == \"name\") {\n setName(event.target.value)\n }\n }\n\n function ChangeButton(props) {\n\n return (\n \n Change\n \n )\n }\n\n return (\n <>\n \n
\n
\n Selected Time:\n
\n
\n {props.selectedDate} @ {props.selectedTime}\n
\n props.setSelectingEmail(false)} />\n
\n
\n \n
\n
\n Where should we send the invite?\n
\n
\n We will ONLY send you information about this session, including an invitation and information on the session and reward. We will NOT share your email.\n
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n props.onSubmit(email, name)} disabled={props.submitting} />\n
\n
\n \n )\n}\n\nexport default EmailSelect;","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n getPublicScheduleStatus: async (missionId, timezone = \"\", handleRedirect = null) => {\n const timeZoneString = timezone != \"\" ? \"?timezone=\" + timezone : \"\"\n const url = apiConfig.apiUrl + missionId + \"/schedule\" + timeZoneString;\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n cancelUpcomingEvent: async (missionId, handleRedirect = null) => {\n const url = apiConfig.apiUrl + missionId + \"/schedule/cancel\";\n\n try {\n const response = await fetch(url, {\n method: \"PUT\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n submitAppointment: async (missionId, missionEventAvailabilityId, email, name, handleRedirect = null) => {\n const url = apiConfig.apiUrl + missionId + \"/schedule\"\n\n\n const body = JSON.stringify({\n mission_event_availability_id: missionEventAvailabilityId,\n email: email,\n name: name\n\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n}","import React, { useState, useEffect, useCallback, useReducer } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\nimport DateTimeSelects from \"./DateTimeSelects\";\nimport EmailSelect from \"./EmailSelect\";\n\n// API Calls\nimport ScheduleAPI from \"../../api/api_calls/ScheduleAPI\";\n\nfunction PublicSimpleScheduler(props) {\n const navigate = useNavigate()\n const alert = useAlert()\n\n const [selectedAppointmentId, setSelectedAppointmentId] = useState(null)\n const [selectedDate, setSelectedDate] = useState(null)\n const [selectedTime, setSelectedTime] = useState(null)\n const [email, setEmail] = useState(\"\")\n const [name, setName] = useState(\"\")\n\n\n const [selectingEmail, setSelectingEmail] = useState(false)\n const [submitting, setSubmitting] = useState(false)\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n\n\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n function SelectAppointment(appointmentId, date, time) {\n if (!props.rescheduleClicked) {\n setSelectedAppointmentId(appointmentId)\n setSelectedDate(date)\n setSelectedTime(time)\n setSelectingEmail(true)\n } else {\n setSelectedAppointmentId(appointmentId)\n setSelectedDate(date)\n setSelectedTime(time)\n onSubmit(props.email, props.name, appointmentId)\n }\n }\n\n\n function onSubmit(input_email, input_name, appointmentId = null) {\n // Submit from here\n setEmail(input_email)\n setEmail(input_name)\n const updatedAppointmentId = appointmentId ? appointmentId : selectedAppointmentId\n \n async function submitAppointment(finalEmail, finalName, finalAppointmentId) {\n // Had to accept an input of appointmentId, because the state didn't update in time from SelectAppointment\n const response = await ScheduleAPI.submitAppointment(props.missionId, finalAppointmentId, finalEmail, finalName, navigate)\n\n if (response.success) {\n // Refresh the page\n navigate(0);\n } else {\n alert.show(response.error, { type: 'error'})\n }\n setSubmitting(false)\n }\n setSubmitting(true)\n submitAppointment(input_email, input_name, updatedAppointmentId )\n\n }\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Rendering ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n return (\n < >\n
\n Please select a slot to {props.rescheduleClicked ? \"re\" : \"\"}schedule your {props.timeEstimate}-minute feedback session. Video is {props.videoRequired ? \"\" : \"NOT \"}required.\n
\n {selectingEmail ?\n \n :\n \n }\n\n \n )\n}\n\n\n\nexport default PublicSimpleScheduler\n","import React, { useState, useEffect, useCallback, useReducer } from \"react\";\nimport { MissionDetailsHighlight } from \"../../overview_components/CommonOverviewComponents\";\nimport { PrimaryButtonSmall } from \"../../../preauth_portal/components/CommonComponents\";\n\n\nfunction PublicScheduledSessionList(props) {\n const fiveMinutes = 5 * 60 * 1000\n const startTimeAsDate = new Date(props.start_time)\n const timeDifferenceFromNowToStart = (startTimeAsDate) - (new Date()) // Time difference from start time to now in milliseconds\n\n const timeToWait = timeDifferenceFromNowToStart - fiveMinutes\n\n const [joinButtonActive, setJoinButtonActive] = useState(timeDifferenceFromNowToStart < fiveMinutes);\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects -------------\n // ----------------------------------------\n // ----------------------------------------\n\n // Set a Timeout to activcate teh button when \n // we're within five minutes of the meeting start time\n useEffect(() => {\n if (timeToWait > 0) {\n const buttonTimer = setTimeout(() => {\n setJoinButtonActive(true)\n }, timeToWait);\n\n return () => clearTimeout(buttonTimer);\n }\n }, [])\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n function RescheduleButton() {\n return (\n props.reschedule()}>\n Reschedule\n \n )\n }\n\n function CancelButton() {\n return (\n props.cancel()}>\n Cancel\n \n )\n }\n\n function joinMeeting() {\n window.open(props.meetingUrl, '_blank');\n }\n\n return (\n <>\n
\n You've scheduled a time for your feedback session. After attending and completing the session, you'll be sent an email with details of your reward. Your email is “{props.email}” and pseudonym is \"{props.name}\".\n
\n \n
\n
\n Selected Time:\n
\n
\n {props.selectedDate} @ {props.selectedTime}\n
\n \n \n
\n
\n
\n joinMeeting()} isDisabled={!joinButtonActive} />\n
\n \n )\n}\n\nexport default PublicScheduledSessionList;","import React from \"react\";\nimport { VertSpacer, MissionDetailsHighlight } from \"../../overview_components/CommonOverviewComponents\";\nimport { PrimaryButtonSmall } from \"../../../preauth_portal/components/CommonComponents\";\n\n\nfunction PublicSchedulePlaceholder(props) {\n\n\n function BackButton() {\n if (props.rescheduleClicked) {\n return (\n
\n
\n props.cancelReschedule()} />\n
\n
\n )\n } else {\n return (<>)\n }\n }\n\n return (\n <>\n \n There are no currently available times. We're working to find new time slots for sessions. Please check back again soon.\n \n \n \n \n\n\n\n )\n}\n\nexport default PublicSchedulePlaceholder","import React, { useState, useEffect } from \"react\";\nimport { useNavigate, useParams, useLocation } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\nimport { MissionDetailsHighlight, VertSpacer } from \"../../overview_components/CommonOverviewComponents\";\nimport PublicSimpleScheduler from \"./PublicSimpleScheduler\";\nimport PublicScheduledSessionList from \"./PublicScheduledSessionList\";\nimport PublicSchedulePlaceholder from \"./PublicSchedulePlaceholder\";\nimport LoadingIcon from \"../../standard_components/LoadingIcon\";\n\n// API Calls\nimport ScheduleAPI from \"../../api/api_calls/ScheduleAPI\";\n\n\n\n// A slightly complicated component\n// This can be in a few states:\n// 1. The user is selecting a time.\n// 2. The user has selected a time, and needs to give an email\n// 3. The user has set up the session, and has the option to reschedule or cancel\n\n// We're going to hit the API to pull back schedule details for this mission.\n// We're going to BOTH ask for available times and for the user's current session status.\nfunction PublicSchedule(props) {\n\n const [selectedAppointmentId, setSelectedAppointmentId] = useState(null);\n const [selectedDate, setSelectedDate] = useState(\"\");\n const [selectedTime, setSelectedTime] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [name, setName] = useState(\"\");\n\n\n const [timezone, setTimezone] = useState(\"\");\n const [meetingUrl, setMeetingUrl] = useState(\"\");\n const [startTime, setStartTime] = useState(\"\");\n const [joinButtonActive, setJoinButtonActive] = useState(false);\n const [videoRequired, setVideoRequired] = useState(false);\n const [appointmentList, setAppointmentList] = useState({});\n\n const [availabilityLoaded, setAvailabilityLoaded] = useState(false);\n const [pageStatus, setPageStatus] = useState(\"loading\");\n const [rescheduleClicked, setRescheduleClicked] = useState(false);\n\n\n const navigate = useNavigate();\n let params = useParams()\n const missionId = params.missionId;\n const alert = useAlert()\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n useEffect(() => {\n setTimezone(Intl.DateTimeFormat().resolvedOptions().timeZone)\n\n // Get back the current status here.\n // Includes: whether anything has been scheduled. If so, time and email. \n // If not, the available times.\n async function GetSessionStatus() {\n const sessionData = await ScheduleAPI.getPublicScheduleStatus(missionId, Intl.DateTimeFormat().resolvedOptions().timeZone, navigate)\n if (sessionData.success) {\n setAvailabilityLoaded(true);\n setAppointmentList(sessionData.appointment_list);\n setVideoRequired(sessionData.video_required);\n setTimezone(sessionData.timezone)\n setEmail(sessionData.email)\n setName(sessionData.name)\n\n if (sessionData.scheduled == true) {\n setPageStatus(\"scheduled\")\n const first_event = sessionData.upcoming_event\n setSelectedDate(new Date(first_event.start_time).toLocaleDateString('en-us', { weekday: \"long\", month: \"long\", day: \"numeric\" }))\n setSelectedTime(new Date(first_event.start_time).toLocaleTimeString('en-us', { hour: \"numeric\", minute: \"numeric\", hour12: true }))\n setMeetingUrl(sessionData.meeting_url)\n setStartTime(first_event.start_time)\n\n\n } else {\n setPageStatus(\"unscheduled\")\n }\n }\n }\n\n GetSessionStatus()\n }, []);\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n\n function setSelectedAppointment(appointmentId, newSelectedDate, newSelectedTime) {\n setSelectedAppointmentId(appointmentId)\n setSelectedDate(newSelectedDate)\n setSelectedTime(newSelectedTime)\n setRescheduleClicked(false)\n setPageStatus(\"appointmentSelected\")\n }\n\n function onCancel() {\n \n async function CancelSession() {\n const cancelData = await ScheduleAPI.cancelUpcomingEvent(missionId, navigate)\n\n if (cancelData.success) {\n setPageStatus(\"unscheduled\")\n alert.show(\"Session Canceled\", { type: 'success' })\n\n } else {\n alert.show(\"There was an error cancelling your session. Please try again.\", { type: 'error' })\n }\n }\n\n CancelSession()\n }\n\n function onReschedule() {\n setRescheduleClicked(true)\n setPageStatus(\"unscheduled\")\n }\n\n function cancelReschedule() {\n setRescheduleClicked(false)\n setPageStatus(\"scheduled\")\n }\n\n function SwitchComponentByPageStatus() {\n if (pageStatus == \"loading\") {\n return (\n \n )\n } else if (pageStatus == \"unscheduled\") {\n if (Object.keys(appointmentList).length > 0) {\n return (\n \n )\n } else {\n return (\n \n )\n }\n } else if (pageStatus == \"scheduled\") {\n return (\n \n )\n }\n }\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Rendering ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n return (\n <>\n \n { availabilityLoaded ? \n : \n \n }\n \n )\n\n}\n\nexport default PublicSchedule;","import React, { useState, useEffect } from \"react\";\nimport { MissionDetailsHighlight, VertSpacer } from \"../../overview_components/CommonOverviewComponents\";\n\n\nfunction PublicRejected(props) {\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n\n\n return (\n <>\n \n Unfortunately, you are not the target audience for this mission. Thanks for your interest in giving feedback.\n \n \n \n )\n\n}\n\nexport default PublicRejected;","import React, { useState, useEffect } from \"react\";\nimport { Link, Outlet, useNavigate, useOutletContext, useParams } from \"react-router-dom\";\nimport FullPageBackground from \"./standard_components/FullPageBackground\";\nimport InfoIcon from '../../../../assets/images/mission_detail_icons/blue_info_icon.svg';\nimport ClockIcon from '../../../../assets/images/mission_detail_icons/blue_clock_icon.svg';\nimport DollarIcon from '../../../../assets/images/mission_detail_icons/blue_dollar_icon.svg';\nimport { MissionDetailsIconComponent, MissionDetailsIconRow, MissionDetailsHeader, MissionDetailsTitle } from \"./overview_components/CommonOverviewComponents\";\nimport { Route, Routes } from \"react-router-dom\";\nimport { useAccount } from \"wagmi\";\nimport LoadingIcon from \"./standard_components/LoadingIcon\";\n\n\n// Pages\nimport PMOverview from \"./pages/landing_page/PMOverview\";\nimport PublicScreener from \"./pages/screener/PublicScreener\";\nimport PublicSurvey from \"./pages/survey/PublicSurvey\";\nimport PublicCashOut from \"./pages/complete/PublicCashOut\";\nimport PublicComplete from \"./pages/complete/PublicComplete\";\nimport PublicSchedule from \"./pages/schedule/PublicSchedule\";\nimport PublicRejected from \"./pages/rejected/PublicRejected\";\n\n\n// API Calls\nimport SessionAPI from \"./api/api_calls/SessionAPI\";\nimport PublicMissionAPI from \"./api/api_calls/PublicMissionAPI\";\n\n\n\n\nfunction PublicMission(props) {\n const [missionName, setMissionName] = useState(\"\")\n const [companyName, setCompanyName] = useState(\"\")\n const [hasScreener, setHasScreener] = useState(false)\n const [timeEstimate, setTimeEstimate] = useState(\"\")\n const [rewardAmount, setRewardAmount] = useState(\"\")\n const [missionType, setMissionType] = useState(\"\")\n const [missionStatus, setMissionStatus] = useState(\"\")\n const [nextPath, setNextPath] = useState(\"\")\n const [missionDescription, setMissionDescription] = useState(\"\")\n const [walletRequirements, setWalletRequirements] = useState([])\n const { address, isConnecting, isConnected, isDisconnected } = useAccount();\n\n const [missionLoading, setMissionLoading] = useState(true)\n const [checkPageLoading, setCheckPageLoading] = useState(true)\n\n\n let params = useParams()\n const missionId = params.missionId;\n const navigate = useNavigate();\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n useEffect(() => {\n\n // Get the data for hte mission that will persist throughout.\n async function GetMissionData() {\n const missionData = await PublicMissionAPI.getMission(missionId, navigate)\n if (missionData.success) {\n setMissionName(missionData.mission_name)\n setCompanyName(missionData.company_name)\n setHasScreener(missionData.has_screener)\n setTimeEstimate(missionData.time_estimate)\n setRewardAmount(missionData.reward_amount)\n setMissionType(missionData.mission_type)\n setMissionStatus(missionData.mission_status)\n setMissionDescription(missionData.mission_description)\n setNextPath(missionData.next_path)\n setWalletRequirements(missionData.wallet_requirements)\n\n setMissionLoading(false)\n }\n }\n\n // Single call to check the initial page the user has come to. \n // If the user \n async function CheckInitialPage() {\n const pageCheckResult = await SessionAPI.checkInitialPage(window.location.href, missionId, navigate)\n setCheckPageLoading(false)\n // Redirects are handled within the API call itself.\n }\n\n GetMissionData()\n CheckInitialPage()\n }, [])\n\n useEffect(() => {\n\n async function DestroySession() {\n const sessionDestroyResult = await SessionAPI.destroySession(missionId, navigate)\n\n if (sessionDestroyResult.success) {\n // Redirect to the next page\n navigate(sessionDestroyResult.next_path)\n // window.location.assign(sessionDestroyResult.full_path)\n }\n }\n\n // Validate that the user is connected to the wallet.\n // First check whether they are in the process of connecting, then check if they are connected.\n if (!isConnecting && !address) {\n // Log them out\n // Tell Rails to reset the session. \n // Redirect them to this page.\n DestroySession()\n\n }\n\n }, [isConnecting, isConnected, isDisconnected, address])\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n\n return (\n <>\n \n \n \n \n {checkPageLoading || missionLoading ? :\n <>\n \n \n \n {hasScreener ? : <>}\n {timeEstimate != \"null\" ? : <>}\n {rewardAmount > 0 ? : <>}\n \n \n \n } />\n } />\n } />\n } />\n {/* } /> */}\n 0} />} />\n } />\n\n \n \n }\n \n \n \n )\n\n}\n\nfunction SectionTitle(props) {\n return (\n
\n {props.title}\n
\n )\n}\n\nfunction FullPageContainer(props) {\n return (\n
\n {props.children}\n
\n )\n}\n\nfunction MissionDetailsCard(props) {\n return (\n
\n
\n
\n {props.children}\n
\n
\n
\n )\n}\n\nexport default PublicMission;","import React, { useState, useEffect, useRef } from \"react\";\nimport { Link, useNavigate, useLocation } from \"react-router-dom\";\nimport { PrimaryButtonSmall, TertiaryButtonSmall } from \"./CommonComponents\";\n\n\n\n\n\n// Reusable SlideContainer component\nfunction SlideContainer({ children, handleSubmit, highlightPage, executeScroll }) {\n const containerRef = useRef(null);\n const [containerHeight, setContainerHeight] = useState(0);\n const [currentSlideIndex, setCurrentSlideIndex] = useState(0);\n\n const updatedChildren = children.filter(child => child != null && child != undefined && child != false)\n\n\n const isLastSlide = currentSlideIndex === updatedChildren.length - 1;\n const isFirstSlide = currentSlideIndex === 0;\n\n // Take children and remove any empty or null children\n\n // useEffect(() => {\n // const container = containerRef.current;\n // const slideElements = container.getElementsByClassName('slide');\n // let tallestSlideHeight = 0;\n\n // for (let i = 0; i < slideElements.length; i++) {\n // const slideHeight = slideElements[i].scrollHeight;\n // if (slideHeight > tallestSlideHeight) {\n // tallestSlideHeight = slideHeight;\n // }\n // }\n // let totalSlideHeight = tallestSlideHeight + 20 + 10 //Roughly for buttons plus margin\n // setContainerHeight(totalSlideHeight);\n // }, [highlightPage]);\n\n useEffect(() => {\n if (highlightPage >= 0) {\n updateSlideIndex(highlightPage);\n }\n }, [highlightPage]);\n\n function updateSlideIndex(newIndex) {\n setCurrentSlideIndex(newIndex);\n executeScroll();\n }\n\n\n const handleNextSlide = () => {\n !isLastSlide && updateSlideIndex(currentSlideIndex + 1);\n };\n\n const handlePreviousSlide = () => {\n !isFirstSlide && updateSlideIndex(currentSlideIndex - 1);\n };\n\n const handleSlideChange = (index) => {\n updateSlideIndex(index);\n };\n\n return (\n
\n {updatedChildren.map((child, index) => (\n \n {child}\n
\n ))}\n
\n {!isFirstSlide ? :
}\n
\n {updatedChildren.map((_, index) => (\n handleSlideChange(index)}\n />\n ))}\n
\n {!isLastSlide && }\n {isLastSlide && }\n
\n
\n );\n};\n\n\n// Reusable Slide component\nfunction Slide({ children, questions }) {\n const [answers, setAnswers] = useState([]);\n\n const handleAnswerChange = (questionIndex, selectedOptions) => {\n const newAnswers = [...answers];\n newAnswers[questionIndex] = selectedOptions;\n setAnswers(newAnswers);\n };\n\n return (\n <>\n {questions && questions.map((question, index) => (\n handleAnswerChange(index, selectedOptions)}\n />\n ))}\n {children}\n \n );\n};\n\n// Reusable Question component\nfunction Question({ question, selectedOptions, onAnswerChange }) {\n const handleOptionChange = (optionValue) => {\n const newSelectedOptions = selectedOptions.includes(optionValue)\n ? selectedOptions.filter((option) => option !== optionValue)\n : [...selectedOptions, optionValue];\n onAnswerChange(newSelectedOptions);\n };\n\n return (\n
\n

{question.text}

\n {question.options.map((option, index) => (\n
\n handleOptionChange(option.value)}\n />\n \n
\n ))}\n
\n );\n};\n\n\nexport {\n SlideContainer, Slide, Question\n}","\n\nconst apiConfig = {\n // Set the base URL for your API\n apiUrl: '/api/v1/',\n};\n\nexport { apiConfig };\n","// import usenavigate\nimport { apiConfig } from './apiConfig';\n\n\n\n// Helper function to add common headers to the API request\nexport const addCommonHeaders = (headers = {}) => {\n // const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n const commonHeaders = {\n 'Content-Type': 'application/json',\n \"X-CSRF-Token\": getCSRFToken(),\n // Add any other common headers here\n };\n\n return {\n ...commonHeaders,\n ...headers,\n };\n};\n\n\n\nexport async function handleResponse(response, handleRedirect) {\n\n // RULES:\n // Always retrun success: true if the response is good\n // Always return success: false otherwise; unless we navigate from here.\n\n if (response.status === 200 || response.status === 201) { //ok or created\n const data = await response.json();\n data[\"success\"] = true\n return data;\n\n } else if (response.status === 204) { // no content\n // For successful POST or PUT requests without any response body\n return { success: true };\n\n } else if (response.status === 302) { // 302 Found - Temporary Redirect\n // For redirects, we return the redirect path\n // In the future, allow components to pass in a callback function \n // to handle the redirects\n const data = await response.json();\n\n if (data.redirect_path) {\n handleRedirect(data.redirect_path)\n return {}\n } else {\n throw new Error('Redirect: Redirect path not found.');\n }\n\n } else if (response.status === 400) {\n // Bad Request\n const errorData = await response.json();\n throw new Error(`Bad Request: ${errorData.message || 'Unknown error'}`);\n\n } else if (response.status === 401) {\n // Unauthorized\n\n handleRedirect(\"/signin\")\n throw new Error('Unauthorized: Please log in.');\n } else if (response.status === 403) {\n // Forbidden\n throw new Error('Forbidden: You do not have permission to access this resource.');\n } else if (response.status === 404) {\n // Not Found\n throw new Error('Not Found: The requested resource was not found.');\n } else if (response.status === 422) {\n // Unprocessable Entity\n const errorData = await response.json();\n const errorMessages = CleanUpErrors(errorData.errors)\n throw new Error(`Unprocessable Entity: ${errorMessages || 'Unknown error'}`);\n } else if (response.status === 500) {\n // Internal Server Error\n throw new Error('Internal Server Error: Something went wrong on the server.');\n } else {\n throw new Error(`Request failed with status ${response.status}. Please contact info@despark.io`);\n }\n};\n\nexport const handleErrors = (error) => {\n console.log('API Error:', error);\n return { success: false, error: error.message };\n};\n\n// ----------------------------------\n// ----------------------------------\n// -------- Helper Functions --------\n// ----------------------------------\n// ----------------------------------\n\n\n// Clean up 422 errors\nfunction CleanUpErrors(errors) {\n if (errors) {\n let failureReasons = \"\"\n if (errors.constructor === Object) {\n failureReasons = CleanUpMultipleErrors(errors)\n } else {\n failureReasons = errors\n }\n return failureReasons\n } else {\n return \"Unable to complete request. Please try again later. If this issue persists, contact us at info@despark.io\"\n }\n}\n\nfunction CleanUpMultipleErrors(errors) {\n\n var errorString = \"\";\n Object.keys(errors).forEach(function (key) {\n const objectName = key == \"email\" ? \"Email\" : (key == \"password\" ? \"Password\" : (key == \"password_confirmation\" ? \"Password Confirmation\" : key))\n errorString += objectName + \" \" + errors[key] + \"\\n\";\n });\n return errorString\n}\n\nfunction getCSRFToken() {\n const cookies = document.cookie;\n const splitCookies = cookies.split('; ');\n const desparkToken = splitCookies.find(cookie => cookie.startsWith(\"_despark_token=\"))\n return desparkToken ? desparkToken.split('=')[1] : null\n}\n\n","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n\n create: async (user_hash, crypto_usage_hash, user_demographics_hash, user_type_hash, log_hash = null, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"users/userprofile\";\n\n\n const body = JSON.stringify({\n user: user_hash,\n crypto_usage: crypto_usage_hash,\n user_demographic: user_demographics_hash,\n user_type: user_type_hash,\n sign_in_log: log_hash\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n getCountries: async (handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"countries/\";\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n userHasWallet: async (handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"userwallet/haswallet\";\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n getUserTypes: async (handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"usertypes/\";\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n }\n}","import React, { useState, useEffect, useRef, useContext } from \"react\";\nimport { Link, useNavigate, useLocation } from \"react-router-dom\";\nimport { TextEntryQuestion, MultipleChoiceQuestion, RadioOption, CheckboxOption, DropdownQuestion, DropdownOption, LogInCard, ErrorMessage, NoticeMessage } from \"../preauth_portal/components/CommonComponents\";\nimport { SlideContainer, Slide } from \"../preauth_portal/components/SliderComponents\"\nimport { UserContext } from \"../UserContext\";\n\n\nimport TimezoneList from \"../preauth_portal/components/TimezoneList\";\nimport IsValidEVMAddress from \"../../utility_components/IsValidAddress\";\n\n// Api Calls\nimport OnboardingAPI from \"./api/api_calls/OnboardingAPI\";\n\n\nfunction SignUpQuestions(props) {\n\n const [error, setError] = useState(\"\");\n const [notice, setNotice] = useState(\"\");\n const navigate = useNavigate();\n const location = useLocation();\n const { user, setUser, refreshUser } = useContext(UserContext);\n\n const [showUserWalletQuestions, setShowUserWalletQuestions] = useState(true)\n const [countryList, setCountryList] = useState([])\n\n const [walletAddress, setWalletAddress] = useState(\"\");\n const [firstName, setFirstName] = useState(\"\");\n const [interest, setInterest] = useState(null)\n const [familiar, setFamiliar] = useState(null)\n const [hasWallet, setHasWallet] = useState(null)\n const [country, setCountry] = useState(null)\n const [timezone, setTimezone] = useState(null)\n\n // Activities\n const [activities_cex_bought_sold, setActivities_cex_bought_sold] = useState(false)\n const [activities_contracts_created, setActivities_contracts_created] = useState(false)\n const [activities_personal_wallet, setActivities_personal_wallet] = useState(false)\n const [activities_nfts_bought_sold, setActivities_nfts_bought_sold] = useState(false)\n const [activities_nfts_created, setActivities_nfts_created] = useState(false)\n const [activities_defi_used, setActivities_defi_used] = useState(false)\n const [activities_crypto_sent, setActivities_crypto_sent] = useState(false)\n const [activities_crypto_bridged, setActivities_crypto_bridged] = useState(false)\n const [activities_crypto_staked, setActivities_crypto_staked] = useState(false)\n const [activities_none, setActivities_none] = useState(false)\n\n // User Types.\n const [userTypeList, setUserTypeList] = useState([]);\n\n const [holder, setHolder] = useState(false);\n const [creatorArtContent, setCreatorArtContent] = useState(false);\n const [socialMediaUser, setSocialMediaUser] = useState(false);\n const [nftTrader, setNftTrader] = useState(false);\n const [memecoinTrader, setMemecoinTrader] = useState(false);\n const [occasionalDefiTrader, setOccasionalDefiTrader] = useState(false);\n const [heavyDefiTrader, setHeavyDefiTrader] = useState(false);\n const [onChainGamer, setOnChainGamer] = useState(false);\n const [daoParticipant, setDaoParticipant] = useState(false);\n const [developer, setDeveloper] = useState(false);\n const [newToBlockchain, setNewToBlockchain] = useState(false);\n const [noneOfTheAbove, setNoneOfTheAbove] = useState(false);\n\n const [highlightPage, setHighlightPage] = useState(-1)\n const titleRef = useRef(null)\n const errorRef = useRef(null)\n\n\n\n\n\n // ------------------------------------------------------ //\n // ------------------------------------------------------ //\n // ------------------ UseEffect Function ---------------- //\n // ------------------------------------------------------ //\n // ------------------------------------------------------ //\n\n\n // Check that the user is in the right place, whether they have a wallet, and get the country list\n useEffect(() => {\n if (location.state) {\n const tempNotice = location.state.notice || \"\";\n setNotice(tempNotice)\n }\n setTimezone(Intl.DateTimeFormat().resolvedOptions().timeZone)\n\n // Get the list of countries we accept.\n const GetCountries = async () => {\n const result = await OnboardingAPI.getCountries(navigate);\n\n if (result.success) {\n setCountryList(result.countries)\n } else {\n // sets the message to display to user\n setError(\"Could not fetch countries. Please try again later.\")\n }\n }\n\n const GetUserTypes = async () => {\n const result = await OnboardingAPI.getUserTypes(navigate);\n\n if (result.success) {\n setUserTypeList(result)\n } else {\n // sets the message to display to user\n setError(\"Could not fetch user types. Please try again later.\")\n }\n }\n\n // Check if the user has a wallet set up for this new account\n const CheckWallet = async () => {\n const result = await OnboardingAPI.userHasWallet(navigate);\n\n if (result.success) {\n // Show the wallet questions if they DONT have a wallet.\n setShowUserWalletQuestions(!result.has_wallet)\n } else {\n console.log(\"Error checking on wallet ownership\")\n }\n }\n\n CheckWallet();\n GetUserTypes();\n GetCountries();\n }, []);\n\n // ------------------------------------------------------ //\n // ------------------------------------------------------ //\n // ------------------ Submit Function ------------------ //\n // ------------------------------------------------------ //\n // ------------------------------------------------------ //\n\n // Submit function\n function handleSubmit(event) {\n // Handle form submission here EXPAND TO UNCOMMENT CONSOLE LOGS\n // console.log(\"Submitted\")\n // console.log(\"walletAddress\", walletAddress)\n // console.log(\"firstName\", firstName)\n // console.log(\"interest\", interest)\n // console.log(\"familiar\", familiar)\n // console.log(\"hasWallet\", hasWallet)\n // console.log(\"country\", country)\n // console.log(\"timezone\", timezone)\n // console.log(\"activities_cex_bought_sold\", activities_cex_bought_sold)\n // console.log(\"activities_contracts_created\", activities_contracts_created)\n // console.log(\"activities_personal_wallet\", activities_personal_wallet)\n // console.log(\"activities_nfts_bought_sold\", activities_nfts_bought_sold)\n // console.log(\"activities_nfts_created\", activities_nfts_created)\n // console.log(\"activities_defi_used\", activities_defi_used)\n // console.log(\"activities_crypto_sent\", activities_crypto_sent)\n // console.log(\"activities_crypto_bridged\", activities_crypto_bridged)\n // console.log(\"activities_crypto_staked\", activities_crypto_staked)\n // console.log(\"activities_none\", activities_none)\n\n\n // The log in function called on submit\n event.preventDefault();\n setError([]);\n setNotice(\"\");\n\n if (!NoneSelectedActivities()) { setError(\"Please fill out your activities\"); setHighlightPage(1); return; }\n if (!interest || !familiar) { setError(\"Please fill out your interest and familiarity\"); setHighlightPage(2); return; }\n if (!NoneSelectedUserTypes()) { setError(\"Please fill out your user types\"); setHighlightPage(3); return; }\n if (showUserWalletQuestions && !hasWallet) { setError(\"Please answer whether you have a wallet.\"); setHighlightPage(walletPageIndex); return; }\n if (walletAddress && !IsValidEVMAddress(walletAddress)) { setError(\"Please enter a valid wallet address or leave it blank.\"); setHighlightPage(walletPageIndex); return; }\n if (!country) { setError(\"Please fill out your country\"); setHighlightPage(countryAndNamePageIndex); return; }\n if (!firstName) { setError(\"Please fill out your first name or pseudonym\"); setHighlightPage(countryAndNamePageIndex); return; }\n\n const tempHasWallet = hasWallet ?? !showUserWalletQuestions // If hasWallet isn't null, use it. Otherwise, use the inverse of showUserWalletQuestions (which is false if they DO have a wallet)\n\n const user_hash = {\n first_name: firstName,\n sign_up_user_agent: navigator.userAgent,\n }\n const crypto_usage_hash = {\n activities_cex_bought_sold: activities_cex_bought_sold,\n activities_contracts_created: activities_contracts_created,\n activities_personal_wallet: activities_personal_wallet,\n activities_nfts_bought_sold: activities_nfts_bought_sold,\n activities_nfts_created: activities_nfts_created,\n activities_defi_used: activities_defi_used,\n activities_crypto_sent: activities_crypto_sent,\n activities_crypto_bridged: activities_crypto_bridged,\n activities_crypto_staked: activities_crypto_staked,\n activities_none: activities_none,\n familiar: parseInt(familiar),\n interest: parseInt(interest),\n has_wallet: tempHasWallet,\n eth_wallet: walletAddress,\n }\n const user_type_hash = {\n holder: holder,\n creator_art_content: creatorArtContent,\n social_media_user: socialMediaUser,\n nft_trader: nftTrader,\n memecoin_trader: memecoinTrader,\n occasional_defi_trader: occasionalDefiTrader,\n heavy_defi_trader: heavyDefiTrader,\n on_chain_gamer: onChainGamer,\n dao_participant: daoParticipant,\n developer: developer,\n new_to_blockchain: newToBlockchain,\n none_of_the_above: noneOfTheAbove\n };\n\n const user_demographic_hash = {\n country_id: country,\n timezone: timezone,\n original_browser_timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n }\n const log_hash = {\n user_agent: navigator.userAgent,\n window_outer_width: window.outerWidth,\n window_outer_height: window.outerHeight,\n window_inner_width: window.innerWidth,\n window_inner_height: window.innerHeight,\n screen_width: window.screen.width,\n screen_height: window.screen.height\n }\n\n\n const CreateProfile = async (user_hash, crypto_usage_hash, user_demographic_hash, user_type_hash, log_hash) => {\n const result = await OnboardingAPI.create(user_hash, crypto_usage_hash, user_demographic_hash, user_type_hash, log_hash, navigate);\n\n if (result.success) {\n refreshUser();\n\n navigate(\"/dashboard\")\n } else {\n // sets the message to display to user\n setError(result.failureReason);\n setNotice(\"\")\n }\n }\n\n CreateProfile(user_hash, crypto_usage_hash, user_demographic_hash, user_type_hash, log_hash)\n };\n\n // ------------------------------------------------------ //\n // ------------------------------------------------------ //\n // ------------------ Helper Functions ------------------ //\n // ------------------------------------------------------ //\n // ------------------------------------------------------ //\n\n const executeScroll = () => titleRef.current.scrollIntoView({ behavior: \"smooth\" })\n\n function getTimeZones() {\n const timezones = TimezoneList;\n const options = timezones.map((timeZone) => {\n return (\n \n )\n })\n return options;\n }\n\n const timezoneDropdownOptions = getTimeZones();\n\n const countryDropdownOptions = countryList && countryList.map((country) => {\n return (\n \n )\n })\n\n function NoneSelectedActivities() {\n return activities_cex_bought_sold\n || activities_contracts_created\n || activities_personal_wallet\n || activities_nfts_bought_sold\n || activities_nfts_created\n || activities_defi_used\n || activities_crypto_sent\n || activities_crypto_bridged\n || activities_crypto_staked\n || activities_none\n }\n\n function NoneSelectedUserTypes() {\n return holder\n || creatorArtContent\n || socialMediaUser\n || nftTrader\n || memecoinTrader\n || occasionalDefiTrader\n || heavyDefiTrader\n || onChainGamer\n || daoParticipant\n || developer\n || newToBlockchain\n || noneOfTheAbove;\n }\n\n function SelectNoneForActivities(booleanValue) {\n if (booleanValue) {\n setActivities_cex_bought_sold(false)\n setActivities_contracts_created(false)\n setActivities_personal_wallet(false)\n setActivities_nfts_bought_sold(false)\n setActivities_nfts_created(false)\n setActivities_defi_used(false)\n setActivities_crypto_sent(false)\n setActivities_crypto_bridged(false)\n setActivities_crypto_staked(false)\n setActivities_none(true)\n } else {\n setActivities_none(false)\n }\n }\n\n function SelecteNoneForUserType(booleanValue) {\n if (booleanValue) {\n setHolder(false)\n setCreatorArtContent(false)\n setSocialMediaUser(false)\n setNftTrader(false)\n setMemecoinTrader(false)\n setOccasionalDefiTrader(false)\n setHeavyDefiTrader(false)\n setOnChainGamer(false)\n setDaoParticipant(false)\n setDeveloper(false)\n setNewToBlockchain(false)\n setNoneOfTheAbove(true)\n } else {\n setNoneOfTheAbove(false)\n }\n }\n\n function updateChecked(setter, noneSetter, boolean) {\n if (boolean) {\n noneSetter(false)\n }\n setter(boolean)\n }\n\n const walletPageIndex = 4\n const countryAndNamePageIndex = showUserWalletQuestions ? 5 : 4\n\n // Returns the actual slides with questions\n function Slides(props) {\n\n const walletSlide = (showUserWalletQuestions ?\n \n \n \n \n \n {(hasWallet == \"true\") && }\n \n :\n null\n )\n\n return (\n <>\n \n \n
\n Welcome to despark! First, please answer a few questions about your crypto experiences. This will help us match you to feedback missions.\n
\n
\n
\n Questions about how we use your information? Learn more here.\n
\n
\n\n
\n \n \n updateChecked(setActivities_cex_bought_sold, setActivities_none, boolean)} />\n updateChecked(setActivities_personal_wallet, setActivities_none, boolean)} />\n updateChecked(setActivities_nfts_bought_sold, setActivities_none, boolean)} />\n updateChecked(setActivities_nfts_created, setActivities_none, boolean)} />\n updateChecked(setActivities_defi_used, setActivities_none, boolean)} />\n updateChecked(setActivities_crypto_sent, setActivities_none, boolean)} />\n updateChecked(setActivities_crypto_bridged, setActivities_none, boolean)} />\n updateChecked(setActivities_crypto_staked, setActivities_none, boolean)} />\n updateChecked(setActivities_contracts_created, setActivities_none, boolean)} />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n updateChecked(setHolder, setNoneOfTheAbove, boolean)} />\n updateChecked(setCreatorArtContent, setNoneOfTheAbove, boolean)} />\n updateChecked(setSocialMediaUser, setNoneOfTheAbove, boolean)} />\n updateChecked(setNftTrader, setNoneOfTheAbove, boolean)} />\n updateChecked(setMemecoinTrader, setNoneOfTheAbove, boolean)} />\n updateChecked(setOccasionalDefiTrader, setNoneOfTheAbove, boolean)} />\n updateChecked(setHeavyDefiTrader, setNoneOfTheAbove, boolean)} />\n updateChecked(setOnChainGamer, setNoneOfTheAbove, boolean)} />\n updateChecked(setDaoParticipant, setNoneOfTheAbove, boolean)} />\n updateChecked(setDeveloper, setNoneOfTheAbove, boolean)} />\n updateChecked(setNewToBlockchain, setNoneOfTheAbove, boolean)} />\n \n \n \n {walletSlide}\n \n \n {/* */}\n {countryDropdownOptions}\n \n \n {timezoneDropdownOptions}\n \n {/* Dropdown - Timezone - Preselect */}\n \n \n
\n \n )\n }\n\n\n // ------------------------------------------------------ //\n // ------------------------------------------------------ //\n // ------------------- Return Object--------------------- //\n // ------------------------------------------------------ //\n // ------------------------------------------------------ //\n\n return (\n
\n
\n \n \n
\n
\n
\n
{/* This sets the width and margins */}\n
{/* This sets the width and margins */}\n \n

Profile Questions

\n
\n
\n {Slides()}\n
\n
\n
\n
\n
\n
\n
\n
\n );\n\n}\n\n\n\n\nexport default SignUpQuestions","import { apiConfig } from '../../../../researcher/preauth_portal/api/apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../../../../researcher/preauth_portal/api/apiUtils';\n\nexport default {\n show_user: async ({ device_width, device_height, meeting_slug, handleRedirect = null }) => {\n const url = apiConfig.apiUrl + 'api/meetings/u/' + meeting_slug;\n\n\n const body = JSON.stringify({\n device: {\n width: device_width,\n height: device_height\n }\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n show_researcher: async ({ device_width, device_height, meeting_slug, handleRedirect = null }) => {\n const url = apiConfig.apiUrl + \"api/meetings/r/meeting_slug\";\n\n\n const body = JSON.stringify({\n device: {\n width: device_width,\n height: device_height\n }\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n\n\n\n\n}","\nimport React, { useState, useEffect, useContext } from \"react\";\nimport { Link, useNavigate, useLocation } from \"react-router-dom\";\nimport { PrimaryButton, TurnBackgroundBlackComponent } from \"../preauth_portal/components/CommonComponents\"\n\n// API Calls\nimport MeetingsAPI from \"../preauth_portal/api/api_calls/MeetingsAPI\";\nimport CenteredLoadingIcon from \"../main_portal/components/CenteredLoadingIcon\";\n\nfunction JoinMeetingContent(props) {\n const navigate = useNavigate();\n const location = useLocation();\n\n const [missionName, setMissionName] = useState(\"\");\n const [startTime, setStartTime] = useState(new Date());\n const [formattedStartTime, setFormattedStartTime] = useState(\"\");\n const [endTime, setEndTime] = useState(new Date());\n const [timeUntilString, setTimeUntilString] = useState(\"\");\n const [meetingLink, setMeetingLink] = useState(\"\");\n const [changeLink, setChangeLink] = useState(\"/\");\n const [meetingLoaded, setMeetingLoaded] = useState(false);\n const [meetingExists, setMeetingExists] = useState(false);\n const [inProgressMeeting, setInProgressMeeting] = useState(false);\n\n const slug = location.pathname.split(\"/\").pop();\n\n useEffect(() => {\n async function GetMeeting(width, height, slug) {\n const data = await MeetingsAPI.show_user({ device_width: width, device_height: height, meeting_slug: slug, handleRedirect: navigate });\n\n if (data.success) {\n setMissionName(data.mission_name);\n setStartTime(data.start_time);\n setFormattedStartTime(data.formatted_start_time);\n setEndTime(data.end_time);\n setTimeUntilString(data.time_until_string);\n setMeetingLink(data.meeting_link);\n setChangeLink(data.change_link);\n setInProgressMeeting(data.in_progress);\n setMeetingExists(true);\n setMeetingLoaded(true);\n } else {\n setMissionName(\"Mission Not Found\");\n setMeetingExists(false);\n setMeetingLoaded(true);\n }\n }\n\n const width = window.screen.width;\n const height = window.screen.height;\n\n GetMeeting(width, height, slug);\n }, []);\n\n useEffect(() => {\n const meetingTime = new Date(startTime).getTime();\n const now = Date.now();\n const tenMinutesBeforeMeeting = meetingTime - 10 * 60 * 1000;\n const timeUntilReload = tenMinutesBeforeMeeting - now;\n\n if (timeUntilReload > 0) {\n const timeoutId = setTimeout(() => {\n window.location.reload();\n }, timeUntilReload);\n\n return () => clearTimeout(timeoutId);\n }\n }, [startTime]);\n\n function SessionCard() {\n const eventTime = new Date(startTime);\n const currentTime = new Date();\n const differenceInMilliseconds = eventTime - currentTime;\n const withinTenMinutes = differenceInMilliseconds > 0 && differenceInMilliseconds <= 10 * 60 * 1000;\n\n if (!meetingLoaded) {\n return ;\n } else if (meetingExists) {\n if (inProgressMeeting) {\n return ;\n } else if (timeUntilString === null) {\n return ;\n } else if (withinTenMinutes) {\n return ;\n } else {\n return ;\n }\n } else {\n return ;\n }\n }\n\n return (\n
\n
\n \n \n
\n
\n );\n}\n\nfunction MeetingCard({ preTitle, title, date, timeSummaryStart, timeSummaryEnd, bodyText, buttonText, buttonAction, changeLink }) {\n return (\n
\n
\n
\n
\n
\n {preTitle}\n
\n
\n {title}\n
\n
\n
\n
\n {date}\n
\n
\n {timeSummaryStart} {timeSummaryEnd} \n
\n
\n
\n
\n {buttonText && buttonAction && (\n
\n \n
\n )}\n
\n {bodyText}\n
\n
\n
\n {changeLink && (\n
\n Need to make a change?\n
\n )}\n
\n );\n}\n\nfunction UpcomingSession(props) {\n return (\n \n );\n}\n\nfunction ImminentSession(props) {\n return (\n window.open(props.meetingLink, '_blank')}\n />\n );\n}\n\nfunction InProgressSession(props) {\n return (\n window.open(props.meetingLink, '_blank')\n }\n />\n );\n}\n\nfunction PastSession(props) {\n return (\n \n );\n}\n\nfunction NotFoundSession() {\n return (\n \n );\n}\n\nfunction LoadingSession() {\n return (\n
\n
\n \n
\n
\n );\n}\n\nexport default JoinMeetingContent;","import React, { useState, useEffect, useContext } from \"react\";\nimport { Link, useNavigate, useLocation } from \"react-router-dom\";\nimport { FormField, PrimaryButton, SecondaryButton, OrSeparater, LogInCard, ErrorMessage, NoticeMessage, TurnBackgroundBlackComponent, LogInContainer, LogInCardTitle, LogInCardBody, LogInForm, ForgotPasswordLink, PreAuthPageContainer, SignUpTertiary } from \"../components/CommonComponents\"\nimport { UserContext } from \"../../UserContext.jsx\";\n\n// API Calls\nimport SessionAPI from \"../api/api_calls/sessionAPI.js\"\n\nfunction SignIn(props) {\n\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [error, setError] = useState(\"\");\n const [notice, setNotice] = useState(\"\");\n const navigate = useNavigate();\n const location = useLocation();\n const { user, setUser, refreshUser } = useContext(UserContext);\n\n\n\n useEffect(() => {\n if (location.state) {\n const tempNotice = location.state.notice || \"\";\n setNotice(tempNotice)\n }\n }, []);\n\n //Update state on input change\n function onChangeEmail(event) {\n setEmail(event.target.value)\n }\n function onChangePassword(event) {\n setPassword(event.target.value)\n }\n\n\n\n // The log in function called on submit\n function onSubmit(event) {\n event.preventDefault();\n\n if (email.length == 0 || password.length == 0) { return; }\n\n\n const signInUser = async () => {\n const log_hash = {\n user_agent: navigator.userAgent,\n window_outer_width: window.outerWidth,\n window_outer_height: window.outerHeight,\n window_inner_width: window.innerWidth,\n window_inner_height: window.innerHeight,\n screen_width: window.screen.width,\n screen_height: window.screen.height\n }\n const response = await SessionAPI.create(email, password, log_hash, navigate);\n const data = response.data\n\n if (response.success) {\n refreshUser();\n // We use the javascript here to force it reload.\n // We pass through a rails route to force cSRF token to reload.\n navigate(\"/dashboard\")\n // window.location.href = \"/post_sign_in\";\n } else {\n // Some errors want a notice instead of an error.\n if (response.reason && response.reason == \"unconfirmed\") {\n setError(\"You have not confirmed your email. Please check your email for a confirmation link.\")\n } else {\n // sets the error message to display to user\n setError(response.error);\n }\n }\n\n }\n\n signInUser();\n }\n\n\n return (\n \n \n \n \n \n \n \n \n onSubmit(event)} >\n \n \n \n
\n \n
\n
\n \n
\n navigate(\"/signin/wallet\")} />\n
\n
\n
\n \n
\n
\n );\n\n}\n\n\n//export default SignIn;\nexport default SignIn","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n\n create: async (email, password, password_confirmation, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"users/signupnew\";\n\n const body = JSON.stringify({\n user: {\n email,\n password,\n password_confirmation,\n }\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n createWithWallet: async (email, password, password_confirmation, wallet_address, signature_data, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"users/signupnew\";\n\n const body = JSON.stringify({\n user: {\n email: email,\n password: password,\n password_confirmation: password_confirmation\n },\n wallet: {\n signature: signature_data,\n address: wallet_address\n }\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n getNonce: async (wallet_address, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"users/getnonce/\" + wallet_address;\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n checkWalletExists: async (wallet_address, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"users/checkwallet\";\n\n const body = JSON.stringify({\n user_wallet: {\n address: wallet_address\n }\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n\n\n\n\n}","import React, { useState, useEffect, useContext } from \"react\";\nimport { Link, useNavigate, useLocation } from \"react-router-dom\";\nimport { SecondaryButtonSmall, OrSeparater, LogInCard, LogInCardTitle, ErrorMessage, NoticeMessage } from \"../components/CommonComponents\"\nimport { UserContext } from \"../../UserContext\";\n\n\nimport { ConnectButton } from '@rainbow-me/rainbowkit';\nimport { useSignMessage, useAccount } from \"wagmi\";\nimport LockIcon from '../../../../../assets/images/lock_icon.svg';\n\n// Api Calls\nimport RegistrationAPI from \"../api/api_calls/RegistrationAPI\";\nimport sessionAPI from \"../api/api_calls/sessionAPI\";\n\n\n\n\n\nfunction SignInWallet(props) {\n\n const [error, setError] = useState([]);\n const [notice, setNotice] = useState(\"\");\n const navigate = useNavigate();\n const location = useLocation();\n const { user, setUser, refreshUser } = useContext(UserContext);\n\n\n const [isConnected, setIsConnected] = useState(false);\n const { address } = useAccount();\n const [messageToSign, setMessageToSign] = useState(\"Despark is having a server error. Signing this is harmless, but won't log you in. Please try again later.\");\n const { data, isError, isLoading, isSuccess, signMessage } = useSignMessage();\n // const [signMessage, { data, isError, isLoading, isSuccess }] = useSignMessage();\n // const isSuccess = false;\n\n\n\n // --------------------------------------------\n // --------------------------------------------\n // --------------UseEffects------------------\n // --------------------------------------------\n // --------------------------------------------\n\n\n\n // Update the notice if we receive one through navigation\n useEffect(() => {\n if (location.state) {\n const tempNotice = location.state.notice || \"\";\n setNotice(tempNotice)\n }\n }, []);\n\n // Once they've connected their wallet, start signature process.\n useEffect(() => {\n setIsConnected(!!address);\n setError(\"\");\n\n // Okay, so we're connected.\n // Things to do:\n // 1. Check if the wallet is registered\n // 2. If not, then we direct them to the signup page\n // 3. If so, then we get the nonce, ask them to sign, and then validate it to log them in.\n // 4. If they're not connected, then we keep showing the normal page here.\n\n const GetNonceAndPromptSignature = async (userWallet) => {\n const result = await RegistrationAPI.getNonce(userWallet, navigate);\n\n if (result.success) {\n // Update the message to have the correct nonce.\n setMessageToSign(result.signature_message)\n } else {\n // Display an error message\n setError(\"Something went wrong - our servers can't currently handle wallet signatures. Please try again later or sign up using email. \")\n }\n }\n\n\n if (!!address) {\n\n\n const CheckWalletExists = async (address) => {\n const result = await RegistrationAPI.checkWalletExists(address, navigate);\n\n if (result.success && result.exists) {\n // Wallet exists. Prompt a signature, show a display on the page.\n GetNonceAndPromptSignature(address)\n\n } else if (result.success && !result.exists) {\n // Wallet doesn't have an account - Navigate them to the signup page \n navigate(\"/signup\", { state: { notice: \"This wallet does not have an account. Please sign up.\" } });\n } else {\n // Display an error message\n setError(\"Something went wrong. Please try again later. \")\n }\n }\n\n CheckWalletExists(address)\n }\n\n }, [address]);\n\n // Once they've connected their wallet, start signature process.\n useEffect(() => {\n if (messageToSign.startsWith(\"Logging\")) {\n signMessage({ message: messageToSign });\n }\n\n }, [messageToSign]);\n\n // Once the signature is returned, we need to send it to the backend.\n useEffect(() => {\n\n // Function to call the async signup function.\n const SignInUser = async () => {\n const log_hash = {\n user_agent: navigator.userAgent,\n window_outer_width: window.outerWidth,\n window_outer_height: window.outerHeight,\n window_inner_width: window.innerWidth,\n window_inner_height: window.innerHeight,\n screen_width: window.screen.width,\n screen_height: window.screen.height\n }\n const result = await sessionAPI.createFromWallet(address, data, log_hash, navigate);\n\n // TODO:\n // 1. IF the signature isn't valid, do something. \n // 2. Otherwise, handle the same issues as normal.\n // 3. Otherwise, success!\n\n if (result.success) {\n refreshUser();\n\n navigate(\"/dashboard\")\n // We use the javascript here to force it reload.\n // We pass through a rails route to force cSRF token to reload.\n // window.location.href = \"/post_sign_in\";\n\n } else {\n // Some errors want a notice instead of an error.\n if (result.reason == \"unconfirmed\") {\n setNotice(data.failureReason);\n setError(\"You have not confirmed your email. Please check your email for a confirmation link.\")\n } else {\n // sets the error message to display to user\n setError(\"Something went wrong. Please contact info@despark.io if this persists.\");\n }\n }\n }\n\n // If the signature is successful, submit the signature to the backend.\n if (isSuccess) {\n SignInUser()\n }\n\n }, [isSuccess]);\n\n\n // --------------------------------------------\n // --------------------------------------------\n // --------------REturn Value------------------\n // --------------------------------------------\n // --------------------------------------------\n\n return (\n
\n
\n \n \n
\n
\n
\n
{/* This sets the width and margins */}\n \n \n
\n Sign your wallet to log in\n
\n
\n
\n \n
\n
\n
\n \n {address &&
Waiting on wallet signature...
}\n
\n
\n \n
\n navigate(\"/signin\")} />\n
\n
\n
\n
\n
\n
Don't have an account? Sign Up
\n
\n
\n
\n
\n
\n );\n\n}\n\n\n\nexport default SignInWallet","import React, { useState, useEffect } from \"react\";\nimport { Link, useNavigate, useLocation } from \"react-router-dom\";\nimport { FormField, PrimaryButton, SecondaryButton, OrSeparater, LogInCard, ErrorMessage, NoticeMessage } from \"../components/CommonComponents\";\n\n// Api Calls\nimport RegistrationAPI from \"../api/api_calls/RegistrationAPI\";\n\nfunction SignUp(props) {\n\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [passwordConfirmation, setPasswordConfirmation] = useState(\"\")\n const [error, setError] = useState([]);\n const [notice, setNotice] = useState(\"\");\n const navigate = useNavigate();\n const location = useLocation();\n\n\n useEffect(() => {\n if (location.state) {\n const tempNotice = location.state.notice || \"\";\n setNotice(tempNotice)\n }\n }, []);\n\n\n //Update state on input change\n function onChange(event) {\n switch (event.target.name) {\n case 'email':\n setEmail(event.target.value)\n case 'password':\n setPassword(event.target.value)\n case 'passwordConfirmation':\n setPasswordConfirmation(event.target.value)\n }\n }\n\n\n // The log in function called on submit\n function onSubmit(event) {\n event.preventDefault();\n\n setError([]);\n setNotice(\"\");\n\n if (email.length == 0 || password.length == 0) { return; }\n if (password != passwordConfirmation) { setError([\"Passwords do not match\"]); return; }\n if (password.length <= 7) { setError([\"Password must be at least 8 characters long\"]); return; }\n\n\n\n const SignUpUser = async () => {\n const result = await RegistrationAPI.create(email, password, passwordConfirmation, navigate);\n\n if (result.success) {\n\n // User is not yet signed in - they must confirm their email first.\n navigate(result.next_path)\n } else {\n // sets the message to display to user\n setError(result.error);\n setNotice(\"\")\n }\n }\n\n\n SignUpUser()\n }\n\n\n\n return (\n
\n
\n \n \n
\n
\n
\n
{/* This sets the width and margins */}\n \n

Create Account

\n\n
\n
onSubmit(event)} className=\"form bg-transparent-color no-outline text-white w-100 mt-5\">\n \n
\n We use your email to send you updates. We will not share it.\n
\n \n \n\n
\n
\n By signing up, I agree to the Despark Respondent Terms of Service and Privacy Policy.\n
\n \n
\n \n
\n \n
\n navigate(\"/signup/wallet\")} />\n
\n
\n
\n
\n
\n
Already have an account? Log In
\n
\n
\n
\n
\n
\n );\n\n}\n\n\nexport default SignUp","import React, { useState, useEffect } from \"react\";\nimport { Link, useNavigate, useLocation } from \"react-router-dom\";\nimport { SecondaryButton, SecondaryButtonSmall, OrSeparater, LogInCard, LogInCardTitle, ErrorMessage, NoticeMessage } from \"../components/CommonComponents\"\n\nimport { ConnectButton } from '@rainbow-me/rainbowkit';\nimport { useAccount } from \"wagmi\";\nimport LockIcon from '../../../../../assets/images/lock_icon.svg';\n\n// Api Calls\nimport RegistrationAPI from \"../api/api_calls/RegistrationAPI\";\n\n\nfunction SignUpWallet(props) {\n\n const [error, setError] = useState([]);\n const [notice, setNotice] = useState(\"\");\n const navigate = useNavigate();\n const location = useLocation();\n\n const [isConnected, setIsConnected] = useState(false);\n const { address } = useAccount();\n\n useEffect(() => {\n setIsConnected(!!address);\n setError(\"\");\n\n // Okay, so we're connected.\n // Things to do:\n // 1. Check if the wallet is already registered\n // 2. If so, then we redirect them to the login page with a notice. \n // 3. If not, then we direct them to the email and password signup page\n // 4. If they're not connected, then we keep showing the normal page here.\n\n if (!!address) {\n\n const CheckWalletExists = async () => {\n const result = await RegistrationAPI.checkWalletExists(address, navigate);\n\n if (result.success && !result.exists) {\n // Wallet does not exist.\n // Navigate them to the email and password signup page\n navigate(\"/signup/walletcommunication\")\n } else if (result.success && result.exists) {\n // Navigate them to the login page with a notice\n navigate(\"/signin\", { state: { notice: \"This wallet already exists. Please login.\" } });\n } else {\n // Display an error message\n setError(\"Something went wrong. Please try again later. \")\n }\n }\n\n CheckWalletExists()\n }\n\n }, [address]);\n\n\n useEffect(() => {\n if (location.state) {\n const tempNotice = location.state.notice || \"\";\n setNotice(tempNotice)\n }\n }, []);\n\n\n\n return (\n
\n
\n \n \n
\n
\n
\n
{/* This sets the width and margins */}\n \n \n
\n
\n \n
\n
\n
\n
\n By signing up, I agree to the Despark Respondent Terms of Service and Privacy Policy.\n
\n \n
\n
\n \n
\n navigate(\"/signup\")} />\n
\n
\n
\n
\n
\n
Already have an account? Log In
\n
\n
\n
\n
\n
\n );\n\n}\n\n\n\nexport default SignUpWallet","import React, { useState, useEffect } from \"react\";\nimport { Link, useNavigate, useLocation } from \"react-router-dom\";\nimport { FormField, PrimaryButton, SecondaryButton, OrSeparater, LogInCard, ErrorMessage, NoticeMessage } from \"../components/CommonComponents\";\nimport { ConnectButton } from '@rainbow-me/rainbowkit';\n\nimport { useSignMessage, useAccount } from \"wagmi\";\n\n// Api Calls\nimport RegistrationAPI from \"../api/api_calls/RegistrationAPI\";\n\n\n\n\nfunction SignUpPostWalletCredentialCollection(props) {\n\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [passwordConfirmation, setPasswordConfirmation] = useState(\"\")\n const [error, setError] = useState([]);\n const [notice, setNotice] = useState(\"\");\n const navigate = useNavigate();\n const location = useLocation();\n\n const { address } = useAccount();\n const [isConnected, setIsConnected] = useState(false);\n const [messageToSign, setMessageToSign] = useState(\"Despark is having a server error. Signing this is harmless, but won't log you in. Please try again later.\");\n\n const passwordToolTip = \"Set a password so that you can log in by wallet signature or email and password.\"\n const { data, isError, isLoading, isSuccess, signMessage } = useSignMessage()\n\n\n // --------------------------------------------\n // --------------------------------------------\n // --------------UseEffects------------------\n // --------------------------------------------\n // --------------------------------------------\n\n // If they disconnect, send them back to the start\n useEffect(() => {\n if (!address) {\n navigate(\"/signup/wallet\", { state: { notice: \"Please connect your wallet.\" } });\n }\n }, [address])\n\n\n // On load, check if their wallet is connected, get the nonce, and enable tooltips\n useEffect(() => {\n if (location.state) {\n const tempNotice = location.state.notice || \"\";\n setNotice(tempNotice)\n }\n\n setIsConnected(!!address);\n setError(\"\");\n\n if (!address) {\n navigate(\"/signup/wallet\", { state: { notice: \"Please connect your wallet.\" } });\n }\n\n const GetNonce = async (userWallet) => {\n const result = await RegistrationAPI.getNonce(userWallet, navigate);\n\n if (result.success) {\n // Update the message to have the correct nonce.\n\n setMessageToSign(result.signature_message)\n } else {\n // Display an error message\n setError(\"Something went wrong. Please try again later or sign up using email. \")\n }\n }\n\n // Fetch the signature message\n GetNonce(address)\n\n // Enable tooltips\n const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle=\"tooltip\"]')\n const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))\n }, []);\n\n // Once the signature is returned, we need to send it to the backend.\n useEffect(() => {\n\n // Function to call the async signup function.\n const SignUpUser = async () => {\n const result = await RegistrationAPI.createWithWallet(email, password, passwordConfirmation, address, data, navigate);\n\n if (result.success) {\n // Redirect to the second part of onboarding flow\n navigate(result.next_path)\n } else {\n // sets the message to display to user\n setError(result.error);\n setNotice(\"\")\n }\n }\n\n // If the signature is successful, submit the signature and everything else to the backend.\n if (isSuccess) {\n // Submit the signature and everything else to the backend.\n SignUpUser()\n }\n\n }, [isSuccess]);\n\n // --------------------------------------------\n // --------------------------------------------\n // -------------- HELPERS ------------------\n // --------------------------------------------\n // --------------------------------------------\n\n //Update state on input change\n function onChange(event) {\n switch (event.target.name) {\n case 'email':\n setEmail(event.target.value)\n case 'password':\n setPassword(event.target.value)\n case 'passwordConfirmation':\n setPasswordConfirmation(event.target.value)\n }\n }\n\n\n // The log in function called on submit\n function signAndSubmit(event) {\n event.preventDefault();\n\n setError([]);\n setNotice(\"\");\n\n if (email.length == 0 || password.length == 0) { return; }\n if (password != passwordConfirmation) { setError([\"Passwords do not match\"]); return; }\n if (password.length <= 7) { setError([\"Password must be at least 8 characters long\"]); return; }\n\n //First, ask them to sign. \n signMessage({ message: messageToSign });\n\n\n //Then, we need to wait for the sign message to come back.\n //Then, we need to send the sign message to the backend along with the submission info. \n // Backend will then determine if the signature is valid.\n // And update the account accordingly if so.\n\n\n }\n\n function ButtonOrLoadingMessage() {\n if (isLoading) {\n return (\n \n )\n } else {\n return (\n \n )\n }\n }\n\n // --------------------------------------------\n // --------------------------------------------\n // -------------- RETURN ------------------\n // --------------------------------------------\n // --------------------------------------------\n\n return (\n
\n
\n \n \n
\n
\n
\n
{/* This sets the width and margins */}\n \n

Account Setup

\n
\n Wallet connected! Let's set up your account.\n
\n What email should we use to contact you?\n
\n We will not share it.\n
\n
\n
signAndSubmit(event)} className=\"form bg-transparent-color no-outline text-white w-100 mt-5\">\n \n \n \n
\n \n
\n \n\n
\n
\n
\n
Already have an account? Log In
\n
\n
\n
\n
\n
\n );\n\n}\n\n\nexport default SignUpPostWalletCredentialCollection","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n create: async (email, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"users/password\";\n\n\n const body = JSON.stringify({\n user: {\n email\n }\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n update: async (password, password_confirmation, reset_password_token, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"users/password\";\n\n\n const body = JSON.stringify({\n user: {\n password,\n password_confirmation,\n reset_password_token,\n commit: \"Update password\"\n }\n });\n\n try {\n const response = await fetch(url, {\n method: \"PUT\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n\n\n\n\n}","import React, { useState, useEffect } from \"react\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\nimport { FormField, PrimaryButton, LogInCard, ErrorMessage, NoticeMessage, PreAuthPageContainer, TurnBackgroundBlackComponent, LogInContainer, LogInCardTitle, LogInCardBody, LogInForm, SignUpTertiary } from \"../components/CommonComponents\"\n\n// API Calls\nimport PasswordAPI from \"../api/api_calls/PasswordAPI\";\n\n\n\n/*sync function loginUser(credentials) {\n const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n return fetch('http://localhost:3000/login', {\n method: 'POST',\n headers: {\n \"X-CSRF-Token\": token,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(credentials)\n })\n .then(data => data.json())\n}*/\n\nfunction ForgotPassword(props) {\n const [email, setEmail] = useState(\"\");\n const [error, setError] = useState(\"\");\n const [notice, setNotice] = useState(\"\");\n\n\n\n\n function onChange(event) {\n switch (event.target.name) {\n case \"email\":\n setEmail(event.target.value);\n }\n }\n\n\n\n function onSubmit(event) {\n event.preventDefault();\n\n if (email.length == 0) { return; }\n\n // You must do it this way, with the user on the outside. \n const body = JSON.stringify({\n user: {\n email: email\n }\n });\n\n const forgotPassword = async () => {\n const data = await PasswordAPI.create(email);\n\n if (data.success) {\n setNotice(\"If that email is in our system, you will receive an email with instructions on how to reset your password.\")\n setError(\"\")\n } else {\n // sets the message to display to user\n setError(data.failureReason);\n setNotice(\"\")\n }\n\n }\n\n forgotPassword();\n }\n\n\n return (\n \n\n \n \n\n \n \n\n \n \n \n\n onSubmit(event)} >\n\n \n
\n
\n
\n \n
\n
\n\n
\n\n
\n \n\n
\n\n
\n\n\n );\n\n}\n\n// async function ForgotPasswordApiCall(body) {\n// const url = \"/users/password\";\n// const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n// try {\n// const response = await fetch(url, {\n// method: \"POST\",\n// headers: {\n// \"X-CSRF-Token\": token,\n// \"Content-Type\": \"application/json\"\n// },\n// body: body\n// })\n\n// console.log(response)\n\n// if (response.ok) {\n// const responseBody = await response.json();\n// const userEmail = responseBody.data.email\n// const returnData = {\n// success: true,\n// failureReason: \"\",\n// userEmail: userEmail\n// }\n\n// return returnData\n// } else if (response.status == 401) {\n// const returnData = {\n// success: false,\n// failureReason: \"The email or password you entered is incorrect.\",\n// email: \"\"\n// }\n// return returnData\n// } else {\n// console.log(\"Damn\")\n// throw new Error(\"Network response was not ok.\");\n// }\n\n// } catch (error) {\n// const returnData = {\n// success: false,\n// failureReason: \"Unable to complete request. Check your login and try again later\",\n// email: \"\"\n// }\n// return returnData\n// }\n// }\n\n\n\n\nexport default ForgotPassword;","import React, { useState } from \"react\";\nimport { Link, useNavigate, useSearchParams } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\nimport { FormField, PrimaryButton, LogInCard, ErrorMessage, NoticeMessage, PreAuthPageContainer, TurnBackgroundBlackComponent, LogInContainer, LogInCardTitle, LogInCardBody, LogInForm, SignUpTertiary } from \"../components/CommonComponents\"\n\n// API Calls\nimport PasswordAPI from \"../api/api_calls/PasswordAPI\";\n\n\nfunction ResetPassword(props) {\n const [password, setPassword] = useState(\"\");\n const [passwordConfirmation, setPasswordConfirmation] = useState(\"\");\n const [error, setError] = useState(\"\");\n const [notice, setNotice] = useState(\"\");\n let [searchParams, setSearchParams] = useSearchParams();\n\n\n const navigate = useNavigate();\n\n\n const alert = useAlert();\n\n function onChange(event) {\n if (event.target.name == \"password\") {\n setPassword(event.target.value);\n }\n if (event.target.name == \"passwordConfirmation\") {\n setPasswordConfirmation(event.target.value);\n }\n }\n\n function onSubmit(event) {\n event.preventDefault();\n\n\n if (password != passwordConfirmation) {\n alert.show(\"Passwords don't match\", { type: 'error' })\n return;\n }\n\n if (password.length <= 7) {\n alert.show(\"Password must be at least 8 characters long\", { type: 'error' })\n return;\n }\n\n const reset_password_token = searchParams.get(\"reset_password_token\");\n\n const resetPassword = async () => {\n const data = await PasswordAPI.update(password, passwordConfirmation, reset_password_token);\n\n if (data.success) {\n setError(\"\")\n setNotice(\"\")\n // New plan - send to primary login page, and have a message that says \"Your password has been reset. Please log in.\"\n navigate(\"/signin\", { state: { notice: \"Your password has been reset. Please log in.\" } });\n\n } else {\n // sets the message to display to user\n setError(data.error);\n setNotice(\"\")\n }\n\n }\n\n resetPassword();\n }\n\n\n\n return (\n \n \n \n \n\n \n \n \n \n onSubmit(event)} >\n \n \n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n\n\n );\n\n}\n\n\n// async function ResetPasswordApiCall(body) {\n// const url = \"/users/password\";\n// const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n// try {\n// const myResponse = await fetch(url, {\n// method: \"PUT\",\n// headers: {\n// \"X-CSRF-Token\": token,\n// \"Content-Type\": \"application/json\"\n// },\n// body: body\n// })\n\n// if (myResponse.ok) {\n// const returnData = {\n// success: true,\n// failureReason: \"\"\n// }\n// return returnData\n\n// } else if (myResponse.status == 422) {\n// const failureReason = \"Reset password token is invalid. Please request a new password reset email.\"\n// const returnData = {\n// success: false,\n// failureReason: failureReason\n// }\n// return returnData\n// } else {\n// console.log(\"Damn\")\n// throw new Error(\"Network response was not ok.\");\n// }\n\n// } catch (error) {\n// const returnData = {\n// success: false,\n// failureReason: \"Unable to complete request. Please try again later. If this issue persists, contact us at info@despark.io.\"\n// }\n// return returnData\n// }\n// }\n\n\n\n//export default ResetPassword;\nexport default ResetPassword;","import React, { useState, useEffect } from \"react\";\nimport { Link, useNavigate, useLocation } from \"react-router-dom\";\nimport { LogInCard, ErrorMessage, NoticeMessage } from \"../components/CommonComponents\"\nimport EmailIcon from '../../../../../assets/images/email_icon.svg';\n\n\nfunction EmailValidation(props) {\n\n const [error, setError] = useState(\"\");\n const [notice, setNotice] = useState(\"\");\n\n document.body.style = 'background: #8248fc;';\n\n return (\n
\n
\n
\n
\n \n \n
\n
{/* This sets the width and margins */}\n \n
\n
\n \n\n
\n
\n A link has been sent to your email. Click the link to confirm your account.\n
\n
\n Can't find the email? Check your spam or junk folder.\n {/* Didn’t receive an email? Resend */}\n
\n
\n
\n
\n
\n
\n
\n );\n\n}\n\n\nexport default EmailValidation","import React, { useEffect, useContext } from \"react\";\nimport { Outlet, useNavigate } from \"react-router-dom\";\nimport { UserContext } from \"../../user_portal/UserContext\";\n\n\n\n\nfunction PageNotFound({\n userDetails,\n}) {\n const navigate = useNavigate()\n const { user, setUser, refreshUser } = useContext(UserContext);\n\n\n useEffect(() => {\n if (Object.keys(user).length === 0) {\n navigate(\"/signin\")\n } else {\n navigate(user.auth_redirect)\n }\n }, []);\n\n return <>\n};\n\nexport default PageNotFound;\n","import React, { useEffect } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\n\n\nfunction PostSignUp() {\n const navigate = useNavigate()\n\n useEffect(() => {\n navigate(\"/signin\", { state: { notice: \"Your account has been created. Please click 'forgot password' to set your password.\" } });\n }, []);\n\n return <>\n};\n\nexport default PostSignUp;","import React, { useState, useEffect } from \"react\";\nimport { HashRouter, BrowserRouter, Route, Routes } from \"react-router-dom\";\nimport { ProtectedRoute, PreAuthRoute, UnconfirmedUserRoute, ConfirmedNoProfileRoute, PublicRoute, AdminRoute } from \"../utility_components/routing_components/auth_routes\";\nimport { createContext, useContext } from 'react';\nimport { UserContext } from \"./UserContext\";\nimport { useAlert } from 'react-alert';\n\nimport Dashboard from \"./main_portal/pages/Dashboard\";\nimport ExtendedProfile from \"./main_portal/pages/ExtendedProfile\";\nimport ExploreMissions from \"./main_portal/pages/ExploreMissions\";\nimport CashOutPage from \"./main_portal/pages/CashOutPage\";\nimport Wallets from \"./main_portal/pages/Wallets\"\nimport HeaderUser from \"./main_portal/components/menu_components/HeaderUser\";\nimport HeaderBasicNew from \"./main_portal/components/menu_components/HeaderBasicNew\";\nimport HeaderOnboarding from \"./main_portal/components/menu_components/HeaderOnboarding\";\nimport ContentOutline from \"./main_portal/pages/ContentOutline\";\n\nimport HeaderPublic from \"./public_portal/standard_components/HeaderPublic\";\nimport PublicMission from \"./public_portal/PublicMission\";\n\nimport SignUpQuestions from \"./onboarding_portal/SignUpQuestions\";\n\nimport JoinMeetingContent from \"./meetings/JoinMeetingContent\";\n\nimport SignIn from \"./preauth_portal/pages/SignIn\";\nimport SignInWallet from \"./preauth_portal/pages/SignInWallet\";\nimport SignUp from \"./preauth_portal/pages/SignUp\";\nimport SignUpWallet from \"./preauth_portal/pages/SignUpWallet\";\nimport SignUpPostWalletCredentialCollection from \"./preauth_portal/pages/SignUpPostWalletCredentialCollection\";\nimport ForgotPassword from \"./preauth_portal/pages/ForgotPassword\";\nimport ResetPassword from \"./preauth_portal/pages/ResetPassword\";\nimport EmailValidation from \"./preauth_portal/pages/EmailValidation\"\n\nimport PageNotFound from \"../utility_components/routing_components/PageNotFound\";\nimport PostSignUp from \"../utility_components/routing_components/PostSignUp\";\n\n\n// import AdminSurvey from \"../admin_components/AdminSurvey\";\n\n// import ExplorationPage from \"../components/ExplorationPage\";\n// import ExplorationContent from \"../components/exploration_components/ExplorationContent\";\n\n// API Calls\nimport sessionAPI from \"./preauth_portal/api/api_calls/sessionAPI\";\n\n\nfunction App(props) {\n const [userLoaded, setUserLoaded] = useState(false);\n const [user, setUser] = useState({});\n const tempFunction = () => { console.log(\"temp function\") }\n const [needUserRefresh, setNeedUserRefresh] = useState(true);\n\n function refreshUser() {\n setUser({});\n setNeedUserRefresh(true);\n }\n\n const userContextData = { user, setUser, refreshUser }\n\n const alert = useAlert();\n\n\n\n // # This probably changes at some point. Maybe along the lines of \n useEffect(() => {\n // App loaded.\n // Grab initial information on the user.\n async function getUserInfo() {\n const response = await sessionAPI.userInfo();\n\n if (response.success) {\n setUser(response);\n } else {\n alert.show(\"Unable to load user info. Please try again later\", { type: 'error' })\n }\n }\n\n if (needUserRefresh) {\n getUserInfo();\n setNeedUserRefresh(false);\n }\n }, [needUserRefresh]);\n\n\n\n\n return (\n \n \n \n {/* These are the pre-auth routes - only available when logged out */}\n } >\n } />\n } />\n } /> {/* This is the requesting page */}\n } /> {/* This is the setting page (post-email) */}\n } /> {/* This sign up page */}\n } /> {/* This sign up page */}\n } />\n } />\n } />\n \n {/* If a user logs in without being confirmed, we redirect them here */}\n {/* Not currently used. */}\n {/* } >\n */}\n {/* If a user logs in without completing profile, we redirect them here */}\n } >\n } /> {/* Sign Up Questions */}\n \n\n {/* This is the route for joining scheduled events. Auth is optional. */}\n } />\n\n\n\n {/* These are the protected routes - requiring authorization */}\n } >\n } />\n } />\n } />\n } />\n } />\n\n {/* The mission route */}\n \n } />\n \n \n\n {/* This is the public route - you can access where you are logged in or not */}\n {/* Will eventually be where community missions go. */}\n } >\n } >\n \n } />\n {/* } /> */}\n \n \n \n\n {/* } >\n } >\n } />\n \n */}\n\n\n {/* This is the default route - if no other route is matched, this will be rendered */}\n {/* For now, we redirect */}\n } />\n\n \n \n \n )\n}\n\n\nexport default App;\n\n// Routes also handles the UserHeader right now. \n\n// This imports React and the route files at ../routes/Index.jsx. \n// You then exported a component that renders the routes within fragments. \n// https://reactjs.org/docs/fragments.html\n// The empty tags declare it as a fragment\n// This component will be rendered at the entry point of the application, \n// thereby making the routes available whenever the application is loaded\n","import React, { useState, useEffect } from \"react\";\nimport { transitions, positions, Provider as AlertProvider } from 'react-alert'\nimport CustomAlertTemplate from \"../utility_components/CustomAlertTemplate\";\n\nimport { RainbowKitProvider, getDefaultConfig, darkTheme } from '@rainbow-me/rainbowkit'\n\n// import { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { configureChains, createConfig, WagmiProvider, http } from 'wagmi'; // Replacted wagMiConfig\n// import { mainnet, polygon, optimism, arbitrum } from 'wagmi/chains';\n// import { alchemyProvider } from 'wagmi/providers/alchemy';\n// import { publicProvider } from 'wagmi/providers/public';\n\nimport { createAppKit } from '@reown/appkit/react'\n\nimport { arbitrum, mainnet, base, polygon, optimism } from '@reown/appkit/networks'\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { WagmiAdapter } from '@reown/appkit-adapter-wagmi'\n\n// 0. Setup queryClient\nconst queryClient = new QueryClient()\n\n// 1. Get projectId from https://cloud.reown.com\nconst projectId = '413d1857cc44483195205df495fb1477'\n\n// 2. Create a metadata object - optional\nconst metadata = {\n name: 'Despark',\n description: 'Web3 User Research platform. Get paid to give projects feedback.',\n url: 'https://app.despark.io/', // origin must match your domain & subdomain\n}\n\n// 3. Set the networks\nconst networks = [arbitrum, mainnet, base, polygon, optimism]\n\n// 4. Create Wagmi Adapter\nconst wagmiAdapter = new WagmiAdapter({\n networks,\n projectId,\n ssr: true\n});\n\n// 5. Create modal\ncreateAppKit({\n adapters: [wagmiAdapter],\n networks,\n projectId,\n metadata,\n // features: {\n // analytics: true // Optional - defaults to your Cloud configuration\n // }\n})\n\n\nimport App from './App';\n\nfunction AppWrapper(props) {\n\n // const { chains, publicClient } = configureChains(\n // [mainnet, polygon, optimism, arbitrum],\n // [\n // alchemyProvider({ apiKey: process.env.ALCHEMY_ID }),\n // publicProvider()\n // ]\n // );\n\n /* getDefaultWallets is now optional */\n // const { connectors } = getDefaultWallets({\n // appName: 'My RainbowKit App',\n // projectId: \"413d1857cc44483195205df495fb1477\",\n // chains\n // });\n\n // const wagmiConfig = createConfig({\n // autoConnect: true,\n // connectors,\n // publicClient\n // })\n\n // const wagmiConfig = getDefaultConfig({\n // appName: 'Despark',\n // projectId: '413d1857cc44483195205df495fb1477',\n // chains: [mainnet, polygon, optimism, arbitrum],\n // transports: {\n // [mainnet.id]: http(),\n // },\n // })\n\n // const queryClient = new QueryClient()\n\n // optional configuration\n const alertOptions = {\n // you can also just use 'bottom center'\n position: positions.BOTTOM_CENTER,\n timeout: 5000,\n offset: '30px',\n // you can also just use 'scale'\n transition: transitions.SCALE\n }\n\n return (\n
\n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default AppWrapper;","import React from \"react\";\nimport { render } from \"react-dom\";\nimport AppWrapper from \"../components/user_portal/AppWrapper\";\n\n// Redirect from hashrouter style to browser router style\nif (window.location.hash && window.location.hash.startsWith('#/')) {\n const newPath = window.location.pathname + window.location.hash.substring(2); // remove the \"#/\"\n window.location.replace(newPath);\n}\n\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n render(\n ,\n document.body.appendChild(document.createElement(\"div\"))\n )\n}, { once: true });\n\n\n"],"names":["UserContext","createContext","React","className","PulseLoader","color","size","apiConfig","addCommonHeaders","headers","getCSRFToken","async","handleResponse","response","handleRedirect","status","data","json","success","redirect_path","Error","errorData","message","contentType","get","indexOf","errorMessage","text","errorMessages","errors","failureReasons","constructor","Object","errorString","keys","forEach","key","CleanUpMultipleErrors","CleanUpErrors","handleErrors","error","console","log","desparkToken","document","cookie","split","find","startsWith","email","password","log_hash","url","body","JSON","stringify","user","sign_in_log","fetch","method","credentials","wallet_address","signature_data","signature","address","ProtectedRoute","children","AuthRoute","expectedUserStatus","expectedOnboardingStatus","Outlet","PreAuthRoute","ConfirmedNoProfileRoute","PublicRoute","setUser","refreshUser","useContext","useNavigate","length","LoadingIcon","auth_status","onboarding_status","Navigate","to","auth_redirect","scheduledEventId","EventTable","props","eventListArray","events","map","event","index","style","border","Date","start_time","toLocaleDateString","weekday","month","day","toLocaleTimeString","hour","minute","hour12","Intl","DateTimeFormat","resolvedOptions","timeZone","mission_user_list","mission","name","Link","pathname","mission_id","toString","emptyCard","fullCard","scope","upcomingEvents","setUpcomingEvents","useState","eventsLoaded","setEventsLoaded","navigate","useEffect","ScheduledEventAPI","GetUpcoming","replace","txt","charAt","toUpperCase","substr","toLowerCase","pastEvents","setPastEvents","GetPast","path","AccountInfo","extendedProfileComplete","CompleteExtendedProfileInfo","NotCompleteExtendedProfileInfo","AccountDivider","BalanceInfo","balance","state","fromDashboard","ButtonSmallCTA","BonusBalanceCard","bonusInterviewBalance","BonusBalanceRow","description","bonusSurveyBalance","demo_exists","UserPortalContainer","AccountColumn","CardAccount","created_at","extended_profile_complete","loadProfileComplete","bonus_completion_balance_interview","bonus_completion_balance_survey","alert","useAlert","type","onClick","preventDefault","SessionAPI","disconnect","disconnectWallet","show","id","LogoutButton","HeaderUser","CardUpcomingInterviews","CardPastInterviews","PropagateLoader","age","education","industry","jobTitle","income","gender","education_id","industry_id","job_title","income_id","gender_id","setAge","setEducation","setIndustry","setJobTitle","setIncome","setGender","loaded","setLoaded","loadExtendedComplete","propsAge","propsEducation","propsIndustry","propsJobTitle","propsIncome","propsGender","propsLoaded","onChangeEducation","target","value","onChangeIncome","onChangeGender","onSubmit","UserDemographicAPI","loading","src","alt","onChange","placeholder","defaultValue","checked","htmlFor","disabled","Placeholder","setLoadExtendedComplete","extendedProfileData","CardExtendedProfile","missionId","applied","setApplied","user_status","mission_name","audience_description","format","mission_locked","LockedCTASection","CTASection","_extends","submit","e","MissionUserListAPI","next_path","LockedOverlay","rejection_reason_json","Math","round","reward_amount_usd","ButtonByStyle","buttonType","missionType","mission_type","SpotsRemainingText","number_of_spots","LockIcon","locked_type","headline","WarningIcon","SecondaryButton","whiteSpace","rejection_hash","MissionCardChoice","currentMissions","activeTab","available","completed","rejected","endingText","extendedProfileCompleteBool","availableText","nonAvailableText","missionWrapper","MissionCard","mission_format","num_remaining_spots","mission_user_status","mission_is_survey","mission_is_exploration","availableMissions","setAvailableMissions","completedMissions","setCompletedMissions","rejectedMissions","setRejectedMissions","loadMissionsComplete","setLoadMissionsComplete","setActiveTab","updateTab","tab","result","MissionsAPI","available_missions","completed_missions","rejected_missions","getMissions","activeClass","inactiveClass","MissionsListCard","create","eth_address","usd_amount","blockchain","cash_out","destroy","cashOutId","CashOutDeleteButton","CashOutAPI","cashOutHistory","cashOutHistoryList","cashOut","year","href","transaction_link","rel","cashOutAmount","setCashOutAmount","ethAddress","setEthAddress","confirmedEthAddress","setConfirmedEthAddress","setBlockchain","parseFloat","IsValidEVMAddress","CurrencyInput","decimalsLimit","onValueChange","onAmountChange","allowNegativeValue","prefix","required","CashOutHistory","CashOutNew","setCashOutHistory","loadCashOutListComplete","setLoadCashOutListComplete","cash_outs","cashOutHistoryData","ContentCashOut","CardCashOut","walletId","user_wallet","verify","getNonce","InfoCallOut","InfoIcon","AllWalletsTable","wallets","wallet","substring","shortAddress","signature_verified","UserWalletAPI","updateWallets","DeleteWallet","ForgetWallet","useAccount","messageToSign","setMessageToSign","isError","isLoading","isSuccess","signMessage","useSignMessage","walletExists","walletConnectedAndVerified","walletUnverified","connectInfoText","ConnectButtonRow","ConnectButton","label","showBalance","chainStatus","PrimaryButton","signature_message","GetNonceAndPrepareSignature","AddWallet","VerifySignature","CenteredLoadingIcon","setWallets","refreshWallets","setRefreshWallets","loadComplete","setLoadComplete","user_wallets","getUserWallets","CardWallets","toRoute","logoRoute","surveyId","surveyData","isScreener","survey_response","SwitchCompleteAndFailedSurvey","failedLoading","surveyComplete","surveyLoaded","Survey","model","survey","setSurvey","setSurveyComplete","surveyTitle","setSurveyTitle","missionTitle","setMissionTitle","missionReward","setMissionReward","setFailedLoading","setSurveyLoaded","useOutletContext","useParams","STORAGE_ITEM_KEY","first_name","StylesManager","applyTheme","onSurveyComplete","useCallback","adminResponse","SurveyAPI","sender","saveSurveyData","pageNo","currentPageNo","window","localStorage","setItem","tempSurvey","Model","onValueChanged","add","onCurrentPageChanged","onComplete","prevData","getItem","parse","restoreSurveyData","title","mission_title","mission_reward","GetSurvey","missionEventAvailabilityId","submitting","setSubmitting","disabledClassString","classString","selectedAppointmentId","MissionEventAvailabilityAPI","submitAppointment","appointmentList","setAppointmentList","setSelectedAppointmentId","selectedDate","setSelectedDate","selectedTime","setSelectedTime","timeOptionSelectHelper","setTimeOptionSelectHelper","dateList","days","date","date_text","timeList","appointments","appointment","time","start_time_text","getTimeList","viewportClassModifer","innerWidth","setDate","mission_event_availability_id","setTime","timezone","AppointmentSubmitButton","reschedule","setShowReschedule","ShowEvents","eventList","end_time","event_type","rescheduleFunction","cancelFunction","noteSection","note","SchedulePlaceHolderText","ReschedulePlaceholderText","stopReschedule","missionLoaded","setMissionLoaded","missionFormat","setMissionFormat","missionAudience","setMissionAudience","availabilityLoaded","setAvailabilityLoaded","missionEvent","setMissionEvent","setTimezone","showReschedule","cancelEvent","CancelAppointment","MissionAPI","format_descriptive","upcoming_events","past_events","GetSchedule","mission_event","appointment_list","GetAvailability","SimpleScheduler","local","SwitchCompleteAndFailedScreener","screenerFailed","screenerComplete","screenerLoaded","screener","setScreener","setScreenerComplete","screenerTitle","setScreenerTitle","setScreenerFailed","setScreenerLoaded","params","screenerId","onScreenerComplete","next","survey_id","tempScreener","GetScreener","ReviewText","AutonomousMissionPageOne","setPageOne","AutonomousMissionPageTwo","dangerouslySetInnerHTML","__html","DOMPurify","instructions","zoomLink","submitFunction","checkingCompletion","setCheckingCompletion","missionInstructions","setMissionInstructions","pageOne","setZoomLink","setSurveyId","token","querySelector","content","ok","AutonomousMissionApiCall","mission_instructions","GetMission","GetInstantMissionApiCall","meeting_link","GetZoom","autonomousPageSwitcher","zoomCompletion","CheckZoomRecordingLengthApiCall","meeting_duration","Routes","Route","element","ReviewContent","ScheduleContent","CompletedContent","SurveyContent","DefaultContent","ScreenerContent","ExplorationContent","backgroundColor","MissionDetailsHeader","MissionDetailsTitle","MissionDetailsIconRow","MissionDetailsIconComponent","MissionDetailsIcon","icon","MissionDetailsIconText","MissionDetailsHighlight","MissionDetailsConnectAndVerifyTextAndTooltip","TooltipIcon","VertSpacer","WalletRequirementsEmpty","company","WalletRequirementsFull","walletRequirements","requirements","requirement","WalletRequirement","classColor","GreenCircleIcon","GrayCircleIcon","RedCircleIcon","location","slice","join","lastUrlSlug","returnData","ClosedMissionText","ButtonOrLoadingMessage","signatureLoading","SecondaryButtonSmall","marginClass","PrimaryButtonSmall","isConnected","setIsConnected","loggedIn","setLoggedIn","meetsRequirements","setMeetsRequirements","requirementsLoading","setRequirementsLoading","showNextButton","setShowNextButton","querySelectorAll","tooltipTriggerEl","bootstrap","Tooltip","GetMessage","session","CreateSession","PublicMissionAPI","setWalletRequirements","wallet_requirements","meets_requirements","CheckWalletRequirements","SecondButton","nextPath","missionStatus","WalletRequirements","companyName","surveyType","lastRoute","setScreenerId","stateRef","useRef","current","pass","surveyFailed","setSurveyFailed","walletAddress","CashOutForm","FormField","setWalletAddress","confirmAddress","setConfirmAddress","setRefreshCashOuts","refreshCashOuts","CashOutRequest","myResponse","responseBody","userEmail","user_email","failureReason","errorArray","objectName","push","failureReasonArray","setEmail","setPassword","passwordConfirmation","setPasswordConfirmation","LogInCard","borderClass","SignUpApiCall","reason","SignUpUser","password_confirmation","autoComplete","StatusLink","CashOutRows","rows","cashOutList","usd_amount_formatted","CashOutHeader","CashOutTableHelper","cashOutLoaded","completionNotice","setCompletionNotice","setCashOutList","setCashOutLoaded","cashOutCount","setCashOutCount","useLocation","CashOutSection","hasReward","PublicCashOutTable","PublicSignUpCard","PublicCashOut","receivedReward","cashOutData","GetCashOuts","DropdownOption","buttonText","rescheduleClicked","BackButton","cancelReschedule","DropdownQuestion","ariaLabel","isDisabled","onSelect","setName","ChangeButton","setSelectingEmail","selectingEmail","input_email","input_name","appointmentId","updatedAppointmentId","finalEmail","finalName","finalAppointmentId","ScheduleAPI","timeEstimate","videoRequired","EmailSelect","DateTimeSelects","fiveMinutes","timeDifferenceFromNowToStart","timeToWait","joinButtonActive","setJoinButtonActive","RescheduleButton","CancelButton","cancel","buttonTimer","setTimeout","clearTimeout","open","meetingUrl","setMeetingUrl","startTime","setStartTime","setVideoRequired","pageStatus","setPageStatus","setRescheduleClicked","setSelectedAppointment","newSelectedDate","newSelectedTime","onCancel","CancelSession","onReschedule","SwitchComponentByPageStatus","PublicSimpleScheduler","PublicSchedulePlaceholder","PublicScheduledSessionList","sessionData","video_required","scheduled","first_event","upcoming_event","meeting_url","GetSessionStatus","SectionTitle","FullPageContainer","MissionDetailsCard","missionName","setMissionName","setCompanyName","hasScreener","setHasScreener","setTimeEstimate","rewardAmount","setRewardAmount","setMissionType","setMissionStatus","setNextPath","missionDescription","setMissionDescription","isConnecting","isDisconnected","missionLoading","setMissionLoading","checkPageLoading","setCheckPageLoading","missionData","company_name","has_screener","time_estimate","reward_amount","mission_status","mission_description","GetMissionData","CheckInitialPage","sessionDestroyResult","DestroySession","FullPageBackground","ClockIcon","DollarIcon","PMOverview","PublicScreener","PublicSchedule","PublicSurvey","PublicComplete","PublicRejected","SlideContainer","handleSubmit","highlightPage","executeScroll","containerRef","containerHeight","setContainerHeight","currentSlideIndex","setCurrentSlideIndex","updatedChildren","filter","child","undefined","isLastSlide","isFirstSlide","updateSlideIndex","newIndex","ref","TertiaryButtonSmall","handlePreviousSlide","_","handleSlideChange","handleNextSlide","Slide","questions","answers","setAnswers","question","Question","selectedOptions","onAnswerChange","handleAnswerChange","questionIndex","newAnswers","options","option","isMultipleChoice","includes","optionValue","newSelectedOptions","handleOptionChange","user_hash","crypto_usage_hash","user_demographics_hash","user_type_hash","crypto_usage","user_demographic","user_type","setError","notice","setNotice","showUserWalletQuestions","setShowUserWalletQuestions","countryList","setCountryList","firstName","setFirstName","interest","setInterest","familiar","setFamiliar","hasWallet","setHasWallet","country","setCountry","activities_cex_bought_sold","setActivities_cex_bought_sold","activities_contracts_created","setActivities_contracts_created","activities_personal_wallet","setActivities_personal_wallet","activities_nfts_bought_sold","setActivities_nfts_bought_sold","activities_nfts_created","setActivities_nfts_created","activities_defi_used","setActivities_defi_used","activities_crypto_sent","setActivities_crypto_sent","activities_crypto_bridged","setActivities_crypto_bridged","activities_crypto_staked","setActivities_crypto_staked","activities_none","setActivities_none","userTypeList","setUserTypeList","holder","setHolder","creatorArtContent","setCreatorArtContent","socialMediaUser","setSocialMediaUser","nftTrader","setNftTrader","memecoinTrader","setMemecoinTrader","occasionalDefiTrader","setOccasionalDefiTrader","heavyDefiTrader","setHeavyDefiTrader","onChainGamer","setOnChainGamer","daoParticipant","setDaoParticipant","developer","setDeveloper","newToBlockchain","setNewToBlockchain","noneOfTheAbove","setNoneOfTheAbove","setHighlightPage","titleRef","walletPageIndex","countryAndNamePageIndex","tempHasWallet","sign_up_user_agent","navigator","userAgent","parseInt","has_wallet","eth_wallet","creator_art_content","social_media_user","nft_trader","memecoin_trader","occasional_defi_trader","heavy_defi_trader","on_chain_gamer","dao_participant","new_to_blockchain","none_of_the_above","user_demographic_hash","OnboardingAPI","CreateProfile","country_id","original_browser_timezone","user_agent","window_outer_width","outerWidth","window_outer_height","outerHeight","window_inner_width","window_inner_height","innerHeight","screen_width","screen","width","screen_height","height","tempNotice","CheckWallet","GetUserTypes","countries","GetCountries","scrollIntoView","behavior","timezoneDropdownOptions","TimezoneList","countryDropdownOptions","SelectNoneForActivities","booleanValue","SelecteNoneForUserType","updateChecked","setter","noneSetter","boolean","ErrorMessage","NoticeMessage","notices","align","walletSlide","MultipleChoiceQuestion","questionText","RadioOption","selectMultiple","TextEntryQuestion","CheckboxOption","Slides","device_width","device_height","meeting_slug","apiUrl","device","MeetingCard","preTitle","timeSummaryStart","timeSummaryEnd","bodyText","buttonAction","changeLink","UpcomingSession","formattedStartTime","timeUntilString","ImminentSession","meetingLink","InProgressSession","PastSession","NotFoundSession","LoadingSession","setFormattedStartTime","endTime","setEndTime","setTimeUntilString","setMeetingLink","setChangeLink","meetingLoaded","setMeetingLoaded","meetingExists","setMeetingExists","inProgressMeeting","setInProgressMeeting","slug","pop","SessionCard","differenceInMilliseconds","withinTenMinutes","MeetingsAPI","formatted_start_time","time_until_string","change_link","in_progress","GetMeeting","timeUntilReload","getTime","now","timeoutId","reload","TurnBackgroundBlackComponent","PreAuthPageContainer","LogInContainer","LogInCardTitle","LogInCardBody","LogInForm","signInUser","ForgotPasswordLink","OrSeparater","SignUpTertiary","CheckWalletExists","RegistrationAPI","exists","userWallet","GetNonceAndPromptSignature","sessionAPI","SignInUser","passwordToolTip","GetNonce","signAndSubmit","tooltip","reset_password_token","commit","PasswordAPI","forgotPassword","preLinkText","linkText","linkPath","searchParams","setSearchParams","useSearchParams","resetPassword","EmailIcon","userDetails","userLoaded","setUserLoaded","needUserRefresh","setNeedUserRefresh","userContextData","getUserInfo","Provider","BrowserRouter","basename","HeaderBasicNew","SignIn","SignInWallet","ForgotPassword","ResetPassword","SignUp","SignUpWallet","SignUpPostWalletCredentialCollection","PostSignUp","EmailValidation","HeaderOnboarding","SignUpQuestions","JoinMeetingContent","Dashboard","ExtendedProfile","Wallets","ExploreMissions","CashOutPage","ContentOutline","HeaderPublic","PublicMission","PageNotFound","queryClient","QueryClient","projectId","networks","arbitrum","mainnet","base","polygon","optimism","wagmiAdapter","WagmiAdapter","ssr","createAppKit","adapters","metadata","alertOptions","position","positions","BOTTOM_CENTER","timeout","offset","transition","transitions","SCALE","AlertProvider","template","CustomAlertTemplate","WagmiProvider","config","wagmiConfig","QueryClientProvider","client","RainbowKitProvider","theme","darkTheme","accentColor","accentColorForeground","borderRadius","fontStack","overlayBlur","App","hash","newPath","addEventListener","render","AppWrapper","appendChild","createElement","once"],"sourceRoot":""}