{"version":3,"file":"static/chunks/9583-bfd5f5ffacdae2fe.js","mappings":"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","sources":["webpack://_N_E/./src/components/EditableTextAreaField/styles.ts","webpack://_N_E/./src/components/EditableTextAreaField/index.tsx","webpack://_N_E/./src/components/EditableTextField/styles.ts","webpack://_N_E/./src/components/EditableTextField/index.tsx","webpack://_N_E/./src/components/FeedItemStrava/styles.ts","webpack://_N_E/./src/components/FeedItemStrava/index.tsx","webpack://_N_E/./src/components/FeedItemFitbit/styles.ts","webpack://_N_E/./src/components/FeedItemFitbit/index.tsx","webpack://_N_E/./src/components/FeedItemMilestone/styles.ts","webpack://_N_E/./src/components/FeedItemMilestone/index.tsx","webpack://_N_E/./src/components/FeedItem/styles.ts","webpack://_N_E/./src/components/FeedItem/index.tsx","webpack://_N_E/./src/components/FeedItemDonationForm/styles.ts","webpack://_N_E/./src/components/FeedItemDonationForm/index.tsx","webpack://_N_E/./src/components/FeedItemPostForm/styles.ts","webpack://_N_E/./src/components/FeedItemPostForm/index.tsx","webpack://_N_E/./src/components/GalleryImageClickable/index.tsx","webpack://_N_E/./src/components/GalleryThumbnail/styles.ts","webpack://_N_E/./src/components/GalleryThumbnail/index.tsx","webpack://_N_E/./src/utils/imageUploadUtils.ts","webpack://_N_E/./src/components/ImageUploader/styles.ts","webpack://_N_E/./src/components/ImageUploader/index.tsx","webpack://_N_E/./src/components/ReadMore/index.tsx","webpack://_N_E/./src/services/donationService.ts","webpack://_N_E/./src/services/feedItemService.ts"],"sourcesContent":["import styled from \"styled-components\";\nimport {\n TextAreaField,\n type ThemeType,\n type FontSizeType,\n} from \"@cruk/cruk-react-components\";\n\nexport const TextAreaStyled = styled(TextAreaField)<{\n theme: ThemeType;\n $textSize: FontSizeType;\n $lineCount: number;\n}>`\n font-size: ${({ theme, $textSize }) =>\n !!$textSize && !!theme?.fontSizes[$textSize]\n ? theme?.fontSizes[$textSize]\n : theme.fontSizes.m};\n height: ${({ lineCount }) => `calc(1.5em * ${lineCount})`};\n`;\n\nexport default TextAreaStyled;\n","import React, {\n useEffect,\n useRef,\n useState,\n memo,\n type Dispatch,\n type SetStateAction,\n type InputHTMLAttributes,\n type ChangeEvent,\n type FocusEvent,\n type ReactNode,\n} from \"react\";\nimport { Text, Box, type FontSizeType } from \"@cruk/cruk-react-components\";\n\nimport { validate, calcLength } from \"@fwa/src/utils/formUtils\";\n\nimport { TextAreaStyled } from \"@fwa/src/components/EditableTextAreaField/styles\";\nimport { type ValidationType } from \"@fwa/src/types\";\n\ntype Props = InputHTMLAttributes & {\n setCurrentValue: (value: string) => void;\n text: string;\n validation: ValidationType;\n setValidationMessage: Dispatch>;\n label?: string;\n hintText?: ReactNode;\n validationMessage?: string;\n textSize?: FontSizeType;\n lineCount?: number;\n};\n\n// This component is more streamlined version the EditableText component\n// It is based on a TextAreaField, which is a standard text textArea element\n// so doesn't need any of the complexity of selecting ranges\n// or updating inner html to keep new lines consistent across different browsers\nexport const EditableTextAreaField = ({\n setCurrentValue,\n text,\n validation,\n setValidationMessage,\n validationMessage = \"\",\n label = \"\",\n hintText,\n textSize,\n lineCount = 3,\n \"aria-label\": ariaLabel,\n}: Props) => {\n const [charCount, setCharCount] = useState(calcLength(text || \"\"));\n const textAreaRef = useRef(null);\n\n const handleBlur = (e: FocusEvent) => {\n validate(e.target.value, validation, setValidationMessage);\n };\n\n const handleChange = (e: ChangeEvent) => {\n setCharCount(calcLength(e.target.value || text || \"\"));\n setCurrentValue(e.target.value);\n };\n\n // reset validation message on first render\n useEffect(() => {\n setValidationMessage(\"\");\n }, [setValidationMessage]);\n\n useEffect(() => {\n if (text === \"\" && textAreaRef.current) {\n textAreaRef.current.value = \"\";\n }\n }, [text, textAreaRef]);\n\n return (\n <>\n \n\n {validation.maxLength && validation.maxLength > 0 && (\n \n {`${\n validation.maxLength - charCount\n } characters remaining`}\n \n )}\n \n );\n};\n\nexport default memo(EditableTextAreaField);\n","import styled from \"styled-components\";\nimport {\n TextField,\n type ThemeType,\n type FontSizeType,\n} from \"@cruk/cruk-react-components\";\n\nexport const TextFieldStyled = styled(TextField)<{\n theme: ThemeType;\n $textSize: FontSizeType;\n}>`\n font-size: ${({ theme, $textSize }) =>\n !!$textSize && !!theme?.fontSizes[$textSize]\n ? theme?.fontSizes[$textSize]\n : theme.fontSizes.m};\n`;\n\nexport default TextFieldStyled;\n","import React, {\n useState,\n useEffect,\n type ChangeEvent,\n type FocusEvent,\n type Dispatch,\n type SetStateAction,\n type InputHTMLAttributes,\n type ReactNode,\n memo,\n useRef,\n} from \"react\";\nimport { Text, type FontSizeType } from \"@cruk/cruk-react-components\";\n\nimport { validate, calcLength } from \"@fwa/src/utils/formUtils\";\n\nimport { TextFieldStyled } from \"@fwa/src/components/EditableTextField/styles\";\nimport { type ValidationType } from \"@fwa/src/types\";\n\ntype Props = InputHTMLAttributes & {\n setCurrentValue: (value: string) => void;\n text: string;\n validation: ValidationType;\n setValidationMessage: Dispatch>;\n label?: string;\n hintText?: ReactNode;\n extraBottom?: ReactNode;\n extraLeft?: ReactNode;\n extraRight?: ReactNode;\n extraTop?: ReactNode;\n validationMessage?: string;\n textSize?: FontSizeType;\n errorMessage?: string;\n inputMode?: string;\n pattern?: string;\n name?: string;\n};\n\n// This component is more streamlined version the EditableText component\n// It is based on a TextField, which is a standard text input element\n// so doesn't need any of the complexity of selecting ranges\n// or updating inner html to keep new lines consistent across different browsers\nexport const EditableTextField = ({\n setCurrentValue,\n text,\n validation,\n setValidationMessage,\n validationMessage = \"\",\n label = \"\",\n hintText,\n extraBottom,\n extraLeft,\n extraRight,\n extraTop,\n textSize,\n errorMessage,\n required,\n inputMode,\n pattern,\n name,\n \"aria-label\": ariaLabel,\n}: Props) => {\n const [charCount, setCharCount] = useState(calcLength(text || \"\"));\n const textRef = useRef(null);\n\n const handleBlur = (e: FocusEvent) => {\n validate(e.target.value, validation, setValidationMessage);\n };\n\n const handleChange = (e: ChangeEvent) => {\n const input = e.target as HTMLInputElement;\n setCharCount(calcLength(input.value));\n setCurrentValue(e.target.value);\n };\n\n // reset validation message on first render\n useEffect(() => {\n setValidationMessage(\"\");\n }, [setValidationMessage]);\n\n useEffect(() => {\n if (text === \"\" && textRef.current) {\n textRef.current.value = \"\";\n }\n }, [text, textRef]);\n\n return (\n <>\n \n\n {validation.maxLength && validation.maxLength > 0 && (\n {`${\n validation.maxLength - charCount\n } characters remaining`}\n )}\n \n );\n};\n\nexport default memo(EditableTextField);\n","import { type ThemeType } from \"@cruk/cruk-react-components\";\nimport styled from \"styled-components\";\n\nexport const StravaTable = styled.div`\n max-width: 400px;\n`;\n\nexport const LogoImageWrapper = styled.div<{ theme: ThemeType }>`\n display: inline-block;\n margin-right: ${({ theme }) => theme.spacing.xxs};\n height: ${({ theme }) => theme.spacing.s};\n width: ${({ theme }) => theme.spacing.s};\n border-radius: 50%;\n overflow: hidden;\n img {\n width: 100%;\n height: 100%;\n }\n`;\n","import {\n UserBlock,\n Text,\n Heading,\n Link,\n Box,\n IconFa,\n} from \"@cruk/cruk-react-components\";\nimport { formatDistanceToNow } from \"date-fns\";\nimport { faClock } from \"@fortawesome/free-regular-svg-icons\";\n\nimport { imagePathFromImageType } from \"@fwa/src/services/imageService\";\nimport { secondsToDurationString } from \"@fwa/src/utils/timeUtils\";\n\nimport {\n StravaTable,\n LogoImageWrapper,\n} from \"@fwa/src/components/FeedItemStrava/styles\";\nimport { Column, Row, RowStretch } from \"@fwa/src/components/styles\";\n\nimport { type FeedItemActivityStravaType } from \"@fwa/src/types\";\n\nconst stravaLogo = \"/assets/images/logos/strava-rounded-128.png\";\n\ntype Props = {\n feedItem: FeedItemActivityStravaType;\n avatarUrl: string | undefined;\n displayName: string;\n isMetric: boolean;\n};\n\nexport const FeedItemStrava = ({\n feedItem,\n avatarUrl,\n displayName,\n isMetric,\n}: Props) => (\n
\n \n \n \n {formatDistanceToNow(new Date(feedItem.created), {\n addSuffix: true,\n includeSeconds: true,\n })}\n \n }\n size=\"m\"\n />\n \n \n {feedItem.name}\n \n \n \n \n \n Activity\n {feedItem.stravaActivityType}\n \n \n Distance\n {isMetric ? (\n {((feedItem.distance || 0) / 1000).toFixed(2)}km\n ) : (\n {((feedItem.distance || 0) / 1609.34).toFixed(2)}mi\n )}\n \n \n Time\n {feedItem.time ? (\n {secondsToDurationString(feedItem.time)}\n ) : null}\n \n \n \n \n {feedItem.map && (\n \n \n \n )}\n\n \n \n \"Strava\n \n \n View on Strava\n \n \n
\n);\n\nexport default FeedItemStrava;\n","import { type ThemeType } from \"@cruk/cruk-react-components\";\nimport styled from \"styled-components\";\n\nexport const LogoImageWrapper = styled.span`\n display: inline-block;\n height: 1.5em;\n width: 1.5em;\n vertical-align: middle;\n`;\n\nexport const StepsWrapper = styled.div<{ theme: ThemeType }>`\n display: block;\n height: ${({ theme }) => theme.spacing.m};\n width: ${({ theme }) => theme.spacing.m};\n color: ${({ theme }) => theme.tokenColors.cyan_900};\n margin: ${({ theme }) =>\n `-${theme.spacing.xxs} auto ${theme.spacing.xxs} auto`};\n transform: rotate(270deg);\n svg {\n margin: 0;\n width: 100%;\n height: 100%;\n }\n`;\nexport const MarkerWrapper = styled.div<{ theme: ThemeType }>`\n display: block;\n margin: ${({ theme }) =>\n `-${theme.spacing.xxs} auto ${theme.spacing.xxs} auto`};\n height: ${({ theme }) => theme.spacing.m};\n width: ${({ theme }) => theme.spacing.m};\n color: ${({ theme }) => theme.tokenColors.cyan_900};\n svg {\n width: 100%;\n height: 100%;\n }\n`;\n\nexport const RowWrap = styled.div`\n display: flex;\n justify-content: space-around;\n flex-wrap: wrap;\n`;\n","import {\n crukTheme,\n UserBlock,\n Text,\n Heading,\n Box,\n IconFa,\n ProgressBar,\n} from \"@cruk/cruk-react-components\";\nimport { format, formatDistanceToNow } from \"date-fns\";\nimport { faClock, faCheckCircle } from \"@fortawesome/free-regular-svg-icons\";\nimport { faShoePrints, faLocationDot } from \"@fortawesome/free-solid-svg-icons\";\n\nimport { Column } from \"@fwa/src/components/styles\";\nimport {\n LogoImageWrapper,\n StepsWrapper,\n MarkerWrapper,\n RowWrap,\n} from \"@fwa/src/components/FeedItemFitbit/styles\";\n\nimport { type FeedItemActivityFitbitType } from \"@fwa/src/types\";\n\nconst fitbitSVG = \"/assets/images/logos/fitbit.svg\";\n\ntype Props = {\n feedItem: FeedItemActivityFitbitType;\n avatarUrl: string | undefined;\n displayName: string;\n fitbitDailyTargetSteps: number;\n};\n\nexport const FeedItemFitbit = ({\n feedItem,\n avatarUrl,\n displayName,\n fitbitDailyTargetSteps,\n}: Props) => {\n const timeString = formatDistanceToNow(new Date(feedItem.created), {\n addSuffix: true,\n includeSeconds: true,\n });\n const feedItemDateString = format(new Date(feedItem.created), \"d LLL y\");\n const fitbitPercentage = () =>\n !fitbitDailyTargetSteps\n ? 0\n : Math.floor((feedItem.steps / fitbitDailyTargetSteps) * 100);\n\n return (\n
\n \n \n {timeString}\n \n }\n size=\"m\"\n />\n \n \n \n \"\"\n \n {` Fitbit activity - ${feedItemDateString}`}\n \n \n \n \n \n \n \n \n {feedItem.steps.toLocaleString()}\n \n steps\n \n }\n percentage={fitbitPercentage()}\n isCircular\n />\n \n \n \n \n \n {(feedItem.distance / 1000).toFixed(2)}\n \n km\n \n }\n percentage={fitbitPercentage()}\n isCircular\n />\n \n {!!fitbitDailyTargetSteps && (\n \n {fitbitPercentage() >= 100 && (\n <>\n {\" \"}\n \n )}\n {fitbitPercentage()}% of daily target achieved\n \n )}\n \n
\n );\n};\n\nexport default FeedItemFitbit;\n","import styled from \"styled-components\";\n\nexport const EverythingWrapper = styled.div`\n position: relative;\n`;\n\nexport const BackgroundImageWrapper = styled.div`\n width: 100%;\n max-width: 250px;\n height: auto;\n margin: auto;\n overflow: hidden;\n`;\n\nexport const BackgroundImage = styled.img`\n height: 100%;\n width: auto;\n margin: auto;\n display: block;\n`;\n\nexport const TextContentWrapper = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n * {\n max-width: 250px;\n }\n`;\n","import { UserBlock, Text, IconFa, Box } from \"@cruk/cruk-react-components\";\nimport { formatDistanceToNow } from \"date-fns\";\nimport { faClock } from \"@fortawesome/free-regular-svg-icons\";\n\nimport { imagePathFromImageType } from \"@fwa/src/services/imageService\";\n\nimport {\n EverythingWrapper,\n BackgroundImageWrapper,\n TextContentWrapper,\n BackgroundImage,\n} from \"@fwa/src/components/FeedItemMilestone/styles\";\n\nimport { type FeedItemMilestoneType } from \"@fwa/src/types\";\n\ntype Props = {\n feedItem: FeedItemMilestoneType;\n avatarUrl?: string;\n};\n\nexport const FeedItemMilestone = ({\n feedItem: { created, body, title, subtitle, backgroundImage },\n avatarUrl,\n}: Props) => (\n
\n \n \n {\" \"}\n {created\n ? `${formatDistanceToNow(new Date(created), {\n addSuffix: true,\n includeSeconds: true,\n })}`\n : \"Right Now\"}\n \n }\n />\n \n \n \n \n {backgroundImage && (\n \n \n \n )}\n \n {title && (\n \n {title}\n \n )}\n {subtitle && (\n \n {subtitle}\n \n )}\n \n \n \n {body ? {body} : null}\n \n
\n);\n\nexport default FeedItemMilestone;\n","import styled from \"styled-components\";\nimport { type ThemeType } from \"@cruk/cruk-react-components\";\n\nexport const FeedItemWrapper = styled.div<{ theme: ThemeType }>`\n position: relative;\n min-height: ${({ theme }) => theme.spacing.m};\n padding: ${({ theme }) => theme.spacing.s};\n border: 1px solid ${({ theme }) => theme.tokenColors.grey_300};\n`;\n\nexport const ActionButtonWrapper = styled.div<{ theme: ThemeType }>`\n margin-left: auto;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n\n > * {\n margin: ${({ theme }) => `0 0 -${theme.spacing.xs} ${theme.spacing.xs}`};\n height: auto;\n\n &:first-child {\n margin: ${({ theme }) => `0 0 -${theme.spacing.xs} 0`};\n }\n }\n\n @media (min-width: ${({ theme }) => theme.breakpoint.mobile}) {\n justify-content: center;\n }\n`;\n\nexport const FeedItemFooter = styled.div`\n display: flex;\n flex-direction: row-reverse;\n`;\n\nexport const IconBadgeWrapper = styled.span<{ theme: ThemeType }>`\n position: absolute;\n left: -${({ theme }) => theme.spacing.xs};\n top: -${({ theme }) => theme.spacing.xs};\n`;\n","import { useEffect, useState } from \"react\";\nimport NextLink from \"next/link\";\nimport {\n Box,\n Button,\n IconFa,\n Badge,\n ErrorText,\n crukTheme,\n Link as A,\n} from \"@cruk/cruk-react-components\";\nimport { useRouter } from \"next/compat/router\";\nimport {\n faFlag,\n faSterlingSign,\n faHeartPulse,\n faComment,\n faEdit,\n faShareAlt,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { faTrashCan } from \"@fortawesome/free-regular-svg-icons\";\n\nimport { useTracking } from \"@fwa/src/hooks/useTracking\";\nimport { fetcher } from \"@fwa/src/services/apiClient\";\nimport { fwsUrlFeedItemDelete } from \"@fwa/src/services/feedItemService\";\nimport { userNameForPage } from \"@fwa/src/utils/pageUtils\";\nimport { queryAsString } from \"@fwa/src/utils/urlUtils\";\nimport { imagePathFromImageType } from \"@fwa/src/services/imageService\";\nimport { useFundraiserContext } from \"@fwa/src/contexts/FundraiserContext\";\n\nimport { FormActions } from \"@fwa/src/components/FormActions\";\nimport { FeedItemDonationForm } from \"@fwa/src/components/FeedItemDonationForm\";\nimport { FeedItemPostForm } from \"@fwa/src/components/FeedItemPostForm\";\nimport { FeedItemStrava } from \"@fwa/src/components/FeedItemStrava\";\nimport { FeedItemFitbit } from \"@fwa/src/components/FeedItemFitbit\";\nimport { FeedItemMilestone } from \"@fwa/src/components/FeedItemMilestone\";\nimport { Share } from \"@fwa/src/components/Share\";\nimport { Highlight } from \"@fwa/src/components/Highlight\";\n\nimport {\n FeedItemWrapper,\n ActionButtonWrapper,\n FeedItemFooter,\n IconBadgeWrapper,\n} from \"@fwa/src/components/FeedItem/styles\";\n\nimport {\n type FeedItemType,\n type FeedItemStatusType,\n type FeedItemMilestoneType,\n type FeedItemDonationRealType,\n type FeedItemDonationFakeType,\n type FeedItemDonationFacebookType,\n type FeedItemPostType,\n type FeedItemActivityStravaType,\n type FeedItemActivityFitbitType,\n} from \"@fwa/src/types\";\n\nconst crukCLogo = \"/assets/images/logos/cruk_c_128.png\";\n\nconst CommentBadge = () => (\n \n \n \n \n \n);\nconst FlagBadge = () => (\n \n \n \n \n \n);\nconst ActivityBadge = () => (\n \n \n \n \n \n);\nconst PoundBadge = () => (\n \n \n \n \n \n);\n\ntype FeedItemProps = {\n feedItem: FeedItemType;\n handleDelete: (updatedItem: FeedItemType) => void;\n handleEdit: (updatedItem: FeedItemType) => void;\n pageUrl: string | null;\n pageId: string;\n isStravaMetric: boolean;\n fitbitDailyTargetSteps: number;\n showParentPageLink?: boolean;\n isDonationConfirmation?: boolean;\n};\n\nexport const FeedItem = ({\n feedItem,\n handleDelete,\n handleEdit,\n pageUrl,\n pageId,\n isStravaMetric,\n fitbitDailyTargetSteps,\n showParentPageLink = false,\n isDonationConfirmation = false,\n}: FeedItemProps) => {\n const { trackError, trackEventGtm } = useTracking();\n const [error, setError] = useState(null);\n const [status, setStatus] = useState(\"idle\");\n const [secret, setSecret] = useState(\"\");\n const router = useRouter();\n\n const userName = userNameForPage(feedItem?.page);\n const displayNameOrUserName = feedItem?.page?.owner?.displayName\n ? feedItem.page.owner.displayName\n : userName;\n\n const [fundraiserState] = useFundraiserContext();\n const { fundraiser } = fundraiserState;\n\n const isOwner: boolean =\n isDonationConfirmation || // if you see the donation confirmation assume that you are the donor can edit donation feed item\n (fundraiser && // logged in fundraiser is the page owner where feed item belongs\n fundraiser?.uniqueId === feedItem.page?.fundraiser?.uniqueId) ||\n false;\n\n const isEditable: boolean =\n (feedItem.entityType === \"DonationReal\" && !!secret) || // Donor editing their donation from email link\n (isOwner &&\n (feedItem.entityType === \"Post\" ||\n (feedItem.entityType === \"DonationReal\" &&\n \"originatorPaymentId\" in feedItem) || // Donor is editing their donation\n (feedItem.entityType === \"DonationFake\" &&\n \"online\" in feedItem &&\n !feedItem.online))) || // Ignore Facebook donations possibly\n false;\n\n const isDeletable =\n isOwner &&\n (feedItem.entityType === \"Post\" ||\n feedItem.entityType === \"Milestone\" ||\n feedItem.entityType === \"ActivityStrava\" ||\n (feedItem.entityType === \"DonationFake\" &&\n \"online\" in feedItem &&\n !feedItem.online));\n\n // Avatar URL start ///////////////////////\n\n // Order of preference\n // 1) special kickstarter fake donations and milestones have hard coded image urls because of an issue with uploading them in legacy admin.\n // 2) special fake donations and milstones sometimes have a profileImage URLs defined in the feedItem data.\n // 3) Real donations from the owner might be missing a profile image in the donation so lets use their account profile image url as the feeditem avatar url\n // 4) Real donations from everyone else has avatarUrl as 'undefined' letting the avatar image component derrive a default letter image from avatar name\n\n const pageFundraiserProfileImage: string | undefined =\n !feedItem?.page?.owner && feedItem?.page?.fundraiser?.profileImage\n ? feedItem.page.fundraiser.profileImage.entityType === \"ImageFacebook\"\n ? `${feedItem.page.fundraiser.profileImage.url}?width=300&height=300`\n : imagePathFromImageType(feedItem.page.fundraiser?.profileImage)\n : undefined;\n\n // now this is grim donation.profileImage is a string and milestone.profileImage is an ImageType\n const feedItemAsDonation:\n | FeedItemDonationRealType\n | FeedItemDonationFakeType\n | FeedItemDonationFacebookType\n | undefined =\n feedItem.entityType === \"DonationReal\" ||\n feedItem.entityType === \"DonationFake\"\n ? (feedItem as FeedItemDonationRealType | FeedItemDonationFakeType)\n : undefined;\n const feedItemAsDonationFake: FeedItemDonationFakeType | undefined =\n feedItem.entityType === \"DonationFake\"\n ? (feedItem as FeedItemDonationFakeType)\n : undefined;\n const feedItemAsMilestone: FeedItemMilestoneType | undefined =\n feedItem.entityType === \"Milestone\"\n ? (feedItem as FeedItemMilestoneType)\n : undefined;\n\n // special cases where FWA forces the avatar image\n const kickStartAvatarImages = {\n Tesco: \"https://fundraise.cancerresearchuk.org/images/tescosquare.png\",\n \"Standard Life\":\n \"https://fundraise.cancerresearchuk.org/images/standardlifeletterssquare.jpg\",\n };\n const kickStarterDonationName:\n | keyof typeof kickStartAvatarImages\n | undefined =\n (feedItemAsDonationFake?.donationName?.trim() || \"\") in\n kickStartAvatarImages\n ? (feedItemAsDonationFake?.donationName?.trim() as keyof typeof kickStartAvatarImages)\n : undefined;\n\n const kickStartAvatarUrl: string | undefined = kickStarterDonationName\n ? kickStartAvatarImages[kickStarterDonationName]\n : undefined;\n\n const milestoneAvatarUrl: string | undefined = feedItemAsMilestone\n ? crukCLogo\n : undefined;\n\n const forcedAvatarUrl = kickStartAvatarUrl || milestoneAvatarUrl;\n\n const feedItemProfileImageUrl: string | undefined =\n forcedAvatarUrl ||\n feedItemAsDonation?.profileImage ||\n feedItemAsMilestone?.profileImage?.url;\n\n const isDonerAndOwner =\n \"donationName\" in feedItem &&\n feedItemAsDonation?.donationName === displayNameOrUserName;\n const donationProfileImageUrl = isDonerAndOwner\n ? pageFundraiserProfileImage\n : feedItemProfileImageUrl; // undefined means it uses the default images with letters\n\n const avatarUrl: string | undefined = feedItemAsDonation\n ? donationProfileImageUrl\n : feedItemProfileImageUrl || pageFundraiserProfileImage;\n\n // Avatar URL end ///////////////////////\n\n const parentPageLink =\n showParentPageLink && feedItem.page.entityType === \"FundraisingPage\" ? (\n \n {feedItem.page.title}\n \n ) : undefined;\n\n const handleCancelClick = () => {\n setStatus(\"idle\");\n };\n\n const handleDeleteClick = () => {\n setStatus(\"deleting\");\n setError(null);\n\n const url = fwsUrlFeedItemDelete(feedItem);\n fetcher(url, {\n method: \"DELETE\",\n })\n .then((res) => res as Response)\n .then((res: Response) => {\n if (res && !res.ok) {\n setError(new Error(\"Unable to delete\"));\n return undefined;\n }\n trackEventGtm({\n event: \"feeditem_delete\",\n entityType: feedItem.entityType,\n });\n if (handleDelete) {\n handleDelete(feedItem);\n }\n return undefined;\n })\n .catch((err: Error) => {\n trackError(err, { component: \"FeedItem\" });\n setStatus(\"idle\");\n setError(new Error(\"Unable to delete\"));\n });\n };\n\n const handleEditData = (data: Partial) => {\n setStatus(\"idle\");\n handleEdit({ ...feedItem, ...data });\n trackEventGtm({\n event: \"feeditem_edit\",\n entityType: feedItem.entityType,\n });\n };\n\n // Donor can edit donation message from email link with secret is in query string\n useEffect(() => {\n if (router?.query.secret) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { secret: secretInQuery, slug, ...rest } = router.query;\n setSecret(queryAsString(secretInQuery));\n router\n .push(\n {\n pathname: router.asPath.split(\"?\")[0],\n query: rest,\n },\n undefined,\n {\n shallow: true,\n },\n )\n .catch((err) => {\n trackError(err as Error, { component: \"FeedItem\" });\n });\n }\n }, [router, trackError]);\n\n const renderItem = (pageUrl: string) => {\n switch (feedItem.entityType) {\n case \"ActivityStrava\":\n return (\n \n );\n case \"ActivityFitbit\":\n return (\n \n );\n case \"Post\":\n return (\n \n \n \n );\n case \"Milestone\":\n return (\n
\n \n
\n );\n case \"DonationReal\":\n return (\n \n );\n case \"DonationFacebook\":\n return (\n \n );\n case \"DonationFake\":\n return (\n \n );\n default:\n return null;\n }\n };\n\n const isHighlighted = status === \"editing\" || status === \"deleting\";\n\n const feedItemBadges = {\n Post: ,\n Milestone: ,\n ActivityStrava: ,\n ActivityFitbit: ,\n DonationReal: ,\n DonationFake: ,\n DonationFacebook: ,\n };\n\n return (\n \n \n {feedItemBadges[feedItem.entityType]}\n\n {pageUrl ? renderItem(pageUrl) : null}\n\n {error ? {error.message} : null}\n\n {status === \"deleting\" && (\n \n )}\n\n {status === \"idle\" && (\n \n \n {isDeletable ? (\n {\n setStatus(\"deleting\");\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n setStatus(\"deleting\");\n }\n }}\n data-cta-type=\"delete-feed-item\"\n >\n \n Delete\n \n ) : null}\n\n {isEditable ? (\n {\n setStatus(\"editing\");\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n setStatus(\"editing\");\n }\n }}\n data-cta-type=\"edit-feed-item\"\n >\n \n Edit\n \n ) : null}\n\n \n \n \n Share\n \n \n \n \n )}\n \n \n );\n};\n\nexport default FeedItem;\n","import styled from \"styled-components\";\nimport { Text, type ThemeType } from \"@cruk/cruk-react-components\";\n\nexport const MoneyText = styled(Text)<{ theme: ThemeType }>`\n font-family: ${({ theme }) => theme.typography.fontFamilyHeadings};\n`;\n\nexport default MoneyText;\n","import { useState, useEffect, type ReactNode, useRef } from \"react\";\nimport { useSWRConfig } from \"swr\";\nimport {\n UserBlock,\n Text,\n IconFa,\n ErrorText,\n Box,\n Collapse,\n} from \"@cruk/cruk-react-components\";\nimport { useRouter } from \"next/compat/router\";\nimport { formatDistanceToNow, parseISO } from \"date-fns\";\nimport { faClock } from \"@fortawesome/free-regular-svg-icons\";\n\nimport { useTracking } from \"@fwa/src/hooks/useTracking\";\nimport { isBrowser } from \"@fwa/src/utils/browserUtils\";\nimport { isToday, isTomorrow, isValidDate } from \"@fwa/src/utils/timeUtils\";\nimport { useKey } from \"@fwa/src/hooks/useKey\";\nimport { fetcher } from \"@fwa/src/services/apiClient\";\nimport {\n fwsUrlNewFakeDonation,\n fwsUrlDonation,\n} from \"@fwa/src/services/donationService\";\nimport { buildQuery, queryAsString } from \"@fwa/src/utils/urlUtils\";\nimport { numberWithCommas } from \"@fwa/src/utils/formatUtils\";\nimport { useOptimizelyContext } from \"@fwa/src/contexts/OptimizelyContext\";\n\nimport { DateRangePicker } from \"@fwa/src/components/DateRangePicker\";\nimport { FormActions } from \"@fwa/src/components/FormActions\";\nimport { EditableTextField } from \"@fwa/src/components/EditableTextField\";\nimport { EditableTextAreaField } from \"@fwa/src/components/EditableTextAreaField\";\nimport { ReadMore } from \"@fwa/src/components/ReadMore\";\n\nimport { RowCenter } from \"@fwa/src/components/styles\";\n\nimport { MoneyText } from \"@fwa/src/components/FeedItemDonationForm/styles\";\n\nimport {\n type FeedItemDonationRealType,\n type FeedItemDonationFakeType,\n type FeedItemStatusType,\n type FeedItemDonationFacebookType,\n type FundraisingPageType,\n} from \"@fwa/src/types\";\nimport { useFundraiserContext } from \"@fwa/src/contexts/FundraiserContext\";\n\nconst facebookAvatar = \"/assets/images/img/facebook-circle.png\";\n\ntype Props = {\n feedItem?:\n | FeedItemDonationRealType\n | FeedItemDonationFakeType\n | FeedItemDonationFacebookType;\n handleCancelClick?: () => void;\n handleEditData?: (data: FeedItemDonationFakeType) => void;\n handleCreate?: (data: FeedItemDonationFakeType) => void;\n pageUrl: string;\n pageId: string;\n avatarUrl?: string;\n online?: boolean;\n status: FeedItemStatusType;\n parentPageLink?: ReactNode;\n secret?: string;\n};\n\nexport const FeedItemDonationForm = ({\n feedItem,\n avatarUrl,\n handleCancelClick,\n handleEditData,\n handleCreate,\n pageUrl,\n pageId,\n status,\n parentPageLink,\n secret,\n}: Props) => {\n const [fundraiserState] = useFundraiserContext();\n const { fundraiser } = fundraiserState;\n const { cache, mutate: globalMutate } = useSWRConfig();\n const { trackError, trackEventGtm } = useTracking();\n const { trackEventOptimizely, optimizelyContext } = useOptimizelyContext();\n const { optimizelyUserContext } = optimizelyContext;\n const nameRef = useRef(null);\n const amountRef = useRef(null);\n const bodyRef = useRef(null);\n const dateRef = useRef(null);\n const online = feedItem && \"online\" in feedItem ? feedItem.online : true;\n const router = useRouter();\n\n const [donationMessageState, setDonationMessageState] = useState(\n feedItem?.donationMessage || \"\",\n );\n const [amountState, setAmountState] = useState(feedItem?.amount || 0);\n const [date, setDate] = useState(\n feedItem?.created ? new Date(feedItem?.created) : undefined,\n );\n const [validationMessageName, setValidationMessageName] =\n useState(\"\");\n const [validationMessageBody, setValidationMessageBody] =\n useState(\"\");\n const [validationMessageAmount, setValidationMessageAmount] =\n useState(\"\");\n const [errorMessage, setErrorMessage] = useState(\"\");\n const [isLoading, setIsLoading] = useState(false);\n const [isDateValid, setIsDateValid] = useState(true);\n const [showDatePicker, setShowDatePicker] = useState(false);\n\n const isPageOwner =\n fundraiser?.uniqueId &&\n fundraiser?.uniqueId === feedItem?.page?.fundraiser?.uniqueId;\n\n const [donationNameState, setDonationNameState] = useState(\n feedItem?.donationName || \"\",\n );\n\n const makeTimeString = (dateValue?: Date): string =>\n dateValue\n ? formatDistanceToNow(new Date(dateValue), {\n addSuffix: true,\n includeSeconds: true,\n })\n : `Right now`;\n\n const feedItemTimeString = makeTimeString(\n feedItem?.created ? new Date(feedItem?.created) : undefined,\n );\n\n const inEditTimeString = makeTimeString(date);\n\n const isInvalid =\n (showDatePicker && !isDateValid) ||\n !!validationMessageName.length ||\n !!validationMessageBody.length ||\n !!validationMessageAmount.length;\n\n // This is only visible to page owners\n const donorFullName = !isPageOwner\n ? null\n : feedItem && \"donorName\" in feedItem\n ? feedItem.donorName\n : null;\n\n const clearFields = () => {\n setDonationNameState(\"\");\n setDonationMessageState(\"\");\n setAmountState(0);\n setDate(feedItem?.created ? new Date(feedItem?.created) : new Date());\n };\n\n const handleDonationNameChange = (name: string) => {\n setDonationNameState(name);\n };\n\n const handleDateChange = (dateToChange: Date) => {\n const sanitisedDate = isValidDate(dateToChange) ? dateToChange : new Date();\n const startOfDay: Date =\n isToday(sanitisedDate) || isTomorrow(sanitisedDate)\n ? sanitisedDate\n : new Date(sanitisedDate.setHours(0, 0, 0, 0));\n\n setDate(startOfDay);\n };\n\n const getDonationFormData: () => Partial<\n FeedItemDonationFakeType | FeedItemDonationRealType\n > = () => {\n if (feedItem?.entityType === \"DonationReal\") {\n const data: Partial = {\n donationName: donationNameState,\n donationMessage: donationMessageState || \"\",\n };\n return data;\n }\n // DonationFake and no entity type if creating donation.\n const data: Partial = {\n amount: Number(amountState),\n created:\n date && showDatePicker\n ? `${\n isToday(date)\n ? new Date().toISOString().split(\".\")[0]\n : date.toISOString().split(\".\")[0]\n }+00:00`\n : undefined,\n donationName: donationNameState,\n donationMessage: donationMessageState || \"\",\n online: false,\n toBeGiftAided: false,\n };\n return data;\n };\n\n const handleInvalid = () => {\n if (validationMessageName.length && nameRef.current) {\n nameRef.current?.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n });\n return;\n }\n\n if (showDatePicker && !isDateValid && dateRef.current) {\n dateRef.current?.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n });\n return;\n }\n\n if (validationMessageAmount.length && amountRef.current) {\n amountRef.current?.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n });\n return;\n }\n\n if (validationMessageBody.length && bodyRef.current) {\n bodyRef.current?.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n });\n }\n };\n\n const doCreate = async (): Promise =>\n fetcher(fwsUrlNewFakeDonation({ pageId }), {\n method: \"POST\",\n body: JSON.stringify(getDonationFormData()),\n })\n .then((res) => res as FeedItemDonationFakeType)\n .then((donation: FeedItemDonationFakeType) => {\n setShowDatePicker(false);\n // mutate feed items cache\n if (!donation.online) {\n trackEventGtm({\n event: \"offline_donation\",\n amount: donation.amount,\n });\n }\n if (handleCreate) {\n handleCreate(donation);\n }\n return true;\n });\n\n const doEdit = async (): Promise => {\n const { transaction_id: transactionId, signature } = router?.query || {};\n // We are checking for the two ways of being able to edit a real donation\n // secret is used in confirmation email and transaction_id & signature\n // on the confirmation page.\n const query = secret\n ? buildQuery({ secret })\n : transactionId && signature\n ? buildQuery({\n transaction_id: queryAsString(transactionId),\n signature: queryAsString(signature),\n })\n : \"\";\n\n return fetcher(\n `${fwsUrlDonation({ donationId: feedItem?.uniqueId || \"\" })}${query}`,\n {\n method: \"PATCH\",\n body: JSON.stringify(getDonationFormData()),\n },\n )\n .then((res) => res as FeedItemDonationFakeType)\n .then((donation: FeedItemDonationFakeType) => {\n // mutate feed items cache\n if (handleEditData) {\n handleEditData(donation);\n }\n return true;\n });\n };\n\n const handleSubmitClick = () => {\n if (!amountState) {\n setValidationMessageAmount(\"this field is required\");\n return undefined;\n }\n\n handleSubmit().catch((err) => {\n trackError(err as Error, { component: \"DonationForm\" });\n });\n return undefined;\n };\n const handleSubmit = async () => {\n setErrorMessage(\"\");\n setIsLoading(true);\n\n const doSubmit = status === \"creating\" ? doCreate : doEdit;\n\n const submitSuccess: boolean | void = await doSubmit().catch((err) => {\n trackError(err as Error, { component: \"DonationForm\" });\n setIsLoading(false);\n setErrorMessage(\"Unable to submit\");\n });\n\n if (!submitSuccess) {\n setIsLoading(false);\n setErrorMessage(\"Unable to submit\");\n }\n\n setIsLoading(false);\n clearFields();\n\n const pageCache = cache.get(pageUrl)?.data as FundraisingPageType;\n // do mutation for page data, setting totals\n if (pageCache) {\n const difference = amountState - (feedItem?.amount || 0);\n const newPageData = {\n ...pageCache,\n donationsTotalAmountFake:\n pageCache.donationsTotalAmountFake + difference,\n donationsTotalAmount: pageCache.donationsTotalAmount + difference,\n };\n globalMutate(pageUrl, newPageData, false).catch((err) => {\n trackError(err as Error, { component: \"DonationForm\" });\n });\n }\n\n return undefined;\n };\n\n // Tracks donation\n useEffect(() => {\n if (isBrowser && window.location.search.includes(\"seller_reference=\")) {\n const searchParams = new URLSearchParams(window.location.search);\n const sellerReference = searchParams.get(\"seller_reference\");\n try {\n if (\n // makes sure if page is refreshed we are not tracking donation twice\n localStorage.getItem(`confirmation_${sellerReference || \"\"}`) === null\n ) {\n trackEventOptimizely({\n eventKey: \"donation\",\n eventTags: {\n revenue: (feedItem?.amount || 0) * 100, // reserved tag\n value: feedItem?.amount || 0,\n },\n });\n\n localStorage.setItem(`confirmation_${sellerReference || \"\"}`, \"true\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n // Private browsing mode\n }\n }\n }, [feedItem, trackEventOptimizely]);\n\n // Tracks owner donation only when we have fundraiser details in optimizely user context\n useEffect(() => {\n if (\n !fundraiser ||\n !isPageOwner ||\n !trackEventOptimizely ||\n !feedItem.amount ||\n !optimizelyUserContext?.getUserId() ||\n !isBrowser\n )\n return;\n\n if (window.location.search.includes(\"seller_reference=\")) {\n const searchParams = new URLSearchParams(window.location.search);\n const sellerReference = searchParams.get(\"seller_reference\");\n\n try {\n if (\n localStorage.getItem(\n `confirmation_owner_${sellerReference || \"\"}`,\n ) === null &&\n isPageOwner &&\n fundraiser?.uniqueId\n ) {\n trackEventOptimizely({\n eventKey: \"donation-owner\",\n eventTags: {\n revenue: (feedItem?.amount || 0) * 100, // reserved tag\n value: feedItem?.amount || 0,\n },\n });\n localStorage.setItem(\n `confirmation_owner_${sellerReference || \"\"}`,\n \"true\",\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n // Private browsing mode\n }\n }\n }, [\n optimizelyUserContext,\n fundraiser,\n isPageOwner,\n trackEventOptimizely,\n feedItem,\n ]);\n\n // cancel on escape key\n useKey(\n () => {\n if (handleCancelClick) handleCancelClick();\n },\n {\n detectKeys: [\"Escape\"],\n },\n [],\n );\n\n return status === \"creating\" || status === \"editing\" ? (\n
\n {/* Userblock section */}\n\n \n {\n handleDonationNameChange(value as string);\n }}\n textSize=\"l\"\n />\n \n\n \n {parentPageLink ? Donated to {parentPageLink} : null}\n \n \n {` ${showDatePicker ? inEditTimeString : feedItemTimeString}`}\n \n \n\n {/* \n Edit date and Money section, this is only visible for creating and editing offline donations,\n when reacting a donation it might not have an entity type yet. The donations you can create are fake/offline donations \n */}\n {!feedItem?.entityType || feedItem?.entityType === \"DonationFake\" ? (\n <>\n \n {\n setShowDatePicker(isOpen);\n }}\n startOpen={showDatePicker}\n headerTitleText={`${\n showDatePicker\n ? status === \"creating\" ||\n feedItemTimeString === \"Right now\" ||\n (date && isToday(date))\n ? \"Set date to today\"\n : \"Revert donation date\"\n : \"Change donation date\"\n }`}\n >\n \n {\n handleDateChange(selection as Date);\n }}\n setIsDateRangeValid={(isValidDateRange: boolean) => {\n setIsDateValid(isValidDateRange);\n }}\n />\n \n \n \n\n \n \n {\n setAmountState(parseFloat(`${value || 0}`));\n }}\n validation={{\n required: true,\n type: \"money\",\n minValue: 2,\n maxValue: 1000000,\n }}\n setValidationMessage={setValidationMessageAmount}\n validationMessage={validationMessageAmount}\n extraLeft=\"£\"\n />\n \n \n \n ) : (\n \n {`£${\n feedItem?.amount\n ? numberWithCommas(feedItem?.amount.toFixed(2))\n : \"0.00\"\n }`}\n \n )}\n\n {(feedItem?.giftAidAmount || 0) > 0 && (\n \n {`+£${\n feedItem?.giftAidAmount\n ? numberWithCommas(feedItem?.giftAidAmount.toFixed(2))\n : \"0.00\"\n } Gift Aid`}\n \n )}\n\n {/* Text body section */}\n\n \n \n {\n setDonationMessageState(value);\n }}\n validation={{\n type: \"textField\",\n maxLength: 150,\n }}\n setValidationMessage={setValidationMessageBody}\n validationMessage={validationMessageBody}\n lineCount={4}\n />\n \n \n
\n {errorMessage ? {errorMessage} : null}\n \n
\n
\n ) : (\n <>\n {/* View only */}\n\n {/* Userblock section */}\n \n \n {parentPageLink && Donated to {parentPageLink}}\n \n \n {` ${feedItemTimeString}`}\n \n \n }\n />\n \n\n {/* Money section */}\n \n {`£${\n feedItem?.amount\n ? numberWithCommas(feedItem?.amount.toFixed(2))\n : \"0.00\"\n }`}\n \n\n {(feedItem?.giftAidAmount || 0) > 0 && (\n \n {`+£${\n feedItem?.giftAidAmount\n ? numberWithCommas(feedItem?.giftAidAmount.toFixed(2))\n : \"0.00\"\n } Gift Aid`}\n \n )}\n {!feedItem?.entityType ||\n (feedItem?.entityType === \"DonationFake\" && !online) ? (\n \n Offline donation\n \n ) : null}\n {/* Text body section */}\n {feedItem?.donationMessage}\n \n );\n};\n\nexport default FeedItemDonationForm;\n","import styled from \"styled-components\";\nimport { type ThemeType } from \"@cruk/cruk-react-components\";\n\nexport const SpanVerticalSpacer = styled.span<{ theme: ThemeType }>`\n margin-right: ${({ theme }) => theme.spacing.xxs};\n`;\n\nexport const FacebookInput = styled.input<{ theme: ThemeType }>`\n margin: 0px;\n height: ${({ theme }) => theme.typography.lineHeight};\n width: ${({ theme }) => theme.typography.lineHeight};\n vertical-align: middle;\n`;\n\nexport const ImageWrapper = styled.div`\n max-width: 200px;\n margin: auto;\n`;\n\nexport const UploadedImageWrapper = styled.div`\n max-width: 70vh;\n margin: auto;\n`;\n","import { useState, type ReactNode, memo } from \"react\";\nimport dynamic from \"next/dynamic\";\nimport {\n UserBlock,\n Text,\n Modal,\n IconFa,\n Button,\n Box,\n ErrorText,\n} from \"@cruk/cruk-react-components\";\nimport { formatDistanceToNow } from \"date-fns\";\nimport { faClock, faTrashCan } from \"@fortawesome/free-regular-svg-icons\";\nimport { faCamera, faRotateLeft } from \"@fortawesome/free-solid-svg-icons\";\n\nimport { useTracking } from \"@fwa/src/hooks/useTracking\";\n\nimport { useKey } from \"@fwa/src/hooks/useKey\";\nimport {\n imagePathFromImageType,\n updateImage,\n} from \"@fwa/src/services/imageService\";\nimport {\n fwsUrlNewPostWithImage,\n fwsUrlNewPost,\n fwsUrlPost,\n fwsUrlPostImage,\n fwsUrlGalleryImage,\n} from \"@fwa/src/services/fundraisingPageService\";\nimport { fetcher } from \"@fwa/src/services/apiClient\";\n\nimport { EditableTextAreaField } from \"@fwa/src/components/EditableTextAreaField\";\nimport { FormActions } from \"@fwa/src/components/FormActions\";\nimport { ImageUploader } from \"@fwa/src/components/ImageUploader\";\nimport { ReadMore } from \"@fwa/src/components/ReadMore\";\nimport { GalleryThumbnail } from \"@fwa/src/components/GalleryThumbnail\";\nimport { GalleryImageClickable } from \"@fwa/src/components/GalleryImageClickable\";\n\nimport { RowStretch } from \"@fwa/src/components/styles\";\nimport {\n SpanVerticalSpacer,\n ImageWrapper,\n UploadedImageWrapper,\n} from \"@fwa/src/components/FeedItemPostForm/styles\";\n\nimport {\n type FeedItemStatusType,\n type RotateType,\n type FeedItemPostType,\n type ImageType,\n type GalleryImageType,\n} from \"@fwa/src/types\";\nimport { useOptimizelyContext } from \"@fwa/src/contexts/OptimizelyContext\";\n// dynamic imports\nconst FeedItemShareModal = dynamic(\n () => import(\"@fwa/src/components/FeedItemShareModal\"),\n);\n\ntype Props = {\n feedItem?: FeedItemPostType;\n status: FeedItemStatusType;\n displayName: string;\n avatarUrl?: string;\n handleCancelClick?: () => void;\n /** handleEditData is used to update and mutate feeditem data */\n handleEditData?: (data: Partial) => void;\n /** handleCreate is NOT used to update and mutate feeditem data, that has already happened, but the page data like feed item totals, due to a poorly designed API */\n handleCreate?: (data: FeedItemPostType) => void;\n pageId?: string;\n parentPageLink?: ReactNode;\n};\n\nexport const FeedItemPostForm = ({\n feedItem,\n avatarUrl,\n displayName,\n handleEditData,\n handleCreate,\n pageId,\n handleCancelClick,\n status,\n parentPageLink,\n}: Props) => {\n const galleryImage: GalleryImageType | undefined = feedItem?.galleryImages\n .length\n ? feedItem.galleryImages[0]\n : undefined;\n const image: ImageType | undefined = galleryImage?.image;\n\n const { trackError, trackEventGtm } = useTracking();\n const { trackEventOptimizely } = useOptimizelyContext();\n const [fileState, setFileState] = useState(null);\n const [rotation, setRotation] = useState(0);\n const [imageDeleteClicked, setImageDeleteClicked] = useState(false);\n const [lastCreatedFeedItem, setLastCreatedFeedItem] =\n useState(null);\n const [bodyState, setBodyState] = useState(feedItem?.body || \"\");\n const [imageUrl, setImageUrl] = useState(\n feedItem?.galleryImages[0]?.image?.filePath\n ? imagePathFromImageType(feedItem.galleryImages[0].image)\n : null,\n );\n const [imageModalIsVisible, setImageModalIsVisible] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n // Error messages from post submission or image rotation\n const [error, setError] = useState(null);\n // Validation messages are visible on the child input\n const [validationMessage, setValidationMessage] = useState(\"\");\n const hasNoContent = bodyState.length === 0 && !fileState && !imageUrl;\n const rotate =\n rotation % 360 === 0 ? 0 : (((rotation % 360) + 360) as RotateType);\n const timeString = feedItem?.created\n ? `${formatDistanceToNow(new Date(feedItem.created), {\n addSuffix: true,\n includeSeconds: true,\n })}`\n : \"Right Now\";\n\n // cancel on escape key\n useKey(\n () => {\n if (handleCancelClick) handleCancelClick();\n },\n {\n detectKeys: [\"Escape\"],\n },\n [],\n );\n\n const handleSubmit = () => {\n setIsLoading(true);\n setError(null);\n\n const submitAction = status === \"creating\" ? doCreate : doEdit;\n\n submitAction()\n .then(() => {\n setIsLoading(false);\n if (status === \"creating\") {\n // reset everything on success\n clearAllFields();\n }\n return undefined;\n })\n .catch(() => {\n setIsLoading(false);\n setError(new Error(\"Unable to submit post\"));\n });\n };\n\n const handleImageRotate = () => {\n setRotation((rotation || 0) - 90);\n };\n\n const clearAllFields = () => {\n setBodyState(\"\");\n handleImageRemove();\n setImageDeleteClicked(false);\n };\n\n const handleImageRemove = () => {\n setError(null);\n setFileState(null);\n setImageUrl(null);\n setImageModalIsVisible(false);\n setRotation(0);\n setImageDeleteClicked(true);\n };\n\n const doEdit = async () => {\n if (!feedItem) return;\n const bodyChanged = bodyState !== feedItem.body;\n let editedPost: FeedItemPostType = feedItem;\n\n // delete old image if need\n if (imageDeleteClicked && galleryImage) {\n await fetcher(\n fwsUrlGalleryImage({ galleryImageUniqueId: galleryImage.uniqueId }),\n {\n method: \"DELETE\",\n },\n ).then(() => {\n setImageDeleteClicked(false);\n return undefined;\n });\n\n editedPost.galleryImages = [];\n }\n\n // if image added add image to post\n if (fileState) {\n // create post with image\n const galleryImageForFeedItem: GalleryImageType | void = await fetcher(\n fwsUrlPostImage({ postId: feedItem.uniqueId }),\n {\n headers: {\n \"Content-Type\": fileState.type || \"image/jpeg \",\n },\n method: \"POST\",\n body: fileState,\n },\n )\n .then((res) => res as GalleryImageType)\n .catch((err) => {\n trackError(err as Error, { component: \"FeedItemPostForm\" });\n setError(new Error(\"unable to create post with image\"));\n });\n\n editedPost = {\n ...editedPost,\n galleryImages: [\n ...(galleryImageForFeedItem ? [galleryImageForFeedItem] : []),\n ],\n };\n }\n\n // update text if changed\n if (bodyChanged) {\n const feedItemWithText: FeedItemPostType | void = await fetcher(\n fwsUrlPost({ postId: feedItem.uniqueId }),\n {\n method: \"PATCH\",\n body: JSON.stringify({ body: bodyState }),\n },\n )\n .then((res) => res as FeedItemPostType)\n .catch((err) => {\n trackError(err as Error, { component: \"FeedItemPostForm\" });\n setError(new Error(\"unable to update text on post with image\"));\n });\n\n if (feedItemWithText) {\n editedPost = feedItemWithText;\n }\n }\n\n // if image rotated update image\n if (rotate) {\n const rotatedImage: ImageType | void = await updateImage({\n imageId: editedPost.galleryImages[0].image.uniqueId,\n rotate,\n }).catch((err) => {\n trackError(err as Error, { component: \"FeedItemPostForm\" });\n setError(new Error(\"unable to rotate image\"));\n });\n\n if (rotatedImage) {\n editedPost = {\n ...editedPost,\n galleryImages: [\n {\n ...editedPost.galleryImages[0],\n image: {\n ...editedPost.galleryImages[0].image,\n url: rotatedImage.url,\n filePath: rotatedImage.filePath,\n },\n },\n ],\n };\n }\n }\n\n // do local mutation\n if (handleEditData) handleEditData(editedPost);\n };\n\n const doCreate = async () => {\n if (hasNoContent) {\n setError(new Error(\"A message or image is required\"));\n return null;\n }\n\n if (!pageId) {\n const err = new Error(\"Page ID not known\");\n trackError(err, { component: \"FeedItemPostForm\", function: \"doCreate\" });\n setError(err);\n return null;\n }\n\n let newPost: FeedItemPostType | undefined;\n\n // if fileState create post with image binary\n if (fileState) {\n const postWithImage: FeedItemPostType | void = await fetcher(\n fwsUrlNewPostWithImage({ pageId }),\n {\n headers: {\n \"Content-Type\": fileState.type || \"image/jpeg \",\n },\n method: \"POST\",\n body: fileState,\n },\n )\n .then((res) => res as FeedItemPostType)\n .catch((err) => {\n trackError(err as Error, {\n component: \"FeedItemPostForm\",\n function: \"fwsUrlNewPostWithImage\",\n });\n setError(new Error(\"unable create post with image\"));\n });\n\n if (postWithImage) {\n newPost = postWithImage;\n\n // update post with text if there is any\n if (bodyState.length) {\n const postWithBody: FeedItemPostType | void = await fetcher(\n fwsUrlPost({ postId: newPost.uniqueId }),\n {\n method: \"PATCH\",\n body: JSON.stringify({ body: bodyState }),\n },\n )\n .then((res) => res as FeedItemPostType)\n .catch((err) => {\n trackError(err as Error, {\n component: \"FeedItemPostForm\",\n function: \"fwsUrlPost\",\n });\n setError(\n new Error(\"unable to update text for new post with image\"),\n );\n });\n if (postWithBody) {\n newPost = postWithBody;\n }\n }\n\n // rotate image in post if need\n if (rotate !== 0) {\n const rotatedImage: ImageType | void = await updateImage({\n imageId: newPost.galleryImages[0].image.uniqueId,\n rotate,\n }).catch((err) => {\n trackError(err as Error, {\n component: \"FeedItemPostForm\",\n function: \"updateImage\",\n });\n setError(new Error(\"unable to rotate image on new post\"));\n });\n\n if (rotatedImage) {\n const newPostWithUpdatedImage: FeedItemPostType = {\n ...newPost,\n galleryImages: [\n {\n ...newPost.galleryImages[0],\n image: {\n ...newPost.galleryImages[0].image,\n url: rotatedImage.url,\n filePath: rotatedImage.filePath,\n },\n },\n ],\n };\n\n newPost = newPostWithUpdatedImage;\n }\n }\n }\n } else if (!fileState && bodyState.length) {\n // if we only have a text body and no image file then create a new post with the text\n const newPostWithText: FeedItemPostType | void = await fetcher(\n fwsUrlNewPost({ pageId }),\n {\n method: \"POST\",\n body: JSON.stringify({ body: bodyState }),\n },\n )\n .then((res) => res as FeedItemPostType)\n .catch((err) => {\n trackError(err as Error, {\n component: \"FeedItemPostForm\",\n function: \"fwsUrlNewPost\",\n });\n setError(new Error(\"unable to create text post\"));\n });\n\n if (newPostWithText) {\n newPost = newPostWithText;\n }\n }\n\n // finally do tracking, sharing and local mutation\n if (newPost) {\n if (handleCreate) handleCreate(newPost);\n // to trigger share prompt modal\n setLastCreatedFeedItem(newPost);\n trackEventGtm({\n event: \"feeditem_add\",\n entityType: \"Post\",\n });\n trackEventOptimizely({\n eventKey: \"of_feeditem_post_create\",\n });\n }\n return null;\n };\n\n return (\n
\n \n \n {parentPageLink && Posted to {parentPageLink}}\n {status !== \"creating\" && (\n \n {timeString}\n \n )}\n \n }\n />\n \n {status === \"editing\" || status === \"creating\" ? (\n // ////////////////////////// Edit / Create state /////////////////////\n
\n {\n setBodyState(value);\n }}\n validation={{\n type: \"textField\",\n maxLength: 1000,\n }}\n setValidationMessage={setValidationMessage}\n lineCount={4}\n />\n {!imageUrl ? (\n \n \n \n \n Add a photo\n \n }\n onImageUpload={({\n error: uploadError,\n image: uploadImage,\n file,\n }) => {\n if (uploadError) {\n setError(new Error(\"unable to upload image\"));\n }\n if (!uploadError && uploadImage && file) {\n setError(null);\n setFileState(file);\n setImageUrl(uploadImage.localUrl);\n }\n }}\n />\n ) : (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n {!!error?.message && {error.message}}\n {\n handleSubmit();\n }}\n submitButtonType=\"button\"\n />\n \n ) : (\n // ////////////////////////// View state /////////////////////\n
\n {feedItem?.body && {feedItem?.body}}\n {image && feedItem?.galleryImages[0] && (\n <>\n \n {\n setImageModalIsVisible(true);\n }}\n aria-label=\"enlarge gallery image\"\n // typically we'd have an aria controls here as well\n // however the modal has no content other than an image so we're only adding the label for gtm\n />\n \n {imageModalIsVisible ? (\n {\n setImageModalIsVisible(false);\n if (handleCancelClick) handleCancelClick();\n }}\n >\n \n \n \n \n ) : null}\n \n )}\n
\n )}\n {/* SHARE MODAL START */}\n {lastCreatedFeedItem ? (\n \n ) : null}\n {/* SHARE MODAL END */}\n
\n );\n};\n\nexport default memo(FeedItemPostForm);\n","import { type KeyboardEvent } from \"react\";\nimport { GalleryThumbnail } from \"@fwa/src/components/GalleryThumbnail\";\n\nimport { type GalleryImageType } from \"@fwa/src/types\";\n\ntype Props = {\n galleryImage: GalleryImageType;\n onClick: (selectedImageIndex: number) => void;\n};\n\nexport const GalleryImageClickable = ({ galleryImage, onClick }: Props) => (\n {\n onClick(galleryImage.weight);\n }}\n onKeyDown={(e: KeyboardEvent) => {\n const key = e.code;\n if (key === \"Enter\") {\n e.preventDefault();\n onClick(galleryImage.weight);\n }\n }}\n >\n \n \n);\n\nexport default GalleryImageClickable;\n","import { type ThemeType } from \"@cruk/cruk-react-components\";\nimport { type RotateType } from \"@fwa/src/types\";\nimport styled from \"styled-components\";\n\nexport const GalleryImageWrapper = styled.li`\n list-style: none;\n`;\n\nexport const GalleryImageOuter = styled.div<{\n theme: ThemeType;\n $hasBorder: boolean;\n}>`\n padding: ${({ theme }) => theme.spacing.xxs};\n background-color: ${({ theme }) => theme.colors.backgroundMid};\n box-shadow: ${({ theme }) => theme.shadows.s};\n`;\n\n// Keeps thumbnail square\nexport const GalleryImageInner = styled.div`\n position: relative;\n width: 100%;\n padding-bottom: 100%;\n`;\n\nexport const GalleryImage = styled.img<{\n $rotation?: RotateType;\n}>`\n position: absolute;\n width: auto;\n height: auto;\n max-height: 100%;\n max-width: 100%;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n margin: auto;\n transition: transform 1s ease;\n transform: ${({ $rotation }) => `rotate(${$rotation || 0}deg)`};\n`;\n","import { imagePathFromImageType } from \"@fwa/src/services/imageService\";\n\nimport {\n GalleryImageOuter,\n GalleryImageInner,\n GalleryImage,\n} from \"@fwa/src/components/GalleryThumbnail/styles\";\n\nimport { type ImageType, type RotateType } from \"@fwa/src/types\";\n\ninterface UploadedImage {\n url: string;\n title?: string;\n height?: string;\n width?: string;\n}\n\ntype Props = {\n image: ImageType | UploadedImage;\n rotation?: RotateType;\n hasBorder?: boolean;\n};\n\nexport const GalleryThumbnail = ({\n image,\n rotation,\n hasBorder = true,\n}: Props) => (\n \n \n {image && (\n \n )}\n \n \n);\n\nexport default GalleryThumbnail;\n","export const checkIfFileResizable = (file: Blob, resizeFileTypes: string[]) => {\n return resizeFileTypes.includes(file.type.replace(\"image/\", \"\"));\n};\n\nexport const checkValidationForErrorMessage = (\n file: Blob,\n acceptFileTypes: string[],\n resizeFileTypes: string[],\n resizeMaxSizeMB: number,\n maxSizeMB: number,\n): string | undefined => {\n const isfileTypeAllowed = acceptFileTypes.includes(\n file.type.replace(\"image/\", \"\"),\n );\n const isFileResizable = checkIfFileResizable(file, resizeFileTypes);\n const isFileResizeTooBig = file.size / 1024 / 1024 > resizeMaxSizeMB;\n const isFileTooBig = file.size / 1024 / 1024 > maxSizeMB;\n const nonResizableTypes = acceptFileTypes.filter(\n (item) => !resizeFileTypes.includes(item),\n );\n\n if (!isfileTypeAllowed) {\n return `Image should be a ${acceptFileTypes.join(\" \").toUpperCase()}`;\n }\n if (isFileResizable && isFileResizeTooBig) {\n return `${resizeFileTypes\n .join(\" \")\n .toUpperCase()} images should be less than ${resizeMaxSizeMB}MB`;\n }\n if (!isFileResizable && isFileTooBig) {\n return `${nonResizableTypes\n .join(\" \")\n .toUpperCase()} images should be less than ${maxSizeMB}MB`;\n }\n return undefined;\n};\n\nexport const getOrientationFromExifData = (dataView: DataView): number => {\n if (dataView.getUint16(0, false) !== 0xffd8) {\n return -2;\n }\n const length = dataView.byteLength;\n let offset = 2;\n while (offset < length) {\n if (dataView.getUint16(offset + 2, false) <= 8) return -1;\n const marker = dataView.getUint16(offset, false);\n offset += 2;\n // 0xFFE1 for EXIF data\n if (marker === 0xffe1) {\n if (dataView.getUint32((offset += 2), false) != 0x45786966) {\n return -1;\n }\n // 0x4d4d big endian, 0x4949 little endian\n const little = dataView.getUint16((offset += 6), false) === 0x4949;\n offset += dataView.getUint32(offset + 4, little);\n const tags = dataView.getUint16(offset, little);\n offset += 2;\n for (let i = 0; i < tags; i++) {\n if (dataView.getUint16(offset + i * 12, little) === 0x0112) {\n return dataView.getUint16(offset + i * 12 + 8, little);\n }\n }\n } else if ((marker & 0xff00) != 0xff00) {\n break;\n } else {\n offset += dataView.getUint16(offset, false);\n }\n }\n return -1;\n};\n","import styled from \"styled-components\";\n\nexport const DragWrapper = styled.span`\n cursor: pointer;\n text-align: center;\n`;\nexport const DottedOutline = styled.div`\n background-color: #eee;\n border: 2px dashed #ccc;\n border-radius: 4px;\n`;\n","import { useRef, type ReactNode } from \"react\";\nimport { Button, Box, Text } from \"@cruk/cruk-react-components\";\n\nimport {\n checkValidationForErrorMessage,\n checkIfFileResizable,\n getOrientationFromExifData,\n} from \"@fwa/src/utils/imageUploadUtils\";\nimport { DragWrapper, DottedOutline } from \"./styles\";\n\n// JPEG quality\nconst QUALITY = 0.75;\ninterface UploadData {\n error?: string;\n file?: Blob;\n image?: {\n localUrl: string;\n };\n}\n\nconst fromImageElementToCanvasElement = (\n image: HTMLImageElement,\n resizeMaxDimension: number,\n orientation: number,\n): HTMLCanvasElement => {\n const canvas = document.createElement(\"canvas\");\n let { width, height } = image;\n // Client side resize to improve upload speed from mobile phones.\n if (width > resizeMaxDimension || height > resizeMaxDimension) {\n height *= 0.5;\n width *= 0.5;\n }\n const ctx = canvas.getContext(\"2d\");\n // Remove and apply exif orientation.\n if (ctx) {\n if (orientation > 4 && orientation < 9) {\n canvas.width = height;\n canvas.height = width;\n } else {\n canvas.width = width;\n canvas.height = height;\n }\n switch (orientation) {\n case 2:\n ctx.transform(-1, 0, 0, 1, width, 0);\n break;\n case 3:\n ctx.transform(-1, 0, 0, -1, width, height);\n break;\n case 4:\n ctx.transform(1, 0, 0, -1, 0, height);\n break;\n case 5:\n ctx.transform(0, 1, 1, 0, 0, 0);\n break;\n case 6:\n ctx.transform(0, 1, -1, 0, height, 0);\n break;\n case 7:\n ctx.transform(0, -1, -1, 0, height, width);\n break;\n case 8:\n ctx.transform(0, -1, 1, 0, 0, width);\n break;\n default:\n break;\n }\n ctx.drawImage(image, 0, 0, width, height);\n }\n return canvas;\n};\n\nexport const ImageUploader = ({\n id,\n onImageUpload,\n acceptFileTypes = [\"jpeg\", \"gif\", \"png\"],\n resizeFileTypes = [\"jpeg\"],\n maxSizeMB = 4,\n resizeMaxSizeMB = 8,\n resizeMaxDimension = 3000,\n renderDragArea,\n}: {\n id?: string;\n onImageUpload: (res: UploadData) => void;\n acceptFileTypes?: string[];\n resizeFileTypes?: string[];\n maxSizeMB?: number;\n resizeMaxSizeMB?: number;\n resizeMaxDimension?: number;\n renderDragArea?: ReactNode;\n}) => {\n const fileInput = useRef(null);\n\n const handleFile = (file: File | null) => {\n // handle null\n if (file === null) return;\n const removeFile = () => {\n if (fileInput.current) fileInput.current.value = \"\";\n };\n\n // Validation.\n const errorMessage = checkValidationForErrorMessage(\n file,\n acceptFileTypes,\n resizeFileTypes,\n resizeMaxSizeMB,\n maxSizeMB,\n );\n if (errorMessage) {\n onImageUpload({\n error: errorMessage,\n });\n removeFile();\n return;\n }\n\n // Handle image load\n const isFileResizable = checkIfFileResizable(file, resizeFileTypes);\n const readerDataURl = new FileReader();\n const readerArrayBuffer = new FileReader();\n\n if (isFileResizable) {\n // first we need to load file as arraybuffer check image orientation in exif header\n readerArrayBuffer.onloadend = () => {\n if (!readerArrayBuffer.result) return;\n const arrayBuffer = readerArrayBuffer.result as ArrayBuffer;\n const dataView = new DataView(arrayBuffer);\n const orientation = getOrientationFromExifData(dataView);\n // next we want to re-load the file as url encoded data\n // we need this to put it in an image element\n // which we will use to load as an image into a canvas element for resizing\n readerDataURl.onloadend = () => {\n if (!readerDataURl.result) return;\n const image = new Image();\n image.onload = () => {\n // take the image component get the canvase to draw the same image\n // resize if need and use the orientation value to render image correct way up\n const canvas: HTMLCanvasElement = fromImageElementToCanvasElement(\n image,\n resizeMaxDimension,\n orientation,\n );\n const resizedAsUrl = canvas.toDataURL(file.type, QUALITY);\n // now get new resized file out of the canvas and use that as new current image state\n canvas.toBlob(\n (blob: Blob | null) => {\n if (!blob) return;\n onImageUpload({\n image: { localUrl: resizedAsUrl },\n file: blob,\n });\n },\n file.type,\n QUALITY,\n );\n };\n image.src = readerDataURl.result as string;\n };\n readerDataURl.readAsDataURL(file);\n };\n readerArrayBuffer.readAsArrayBuffer(file);\n } else {\n // first load the file as url encoded data\n readerDataURl.onloadend = () => {\n if (!readerDataURl.result) return;\n onImageUpload({\n image: { localUrl: readerDataURl.result as string },\n file,\n });\n };\n readerDataURl.readAsDataURL(file);\n }\n removeFile();\n };\n\n return (\n {\n e.preventDefault();\n handleFile(e.dataTransfer.files[0]);\n }}\n onDragOver={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n onClick={() => fileInput.current && fileInput.current.click()}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && fileInput.current) fileInput.current.click();\n }}\n data-component=\"image-uploader\"\n >\n {renderDragArea || (\n \n \n \n Drop file here to upload\n \n or\n {\n e.preventDefault();\n }}\n data-cta-type=\"image-choose\"\n >\n Browse\n \n \n \n )}\n e.target.files && handleFile(e.target.files[0])}\n accept={acceptFileTypes.map((item) => `image/${item}`).join(\",\")}\n ref={fileInput}\n />\n \n );\n};\n\nexport default ImageUploader;\n","import React, {\n useState,\n useRef,\n type MouseEvent,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { Text } from \"@cruk/cruk-react-components\";\nimport { useLayoutEffectBrowser } from \"@fwa/src/hooks/useLayoutEffectBrowser\";\n\ntype Props = {\n children: ReactNode | string;\n};\nexport const ReadMore = ({ children }: Props) => {\n const [readMore, setReadMore] = useState(false);\n const [messageBodyHeight, setMessageBodyHeight] = useState(\n null,\n );\n const [messageWrapperHeight, setMessageWrapperHeight] = useState<\n number | null\n >(null);\n\n const messageBody = useRef(null);\n const messageWrapper = useRef(null);\n\n useLayoutEffectBrowser(() => {\n if (!messageBody?.current?.clientHeight) return;\n const calculatedessageBodyHeight: number = messageBody.current.clientHeight;\n setMessageBodyHeight(messageBodyHeight);\n if (!messageWrapper?.current?.clientHeight) return;\n setReadMore(\n messageWrapper?.current?.clientHeight < calculatedessageBodyHeight,\n );\n }, [messageBody, messageWrapper]);\n\n const onReadMoreClick = (e: MouseEvent) => {\n e.stopPropagation();\n setMessageWrapperHeight(messageBodyHeight);\n setReadMore(false);\n };\n const onKeyDown = (e: KeyboardEvent) => {\n e.stopPropagation();\n setMessageWrapperHeight(messageBodyHeight);\n setReadMore(false);\n };\n\n return (\n \n
\n {children}\n
\n {readMore && (\n ) => {\n if (e.key === \"Enter\") onKeyDown(e);\n }}\n role=\"button\"\n tabIndex={0}\n className=\"more\"\n data-cta-type=\"read-more\"\n >\n Read more\n \n )}\n \n );\n};\n\nexport default ReadMore;\n","import { FWS_BASE_URL } from \"@fwa/src/services/apiClient\";\n\nexport const urlNewDonor = `${FWS_BASE_URL}/donors`;\n\nexport const fwsUrlNewDonation = ({\n pageId,\n donorId,\n}: {\n pageId: string;\n donorId: string;\n}) => `${FWS_BASE_URL}/pages/${pageId}/donors/${donorId}/donations`;\n\nexport const fwsUrlDonation = ({ donationId }: { donationId: string }) =>\n `${FWS_BASE_URL}/donations/${donationId}`;\n\nexport const fwsUrlNewFakeDonation = ({ pageId }: { pageId: string }) =>\n `${FWS_BASE_URL}/pages/${pageId}/donations`;\n","import { FWS_BASE_URL } from \"@fwa/src/services/apiClient\";\nimport {\n type FeedItemEntityTypesType,\n type FeedItemTabType,\n type FeedItemType,\n} from \"@fwa/src/types\";\n\n// convert feed item entity types to feed item types used in the API\n// often lower case and pluralized\nexport const feedItemTypeFromEntityType = (\n entityType: FeedItemEntityTypesType,\n): FeedItemTabType => {\n switch (entityType) {\n case \"ActivityStrava\":\n return \"activitys\";\n case \"Post\":\n return \"posts\";\n case \"Milestone\":\n return \"milestones\";\n default:\n return \"donations\";\n }\n};\n\n// activities only exist on fundraising pages, all the other feeditem types exist on generic pages\n// which includes teams and super teams, this is a bit of a gotya because this util is used\n// in feeditem lists for teams and super teams.\nexport const fwsUrlFeedItems = ({\n pageId,\n currentPage,\n itemsPerPage,\n type = \"feeditems\",\n}: {\n pageId: string;\n currentPage: number;\n itemsPerPage: number;\n type?: FeedItemTabType;\n}): string =>\n `${FWS_BASE_URL}/${\n type === \"activitys\" ? \"fundraisingpages\" : \"pages\"\n }/${pageId}/${type}?offset=${\n Math.max(currentPage - 1, 0) * itemsPerPage\n }&limit=${itemsPerPage}`;\n\nexport const fwsUrlFeedItemDelete = (feedItem: FeedItemType): string =>\n `${FWS_BASE_URL}/${feedItemTypeFromEntityType(feedItem.entityType)}/${\n feedItem.uniqueId\n }`;\n\nexport const fwsUrlFeedItem = ({\n feedItemId,\n}: {\n feedItemId: string;\n}): string => `${FWS_BASE_URL}/feeditems/${feedItemId}`;\n"],"names":["TextAreaStyled","styled","TextAreaField","theme","$textSize","fontSizes","m","lineCount","setCurrentValue","text","validation","setValidationMessage","validationMessage","label","hintText","textSize","ariaLabel","charCount","setCharCount","useState","calcLength","textAreaRef","useRef","useEffect","current","value","ref","aria-label","onBlur","handleBlur","validate","e","target","onChange","handleChange","defaultValue","errorMessage","maxLength","undefined","$lineCount","Box","marginBottom","Text","textAlign","marginTop","TextFieldStyled","TextField","extraBottom","extraLeft","extraRight","extraTop","required","inputMode","pattern","name","textRef","input","StravaTable","div","spacing","xxs","s","FeedItemStrava","feedItem","avatarUrl","displayName","isMetric","data-component","UserBlock","extra","as","textColor","IconFa","faIcon","faClock","formatDistanceToNow","Date","created","addSuffix","includeSeconds","size","Heading","h3","RowStretch","Column","stravaActivityType","distance","toFixed","time","secondsToDurationString","map","img","className","src","image","imagePathFromImageType","alt","Row","LogoImageWrapper","stravaLogo","Link","appearance","href","stravaId","span","tokenColors","cyan_900","fitbitDailyTargetSteps","timeString","feedItemDateString","format","fitbitPercentage","Math","floor","steps","fitbitSVG","RowWrap","ProgressBar","circleSize","barColor","crukTheme","circleContents","StepsWrapper","faShoePrints","toLocaleString","percentage","isCircular","MarkerWrapper","faLocationDot","colors","success","faCheckCircle","BackgroundImage","body","title","subtitle","backgroundImage","EverythingWrapper","BackgroundImageWrapper","TextContentWrapper","FeedItemWrapper","grey_300","ActionButtonWrapper","xs","breakpoint","mobile","IconBadgeWrapper","Badge","backgroundColor","faComment","color","FlagBadge","faFlag","ActivityBadge","cyan_700","faHeartPulse","PoundBadge","faSterlingSign","FeedItem","handleDelete","handleEdit","pageUrl","pageId","isStravaMetric","showParentPageLink","isDonationConfirmation","trackError","trackEventGtm","useTracking","error","setError","status","setStatus","secret","setSecret","router","useRouter","userName","userNameForPage","page","displayNameOrUserName","owner","fundraiserState","useFundraiserContext","fundraiser","isOwner","uniqueId","isEditable","entityType","online","isDeletable","pageFundraiserProfileImage","profileImage","url","feedItemAsDonation","feedItemAsDonationFake","feedItemAsMilestone","kickStartAvatarImages","Tesco","kickStarterDonationName","donationName","trim","kickStartAvatarUrl","milestoneAvatarUrl","crukCLogo","feedItemProfileImageUrl","forcedAvatarUrl","isDonerAndOwner","parentPageLink","donationProfileImageUrl","NextLink","slice","lastIndexOf","data-cta-type","A","handleCancelClick","handleEditData","data","event","query","secretInQuery","slug","rest","queryAsString","push","pathname","asPath","split","shallow","catch","err","component","isHighlighted","feedItemBadges","Post","CommentBadge","Milestone","ActivityStrava","ActivityFitbit","DonationReal","DonationFake","DonationFacebook","Highlight","renderItem","FeedItemFitbit","FeedItemPostForm","FeedItemMilestone","FeedItemDonationForm","ErrorText","message","FormActions","submitLabel","onCancel","onSubmit","handleDeleteClick","fwsUrlFeedItemDelete","fetcher","method","then","res","ok","submitButtonType","FeedItemFooter","Button","role","tabIndex","onClick","onKeyDown","key","faTrashCan","faEdit","Share","ctaLocation","type","faShareAlt","MoneyText","typography","fontFamilyHeadings","handleCreate","cache","mutate","globalMutate","useSWRConfig","trackEventOptimizely","optimizelyContext","useOptimizelyContext","optimizelyUserContext","nameRef","amountRef","bodyRef","dateRef","donationMessageState","setDonationMessageState","donationMessage","amountState","setAmountState","amount","date","setDate","validationMessageName","setValidationMessageName","validationMessageBody","setValidationMessageBody","validationMessageAmount","setValidationMessageAmount","setErrorMessage","isLoading","setIsLoading","isDateValid","setIsDateValid","showDatePicker","setShowDatePicker","isPageOwner","donationNameState","setDonationNameState","makeTimeString","dateValue","feedItemTimeString","inEditTimeString","isInvalid","length","donorFullName","donorName","clearFields","handleDonationNameChange","handleDateChange","sanitisedDate","isValidDate","dateToChange","isToday","isTomorrow","setHours","getDonationFormData","Number","toISOString","toBeGiftAided","doCreate","fwsUrlNewFakeDonation","JSON","stringify","donation","doEdit","transaction_id","transactionId","signature","buildQuery","fwsUrlDonation","donationId","handleSubmit","doSubmit","pageCache","get","difference","donationsTotalAmountFake","newPageData","donationsTotalAmount","isBrowser","window","location","search","includes","sellerReference","URLSearchParams","localStorage","getItem","eventKey","eventTags","revenue","setItem","getUserId","useKey","detectKeys","form","noValidate","EditableTextField","replace","RowCenter","numberWithCommas","Collapse","id","onOpenChange","isOpen","startOpen","headerTitleText","DateRangePicker","allowNullDate","isDateRange","startDate","startDateLabel","maxDate","minDate","parseISO","selection","setIsDateRangeValid","isValidDateRange","parseFloat","minValue","maxValue","giftAidAmount","EditableTextAreaField","isValid","handleSubmitClick","onInvalid","handleInvalid","scrollIntoView","behavior","block","avatarName","facebookAvatar","ReadMore","SpanVerticalSpacer","lineHeight","ImageWrapper","FeedItemShareModal","dynamic","galleryImage","galleryImages","fileState","setFileState","rotation","setRotation","imageDeleteClicked","setImageDeleteClicked","lastCreatedFeedItem","setLastCreatedFeedItem","bodyState","setBodyState","imageUrl","setImageUrl","filePath","imageModalIsVisible","setImageModalIsVisible","hasNoContent","rotate","submitAction","clearAllFields","handleImageRemove","bodyChanged","editedPost","fwsUrlGalleryImage","galleryImageUniqueId","galleryImageForFeedItem","fwsUrlPostImage","postId","headers","feedItemWithText","fwsUrlPost","rotatedImage","updateImage","imageId","newPost","function","postWithImage","fwsUrlNewPostWithImage","postWithBody","newPostWithUpdatedImage","newPostWithText","fwsUrlNewPost","UploadedImageWrapper","GalleryThumbnail","handleImageRotate","faRotateLeft","ImageUploader","renderDragArea","faCamera","onImageUpload","uploadError","uploadImage","file","localUrl","GalleryImageClickable","Modal","showCloseButton","modalName","closeFunction","style","cursor","weight","code","preventDefault","li","GalleryImageOuter","backgroundMid","shadows","GalleryImage","$rotation","hasBorder","$hasBorder","GalleryImageInner","height","width","checkIfFileResizable","resizeFileTypes","checkValidationForErrorMessage","acceptFileTypes","resizeMaxSizeMB","maxSizeMB","isfileTypeAllowed","isFileResizable","isFileResizeTooBig","isFileTooBig","nonResizableTypes","filter","item","join","toUpperCase","dataView","getUint16","byteLength","offset","marker","getUint32","little","tags","i","DragWrapper","resizeMaxDimension","orientation","canvas","document","createElement","ctx","getContext","transform","drawImage","fileInput","handleFile","removeFile","readerDataURl","FileReader","readerArrayBuffer","onloadend","result","getOrientationFromExifData","DataView","Image","onload","fromImageElementToCanvasElement","resizedAsUrl","toDataURL","QUALITY","toBlob","blob","readAsDataURL","readAsArrayBuffer","onDrop","dataTransfer","files","onDragOver","stopPropagation","click","DottedOutline","marginVertical","display","accept","children","readMore","setReadMore","messageBodyHeight","setMessageBodyHeight","messageWrapperHeight","setMessageWrapperHeight","messageBody","messageWrapper","useLayoutEffectBrowser","clientHeight","calculatedessageBodyHeight","maxHeight","onReadMoreClick","urlNewDonor","FWS_BASE_URL","donorId","feedItemTypeFromEntityType","currentPage","itemsPerPage","max","feedItemId"],"sourceRoot":"","ignoreList":[]}