MNTOR-3057 - Cancel flow discount callout (#4635)
* add dialog strings * add limitations apply strings * add both experiment data * reorg css * ignore dependency array * use handler for applycouponcode func * test endpoint * add you're all set animation * add images * check that the code application is successful * add go back to dashboard btn * always show the first dialog state * add media query to discount cta * remove animationpath * check that a user already has a coupon set * use flags instead of experiment * Add animation switch * remove nimbus sticking to flag * do not import from the table level * nit: whitespace * mock actions.ts func in jest * fix animation switch dialog state * dont pass reactelem into state * add unit tests * remove cmted out code
This commit is contained in:
Родитель
51b80fac9a
Коммит
190f4c0056
|
@ -0,0 +1,9 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
rules-and-restrictions-pill = Rules & Restrictions
|
||||
# Variables:
|
||||
# $discount_percentage_num is the amount discounted in percentage per month.
|
||||
# $discount_duration is the number of month(s) that users will pay the discounted price.
|
||||
limitations-apply-header = { $discount_percentage_num } off the next { $discount_duration } months
|
|
@ -22,6 +22,26 @@ settings-unsubscribe-dialog-confirmation-redirect-title = Directing you to your
|
|||
settings-unsubscribe-dialog-confirmation-redirect-description-pt1 = We’ll automatically redirect you to your { -brand-mozilla-account } where you can cancel your { -brand-monitor } subscription.
|
||||
settings-unsubscribe-dialog-confirmation-redirect-description-pt2 = Please note, all of your { -brand-monitor-plus } services will be <b>permanently deleted</b> after your current billing cycle ends.
|
||||
settings-unsubscribe-dialog-cancellation-survey-form-placeholder = What could have gone better?
|
||||
# Variables:
|
||||
# $discount_percentage_num is the amount discounted in percentage per month
|
||||
# $discount_duration is the number of month(s) that users will pay the discounted price
|
||||
settings-unsubscribe-dialog-promotion-cta = {
|
||||
$discount_duration ->
|
||||
[one] Stay and get { $discount_percentage_num } off next month
|
||||
*[other] Stay and get { $discount_percentage_num } off { $discount_duration } months
|
||||
}
|
||||
# Variables:
|
||||
# $discount_percentage_num is the amount discounted in percentage per month
|
||||
# $discount_duration is the number of month(s) that users will pay the discounted price
|
||||
settings-unsubscribe-dialog-promotion-description = {
|
||||
$discount_duration ->
|
||||
[one] { -brand-monitor-plus } will continue protecting your personal data, and a { $discount_percentage_num } discount has been applied to your next month.
|
||||
*[other] { -brand-monitor-plus } will continue protecting your personal data, and a { $discount_percentage_num } discount has been applied to your next { $discount_duration } months.
|
||||
}
|
||||
settings-unsubscribe-dialog-promotion-cta-subtitle = Discount applied to your next month. Redeemable one time only.
|
||||
settings-unsubscribe-dialog-promotion-complete = You’re all set!
|
||||
settings-unsubscribe-dialog-promotion-back-to-dashboard-cta = Go to my Dashboard
|
||||
settings-unsubscribe-dialog-promotion-limitations-apply = Limitations apply
|
||||
|
||||
## Delete Monitor account
|
||||
|
||||
|
|
Двоичный файл не отображается.
Двоичный файл не отображается.
|
@ -10,11 +10,37 @@
|
|||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: $spacing-md;
|
||||
gap: $spacing-xs;
|
||||
text-align: center;
|
||||
|
||||
.tertiaryCta {
|
||||
font-weight: 600;
|
||||
button {
|
||||
&.primaryCta {
|
||||
margin-top: $spacing-sm;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
&.discountCta {
|
||||
background-color: $color-purple-60;
|
||||
width: 100%;
|
||||
|
||||
@media screen and (min-width: $screen-sm) {
|
||||
width: $content-sm;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: $color-purple-70;
|
||||
}
|
||||
}
|
||||
|
||||
&.tertiaryCta {
|
||||
margin-top: $spacing-lg;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
small {
|
||||
color: $color-grey-30;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
p {
|
||||
|
@ -22,6 +48,30 @@
|
|||
}
|
||||
}
|
||||
|
||||
.goToDashboardCta {
|
||||
margin-top: $spacing-lg;
|
||||
font: $text-body-md;
|
||||
font-weight: 500;
|
||||
border: 0;
|
||||
padding: $spacing-md $spacing-lg;
|
||||
border-radius: $border-radius-md;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
line-height: 1;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
color: $color-white;
|
||||
background-color: $color-blue-50;
|
||||
|
||||
&:hover {
|
||||
background-color: $color-blue-60;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
outline: $border-focus-width solid $color-blue-30;
|
||||
}
|
||||
}
|
||||
|
||||
.cancellationAnimation {
|
||||
width: 250px; // width of animation
|
||||
}
|
||||
|
|
|
@ -4,42 +4,182 @@
|
|||
|
||||
"use client";
|
||||
|
||||
import { useState } from "react";
|
||||
import { useEffect, useState } from "react";
|
||||
import { useOverlayTriggerState } from "react-stately";
|
||||
import { useOverlayTrigger } from "react-aria";
|
||||
import Image from "next/image";
|
||||
import styles from "./CancelFlow.module.scss";
|
||||
import CancellationFlowStaticImage from "./images/CancellationFlowIllustration.svg";
|
||||
import CancellationFlowDiscountAppliedStaticImage from "./images/CancellationFlowDiscountAppliedStaticImage.svg";
|
||||
import { useTelemetry } from "../../../../../../hooks/useTelemetry";
|
||||
import { ModalOverlay } from "../../../../../../components/client/dialog/ModalOverlay";
|
||||
import { Dialog } from "../../../../../../components/client/dialog/Dialog";
|
||||
import { Button } from "../../../../../../components/client/Button";
|
||||
import { useL10n } from "../../../../../../hooks/l10n";
|
||||
import { TelemetryButton } from "../../../../../../components/client/TelemetryButton";
|
||||
import { ExperimentData } from "../../../../../../../telemetry/generated/nimbus/experiments";
|
||||
import { onApplyCouponCode, onCheckUserHasCurrentCouponSet } from "./actions";
|
||||
import { TelemetryLink } from "../../../../../../components/client/TelemetryLink";
|
||||
|
||||
export type Props = {
|
||||
fxaSubscriptionsUrl: string;
|
||||
confirmationFlagEnabled: boolean;
|
||||
enableDiscountCoupon: boolean;
|
||||
experimentData?: ExperimentData;
|
||||
};
|
||||
|
||||
type DiscountData = {
|
||||
headline: string;
|
||||
successDescription: string;
|
||||
subtitle: string;
|
||||
};
|
||||
|
||||
export const CancelFlow = (props: Props) => {
|
||||
const l10n = useL10n();
|
||||
const recordTelemetry = useTelemetry();
|
||||
const currentStep = props.confirmationFlagEnabled ? "confirm" : "survey";
|
||||
const [step, setCurrentStep] = useState<"confirm" | "survey" | "redirecting">(
|
||||
currentStep,
|
||||
);
|
||||
const [step, setCurrentStep] = useState<
|
||||
"confirm" | "survey" | "all-set" | "redirecting"
|
||||
>("confirm");
|
||||
|
||||
const dialogState = useOverlayTriggerState({
|
||||
onOpenChange: (isOpen) => {
|
||||
recordTelemetry("popup", isOpen ? "view" : "exit", {
|
||||
popup_id: "settings-cancel-monitor-plus-dialog",
|
||||
});
|
||||
if (isOpen) {
|
||||
setCurrentStep("confirm");
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
const [couponSuccess, setCouponSuccess] = useState<boolean | null>(null);
|
||||
const [alreadyHasCouponSet, setAlreadyHasCouponSet] =
|
||||
useState<boolean>(false);
|
||||
|
||||
const discountedNext3Months: DiscountData = {
|
||||
headline: l10n.getString("settings-unsubscribe-dialog-promotion-cta", {
|
||||
discount_percentage_num: "30%",
|
||||
discount_duration: 3,
|
||||
}),
|
||||
successDescription: l10n.getString(
|
||||
"settings-unsubscribe-dialog-promotion-description",
|
||||
{
|
||||
discount_percentage_num: "30%",
|
||||
discount_duration: 3,
|
||||
},
|
||||
),
|
||||
subtitle: l10n.getString(
|
||||
"settings-unsubscribe-dialog-promotion-limitations-apply",
|
||||
),
|
||||
};
|
||||
|
||||
// Unless we mock out these functions, we can't test them at the moment
|
||||
/* c8 ignore start */
|
||||
const handleApplyCouponCode = async () => {
|
||||
const result = await onApplyCouponCode();
|
||||
if (result?.success) {
|
||||
setCouponSuccess(true);
|
||||
} else {
|
||||
setCouponSuccess(false);
|
||||
}
|
||||
};
|
||||
|
||||
const checkCouponCode = async () => {
|
||||
const result = await onCheckUserHasCurrentCouponSet();
|
||||
if (typeof result.success === "boolean") {
|
||||
setAlreadyHasCouponSet(result.success);
|
||||
} else {
|
||||
setAlreadyHasCouponSet(false);
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
void checkCouponCode();
|
||||
// Only called once upon initial render to check if a user had a coupon code previously set
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (couponSuccess) {
|
||||
setCurrentStep("all-set");
|
||||
}
|
||||
}, [couponSuccess]);
|
||||
/* c8 ignore stop */
|
||||
|
||||
const dialogTrigger = useOverlayTrigger({ type: "dialog" }, dialogState);
|
||||
|
||||
const dialogTitle = () => {
|
||||
switch (step) {
|
||||
case "confirm":
|
||||
return "settings-cancel-plus-step-confirm-heading";
|
||||
case "all-set":
|
||||
return "settings-unsubscribe-dialog-promotion-complete";
|
||||
case "redirecting":
|
||||
return "settings-unsubscribe-dialog-confirmation-redirect-title";
|
||||
case "survey":
|
||||
return "settings-cancel-plus-step-survey-heading";
|
||||
}
|
||||
};
|
||||
|
||||
const Animation = () => {
|
||||
return (
|
||||
<>
|
||||
<video
|
||||
aria-hidden={true}
|
||||
autoPlay={true}
|
||||
loop={true}
|
||||
muted={true}
|
||||
className={styles.cancellationAnimation}
|
||||
>
|
||||
<source
|
||||
// Unfortunately video files cannot currently be imported, so make
|
||||
// sure these files are present in /public. See
|
||||
// https://github.com/vercel/next.js/issues/35248
|
||||
type="video/mp4"
|
||||
src={
|
||||
step === "all-set"
|
||||
? /* c8 ignore next */
|
||||
"/animations/CancellationFlowDiscountAppliedAnimation.mp4"
|
||||
: "/animations/CancellationFlowAnimation.mp4"
|
||||
}
|
||||
/>
|
||||
<source
|
||||
type="video/webm"
|
||||
src={
|
||||
step === "all-set"
|
||||
? /* c8 ignore next */
|
||||
"/animations/CancellationFlowDiscountAppliedAnimation.webm"
|
||||
: "/animations/CancellationFlowAnimation.webm"
|
||||
}
|
||||
/>
|
||||
{/* Fall back to the image if the video formats are not supported: */}
|
||||
<Image
|
||||
className={styles.cancellationIllustrationWrapper}
|
||||
src={
|
||||
/* c8 ignore next */
|
||||
step === "all-set"
|
||||
? CancellationFlowDiscountAppliedStaticImage
|
||||
: CancellationFlowStaticImage
|
||||
}
|
||||
alt=""
|
||||
/>
|
||||
</video>
|
||||
{/* Fall back to the image if the video formats are not supported: */}
|
||||
{/* The .staticAlternative class ensures that this image will only be shown if the user has prefers-reduced-motion on */}
|
||||
<Image
|
||||
className={`
|
||||
${styles.cancellationIllustrationWrapper}
|
||||
${styles.staticAlternative}
|
||||
`}
|
||||
src={
|
||||
step === "all-set"
|
||||
? CancellationFlowDiscountAppliedStaticImage
|
||||
: CancellationFlowStaticImage
|
||||
}
|
||||
alt=""
|
||||
/>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<Button
|
||||
|
@ -56,52 +196,8 @@ export const CancelFlow = (props: Props) => {
|
|||
isDismissable={true}
|
||||
>
|
||||
<Dialog
|
||||
title={l10n.getString(
|
||||
step === "confirm"
|
||||
? "settings-cancel-plus-step-confirm-heading"
|
||||
: step === "survey"
|
||||
? "settings-cancel-plus-step-survey-heading"
|
||||
: "settings-unsubscribe-dialog-confirmation-redirect-title",
|
||||
)}
|
||||
illustration={
|
||||
<>
|
||||
<video
|
||||
aria-hidden={true}
|
||||
autoPlay={true}
|
||||
loop={true}
|
||||
muted={true}
|
||||
className={styles.cancellationAnimation}
|
||||
>
|
||||
<source
|
||||
// Unfortunately video files cannot currently be imported, so make
|
||||
// sure these files are present in /public. See
|
||||
// https://github.com/vercel/next.js/issues/35248
|
||||
type="video/mp4"
|
||||
src="/animations/CancellationFlowAnimation.mp4"
|
||||
/>
|
||||
<source
|
||||
type="video/webm"
|
||||
src="/animations/CancellationFlowAnimation.webm"
|
||||
/>
|
||||
{/* Fall back to the image if the video formats are not supported: */}
|
||||
<Image
|
||||
className={styles.cancellationIllustrationWrapper}
|
||||
src={CancellationFlowStaticImage}
|
||||
alt=""
|
||||
/>
|
||||
</video>
|
||||
{/* Fall back to the image if the video formats are not supported: */}
|
||||
{/* The .staticAlternative class ensures that this image will only be shown if the user has prefers-reduced-motion on */}
|
||||
<Image
|
||||
className={`
|
||||
${styles.cancellationIllustrationWrapper}
|
||||
${styles.staticAlternative}
|
||||
`}
|
||||
src={CancellationFlowStaticImage}
|
||||
alt=""
|
||||
/>
|
||||
</>
|
||||
}
|
||||
title={l10n.getString(dialogTitle())}
|
||||
illustration={<Animation />}
|
||||
onDismiss={() => dialogState.close()}
|
||||
>
|
||||
<div className={styles.contentWrapper}>
|
||||
|
@ -112,22 +208,43 @@ export const CancelFlow = (props: Props) => {
|
|||
"settings-cancel-plus-step-confirm-content",
|
||||
)}
|
||||
</p>
|
||||
<TelemetryButton
|
||||
event={{
|
||||
module: "popup",
|
||||
name: "exit",
|
||||
data: {
|
||||
popup_id: "never_mind_take_me_back",
|
||||
},
|
||||
}}
|
||||
variant="primary"
|
||||
onPress={() => dialogState.close()}
|
||||
className={styles.tertiaryCta}
|
||||
>
|
||||
{l10n.getString(
|
||||
"settings-cancel-plus-step-confirm-cancel-label",
|
||||
)}
|
||||
</TelemetryButton>
|
||||
{props.enableDiscountCoupon && !alreadyHasCouponSet ? (
|
||||
<>
|
||||
<TelemetryButton
|
||||
event={{
|
||||
module: "ctaButton",
|
||||
name: "click",
|
||||
data: {
|
||||
button_id: "stay_get_30_off",
|
||||
},
|
||||
}}
|
||||
variant="primary"
|
||||
onPress={() => void handleApplyCouponCode()}
|
||||
className={`${styles.discountCta} ${styles.primaryCta}`}
|
||||
>
|
||||
{discountedNext3Months.headline}
|
||||
</TelemetryButton>
|
||||
<small>{discountedNext3Months.subtitle}</small>
|
||||
</>
|
||||
) : (
|
||||
<TelemetryButton
|
||||
event={{
|
||||
module: "popup",
|
||||
name: "exit",
|
||||
data: {
|
||||
popup_id: "never_mind_take_me_back",
|
||||
},
|
||||
}}
|
||||
variant="primary"
|
||||
onPress={() => dialogState.close()}
|
||||
className={styles.primaryCta}
|
||||
>
|
||||
{l10n.getString(
|
||||
"settings-cancel-plus-step-confirm-cancel-label",
|
||||
)}
|
||||
</TelemetryButton>
|
||||
)}
|
||||
|
||||
<TelemetryButton
|
||||
event={{
|
||||
module: "button",
|
||||
|
@ -138,6 +255,7 @@ export const CancelFlow = (props: Props) => {
|
|||
}}
|
||||
variant="tertiary"
|
||||
onPress={() => setCurrentStep("survey")}
|
||||
className={styles.tertiaryCta}
|
||||
>
|
||||
{l10n.getString(
|
||||
"settings-cancel-plus-step-confirm-cta-label",
|
||||
|
@ -206,6 +324,30 @@ export const CancelFlow = (props: Props) => {
|
|||
</p>
|
||||
</>
|
||||
)}
|
||||
{step === "all-set" && (
|
||||
<>
|
||||
<p>
|
||||
{l10n.getString(
|
||||
"settings-unsubscribe-dialog-promotion-description",
|
||||
{
|
||||
discount_duration: 3,
|
||||
discount_percentage_num: "30%",
|
||||
},
|
||||
)}
|
||||
</p>
|
||||
<TelemetryLink
|
||||
href="/user/dashboard"
|
||||
eventData={{
|
||||
link_id: "go_to_dashboard",
|
||||
}}
|
||||
className={styles.goToDashboardCta}
|
||||
>
|
||||
{l10n.getString(
|
||||
"settings-unsubscribe-dialog-promotion-back-to-dashboard-cta",
|
||||
)}
|
||||
</TelemetryLink>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
</Dialog>
|
||||
</ModalOverlay>
|
||||
|
|
|
@ -29,11 +29,14 @@ jest.mock("../../../../../../hooks/useTelemetry", () => {
|
|||
useTelemetry: () => mockedRecordTelemetry,
|
||||
};
|
||||
});
|
||||
|
||||
jest.mock("./actions", () => {
|
||||
return {
|
||||
onRemoveEmail: jest.fn(),
|
||||
onAddEmail: jest.fn(),
|
||||
onDeleteAccount: () => new Promise(() => undefined),
|
||||
onApplyCouponCode: () => ({ success: true }),
|
||||
onCheckUserHasCurrentCouponSet: () => new Promise(() => undefined),
|
||||
};
|
||||
});
|
||||
const mockedRouterRefresh = jest.fn();
|
||||
|
@ -1724,3 +1727,69 @@ describe("to learn about usage", () => {
|
|||
);
|
||||
});
|
||||
});
|
||||
|
||||
it("selects the coupon code discount cta and shows the all-set dialog step", async () => {
|
||||
const user = userEvent.setup();
|
||||
|
||||
render(
|
||||
<TestComponentWrapper>
|
||||
<SettingsView
|
||||
l10n={getL10n()}
|
||||
user={{
|
||||
...mockedUser,
|
||||
fxa: {
|
||||
...mockedUser.fxa,
|
||||
subscriptions: ["monitor"],
|
||||
} as Session["user"]["fxa"],
|
||||
}}
|
||||
subscriber={mockedSubscriber}
|
||||
breachCountByEmailAddress={{
|
||||
[mockedUser.email]: 42,
|
||||
}}
|
||||
emailAddresses={[]}
|
||||
fxaSettingsUrl=""
|
||||
fxaSubscriptionsUrl=""
|
||||
yearlySubscriptionUrl=""
|
||||
monthlySubscriptionUrl=""
|
||||
subscriptionBillingAmount={mockedSubscriptionBillingAmount}
|
||||
enabledFeatureFlags={[
|
||||
"CancellationFlow",
|
||||
"ConfirmCancellation",
|
||||
"DiscountCouponNextThreeMonths",
|
||||
]}
|
||||
experimentData={defaultExperimentData}
|
||||
/>
|
||||
</TestComponentWrapper>,
|
||||
);
|
||||
|
||||
const cancellationButton = screen.getByRole("button", {
|
||||
name: "Cancel your subscription",
|
||||
});
|
||||
await user.click(cancellationButton);
|
||||
|
||||
const discountCta = screen.getByRole("button", {
|
||||
name: "Stay and get 30% off 3 months",
|
||||
});
|
||||
|
||||
expect(mockedRecordTelemetry).toHaveBeenCalledWith(
|
||||
"popup",
|
||||
"view",
|
||||
expect.objectContaining({
|
||||
popup_id: "settings-cancel-monitor-plus-dialog",
|
||||
}),
|
||||
);
|
||||
expect(discountCta).toBeInTheDocument();
|
||||
|
||||
await user.click(discountCta);
|
||||
|
||||
expect(mockedRecordTelemetry).toHaveBeenCalledWith(
|
||||
"ctaButton",
|
||||
"click",
|
||||
expect.objectContaining({
|
||||
button_id: "stay_get_30_off",
|
||||
}),
|
||||
);
|
||||
|
||||
const allSetHeader = await screen.findByText("You’re all set!");
|
||||
expect(allSetHeader).toBeInTheDocument();
|
||||
});
|
||||
|
|
|
@ -104,10 +104,11 @@ export const SettingsView = (props: Props) => {
|
|||
<p>{l10n.getString("settings-cancel-plus-details")}</p>
|
||||
{props.enabledFeatureFlags.includes("CancellationFlow") ? (
|
||||
<CancelFlow
|
||||
confirmationFlagEnabled={props.enabledFeatureFlags.includes(
|
||||
"ConfirmCancellation",
|
||||
enableDiscountCoupon={props.enabledFeatureFlags.includes(
|
||||
"DiscountCouponNextThreeMonths",
|
||||
)}
|
||||
fxaSubscriptionsUrl={props.fxaSubscriptionsUrl}
|
||||
experimentData={props.experimentData}
|
||||
/>
|
||||
) : (
|
||||
<TelemetryLink
|
||||
|
|
|
@ -24,6 +24,10 @@ import { CONST_MAX_NUM_ADDRESSES } from "../../../../../../../constants";
|
|||
import { SanitizedEmailAddressRow } from "../../../../../../functions/server/sanitize";
|
||||
import { deleteAccount } from "../../../../../../functions/server/deleteAccount";
|
||||
import { cookies } from "next/headers";
|
||||
import {
|
||||
applyCurrentCouponCode,
|
||||
checkCurrentCouponCode,
|
||||
} from "../../../../../../functions/server/applyCoupon";
|
||||
|
||||
export type AddEmailFormState =
|
||||
| { success?: never }
|
||||
|
@ -186,3 +190,33 @@ export async function onDeleteAccount() {
|
|||
// client side after this action completes.
|
||||
// See https://github.com/nextauthjs/next-auth/discussions/5334.
|
||||
}
|
||||
|
||||
export async function onApplyCouponCode() {
|
||||
const session = await getServerSession();
|
||||
if (!session?.user.subscriber?.id) {
|
||||
logger.error(`Tried to apply a coupon code without an active session.`);
|
||||
return {
|
||||
success: false,
|
||||
error: "apply-coupon-code-without-active-session",
|
||||
errorMessage: `User tried to apply a coupon code without an active session.`,
|
||||
};
|
||||
}
|
||||
|
||||
const result = await applyCurrentCouponCode(session.user.subscriber);
|
||||
return result;
|
||||
}
|
||||
|
||||
export async function onCheckUserHasCurrentCouponSet() {
|
||||
const session = await getServerSession();
|
||||
if (!session?.user.subscriber?.id) {
|
||||
logger.error(`User does not have an active session.`);
|
||||
return {
|
||||
success: false,
|
||||
error: "apply-coupon-code-without-active-session",
|
||||
errorMessage: `User does not have an active session.`,
|
||||
};
|
||||
}
|
||||
|
||||
const result = await checkCurrentCouponCode(session.user.subscriber);
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
<svg width="255" height="200" viewBox="0 0 255 200" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path opacity="0.5" fill-rule="evenodd" clip-rule="evenodd" d="M124.97 18.1587C156.56 16.3263 184.413 40.9617 202.612 67.1071C219.368 91.18 225.932 122.106 216.115 149.813C207.316 174.646 181.498 184.46 157.039 193.698C136.144 201.59 114.234 201.972 92.9 195.385C64.8381 186.722 29.9922 180.022 22.0093 151.501C13.8761 122.443 40.7116 99.3219 59.1425 75.5464C77.906 51.342 94.5844 19.9212 124.97 18.1587Z" fill="#D9BFFF"/>
|
||||
<path d="M171.19 58.7334C171.256 60.3907 171.193 61.539 171.19 64.4918C171.19 64.75 171.19 64.2332 171.19 64.4918C171.189 66.8427 171.136 68.7424 171.19 70.2501C171.217 70.9989 171.862 71.7169 172.603 71.6897C173.344 71.6625 174.042 70.9989 174.015 70.2501C173.963 68.7846 174.014 66.8114 174.015 64.4918C174.015 64.2339 174.015 64.7499 174.015 64.4918C174.018 61.5027 174.082 60.4392 174.015 58.7334C173.986 57.9847 173.343 57.2643 172.603 57.2938C171.862 57.3235 171.161 57.9847 171.19 58.7334Z" fill="#8829D2"/>
|
||||
<path d="M168.698 65.917C169.4 65.9559 170.404 65.8875 171.439 65.917C171.572 65.9207 171.198 65.9103 171.439 65.917C173.568 65.976 174.424 65.8132 175.551 65.917C176.224 65.979 176.861 65.1943 176.921 64.5028C176.981 63.8114 176.225 63.1507 175.551 63.0887C174.356 62.9787 173.619 63.1492 171.439 63.0887C171.199 63.0821 171.572 63.0925 171.439 63.0887C170.425 63.0598 169.374 63.1262 168.698 63.0887C168.023 63.0513 167.364 63.8096 167.327 64.5028C167.291 65.196 168.023 65.8796 168.698 65.917Z" fill="#8829D2"/>
|
||||
<path d="M189.752 125.732C190.906 125.684 191.047 125.685 193.128 125.732C193.454 125.74 194.633 125.729 194.816 125.732C196.467 125.768 197.055 125.787 198.192 125.732C199.058 125.69 199.92 124.955 199.88 124.044C199.84 123.135 199.057 122.315 198.192 122.356C197.14 122.408 196.403 122.39 194.816 122.356C194.636 122.352 193.454 122.365 193.128 122.356C190.983 122.308 190.993 122.304 189.752 122.356C188.887 122.393 188.03 123.134 188.064 124.044C188.099 124.955 188.886 125.769 189.752 125.732Z" fill="#EAF3F3"/>
|
||||
<path d="M196.503 129.109C196.521 128.311 196.497 126.873 196.503 125.733C196.504 125.539 196.502 126.084 196.503 125.733C196.516 123.089 196.435 122.071 196.503 120.67C196.545 119.807 195.708 119.023 194.815 118.982C193.922 118.941 193.17 119.806 193.128 120.67C193.056 122.13 193.141 123.044 193.128 125.733C193.126 126.084 193.128 125.539 193.128 125.733C193.121 126.857 193.145 128.331 193.128 129.109C193.108 129.972 193.922 130.779 194.815 130.797C195.709 130.816 196.484 129.972 196.503 129.109Z" fill="#EAF3F3"/>
|
||||
<path d="M200.236 23.2321C200.28 24.1472 200.143 25.1974 200.236 26.6079C200.25 26.807 200.223 26.409 200.236 26.6079C200.464 30.0518 200.236 31.4299 200.236 33.3594C200.236 34.1704 201.136 35.0473 201.924 35.0473C202.713 35.0473 203.612 34.1704 203.612 33.3594C203.612 31.3417 203.844 30.1176 203.612 26.6079C203.599 26.4091 203.625 26.8065 203.612 26.6079C203.521 25.2135 203.655 24.1255 203.612 23.2321C203.572 22.4221 202.711 21.5037 201.924 21.5443C201.137 21.5848 200.196 22.4222 200.236 23.2321Z" fill="#90BFFF"/>
|
||||
<path d="M198.549 29.9888C200.15 30.167 200.775 30.1634 203.612 29.9888C204.278 29.9479 204.93 30.0077 205.3 29.9888C206.016 29.9522 206.423 29.9888 206.988 29.9888C207.836 29.9888 208.676 29.1569 208.676 28.3009C208.676 27.4449 207.836 26.6131 206.988 26.6131C206.364 26.6131 206.063 26.574 205.3 26.6131C204.917 26.6327 204.288 26.5715 203.612 26.6131C200.951 26.7768 199.917 26.7654 198.549 26.6131C197.706 26.5193 196.954 27.4501 196.861 28.3009C196.768 29.1517 197.706 29.895 198.549 29.9888Z" fill="#90BFFF"/>
|
||||
<path d="M86.8243 176.34C86.8686 177.254 86.7308 178.305 86.8243 179.715C86.8372 179.915 86.8115 179.517 86.8243 179.715C87.052 183.16 86.8243 184.537 86.8243 186.467C86.8243 187.277 87.7242 188.155 88.5122 188.155C89.3009 188.155 90.2001 187.277 90.2001 186.467C90.2001 184.449 90.432 183.225 90.2001 179.715C90.1872 179.516 90.2136 179.914 90.2001 179.715C90.1087 178.321 90.2436 177.233 90.2001 176.34C90.1608 175.53 89.3002 174.611 88.5122 174.652C87.7249 174.693 86.7851 175.53 86.8243 176.34Z" fill="#90BFFF"/>
|
||||
<path d="M85.1357 183.09C86.736 183.269 87.3622 183.266 90.1993 183.09C90.5898 183.066 91.6685 183.103 91.8872 183.09C92.8845 183.032 92.8723 183.09 93.575 183.09C94.422 183.09 95.2629 182.259 95.2629 181.403C95.2629 180.546 94.422 179.715 93.575 179.715C92.8024 179.715 92.9375 179.653 91.8872 179.715C91.6639 179.727 90.5936 179.69 90.1993 179.715C87.5378 179.878 86.5036 179.867 85.1357 179.715C84.2933 179.621 83.5406 180.552 83.4478 181.403C83.3549 182.253 84.2933 182.997 85.1357 183.09Z" fill="#90BFFF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M227.384 90.3575C227.502 92.1977 230.6 92.194 230.759 90.3575C231.131 86.093 232.936 83.8678 235.823 83.606C236.053 83.6023 235.581 83.6217 235.823 83.606C237.741 83.477 237.746 80.2303 235.823 80.2303C235.569 80.2303 236.068 80.2116 235.823 80.2303C232.751 80.2549 231.45 80.4542 230.759 76.8545C230.727 76.6878 230.841 75.6063 230.759 75.1666C230.683 74.7607 230.811 75.4209 230.759 75.1666C230.41 73.4505 227.476 73.4177 227.384 75.1666C227.369 75.4247 227.397 74.7199 227.384 75.1666C227.366 75.7691 227.416 76.5479 227.384 76.8545C227.305 77.5976 227.781 77.8476 227.384 78.5424C226.683 79.7657 224.415 80.2646 222.32 80.2303C220.404 80.1997 220.411 83.4345 222.32 83.606C224.797 83.8291 225.41 84.7471 225.696 85.2939C226.571 86.9983 227.259 88.4338 227.384 90.3575ZM235.823 80.2303C236.016 80.228 235.615 80.2444 235.823 80.2303V80.2303C235.645 80.1609 236.052 80.2273 235.823 80.2303ZM235.823 83.606C236.004 83.5911 235.63 83.606 235.823 83.606V83.606C235.661 83.6821 236.035 83.5889 235.823 83.606ZM227.384 81.9181C228.001 81.4818 228.652 80.8606 229.071 80.2303C229.522 81.0351 230.064 81.4325 230.759 81.9181C230.137 82.4768 229.517 84.5122 229.071 85.2939C228.927 84.962 229.237 83.929 229.071 83.606C228.79 83.0689 227.903 82.2956 227.384 81.9181Z" fill="#8829D2"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.9375 120.35C16.8572 120.224 16.8616 116.975 14.9375 116.975C14.687 116.975 15.179 116.956 14.9375 116.975C11.8465 117 10.5679 117.229 9.87384 113.599C9.84327 113.44 9.95137 112.327 9.87384 111.911C9.7978 111.503 9.92528 112.165 9.87384 111.911C9.52494 110.195 6.59054 110.162 6.49809 111.911C6.48467 112.168 6.51151 111.466 6.49809 111.911C6.48095 112.502 6.52866 113.297 6.49809 113.599C6.42131 114.354 6.89769 114.586 6.49809 115.287C5.79582 116.51 3.52341 117.016 1.43447 116.975C-0.482256 116.938 -0.474055 120.174 1.43447 120.35C3.91556 120.58 4.52469 121.492 4.81022 122.038C5.68248 123.743 6.37136 125.177 6.49809 127.102C6.62036 128.941 9.71355 128.937 9.87384 127.102C10.2451 122.833 12.0441 120.608 14.9375 120.35C15.1641 120.347 14.6996 120.366 14.9375 120.35ZM14.9375 116.975C15.1276 116.972 14.7324 116.988 14.9375 116.975V116.975C14.7615 116.907 15.1626 116.972 14.9375 116.975ZM14.9375 120.35C15.1156 120.336 14.7481 120.35 14.9375 120.35V120.35C14.7772 120.423 15.1455 120.334 14.9375 120.35ZM6.49809 118.662C7.11538 118.226 7.76624 117.606 8.18597 116.975C8.63551 117.78 9.17753 118.178 9.87384 118.662C9.25133 119.222 8.63253 121.256 8.18597 122.038C8.04208 121.706 8.35147 120.673 8.18597 120.35C7.90491 119.812 7.01847 119.041 6.49809 118.662Z" fill="#E9F3F3"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M169.407 189.192C171.327 189.065 171.331 185.816 169.407 185.816C169.157 185.816 169.649 185.798 169.407 185.816C166.316 185.842 165.038 186.07 164.344 182.441C164.313 182.282 164.421 181.169 164.344 180.753C164.268 180.345 164.395 181.007 164.344 180.753C163.995 179.036 161.06 179.004 160.968 180.753C160.954 181.01 160.981 180.308 160.968 180.753C160.951 181.344 160.998 182.139 160.968 182.441C160.891 183.196 161.367 183.428 160.968 184.128C160.266 185.352 157.993 185.857 155.904 185.816C153.987 185.78 153.996 189.016 155.904 189.192C158.385 189.422 158.994 190.334 159.28 190.88C160.152 192.584 160.841 194.019 160.968 195.944C161.09 197.782 164.183 197.779 164.344 195.944C164.715 191.675 166.514 189.449 169.407 189.192C169.634 189.188 169.169 189.208 169.407 189.192ZM169.407 185.816C169.597 185.814 169.202 185.83 169.407 185.816V185.816C169.231 185.749 169.632 185.813 169.407 185.816ZM169.407 189.192C169.585 189.178 169.218 189.192 169.407 189.192V189.192C169.247 189.265 169.615 189.176 169.407 189.192ZM160.968 187.504C161.585 187.068 162.236 186.447 162.656 185.816C163.105 186.622 163.647 187.019 164.344 187.504C163.721 188.064 163.102 190.098 162.656 190.88C162.512 190.548 162.821 189.514 162.656 189.192C162.375 188.654 161.488 187.882 160.968 187.504Z" fill="#AF85FF"/>
|
||||
<path d="M117.532 26.6058V26.6058C117.532 25.7935 116.777 24.918 115.844 24.918C114.912 24.918 114.156 25.7935 114.156 26.6058V26.6058C114.156 27.4182 114.912 28.2937 115.844 28.2937C116.777 28.2937 117.532 27.4182 117.532 26.6058Z" fill="#90BFFF"/>
|
||||
<path d="M197.386 88.0316V88.0316C197.386 87.2189 196.63 86.3438 195.699 86.3438C194.766 86.3438 194.011 87.2189 194.011 88.0316V88.0316C194.011 88.8443 194.766 89.7195 195.699 89.7195C196.63 89.7195 197.386 88.8443 197.386 88.0316Z" fill="#90BFFF"/>
|
||||
<path d="M244.122 50.2445V50.2445C244.122 49.4304 243.366 48.5566 242.434 48.5566C241.501 48.5566 240.746 49.4304 240.746 50.2445V50.2445C240.746 51.0587 241.501 51.9324 242.434 51.9324C243.366 51.9324 244.122 51.0587 244.122 50.2445Z" fill="#EAF3F3"/>
|
||||
<path d="M254.249 65.4301V65.4301C254.249 64.6177 253.493 63.7422 252.561 63.7422C251.628 63.7422 250.873 64.6177 250.873 65.4301V65.4301C250.873 66.2424 251.628 67.1179 252.561 67.1179C253.493 67.1179 254.249 66.2424 254.249 65.4301Z" fill="#4E6AF0"/>
|
||||
<path d="M233.994 16.4808V16.4808C233.994 15.6685 233.239 14.793 232.306 14.793C231.373 14.793 230.618 15.6685 230.618 16.4808V16.4808C230.618 17.2932 231.373 18.1687 232.306 18.1687C233.239 18.1687 233.994 17.2932 233.994 16.4808Z" fill="#8829D2"/>
|
||||
<path d="M27.6853 142.745V142.745C27.6853 141.93 26.9292 141.057 25.9974 141.057C25.0649 141.057 24.3096 141.93 24.3096 142.745V142.745C24.3096 143.559 25.0649 144.432 25.9974 144.432C26.9292 144.432 27.6853 143.559 27.6853 142.745Z" fill="#8829D2"/>
|
||||
<path d="M80.3982 55.3012V55.3012C80.3982 54.432 79.6429 53.6133 78.7103 53.6133C77.7786 53.6133 77.0225 54.432 77.0225 55.3012V55.3012C77.0225 56.1704 77.7786 56.989 78.7103 56.989C79.6429 56.989 80.3982 56.1704 80.3982 55.3012Z" fill="#EAF3F3"/>
|
||||
<path d="M90.5252 18.1703V18.1703C90.5252 17.3031 89.7698 16.4824 88.8373 16.4824C87.9056 16.4824 87.1494 17.3031 87.1494 18.1703V18.1703C87.1494 19.0375 87.9056 19.8582 88.8373 19.8582C89.7698 19.8582 90.5252 19.0375 90.5252 18.1703Z" fill="#4E6AF0"/>
|
||||
<path d="M183.358 31.6703V31.6703C183.358 30.9062 182.603 29.9824 181.67 29.9824C180.739 29.9824 179.982 30.9062 179.982 31.6703V31.6703C179.982 32.4344 180.739 33.3582 181.67 33.3582C182.603 33.3582 183.358 32.4344 183.358 31.6703Z" fill="#EAF3F3"/>
|
||||
<path d="M166.479 9.7328V9.7328C166.479 8.91871 165.724 8.04492 164.791 8.04492C163.86 8.04492 163.104 8.91871 163.104 9.7328V9.7328C163.104 10.547 163.86 11.4207 164.791 11.4207C165.724 11.4207 166.479 10.547 166.479 9.7328Z" fill="#8829D2"/>
|
||||
<path d="M235.682 163.328V163.328C235.682 162.516 234.927 161.641 233.995 161.641C233.062 161.641 232.307 162.516 232.307 163.328V163.328C232.307 164.14 233.062 165.016 233.995 165.016C234.927 165.016 235.682 164.14 235.682 163.328Z" fill="#8829D2"/>
|
||||
<path d="M35.1756 75.5551V75.5551C35.1756 74.7149 34.4202 73.8672 33.4877 73.8672C32.556 73.8672 31.7998 74.7149 31.7998 75.5551V75.5551C31.7998 76.3952 32.556 77.2429 33.4877 77.2429C34.4202 77.2429 35.1756 76.3952 35.1756 75.5551Z" fill="#90BFFF"/>
|
||||
<path d="M196.238 151.381V151.381C196.238 150.541 195.482 149.693 194.55 149.693C193.618 149.693 192.862 150.541 192.862 151.381V151.381C192.862 152.221 193.618 153.069 194.55 153.069C195.482 153.069 196.238 152.221 196.238 151.381Z" fill="#4E6AF0"/>
|
||||
<path d="M61.0906 132.184V132.184C61.0906 131.342 60.3344 130.496 59.4027 130.496C58.4702 130.496 57.7148 131.342 57.7148 132.184V132.184C57.7148 133.026 58.4702 133.872 59.4027 133.872C60.3344 133.872 61.0906 133.026 61.0906 132.184Z" fill="#4E6AF0"/>
|
||||
<path d="M238.659 130.268V130.268C238.659 129.428 237.904 128.58 236.971 128.58C236.039 128.58 235.283 129.428 235.283 130.268V130.268C235.283 131.107 236.039 131.956 236.971 131.956C237.904 131.956 238.659 131.107 238.659 130.268Z" fill="#EAF3F3"/>
|
||||
<path d="M48.0867 154.459V154.459C48.0867 153.619 47.3305 152.771 46.3988 152.771C45.4663 152.771 44.7109 153.619 44.7109 154.459V154.459C44.7109 155.299 45.4663 156.147 46.3988 156.147C47.3305 156.147 48.0867 155.299 48.0867 154.459Z" fill="#EAF3F3"/>
|
||||
<g clip-path="url(#clip0_231_1507)">
|
||||
<path d="M48.6101 96.2977C51.0393 94.0122 54.1881 92.9361 57.2871 93.0784L52.0027 87.7454C48.1313 83.8383 47.4997 77.8946 50.0846 73.3086C46.7125 70.5073 41.7014 70.694 38.5496 73.8778C36.9252 75.5171 36.0322 77.696 36.0322 80.0112C36.0322 82.3264 36.9252 84.5053 38.5496 86.1446L48.6101 96.2977Z" fill="#A952DD"/>
|
||||
<path d="M48.5979 97.1198L38.1379 86.5635C36.4048 84.8145 35.4502 82.4874 35.4502 80.0091C35.4502 77.5309 36.4048 75.2038 38.1408 73.4548C41.5012 70.0635 46.7973 69.8026 50.4631 72.8471L50.845 73.1643L50.6012 73.5971C48.0868 78.0586 48.8358 83.6998 52.4224 87.3224L58.7788 93.7374L57.2661 93.6662C54.1965 93.5239 51.268 94.6119 49.0179 96.7285L48.6038 97.1198H48.5979ZM44.6295 71.9163C42.5763 71.9163 40.5319 72.7167 38.9692 74.2937C37.4564 75.8204 36.6251 77.8481 36.6251 80.0091C36.6251 82.1702 37.4594 84.1979 38.9692 85.7245L48.6361 95.4804C50.6922 93.7107 53.2125 92.6791 55.8855 92.4982L51.5881 88.1613C47.749 84.2868 46.8531 78.3135 49.3322 73.4667C47.9223 72.4291 46.2715 71.9163 44.6295 71.9163Z" fill="black"/>
|
||||
<path d="M48.3023 113.571C46.0523 111.301 44.8157 108.286 44.8157 105.075C44.8157 102.802 45.4472 100.632 46.6104 98.7492C43.2383 95.8144 38.1273 95.9508 34.9285 99.182C33.3041 100.821 32.4111 103 32.4111 105.315C32.4111 107.631 33.3041 109.809 34.9285 111.449L81.5946 158.545C89.8045 166.83 100.335 171.375 111.098 172.202C105.522 169.676 100.388 166.133 95.9378 161.642L48.3053 113.571H48.3023Z" fill="#A952DD"/>
|
||||
<path d="M114.402 173.051L111.047 172.794C99.7618 171.925 89.152 167.013 81.1741 158.965L34.508 111.869C32.772 110.12 31.8174 107.793 31.8174 105.315C31.8174 102.836 32.772 100.512 34.508 98.7602C37.886 95.3511 43.3671 95.1466 46.9889 98.2977L47.3708 98.6297L47.1035 99.0596C45.9873 100.868 45.3969 102.949 45.3969 105.074C45.3969 108.125 46.5748 110.994 48.7132 113.152L96.3457 161.223C100.699 165.617 105.742 169.13 111.329 171.661L114.396 173.051H114.402ZM40.9996 97.2454C38.9405 97.2454 36.8873 98.0369 35.3393 99.5991C33.8265 101.126 32.9923 103.156 32.9923 105.315C32.9923 107.473 33.8265 109.503 35.3393 111.03L82.0054 158.126C88.9905 165.175 98.0435 169.755 107.784 171.231C103.278 168.815 99.1597 165.741 95.5173 162.065L47.8848 113.994C45.5261 111.614 44.2249 108.448 44.2249 105.077C44.2249 102.904 44.783 100.776 45.8434 98.8876C44.4158 97.7908 42.7062 97.2483 40.9996 97.2483V97.2454Z" fill="black"/>
|
||||
<path d="M129.041 67.2331C125.942 64.7104 123.742 63.99 121.116 64.5533L127.966 71.5226C128.057 70.0552 128.413 68.6056 129.041 67.2301V67.2331Z" fill="#A952DD"/>
|
||||
<path d="M128.469 72.8769L119.938 64.1971L120.993 63.9718C123.831 63.3641 126.189 64.1496 129.409 66.7702L129.764 67.0607L129.57 67.4817C128.98 68.7682 128.636 70.1407 128.548 71.5607L128.466 72.8769H128.469ZM122.359 64.9767L127.52 70.2267C127.676 69.2603 127.946 68.3176 128.322 67.4105C126.01 65.5904 124.262 64.867 122.359 64.9738V64.9767Z" fill="black"/>
|
||||
<path d="M77.3908 49.8165L80.0315 52.4815C79.9405 50.522 80.3311 48.5477 81.18 46.7424C78.0811 43.9677 73.4606 43.8432 70.2266 46.3748C72.8438 46.6535 75.3875 47.7977 77.3908 49.8165Z" fill="#A952DD"/>
|
||||
<path d="M80.6895 53.985L76.9767 50.238C75.1555 48.4001 72.7381 47.238 70.1679 46.9653L68.7139 46.8111L69.8683 45.907C73.349 43.1827 78.2721 43.3457 81.5708 46.2983L81.9027 46.5947L81.7118 46.9979C80.9099 48.6995 80.5309 50.5878 80.6191 52.4554L80.6895 53.985ZM71.8245 46.0463C74.0805 46.5799 76.1631 47.739 77.808 49.3961L79.4617 51.0651C79.5587 49.6392 79.8994 48.2252 80.4634 46.906C77.9813 44.9139 74.5886 44.6086 71.8275 46.0463H71.8245Z" fill="black"/>
|
||||
<path d="M46.9267 65.6362L51.9996 70.7558C51.9996 70.7558 51.9996 70.7558 52.0025 70.7528C54.3847 68.3487 57.6482 67.0888 60.9821 67.2459L60.5532 66.8101C56.7905 63.0127 56.0796 57.2884 58.4148 52.7588C55.0427 49.9989 50.0639 50.2005 46.9267 53.3665C43.5752 56.7489 43.5752 62.2538 46.9267 65.6362Z" fill="#A952DD"/>
|
||||
<path d="M52.0408 71.6323L51.5855 71.1758L46.5126 66.0563C42.932 62.4426 42.932 56.5642 46.5126 52.9506C49.8495 49.583 55.125 49.3043 58.785 52.3014L59.158 52.6067L58.9377 53.0365C56.6437 57.4832 57.4602 62.8517 60.9704 66.3942L62.4714 67.912L60.9587 67.8408C57.7892 67.6926 54.6874 68.8991 52.4403 71.158L52.0437 71.6383L52.0408 71.6323ZM47.341 65.2173L52.0085 69.9278C54.1028 68.0039 56.7935 66.8567 59.6104 66.6669C56.2941 62.8903 55.5275 57.5187 57.6717 52.9328C54.5023 50.6294 50.1403 50.9614 47.341 53.7865C44.2186 56.9377 44.2186 62.0662 47.341 65.2173Z" fill="black"/>
|
||||
<path d="M62.7451 52.0303C59.3113 55.4957 59.3113 61.134 62.7451 64.5994L103.445 105.674C104.05 106.285 104.05 107.275 103.445 107.886C102.84 108.497 101.859 108.497 101.254 107.886L66.6518 72.965C64.9893 71.2872 62.7774 70.3623 60.4246 70.3623C58.0717 70.3623 55.8628 71.2872 54.1973 72.965C50.7635 76.4304 50.7635 82.0687 54.1973 85.5342L65.0862 96.5232C65.1067 96.541 65.1244 96.5588 65.142 96.5796L88.7996 120.455C89.4047 121.066 89.4047 122.056 88.7996 122.666C88.1945 123.277 87.2134 123.277 86.6083 122.666L62.9037 98.7436C59.467 95.3286 53.9153 95.3405 50.4962 98.791C47.0625 102.256 47.0625 107.895 50.4962 111.36L98.1287 159.431C107.155 168.541 119.157 173.56 131.923 173.56C144.689 173.56 156.691 168.544 165.718 159.431C172.286 152.803 176.768 144.473 178.68 135.342C179.755 130.205 179.999 124.952 179.397 119.732C176.101 93.8493 150.026 69.2743 149.762 69.0312C143.984 63.4137 141.211 62.3198 136.837 63.9265C134.629 64.7387 132.863 66.3692 131.867 68.5213C130.913 70.5875 130.778 72.8939 131.48 75.046L152.605 99.1527C153.172 99.7989 153.111 100.789 152.47 101.361C151.827 101.933 150.849 101.871 150.282 101.225L129.623 77.6518L98.1405 45.6212C94.7126 42.1617 89.1257 42.1617 85.6919 45.6271C82.2757 49.0748 82.2581 54.6745 85.6419 58.1429L118.091 90.8938C118.696 91.5045 118.696 92.4946 118.091 93.1053C117.486 93.7159 116.505 93.7159 115.9 93.1053L83.5006 60.4077C83.48 60.387 83.4624 60.3662 83.4419 60.3484L75.2025 52.0303C71.7687 48.5649 66.1818 48.5649 62.748 52.0303H62.7451Z" fill="#A952DD"/>
|
||||
<path d="M131.923 174.447C118.923 174.447 106.7 169.336 97.5061 160.058L49.8736 111.987C48.0466 110.143 47.0391 107.688 47.0391 105.074C47.0391 102.459 48.0466 100.004 49.8736 98.1605C53.6217 94.375 59.7432 94.3513 63.5207 98.1072L87.2312 122.036C87.4838 122.291 87.9244 122.291 88.177 122.036C88.3033 121.908 88.3738 121.74 88.3738 121.559C88.3738 121.378 88.3033 121.209 88.177 121.081L53.5747 86.1606C51.7477 84.3167 50.7402 81.8622 50.7402 79.2475C50.7402 76.6329 51.7477 74.1784 53.5747 72.3345C55.4047 70.4877 57.8369 69.4709 60.4247 69.4709C63.0125 69.4709 65.4447 70.4877 67.2746 72.3345L101.877 107.255C102.138 107.519 102.561 107.519 102.823 107.255C102.949 107.128 103.02 106.959 103.02 106.778C103.02 106.597 102.949 106.428 102.823 106.301L62.1225 65.2258C58.345 61.4136 58.345 55.212 62.1225 51.3998C65.9 47.5875 72.0479 47.5875 75.8224 51.3998L116.523 92.4748C116.784 92.7386 117.207 92.7386 117.469 92.4748C117.595 92.3473 117.665 92.1783 117.665 91.9975C117.665 91.8167 117.595 91.6477 117.469 91.5202L85.0164 58.7693C81.2947 54.9541 81.3182 48.7763 85.0663 44.9966C88.8438 41.1844 94.9888 41.1844 98.7633 44.9907L130.284 77.0628L150.943 100.636C151.187 100.914 151.613 100.941 151.889 100.692C152.165 100.446 152.191 100.019 151.945 99.7406L130.698 75.4946L130.643 75.3197C129.87 72.9511 130.023 70.4017 131.069 68.1399C132.161 65.7743 134.103 63.9778 136.535 63.0855C141.258 61.3513 144.363 62.5401 150.373 68.3859C150.626 68.6201 176.939 93.4471 180.27 119.614C180.884 124.938 180.637 130.286 179.541 135.521C177.597 144.818 173.032 153.302 166.341 160.055C157.147 169.333 144.924 174.444 131.923 174.444V174.447ZM56.7236 97.0844C54.6909 97.0844 52.6583 97.8641 51.1191 99.4204C49.624 100.929 48.8015 102.936 48.8015 105.077C48.8015 107.217 49.624 109.224 51.1191 110.733L98.7516 158.804C107.614 167.747 119.393 172.671 131.923 172.671C144.454 172.671 156.233 167.747 165.095 158.804C171.543 152.297 175.943 144.121 177.817 135.162C178.874 130.117 179.109 124.962 178.519 119.839C175.27 94.3157 149.424 69.9304 149.163 69.6873C143.244 63.9304 140.868 63.3938 137.137 64.7664C135.149 65.4956 133.559 66.9659 132.667 68.9017C131.835 70.6982 131.694 72.7169 132.264 74.6023L153.266 98.5696C154.153 99.5835 154.059 101.137 153.055 102.032C152.05 102.927 150.511 102.832 149.621 101.822L128.98 78.2663L97.5149 46.2536C94.4307 43.1409 89.4048 43.1439 86.3147 46.2624C83.2481 49.3543 83.2305 54.4087 86.2707 57.5243L118.717 90.2692C119.175 90.7317 119.428 91.3483 119.428 92.0034C119.428 92.6586 119.175 93.2752 118.714 93.7376C117.765 94.6951 116.223 94.6951 115.277 93.7376L74.577 52.6626C71.4868 49.5441 66.461 49.5441 63.3709 52.6626C60.2808 55.7812 60.2808 60.8563 63.3709 63.9749L104.071 105.05C104.529 105.512 104.782 106.129 104.782 106.784C104.782 107.439 104.529 108.056 104.068 108.518C103.61 108.981 102.999 109.236 102.35 109.236C101.701 109.236 101.09 108.981 100.631 108.518L66.0292 73.5974C64.5311 72.0855 62.5425 71.2555 60.4247 71.2555C58.3068 71.2555 56.3182 72.0885 54.8202 73.5974C51.7301 76.7159 51.7301 81.791 54.8202 84.9066L65.709 95.8957C65.709 95.8957 65.7443 95.9313 65.7707 95.958L89.4225 119.827C89.8807 120.29 90.1333 120.907 90.1333 121.562C90.1333 122.217 89.8807 122.833 89.4195 123.296C88.4707 124.253 86.9286 124.253 85.9828 123.296L62.2782 99.373C60.7419 97.8493 58.7328 97.0874 56.7236 97.0874V97.0844Z" fill="black"/>
|
||||
<path d="M33.1301 36.9724C33.4356 37.3637 33.8909 37.5683 34.3491 37.5683C34.684 37.5683 35.0247 37.4586 35.3067 37.2333C35.9793 36.6997 36.0939 35.7155 35.5652 35.0366L17.9732 12.5159C17.4416 11.8371 16.4693 11.7215 15.7966 12.2551C15.124 12.7887 15.0094 13.7729 15.5382 14.4517L33.1301 36.9694V36.9724Z" fill="#D028BF"/>
|
||||
<path d="M34.3494 38.0121C33.7355 38.0121 33.1656 37.7335 32.7838 37.2473L15.1918 14.7296C14.5133 13.858 14.6602 12.5922 15.5238 11.9075C15.9409 11.5754 16.4608 11.4243 16.9895 11.4895C17.5182 11.5517 17.9882 11.8185 18.3202 12.2395L35.9121 34.7572C36.2411 35.1781 36.3879 35.7028 36.3263 36.2364C36.2646 36.77 36.0002 37.2473 35.5831 37.5793C35.2277 37.8609 34.8018 38.0121 34.3523 38.0121H34.3494ZM16.7545 12.364C16.5078 12.364 16.2669 12.447 16.0701 12.6041C15.5884 12.9865 15.5061 13.692 15.8851 14.1782L33.477 36.6959C33.6885 36.9657 34.0057 37.1228 34.3494 37.1228C34.5991 37.1228 34.837 37.0398 35.0338 36.8827C35.2659 36.6989 35.4127 36.4321 35.448 36.1357C35.4832 35.8392 35.401 35.5457 35.2189 35.3115L17.6269 12.7909C17.4419 12.5567 17.1804 12.4084 16.8867 12.3729C16.8427 12.3669 16.7986 12.364 16.7545 12.364Z" fill="black"/>
|
||||
<path d="M46.2185 32.2746C46.4652 32.8764 47.0439 33.2381 47.6519 33.2381C47.8487 33.2381 48.0514 33.1995 48.2453 33.1165C49.0354 32.7845 49.4114 31.8685 49.0795 31.0711L38.9955 6.60572C38.6665 5.80829 37.7618 5.42884 36.9687 5.76086C36.1785 6.09287 35.8026 7.00888 36.1345 7.80631L46.2185 32.2717V32.2746Z" fill="#D028BF"/>
|
||||
<path d="M47.6493 33.6823C46.8415 33.6823 46.1189 33.1961 45.8105 32.4431L35.7265 7.97779C35.5209 7.48273 35.5209 6.93728 35.7265 6.43926C35.9292 5.9442 36.311 5.55586 36.8016 5.35132C37.2921 5.14381 37.8355 5.14381 38.3261 5.34835C38.8166 5.5529 39.2014 5.93827 39.4041 6.43629L49.4881 30.9016C49.6937 31.3967 49.6937 31.9422 49.4881 32.4402C49.2854 32.9352 48.9035 33.3236 48.413 33.5281C48.1692 33.6319 47.9107 33.6823 47.6493 33.6823ZM37.5682 6.08649C37.4243 6.08649 37.2774 6.11614 37.1394 6.17246C36.8662 6.28807 36.6518 6.50151 36.5401 6.78017C36.4285 7.05586 36.4285 7.36119 36.5401 7.63688L46.6241 32.1052C46.7974 32.5232 47.1999 32.7959 47.6493 32.7959C47.7962 32.7959 47.9372 32.7663 48.0752 32.7099C48.3484 32.5943 48.5628 32.3809 48.6744 32.1022C48.7861 31.8265 48.7861 31.5212 48.6744 31.2455L38.5904 6.7772C38.4759 6.49855 38.2644 6.28511 37.9883 6.1695C37.8531 6.11317 37.7092 6.08353 37.5682 6.08353V6.08649Z" fill="black"/>
|
||||
<path d="M62.8595 29.3568C62.9975 30.1098 63.6496 30.6374 64.381 30.6374C64.475 30.6374 64.569 30.6285 64.663 30.6107C65.5061 30.4536 66.0612 29.6384 65.9085 28.7876L60.9737 1.72841C60.818 0.877619 60.0102 0.31438 59.1672 0.474458C58.3242 0.631572 57.769 1.44679 57.9218 2.29758L62.8565 29.3627L62.8595 29.3568Z" fill="#D028BF"/>
|
||||
<path d="M64.3806 31.0856C63.4231 31.0856 62.6006 30.3949 62.4243 29.4403L57.4896 2.37521C57.2928 1.2843 58.0095 0.234897 59.0875 0.036281C59.6074 -0.0615449 60.1361 0.0511031 60.5767 0.356438C61.0144 0.661773 61.3111 1.12126 61.408 1.64892L66.3428 28.7141C66.5396 29.805 65.8229 30.8544 64.7449 31.053C64.6244 31.0767 64.504 31.0856 64.3836 31.0856H64.3806ZM63.2909 29.2773C63.3996 29.8761 63.9782 30.2882 64.5833 30.1755C65.1855 30.0629 65.585 29.4789 65.4763 28.8712L60.5415 1.809C60.4886 1.51553 60.3241 1.25762 60.0774 1.08865C59.8336 0.919678 59.5398 0.857425 59.249 0.910784C58.6469 1.02343 58.2474 1.60742 58.3561 2.21513L63.2909 29.2803V29.2773Z" fill="black"/>
|
||||
<path d="M110.01 39.0121C110.395 39.0121 110.777 38.8698 111.08 38.5822L133.965 16.6426C134.585 16.0467 134.611 15.0566 134.021 14.4311C133.43 13.8027 132.449 13.779 131.829 14.3748L108.944 36.3145C108.324 36.9103 108.298 37.9004 108.888 38.5259C109.194 38.849 109.602 39.0121 110.013 39.0121H110.01Z" fill="#D028BF"/>
|
||||
<path d="M110.01 39.4572C109.467 39.4572 108.941 39.229 108.565 38.8317C107.81 38.0284 107.842 36.7537 108.639 35.9918L131.524 14.0522C131.908 13.6816 132.414 13.486 132.945 13.5008C133.477 13.5156 133.97 13.735 134.338 14.1263C135.093 14.9296 135.06 16.2043 134.264 16.9662L111.379 38.9059C111.009 39.2616 110.521 39.4572 110.007 39.4572H110.01ZM132.892 14.3871C132.608 14.3871 132.337 14.4968 132.129 14.6954L109.244 36.6351C108.8 37.059 108.782 37.7705 109.203 38.2181C109.414 38.4434 109.699 38.5679 110.007 38.5679C110.292 38.5679 110.565 38.4582 110.771 38.2596L133.656 16.3199C134.1 15.896 134.117 15.1846 133.697 14.7369C133.492 14.5205 133.216 14.396 132.919 14.3871C132.91 14.3871 132.898 14.3871 132.89 14.3871H132.892Z" fill="black"/>
|
||||
<path d="M121.895 44.1151C122.198 44.5509 122.679 44.7851 123.17 44.7851C123.475 44.7851 123.784 44.6932 124.054 44.5065L150.37 26.0292C151.072 25.5371 151.245 24.5618 150.758 23.8504C150.267 23.1419 149.301 22.967 148.599 23.4591L122.283 41.9363C121.581 42.4284 121.407 43.4037 121.895 44.1151Z" fill="#D028BF"/>
|
||||
<path d="M123.17 45.2318C122.517 45.2318 121.907 44.9087 121.533 44.3691C121.231 43.9274 121.113 43.3938 121.207 42.8662C121.301 42.3385 121.592 41.879 122.03 41.5707L148.346 23.0935C149.245 22.4621 150.49 22.6844 151.116 23.5945C151.418 24.0362 151.536 24.5698 151.442 25.0974C151.348 25.6251 151.057 26.0846 150.619 26.3929L124.303 44.8701C123.969 45.1043 123.575 45.2288 123.167 45.2288L123.17 45.2318ZM122.256 43.8593C122.465 44.1616 122.805 44.3395 123.17 44.3395C123.396 44.3395 123.616 44.2713 123.801 44.1379L150.117 25.6607C150.361 25.4887 150.522 25.2338 150.575 24.9403C150.628 24.6469 150.564 24.3474 150.393 24.1044C150.044 23.5974 149.35 23.4729 148.848 23.8257L122.532 42.3029C122.288 42.4749 122.127 42.7298 122.074 43.0233C122.021 43.3168 122.086 43.6162 122.256 43.8593Z" fill="black"/>
|
||||
<path d="M133.181 50.7531C133.43 51.3519 134.006 51.7136 134.611 51.7136C134.811 51.7136 135.014 51.675 135.207 51.592L166.673 38.3115C167.463 37.9794 167.833 37.0605 167.504 36.266C167.175 35.4686 166.27 35.0921 165.474 35.4271L134.009 48.7077C133.219 49.0397 132.849 49.9587 133.178 50.7531H133.181Z" fill="#D028BF"/>
|
||||
<path d="M134.611 52.1592C133.806 52.1592 133.083 51.673 132.772 50.923C132.349 49.9003 132.828 48.7204 133.841 48.2936L165.306 35.013C165.8 34.8055 166.34 34.8025 166.834 35.007C167.324 35.2116 167.709 35.597 167.912 36.092C168.335 37.1147 167.856 38.2916 166.843 38.7215L135.378 52.0021C135.131 52.1058 134.872 52.1592 134.611 52.1592ZM166.079 35.7481C165.932 35.7481 165.788 35.7778 165.65 35.8371L134.185 49.1177C133.621 49.3548 133.354 50.0129 133.589 50.5821C133.762 51.0001 134.164 51.2698 134.614 51.2698C134.761 51.2698 134.905 51.2402 135.043 51.1839L166.508 37.9033C167.072 37.6661 167.339 37.008 167.104 36.4389C166.99 36.1632 166.775 35.9468 166.502 35.8341C166.367 35.7778 166.223 35.7511 166.082 35.7511L166.079 35.7481Z" fill="black"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_231_1507">
|
||||
<rect width="165.832" height="174.447" fill="white" transform="translate(14.7656)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
После Ширина: | Высота: | Размер: 28 KiB |
|
@ -45,6 +45,7 @@ export type FeatureFlagName =
|
|||
| "CancellationFlow"
|
||||
| "ConfirmCancellation"
|
||||
| "FirstDataBrokerRemovalFixedEmail"
|
||||
| "DiscountCouponNextThreeMonths"
|
||||
| "LatestScanDateCsatSurvey"
|
||||
| "HowItWorksPage"
|
||||
| "AdditionalRemovalStatuses";
|
||||
|
|
Загрузка…
Ссылка в новой задаче