From 9f6fb8a387e5d967760ed2860e4ce9a4b4ffac88 Mon Sep 17 00:00:00 2001 From: Dhruwang Jariwala <67850763+Dhruwang@users.noreply.github.com> Date: Wed, 26 Feb 2025 17:06:16 +0530 Subject: [PATCH] feat: optional back button (#4813) Co-authored-by: Johannes <72809645+jobenjada@users.noreply.github.com> Co-authored-by: Anshuman Pandey <54475686+pandeymangg@users.noreply.github.com> --- .../[environmentId]/environment/lib/survey.ts | 1 + apps/web/app/lib/templates.ts | 1 + .../components/response-options-card.tsx | 11 +++++++++++ apps/web/modules/survey/lib/survey.ts | 1 + .../survey/templates/lib/minimal-survey.ts | 1 + .../hide-back-button/hide-back-button.webp | Bin 0 -> 49222 bytes docs/mint.json | 3 ++- .../general-features/hide-back-button.mdx | 11 +++++++++++ .../migration.sql | 2 ++ .../migration.sql | 2 ++ packages/database/schema.prisma | 1 + packages/lib/survey/service.ts | 1 + .../lib/survey/tests/__mock__/survey.mock.ts | 1 + .../general/question-conditional.tsx | 17 +++++++++++++++++ .../surveys/src/components/general/survey.tsx | 1 + .../components/questions/address-question.tsx | 4 +++- .../src/components/questions/cal-question.tsx | 4 +++- .../components/questions/consent-question.tsx | 4 +++- .../questions/contact-info-question.tsx | 4 +++- .../src/components/questions/cta-question.tsx | 4 +++- .../src/components/questions/date-question.tsx | 4 +++- .../questions/file-upload-question.tsx | 4 +++- .../components/questions/matrix-question.tsx | 4 +++- .../multiple-choice-multi-question.tsx | 4 +++- .../multiple-choice-single-question.tsx | 4 +++- .../src/components/questions/nps-question.tsx | 8 ++++++-- .../questions/open-text-question.tsx | 4 +++- .../questions/picture-selection-question.tsx | 4 +++- .../components/questions/ranking-question.tsx | 4 +++- .../components/questions/rating-question.tsx | 8 ++++++-- packages/types/js.ts | 1 + packages/types/surveys/types.ts | 7 +++++-- 32 files changed, 110 insertions(+), 20 deletions(-) create mode 100644 docs/images/xm-and-surveys/surveys/general-features/hide-back-button/hide-back-button.webp create mode 100644 docs/xm-and-surveys/surveys/general-features/hide-back-button.mdx create mode 100644 packages/database/migration/20250226080646_set_response_updated_at_default/migration.sql create mode 100644 packages/database/migration/20250226080718_add_is_back_button_hidden_to_survey/migration.sql diff --git a/apps/web/app/api/v1/client/[environmentId]/environment/lib/survey.ts b/apps/web/app/api/v1/client/[environmentId]/environment/lib/survey.ts index 895814f133..275d965747 100644 --- a/apps/web/app/api/v1/client/[environmentId]/environment/lib/survey.ts +++ b/apps/web/app/api/v1/client/[environmentId]/environment/lib/survey.ts @@ -61,6 +61,7 @@ export const getSurveysForEnvironmentState = reactCache( displayLimit: true, displayOption: true, hiddenFields: true, + isBackButtonHidden: true, triggers: { select: { actionClass: { diff --git a/apps/web/app/lib/templates.ts b/apps/web/app/lib/templates.ts index d4ae069ea2..f8042c6ad5 100644 --- a/apps/web/app/lib/templates.ts +++ b/apps/web/app/lib/templates.ts @@ -7064,5 +7064,6 @@ export const previewSurvey = (projectName: string, t: TFnType) => { triggers: [], showLanguageSwitch: false, followUps: [], + isBackButtonHidden: false, } as TSurvey; }; diff --git a/apps/web/modules/survey/editor/components/response-options-card.tsx b/apps/web/modules/survey/editor/components/response-options-card.tsx index 57fb9e4bce..08b29056c8 100644 --- a/apps/web/modules/survey/editor/components/response-options-card.tsx +++ b/apps/web/modules/survey/editor/components/response-options-card.tsx @@ -205,6 +205,10 @@ export const ResponseOptionsCard = ({ } }; + const handleHideBackButtonToggle = () => { + setLocalSurvey({ ...localSurvey, isBackButtonHidden: !localSurvey.isBackButtonHidden }); + }; + useEffect(() => { if (!!localSurvey.surveyClosedMessage) { setSurveyClosedMessage({ @@ -515,6 +519,13 @@ export const ResponseOptionsCard = ({ )} + diff --git a/apps/web/modules/survey/lib/survey.ts b/apps/web/modules/survey/lib/survey.ts index ba35bc36bf..af624428db 100644 --- a/apps/web/modules/survey/lib/survey.ts +++ b/apps/web/modules/survey/lib/survey.ts @@ -41,6 +41,7 @@ export const selectSurvey = { pin: true, resultShareKey: true, showLanguageSwitch: true, + isBackButtonHidden: true, languages: { select: { default: true, diff --git a/apps/web/modules/survey/templates/lib/minimal-survey.ts b/apps/web/modules/survey/templates/lib/minimal-survey.ts index 91d9cd0ebf..968a517b6e 100644 --- a/apps/web/modules/survey/templates/lib/minimal-survey.ts +++ b/apps/web/modules/survey/templates/lib/minimal-survey.ts @@ -41,4 +41,5 @@ export const getMinimalSurvey = (t: TFnType): TSurvey => ({ isSingleResponsePerEmailEnabled: false, variables: [], followUps: [], + isBackButtonHidden: false, }); diff --git a/docs/images/xm-and-surveys/surveys/general-features/hide-back-button/hide-back-button.webp b/docs/images/xm-and-surveys/surveys/general-features/hide-back-button/hide-back-button.webp new file mode 100644 index 0000000000000000000000000000000000000000..88c1a8bca3556bb6f98a00b4622c8af0669655f8 GIT binary patch literal 49222 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 J?* ) : question.type === TSurveyQuestionTypeEnum.MultipleChoiceSingle ? ( ) : question.type === TSurveyQuestionTypeEnum.MultipleChoiceMulti ? ( ) : question.type === TSurveyQuestionTypeEnum.NPS ? ( ) : question.type === TSurveyQuestionTypeEnum.CTA ? ( ) : question.type === TSurveyQuestionTypeEnum.Rating ? ( ) : question.type === TSurveyQuestionTypeEnum.Consent ? ( ) : question.type === TSurveyQuestionTypeEnum.Date ? ( ) : question.type === TSurveyQuestionTypeEnum.PictureSelection ? ( ) : question.type === TSurveyQuestionTypeEnum.FileUpload ? ( ) : question.type === TSurveyQuestionTypeEnum.Cal ? ( ) : question.type === TSurveyQuestionTypeEnum.Matrix ? ( ) : question.type === TSurveyQuestionTypeEnum.Address ? ( ) : question.type === TSurveyQuestionTypeEnum.Ranking ? ( ) : question.type === TSurveyQuestionTypeEnum.ContactInfo ? ( ) : null; } diff --git a/packages/surveys/src/components/general/survey.tsx b/packages/surveys/src/components/general/survey.tsx index 1b4982d9bf..2ecda6ba2c 100644 --- a/packages/surveys/src/components/general/survey.tsx +++ b/packages/surveys/src/components/general/survey.tsx @@ -399,6 +399,7 @@ export function Survey({ languageCode={selectedLanguage} autoFocusEnabled={autoFocusEnabled} currentQuestionId={questionId} + isBackButtonHidden={localSurvey.isBackButtonHidden} /> ) ); diff --git a/packages/surveys/src/components/questions/address-question.tsx b/packages/surveys/src/components/questions/address-question.tsx index bd8c51aa0a..388e3f39f3 100644 --- a/packages/surveys/src/components/questions/address-question.tsx +++ b/packages/surveys/src/components/questions/address-question.tsx @@ -25,6 +25,7 @@ interface AddressQuestionProps { setTtc: (ttc: TResponseTtc) => void; currentQuestionId: TSurveyQuestionId; autoFocusEnabled: boolean; + isBackButtonHidden: boolean; } export function AddressQuestion({ @@ -40,6 +41,7 @@ export function AddressQuestion({ setTtc, currentQuestionId, autoFocusEnabled, + isBackButtonHidden, }: AddressQuestionProps) { const [startTime, setStartTime] = useState(performance.now()); const isMediaAvailable = question.imageUrl || question.videoUrl; @@ -179,7 +181,7 @@ export function AddressQuestion({ isLastQuestion={isLastQuestion} />
- {!isFirstQuestion && ( + {!isFirstQuestion && !isBackButtonHidden && ( void; autoFocusEnabled: boolean; currentQuestionId: TSurveyQuestionId; + isBackButtonHidden: boolean; } export function CalQuestion({ @@ -38,6 +39,7 @@ export function CalQuestion({ ttc, setTtc, currentQuestionId, + isBackButtonHidden, }: CalQuestionProps) { const [startTime, setStartTime] = useState(performance.now()); const isMediaAvailable = question.imageUrl || question.videoUrl; @@ -95,7 +97,7 @@ export function CalQuestion({ /> )}
- {!isFirstQuestion && ( + {!isFirstQuestion && !isBackButtonHidden && ( { diff --git a/packages/surveys/src/components/questions/consent-question.tsx b/packages/surveys/src/components/questions/consent-question.tsx index 4576978ae0..e5b1a5a822 100644 --- a/packages/surveys/src/components/questions/consent-question.tsx +++ b/packages/surveys/src/components/questions/consent-question.tsx @@ -23,6 +23,7 @@ interface ConsentQuestionProps { setTtc: (ttc: TResponseTtc) => void; autoFocusEnabled: boolean; currentQuestionId: TSurveyQuestionId; + isBackButtonHidden: boolean; } export function ConsentQuestion({ @@ -38,6 +39,7 @@ export function ConsentQuestion({ setTtc, currentQuestionId, autoFocusEnabled, + isBackButtonHidden, }: ConsentQuestionProps) { const [startTime, setStartTime] = useState(performance.now()); const isMediaAvailable = question.imageUrl || question.videoUrl; @@ -126,7 +128,7 @@ export function ConsentQuestion({ isLastQuestion={isLastQuestion} />
- {!isFirstQuestion && ( + {!isFirstQuestion && !isBackButtonHidden && ( void; currentQuestionId: TSurveyQuestionId; autoFocusEnabled: boolean; + isBackButtonHidden: boolean; } export function ContactInfoQuestion({ @@ -40,6 +41,7 @@ export function ContactInfoQuestion({ setTtc, currentQuestionId, autoFocusEnabled, + isBackButtonHidden, }: ContactInfoQuestionProps) { const [startTime, setStartTime] = useState(performance.now()); const isMediaAvailable = question.imageUrl || question.videoUrl; @@ -181,7 +183,7 @@ export function ContactInfoQuestion({ buttonLabel={getLocalizedValue(question.buttonLabel, languageCode)} isLastQuestion={isLastQuestion} /> - {!isFirstQuestion && ( + {!isFirstQuestion && !isBackButtonHidden && ( void; autoFocusEnabled: boolean; currentQuestionId: TSurveyQuestionId; + isBackButtonHidden: boolean; } export function CTAQuestion({ @@ -37,6 +38,7 @@ export function CTAQuestion({ setTtc, autoFocusEnabled, currentQuestionId, + isBackButtonHidden, }: CTAQuestionProps) { const [startTime, setStartTime] = useState(performance.now()); const isMediaAvailable = question.imageUrl || question.videoUrl; @@ -92,7 +94,7 @@ export function CTAQuestion({ )}
- {!isFirstQuestion && ( + {!isFirstQuestion && !isBackButtonHidden && ( void; autoFocusEnabled: boolean; currentQuestionId: TSurveyQuestionId; + isBackButtonHidden: boolean; } function CalendarIcon() { @@ -91,6 +92,7 @@ export function DateQuestion({ setTtc, ttc, currentQuestionId, + isBackButtonHidden, }: DateQuestionProps) { const [startTime, setStartTime] = useState(performance.now()); const [errorMessage, setErrorMessage] = useState(""); @@ -272,7 +274,7 @@ export function DateQuestion({ isLastQuestion={isLastQuestion} buttonLabel={getLocalizedValue(question.buttonLabel, languageCode)} /> - {!isFirstQuestion && ( + {!isFirstQuestion && !isBackButtonHidden && ( void; autoFocusEnabled: boolean; currentQuestionId: TSurveyQuestionId; + isBackButtonHidden: boolean; } export function FileUploadQuestion({ @@ -44,6 +45,7 @@ export function FileUploadQuestion({ ttc, setTtc, currentQuestionId, + isBackButtonHidden, }: FileUploadQuestionProps) { const [startTime, setStartTime] = useState(performance.now()); const isMediaAvailable = question.imageUrl || question.videoUrl; @@ -110,7 +112,7 @@ export function FileUploadQuestion({ buttonLabel={getLocalizedValue(question.buttonLabel, languageCode)} isLastQuestion={isLastQuestion} /> - {!isFirstQuestion && ( + {!isFirstQuestion && !isBackButtonHidden && ( void; currentQuestionId: TSurveyQuestionId; + isBackButtonHidden: boolean; } export function MatrixQuestion({ @@ -38,6 +39,7 @@ export function MatrixQuestion({ ttc, setTtc, currentQuestionId, + isBackButtonHidden, }: MatrixQuestionProps) { const [startTime, setStartTime] = useState(performance.now()); const isMediaAvailable = question.imageUrl || question.videoUrl; @@ -210,7 +212,7 @@ export function MatrixQuestion({ isLastQuestion={isLastQuestion} tabIndex={isCurrent ? 0 : -1} /> - {!isFirstQuestion && ( + {!isFirstQuestion && !isBackButtonHidden && ( void; autoFocusEnabled: boolean; currentQuestionId: TSurveyQuestionId; + isBackButtonHidden: boolean; } export function MultipleChoiceMultiQuestion({ @@ -39,6 +40,7 @@ export function MultipleChoiceMultiQuestion({ setTtc, autoFocusEnabled, currentQuestionId, + isBackButtonHidden, }: MultipleChoiceMultiProps) { const [startTime, setStartTime] = useState(performance.now()); const isMediaAvailable = question.imageUrl || question.videoUrl; @@ -293,7 +295,7 @@ export function MultipleChoiceMultiQuestion({ buttonLabel={getLocalizedValue(question.buttonLabel, languageCode)} isLastQuestion={isLastQuestion} /> - {!isFirstQuestion && ( + {!isFirstQuestion && !isBackButtonHidden && ( void; autoFocusEnabled: boolean; currentQuestionId: TSurveyQuestionId; + isBackButtonHidden: boolean; } export function MultipleChoiceSingleQuestion({ @@ -39,6 +40,7 @@ export function MultipleChoiceSingleQuestion({ setTtc, autoFocusEnabled, currentQuestionId, + isBackButtonHidden, }: MultipleChoiceSingleProps) { const [startTime, setStartTime] = useState(performance.now()); const [otherSelected, setOtherSelected] = useState(false); @@ -250,7 +252,7 @@ export function MultipleChoiceSingleQuestion({ buttonLabel={getLocalizedValue(question.buttonLabel, languageCode)} isLastQuestion={isLastQuestion} /> - {!isFirstQuestion && ( + {!isFirstQuestion && !isBackButtonHidden && ( void; autoFocusEnabled: boolean; currentQuestionId: TSurveyQuestionId; + isBackButtonHidden: boolean; } export function NPSQuestion({ @@ -38,6 +39,7 @@ export function NPSQuestion({ ttc, setTtc, currentQuestionId, + isBackButtonHidden, }: NPSQuestionProps) { const [startTime, setStartTime] = useState(performance.now()); const [hoveredNumber, setHoveredNumber] = useState(-1); @@ -153,14 +155,16 @@ export function NPSQuestion({
- {!question.required && ( + {question.required ? ( + <> + ) : ( )} - {!isFirstQuestion && ( + {!isFirstQuestion && !isBackButtonHidden && ( void; autoFocusEnabled: boolean; currentQuestionId: TSurveyQuestionId; + isBackButtonHidden: boolean; } export function OpenTextQuestion({ @@ -40,6 +41,7 @@ export function OpenTextQuestion({ setTtc, autoFocusEnabled, currentQuestionId, + isBackButtonHidden, }: OpenTextQuestionProps) { const [startTime, setStartTime] = useState(performance.now()); const [currentLength, setCurrentLength] = useState(value.length || 0); @@ -161,7 +163,7 @@ export function OpenTextQuestion({ isLastQuestion={isLastQuestion} onClick={() => {}} /> - {!isFirstQuestion && ( + {!isFirstQuestion && !isBackButtonHidden && ( void; autoFocusEnabled: boolean; currentQuestionId: TSurveyQuestionId; + isBackButtonHidden: boolean; } export function PictureSelectionQuestion({ @@ -39,6 +40,7 @@ export function PictureSelectionQuestion({ ttc, setTtc, currentQuestionId, + isBackButtonHidden, }: PictureSelectionProps) { const [startTime, setStartTime] = useState(performance.now()); const isMediaAvailable = question.imageUrl || question.videoUrl; @@ -209,7 +211,7 @@ export function PictureSelectionQuestion({ buttonLabel={getLocalizedValue(question.buttonLabel, languageCode)} isLastQuestion={isLastQuestion} /> - {!isFirstQuestion && ( + {!isFirstQuestion && !isBackButtonHidden && ( void; autoFocusEnabled: boolean; currentQuestionId: TSurveyQuestionId; + isBackButtonHidden: boolean; } export function RankingQuestion({ @@ -44,6 +45,7 @@ export function RankingQuestion({ setTtc, autoFocusEnabled, currentQuestionId, + isBackButtonHidden, }: RankingQuestionProps) { const [startTime, setStartTime] = useState(performance.now()); const isCurrent = question.id === currentQuestionId; @@ -272,7 +274,7 @@ export function RankingQuestion({ buttonLabel={getLocalizedValue(question.buttonLabel, languageCode)} isLastQuestion={isLastQuestion} /> - {!isFirstQuestion && ( + {!isFirstQuestion && !isBackButtonHidden && ( void; autoFocusEnabled: boolean; currentQuestionId: TSurveyQuestionId; + isBackButtonHidden: boolean; } export function RatingQuestion({ @@ -51,6 +52,7 @@ export function RatingQuestion({ ttc, setTtc, currentQuestionId, + isBackButtonHidden, }: RatingQuestionProps) { const [hoveredNumber, setHoveredNumber] = useState(0); const [startTime, setStartTime] = useState(performance.now()); @@ -259,7 +261,9 @@ export function RatingQuestion({
- {!question.required && ( + {question.required ? ( + <> + ) : ( )}
- {!isFirstQuestion && ( + {!isFirstQuestion && !isBackButtonHidden && ( null); diff --git a/packages/types/surveys/types.ts b/packages/types/surveys/types.ts index e4bbc3c553..a541555266 100644 --- a/packages/types/surveys/types.ts +++ b/packages/types/surveys/types.ts @@ -868,13 +868,14 @@ export const ZSurvey = z singleUse: ZSurveySingleUse.nullable(), isVerifyEmailEnabled: z.boolean(), isSingleResponsePerEmailEnabled: z.boolean(), + isBackButtonHidden: z.boolean(), pin: z.string().min(4, { message: "PIN must be a four digit number" }).nullish(), resultShareKey: z.string().nullable(), displayPercentage: z.number().min(0.01).max(100).nullable(), languages: z.array(ZSurveyLanguage), }) .superRefine((survey, ctx) => { - const { questions, languages, welcomeCard, endings } = survey; + const { questions, languages, welcomeCard, endings, isBackButtonHidden } = survey; let multiLangIssue: z.IssueData | null; @@ -943,7 +944,9 @@ export const ZSurvey = z ]; const fieldsToValidate = - questionIndex === 0 ? initialFieldsToValidate : [...initialFieldsToValidate, "backButtonLabel"]; + questionIndex === 0 || isBackButtonHidden + ? initialFieldsToValidate + : [...initialFieldsToValidate, "backButtonLabel"]; for (const field of fieldsToValidate) { // Skip label validation for consent questions as its called checkbox label