{"version":3,"file":"static/chunks/7052-db0a894e16674efc.js","mappings":"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","sources":["webpack://_N_E/./api/fetch_user_details.ts","webpack://_N_E/./apollo-client.js","webpack://_N_E/./shared-components/RatingGroupStars/RatingGroupStars.tsx","webpack://_N_E/./components/Attraction/AddReviewModal.tsx","webpack://_N_E/./utils/ConvertPublicUrlToGsUrl.js","webpack://_N_E/./utils/getCurrentToken.js","webpack://_N_E/./utils/getDateTime.js","webpack://_N_E/./utils/scrollIntoView.tsx","webpack://_N_E/./utils/trip-sheppered-text.js","webpack://_N_E/./utils/videoLinkOptimize.ts","webpack://_N_E/./node_modules/@apollo/client/react/hooks/useMutation.js","webpack://_N_E/"],"sourcesContent":["import { gql } from '@apollo/client';\n\nexport const BOOKING_DATA = gql`\n query GetBookingDetails($bookingId: String!) {\n boatnew_booking(where: { id: { _eq: $bookingId } }) {\n tour_date\n product {\n id\n strapi {\n id\n }\n cities_products {\n city {\n name\n id\n strapi_city {\n id\n }\n }\n }\n }\n customer {\n contact_name\n email\n }\n }\n }\n`;\n","import { ApolloClient, InMemoryCache, HttpLink, from } from '@apollo/client';\n\nimport { onError } from '@apollo/client/link/error';\n\nconst httpLink = new HttpLink({\n uri: String(process.env.NEXT_PUBLIC_URI),\n\n headers: {\n [String(process.env.NEXT_PUBLIC_CLIENT_HEADER)]:\n String(process.env.NEXT_PUBLIC_CLIENT_VALUE) ?? ''\n }\n});\n\nconst errorLink = onError(({ graphQLErrors, networkError }) => {\n if (graphQLErrors)\n graphQLErrors.map(({ message, locations, path }) =>\n console.log(\n `[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`\n )\n );\n\n if (networkError) {\n console.log(`[Network error]: ${networkError}`, 'Network error');\n }\n});\n\nconst client = new ApolloClient({\n link: from([errorLink, httpLink]),\n cache: new InMemoryCache(),\n ssrMode: true\n});\n\nexport default client;\n","import React from 'react';\nimport { Rating } from 'react-simple-star-rating';\nimport { useMediaQuery } from '../../hooks/mediaQuery';\n\ninterface RatingFieldProps {\n field: Record;\n setFieldValue: (fieldName: string, value: any) => void;\n}\n\nexport const RatingField = ({ field, setFieldValue }: RatingFieldProps) => {\n const mediaQuery = useMediaQuery(768);\n\n const { name, value } = field;\n const handleRate = (rate: number) => {\n setFieldValue(name, rate);\n };\n return (\n 0 ? value : 0}\n fillColor=\"orange\"\n emptyColor=\"gray\"\n SVGstyle={{ display: 'inline-block' }}\n allowFraction\n size={mediaQuery ? 25 : 35}\n />\n );\n};\n","import { ErrorMessage, Field, Form, Formik, FormikHelpers } from 'formik';\nimport Image from 'next/image';\nimport React, {\n Dispatch,\n SetStateAction,\n useEffect,\n useRef,\n useState\n} from 'react';\nimport { styled } from 'styled-components';\nimport { RatingField } from '../../shared-components/RatingGroupStars/RatingGroupStars';\nimport * as Yup from 'yup';\nimport { toast } from 'react-toastify';\nimport axios from 'axios';\nimport { Review } from '../../pages/[slug]/[slug2]';\nimport { useAuthContext } from '../../utils/context/authContext';\nimport { getCurrentToken } from '../../utils/getCurrentToken';\nimport { useRouter } from 'next/router';\nimport client from '../../apollo-client';\nimport { BOOKING_DATA } from '../../api/fetch_user_details';\n\ninterface IProps {\n setIsModalOpen: (open: boolean) => void;\n onClose: () => void;\n id: number | string | undefined;\n reviews: Review[];\n setReviews: Dispatch>;\n selectedReviewData: Review | null;\n setSelectedReviewData: React.Dispatch>;\n isEditReview: boolean;\n setIsEditReview: React.Dispatch>;\n fetchReviews: () => Promise;\n onSubmit?: (reviewData: any) => Promise;\n initialData?: {\n name: string;\n email: string;\n rating: number;\n reviewTitle: string;\n reviewText: string;\n tourDate: string;\n productId: string;\n cityId: string;\n };\n}\n\ninterface Props {\n isChecked: boolean;\n}\nconst CheckBoxTextStyle = styled.p`\n opacity: ${(props: any) => (props.isChecked ? '1' : '0.5')};\n width: 90%;\n`;\n\nconst AddReviewModal = ({\n onClose,\n onSubmit,\n initialData,\n setIsModalOpen,\n id,\n isEditReview,\n reviews,\n setReviews,\n setIsEditReview,\n selectedReviewData,\n setSelectedReviewData,\n fetchReviews\n}: IProps) => {\n const { user }: any = useAuthContext();\n const router = useRouter();\n const modalRef: any = useRef(null);\n\n const closeModal = () => {\n onClose();\n setIsModalOpen(false);\n setSelectedReviewData(null);\n setIsEditReview(false);\n };\n\n // const handleOutsideClickCloseModal = (e: MouseEvent) => {\n // if (modalRef.current && !modalRef.current.contains(e.target as Node)) {\n // closeModal();\n // }\n // };\n\n // useEffect(() => {\n // document.addEventListener('mousedown', handleOutsideClickCloseModal);\n // return () => {\n // document.removeEventListener('mousedown', handleOutsideClickCloseModal);\n // };\n // }, []);\n\n const validationSchema = Yup.object().shape({\n rating: Yup.number()\n .min(0.5, 'Please select a rating')\n .required('Please select a rating'),\n review: Yup.string()\n .trim()\n .test(\n 'no-blank-spaces',\n 'Review cannot contain only blank spaces',\n value => {\n return !/^\\s*$/.test(value || '');\n }\n )\n .min(8, 'Minimum Length should be 8 characters!')\n .required('Review is required'),\n termsConditions: Yup.boolean()\n .oneOf([true], 'Please agree to the Terms & Conditions')\n .required('Please agree to the Terms & Conditions')\n });\n\n const handleSubmit = async (values: any) => {\n // Get booking ID from URL\n const urlParams = new URLSearchParams(window.location.search);\n const bookingId = urlParams.get('id');\n\n // Case 1: Pre-filled initial data (usually from booking)\n if (initialData) {\n try {\n if (onSubmit) {\n await onSubmit({\n ...values,\n name: initialData.name,\n email: initialData.email,\n productId: initialData.productId,\n cityId: initialData.cityId,\n tourDate: initialData.tourDate,\n bookingId // Include booking ID in submission\n });\n }\n closeModal();\n return;\n } catch (error) {\n console.error('Error submitting review:', error);\n return;\n }\n }\n\n // Case 2: User is editing existing review\n if (isEditReview) {\n if (!user) {\n toast.error('Please login to edit your review');\n return;\n }\n return handleEditReview(values);\n }\n\n // Case 3: Guest submission with valid booking ID\n if (bookingId) {\n return handleGuestReview(values, bookingId);\n }\n\n // Case 4: Regular user submission (requires login)\n if (!user) {\n toast.error('To add a review, please log in to your account first!');\n return;\n }\n\n if (!user.emailVerified) {\n toast.error('Please verify your email before submitting a review');\n return;\n }\n\n // Proceed with regular logged-in submission\n return handleUserReview(values);\n };\n\n // Helper functions for different submission types\n const handleEditReview = async (values: any) => {\n try {\n const token = await getCurrentToken(user);\n const headers = {\n Authorization: token,\n 'Content-Type': 'application/json'\n };\n\n let url, data;\n if (router.route === '/tours/[slug]') {\n url = `${process.env.NEXT_PUBLIC_FIREBASE_WEBSITE_CONNECTION}/product-review/${id}`;\n data = {\n rating: values.rating,\n review: values.review,\n reviewId: selectedReviewData?.reviewId,\n user_image: user.photoURL,\n gs_url: localStorage.getItem('user_gs_url')\n };\n } else {\n url = `${process.env.NEXT_PUBLIC_FIREBASE_CONNECTION}/attraction-review/${id}`;\n data = {\n attractionId: id,\n rating: values.rating,\n review: values.review,\n reviewId: selectedReviewData?.reviewId,\n image: user.photoURL,\n gs_url: localStorage.getItem('user_gs_url')\n };\n }\n\n const response = await axios.put(url, data, { headers });\n setIsModalOpen(false);\n setIsEditReview(false);\n toast.success(response.data.message);\n\n setReviews(prevReviews =>\n prevReviews.map(review =>\n review.reviewId == selectedReviewData?.reviewId\n ? { ...review, rating: values.rating, review: values.review }\n : review\n )\n );\n fetchReviews();\n setSelectedReviewData(null);\n } catch (error) {\n handleApiError(error);\n }\n };\n\n const handleGuestReview = async (values: any, bookingId: string) => {\n try {\n // 1. First fetch booking details to get customer name\n const bookingResponse = await client.query({\n query: BOOKING_DATA,\n variables: { bookingId }\n });\n\n const booking = bookingResponse.data?.boatnew_booking?.[0];\n const customerName = booking?.customer?.contact_name || 'Guest';\n\n // 2. Submit review with customer name\n let url, data;\n if (router.route === '/tours/[slug]') {\n url = `${process.env.NEXT_PUBLIC_FIREBASE_WEBSITE_CONNECTION}/strapi-product-review`;\n data = {\n productId: id?.toString(),\n rating: values.rating,\n review: values.review,\n bookingId,\n userName: customerName\n };\n } else {\n url = `${process.env.NEXT_PUBLIC_FIREBASE_CONNECTION}/attraction-review`;\n data = {\n attractionId: id?.toString(),\n rating: values.rating,\n review: values.review,\n bookingId,\n userName: customerName\n };\n }\n\n const response = await axios.post(url, data);\n\n fetchReviews();\n setIsModalOpen(false);\n toast.success(response.data.message);\n } catch (error) {\n console.error('Guest review submission error:', error);\n toast.error('Failed to submit review. Please try again.');\n }\n };\n\n const handleUserReview = async (values: any) => {\n try {\n const token = await getCurrentToken(user);\n const headers = {\n Authorization: token,\n 'Content-Type': 'application/json'\n };\n\n let url, data;\n if (router.route === '/tours/[slug]') {\n url = `${process.env.NEXT_PUBLIC_FIREBASE_WEBSITE_CONNECTION}/product-review`;\n data = {\n productId: id?.toString(),\n rating: values.rating,\n review: values.review,\n user_id: user.uid,\n user_image: user.photoURL,\n gs_url: localStorage.getItem('user_gs_url')\n };\n } else {\n url = `${process.env.NEXT_PUBLIC_FIREBASE_CONNECTION}/attraction-review`;\n data = {\n attractionId: id?.toString(),\n rating: values.rating,\n review: values.review,\n user_id: user.uid,\n image: user.photoURL,\n gs_url: localStorage.getItem('user_gs_url')\n };\n }\n\n const response = await axios.post(url, data, { headers });\n const newReview = createReviewObject(response.data, values);\n setReviews([newReview, ...reviews]);\n fetchReviews();\n setIsModalOpen(false);\n toast.success(response.data.message);\n } catch (error) {\n handleApiError(error);\n }\n };\n\n // Helper function to create review object\n const createReviewObject = (responseData: any, values: any): Review => {\n const dateAndTime = new Date().toLocaleString(); // Formats the current date and time\n const displayName = user?.displayName || 'Anonymous';\n\n return {\n rating: values.rating,\n time: dateAndTime,\n name: displayName,\n review: values.review,\n user_image: responseData.user_image || responseData.image,\n image: responseData.image || responseData.user_image,\n created_at: {\n _seconds: Math.floor(Date.now() / 1000),\n _nanoseconds: (Date.now() % 1000) * 1e6\n },\n userId: responseData.user || responseData.user_id,\n reviewId: responseData.reviewId,\n gs_url: responseData.gs_url\n };\n };\n\n // Helper function for error handling\n const handleApiError = (error: any) => {\n if (error.response?.data?.error) {\n const firebaseError = error.response.data.error;\n if (firebaseError.includes('Firebase ID token has expired')) {\n toast.error('Session expired. Please login again.');\n } else if (firebaseError.includes('already reviewed')) {\n toast.error(firebaseError);\n } else {\n toast.error(error.response.data.message || 'Error submitting review');\n }\n } else {\n toast.error('Error submitting review');\n }\n setIsModalOpen(false);\n };\n\n return (\n <>\n
\n \n
\n

\n Share your experience with us\n

\n \n \n \n
\n
\n \n {({ isSubmitting, setFieldValue, resetForm, values }) => (\n
\n {/* Rating Field */}\n
\n
\n \n \n \n
\n\n {/* Review Field */}\n
\n \n \n
\n
\n\n {/* Terms & Conditions Checkbox */}\n
\n
\n {\n setFieldValue('termsConditions', e.target.checked);\n }}\n className=\"mt-1\"\n />\n \n I certify that this review is based on my experience and\n is my genuine opinion, and have not beet offered any\n incentive or payment origniating from the establishment\n to rewrite this review. I understand that a See Sight\n Tours has a zero tolerance policy on fake reviews.\n \n
\n\n \n
\n\n {/* Submit Button */}\n
\n {isEditReview && (\n {\n resetForm({\n values: {\n review: selectedReviewData\n ? selectedReviewData.review\n : '',\n rating: selectedReviewData\n ? selectedReviewData.rating\n : 0,\n termsConditions: isEditReview ? true : false\n }\n });\n }}\n className=\"py-2 flex justify-center items-center w-[120px] focus:outline-none text-[14px] sm:text-base xxsm:font-normal md:font-semibold border border-primary text-primary float-right rounded-[10px] xxsm:mt-2 xl:mt-5\"\n >\n Undo\n \n )}\n \n {isSubmitting\n ? 'Loading...'\n : isEditReview\n ? 'Save'\n : 'Submit'}\n \n
\n
\n )}\n \n
\n
\n \n \n );\n};\n\nexport default AddReviewModal;\n","export const ConvertPublicUrlToGsUrl = async publicUrl => {\n // Parse the URL to extract the bucket name and file path\n\n const url = new URL(publicUrl);\n\n if (url.hostname === 'lh3.googleusercontent.com') {\n const timestamp = Date.now();\n const storagePath = `Users/${user.uid}/ts_${timestamp}.png`;\n const storageRef = ref(firebaseStorage, storagePath);\n\n // Fetch the Google profile image and convert it to a Blob\n const response = await fetch(url);\n const blob = await response.blob();\n\n // Upload the image Blob to Firebase Storage\n await uploadBytes(storageRef, blob);\n\n // Get the bucket name from the Firebase app configuration\n const bucketName = getApp().options.storageBucket;\n\n return `gs://${bucketName}/${storagePath}`;\n } else {\n const bucketName = url.pathname.split('/')[3];\n\n const filePath = decodeURIComponent(url.pathname.split('/o/')[1]);\n\n // Construct the gs:// URL\n return `gs://${bucketName}/${filePath}`;\n }\n};\n","export const getCurrentToken = async user => {\n try {\n if (user && user.emailVerified) {\n const idToken = await user.getIdToken();\n return idToken;\n } else {\n console.warn('User is not authenticated or email is not verified');\n return null;\n }\n } catch (error) {\n console.error('Error fetching ID token:', error);\n return null;\n }\n};\n","import dayjs from 'dayjs';\n\nexport default function getTimeAgo(created_at) {\n const createdDate = dayjs(created_at, 'MM/DD/YYYY').format('MMMM D, YYYY');\n\n return ` ${createdDate}`;\n}\n\n// Utility function to format created_at date\nexport function formatCreatedAt(createdAt) {\n if (!createdAt) return 'Today'; // Default if no date exists\n\n if (typeof createdAt === 'string') {\n return new Date(createdAt).toLocaleDateString('en-GB', {\n day: '2-digit',\n month: 'long',\n year: 'numeric'\n });\n }\n\n if (typeof createdAt === 'object' && '_seconds' in createdAt) {\n return new Date(createdAt._seconds * 1000).toLocaleDateString('en-GB', {\n day: '2-digit',\n month: 'long',\n year: 'numeric'\n });\n }\n\n return 'Invalid Date'; // Fallback for unknown formats\n}\n\nexport const getMonthsAgo = createdDate => {\n const currentDate = dayjs();\n const diffInDays = currentDate.diff(createdDate, 'day');\n\n return diffInDays > 0\n ? diffInDays > 365\n ? `${Math.floor(currentDate.diff(createdDate, 'year'))} year${\n currentDate.diff(createdDate, 'year') === 1 ? '' : 's'\n } ago`\n : diffInDays > 30\n ? `${Math.floor(currentDate.diff(createdDate, 'month'))} month${\n currentDate.diff(createdDate, 'month') === 1 ? '' : 's'\n } ago`\n : diffInDays === 1\n ? '1 day ago'\n : `${diffInDays} days ago`\n : 'Today';\n};\n\n// Helper function to convert Firestore timestamp to \"YYYY-MM-DD\" format\nexport function convertTimestampToYYYYMMDD(timestamp) {\n if (timestamp?._seconds) {\n // Firestore object format\n const date = new Date(timestamp?._seconds * 1000);\n return date.toISOString().split('T')[0];\n } else if (typeof timestamp === 'string') {\n // ISO 8601 string format\n return timestamp?.split('T')[0];\n }\n return null;\n}\n","/* eslint-disable prefer-const */\nfunction scrollToElement(id: string) {\n let element = document.getElementById(id);\n if (element) {\n element.scrollIntoView({\n behavior: 'smooth',\n block: 'start',\n inline: 'nearest'\n });\n }\n}\nexport default scrollToElement;\n","function replaceText(inputString) {\n // Replace \"https://www.seesight-tours.com\" with \"https://www.tripshepherd.com\"\n const replacedString1 = inputString?.replace(\n /https:\\/\\/www\\.seesight-tours\\.com/g,\n 'https://www.tripshepherd.com'\n );\n\n // Replace \"See Sight Tours\", \"seesight\", and \"see sight\" with \"Trip Shepperd\"\n const replacedString2 = replacedString1?.replace(\n /See Sight Tours|See Sight Tour|Seesight Tours|Trip Shepperd/gi,\n 'Tripshepherd'\n );\n\n return replacedString2;\n}\nexport function replaceTripShepherd(inputString) {\n // Replace \"https://www.seesight-tours.com\" with \"http://trip-shepperd.com\"\n // const replacedString1 = inputString.replace(\n // /https:\\/\\/www\\.seesight-tours\\.com/g,\n // 'http://trip-shepperd.com'\n // );\n\n // Replace \"See Sight Tours\", \"seesight\", and \"see sight\" with \"Trip Shepperd\"\n const replacedString2 = inputString?.replace(\n /Tripshepherd/gi,\n 'See Sight Tours'\n );\n\n return replacedString2;\n}\n\nexport function replaceCanonical(inputString) {\n // Replace \"https://www.seesight-tours.com\" with \"http://trip-shepperd.com\"\n if (!inputString) {\n return;\n }\n const replacedString1 = inputString?.replace(\n /https:\\/\\/www\\.seesight-tours\\.com/g,\n 'https://www.trip-shepperd.com'\n );\n\n return replacedString1;\n}\nexport function replaceTripshepherdWithSeeSight(input) {\n // Check if the input is null or undefined\n if (input == null) return input;\n\n // Regex to detect any Firebase storage URL referencing tripshepherd-prod\n // (e.g. https://firebasestorage.googleapis.com/v0/b/tripshepherd-prod.firebasestorage.app/o/... )\n // We want to skip these entirely, leaving them untouched.\n const firebaseTripshepherdProdRegex = new RegExp(\n 'https?:\\\\/\\\\/firebasestorage\\\\.googleapis\\\\.com\\\\/v0\\\\/b\\\\/tripshepherd-prod\\\\.firebasestorage\\\\.app\\\\/o\\\\/[^\\\\s]*',\n 'gi'\n );\n\n // Regex to detect general URLs anywhere else\n const urlRegex = /(https?:\\/\\/[^\\s]+)/g;\n\n if (typeof input === 'string') {\n // Step 1: Protect any link containing \"tripshepherd-prod\" by replacing it with a placeholder\n const placeholders = [];\n let protectedString = input.replace(\n firebaseTripshepherdProdRegex,\n match => {\n placeholders.push(match);\n return '__FIREBASE_TS_PROD__'; // unique placeholder\n }\n );\n\n // Step 2: Perform normal replacements on everything else\n protectedString = protectedString\n .replace(urlRegex, url => {\n // For any URL that wasn't matched above, replace \"tripshepherd\" with \"seesight-tours\"\n return url.replace(/tripshepherd/gi, 'seesight-tours');\n })\n .replace(/Trip Shepperd/g, 'See Sight Tours') // Replace text\n .replace(/Tripshepherd/g, 'See Sight Tours') // Replace text\n .replace(/TripShepherd/g, 'seesight-tours') // Replace text\n .replace(/tripshepherd/g, 'seesight-tours') // Replace text\n .replace(/Formerly See Sight Tours/g, 'Powered By Tripshepherd'); // Replace text\n\n // Step 3: Restore the untouched \"tripshepherd-prod\" Firebase links\n let placeholderIndex = 0;\n protectedString = protectedString.replace(/__FIREBASE_TS_PROD__/g, () => {\n return placeholders[placeholderIndex++];\n });\n\n return protectedString;\n }\n\n // If it's an array, apply the function recursively\n if (Array.isArray(input)) {\n return input.map(item => replaceTripshepherdWithSeeSight(item));\n }\n\n // If it's an object, apply the function recursively to each field\n if (typeof input === 'object') {\n const newObj = {};\n for (const key in input) {\n if (Object.prototype.hasOwnProperty.call(input, key)) {\n newObj[key] = replaceTripshepherdWithSeeSight(input[key]);\n }\n }\n return newObj;\n }\n\n // Return the input if it's neither a string, object, nor array\n return input;\n}\n\nexport default replaceText;\n","export function optimizeVideoUrl(videoUrl: string): string {\n // Build the Cloudinary transformation string\n const changeFormat =\n videoUrl.search('mp4') > -1 ? videoUrl.replace('mp4', 'mp4') : videoUrl;\n const newLink = changeFormat.split('/upload');\n\n // Generate the optimized video URL\n const optimizedUrl = `${newLink[0]}/upload/q_auto,w_500,${newLink[1]}`;\n\n // Return the optimized URL\n return optimizedUrl;\n}\nexport function optimizeImageUrl(url: string): string {\n //Build the Cloudinary transformation string\n if (url && url.includes('/upload')) {\n const newLink = url.replace('jpeg', 'webp').split('/upload');\n\n //Generate the optimized video URL\n const optimizedUrl = `${newLink[0]}/upload/q_70,w_1000,${newLink[1]}`;\n\n //Return the optimized URL\n return optimizedUrl;\n } else {\n return url;\n }\n}\n","import { __assign } from \"tslib\";\nimport * as React from \"rehackt\";\nimport { mergeOptions } from \"../../utilities/index.js\";\nimport { equal } from \"@wry/equality\";\nimport { DocumentType, verifyDocumentType } from \"../parser/index.js\";\nimport { ApolloError } from \"../../errors/index.js\";\nimport { useApolloClient } from \"./useApolloClient.js\";\nimport { useIsomorphicLayoutEffect } from \"./internal/useIsomorphicLayoutEffect.js\";\n/**\n *\n *\n * > Refer to the [Mutations](https://www.apollographql.com/docs/react/data/mutations/) section for a more in-depth overview of `useMutation`.\n *\n * @example\n * ```jsx\n * import { gql, useMutation } from '@apollo/client';\n *\n * const ADD_TODO = gql`\n * mutation AddTodo($type: String!) {\n * addTodo(type: $type) {\n * id\n * type\n * }\n * }\n * `;\n *\n * function AddTodo() {\n * let input;\n * const [addTodo, { data }] = useMutation(ADD_TODO);\n *\n * return (\n *
\n * {\n * e.preventDefault();\n * addTodo({ variables: { type: input.value } });\n * input.value = '';\n * }}\n * >\n * {\n * input = node;\n * }}\n * />\n * \n * \n *
\n * );\n * }\n * ```\n * @since 3.0.0\n * @param mutation - A GraphQL mutation document parsed into an AST by `gql`.\n * @param options - Options to control how the mutation is executed.\n * @returns A tuple in the form of `[mutate, result]`\n */\nexport function useMutation(mutation, options) {\n var client = useApolloClient(options === null || options === void 0 ? void 0 : options.client);\n verifyDocumentType(mutation, DocumentType.Mutation);\n var _a = React.useState({\n called: false,\n loading: false,\n client: client,\n }), result = _a[0], setResult = _a[1];\n var ref = React.useRef({\n result: result,\n mutationId: 0,\n isMounted: true,\n client: client,\n mutation: mutation,\n options: options,\n });\n useIsomorphicLayoutEffect(function () {\n Object.assign(ref.current, { client: client, options: options, mutation: mutation });\n });\n var execute = React.useCallback(function (executeOptions) {\n if (executeOptions === void 0) { executeOptions = {}; }\n var _a = ref.current, options = _a.options, mutation = _a.mutation;\n var baseOptions = __assign(__assign({}, options), { mutation: mutation });\n var client = executeOptions.client || ref.current.client;\n if (!ref.current.result.loading &&\n !baseOptions.ignoreResults &&\n ref.current.isMounted) {\n setResult((ref.current.result = {\n loading: true,\n error: void 0,\n data: void 0,\n called: true,\n client: client,\n }));\n }\n var mutationId = ++ref.current.mutationId;\n var clientOptions = mergeOptions(baseOptions, executeOptions);\n return client\n .mutate(clientOptions)\n .then(function (response) {\n var _a, _b;\n var data = response.data, errors = response.errors;\n var error = errors && errors.length > 0 ?\n new ApolloError({ graphQLErrors: errors })\n : void 0;\n var onError = executeOptions.onError || ((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onError);\n if (error && onError) {\n onError(error, clientOptions);\n }\n if (mutationId === ref.current.mutationId &&\n !clientOptions.ignoreResults) {\n var result_1 = {\n called: true,\n loading: false,\n data: data,\n error: error,\n client: client,\n };\n if (ref.current.isMounted && !equal(ref.current.result, result_1)) {\n setResult((ref.current.result = result_1));\n }\n }\n var onCompleted = executeOptions.onCompleted || ((_b = ref.current.options) === null || _b === void 0 ? void 0 : _b.onCompleted);\n if (!error) {\n onCompleted === null || onCompleted === void 0 ? void 0 : onCompleted(response.data, clientOptions);\n }\n return response;\n })\n .catch(function (error) {\n var _a;\n if (mutationId === ref.current.mutationId && ref.current.isMounted) {\n var result_2 = {\n loading: false,\n error: error,\n data: void 0,\n called: true,\n client: client,\n };\n if (!equal(ref.current.result, result_2)) {\n setResult((ref.current.result = result_2));\n }\n }\n var onError = executeOptions.onError || ((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onError);\n if (onError) {\n onError(error, clientOptions);\n // TODO(brian): why are we returning this here???\n return { data: void 0, errors: error };\n }\n throw error;\n });\n }, []);\n var reset = React.useCallback(function () {\n if (ref.current.isMounted) {\n var result_3 = {\n called: false,\n loading: false,\n client: ref.current.client,\n };\n Object.assign(ref.current, { mutationId: 0, result: result_3 });\n setResult(result_3);\n }\n }, []);\n React.useEffect(function () {\n var current = ref.current;\n current.isMounted = true;\n return function () {\n current.isMounted = false;\n };\n }, []);\n return [execute, __assign({ reset: reset }, result)];\n}\n//# sourceMappingURL=useMutation.js.map"],"names":["BOOKING_DATA","gql","String","httpLink","HttpLink","uri","process","headers","errorLink","onError","graphQLErrors","networkError","param","map","message","locations","path","console","log","concat","client","ApolloClient","link","from","cache","InMemoryCache","ssrMode","__webpack_exports__","Z","RatingField","field","setFieldValue","mediaQuery","useMediaQuery","name","value","jsx_runtime","jsx","Rating","onClick","rate","initialValue","fillColor","emptyColor","SVGstyle","display","allowFraction","size","CheckBoxTextStyle","styled","p","_templateObject","props","isChecked","Attraction_AddReviewModal","onClose","onSubmit","initialData","setIsModalOpen","id","isEditReview","reviews","setReviews","setIsEditReview","selectedReviewData","setSelectedReviewData","fetchReviews","user","useAuthContext","router","useRouter","modalRef","useRef","closeModal","validationSchema","Yup","shape","rating","min","required","review","trim","test","termsConditions","oneOf","handleSubmit","values","urlParams","URLSearchParams","window","location","search","bookingId","get","email","productId","cityId","tourDate","error","toast","handleEditReview","handleGuestReview","emailVerified","handleUserReview","url","data","token","getCurrentToken","route","reviewId","user_image","photoURL","gs_url","localStorage","getItem","attractionId","image","response","axios","put","Authorization","success","prevReviews","handleApiError","bookingResponse","booking","query","variables","boatnew_booking","customerName","customer","contact_name","toString","userName","post","user_id","uid","newReview","createReviewObject","responseData","dateAndTime","Date","toLocaleString","displayName","time","created_at","_seconds","Math","floor","now","_nanoseconds","userId","firebaseError","includes","Fragment","div","className","jsxs","ref","h2","span","Image","src","alt","width","height","Formik","initialValues","isSubmitting","resetForm","Form","label","Field","component","ErrorMessage","as","placeholder","type","checked","onChange","e","target","button","disabled","ConvertPublicUrlToGsUrl","publicUrl","URL","hostname","timestamp","storagePath","storageRef","firebaseStorage","fetch","blob","uploadBytes","bucketName","getApp","options","storageBucket","pathname","split","filePath","decodeURIComponent","warn","idToken","getIdToken","getTimeAgo","createdDate","dayjs","format","formatCreatedAt","createdAt","toLocaleDateString","day","month","year","convertTimestampToYYYYMMDD","date","toISOString","element","document","getElementById","scrollIntoView","behavior","block","inline","replaceTripshepherdWithSeeSight","input","firebaseTripshepherdProdRegex","placeholders","protectedString","replace","match","push","placeholderIndex","Array","isArray","item","newObj","key","Object","prototype","hasOwnProperty","call","optimizeVideoUrl","videoUrl","changeFormat","newLink","optimizedUrl","optimizeImageUrl","useMutation","mutation","_useApolloClient_js__WEBPACK_IMPORTED_MODULE_2__","x","_parser_index_js__WEBPACK_IMPORTED_MODULE_3__","Vp","n_","Mutation","_a","rehackt__WEBPACK_IMPORTED_MODULE_0__","useState","called","loading","result","setResult","mutationId","isMounted","_internal_useIsomorphicLayoutEffect_js__WEBPACK_IMPORTED_MODULE_4__","L","assign","current","execute","useCallback","executeOptions","baseOptions","tslib__WEBPACK_IMPORTED_MODULE_5__","pi","ignoreResults","clientOptions","_utilities_index_js__WEBPACK_IMPORTED_MODULE_6__","J","mutate","then","_b","errors","length","_errors_index_js__WEBPACK_IMPORTED_MODULE_7__","cA","result_1","_wry_equality__WEBPACK_IMPORTED_MODULE_1__","D","onCompleted","catch","result_2","reset","result_3","useEffect"],"sourceRoot":""}