From 0da6c5c90a88864900cfd436577e11ed26d832ec Mon Sep 17 00:00:00 2001 From: iacopolea Date: Fri, 11 Apr 2025 10:53:14 +0200 Subject: [PATCH 01/36] refactor: remove unused interfaces and components from ExpressWizard and related files --- src/app/store.ts | 2 - src/common/Pages.tsx | 10 - src/common/apifetch.ts | 60 -- src/common/components/BugStateIcon.tsx | 10 - .../ErrorBoundary/ErrorBoundaryPage.tsx | 20 +- src/common/components/HubspotModal.tsx | 62 -- src/common/components/HuspotProvider.tsx | 46 -- src/common/components/Meta.tsx | 2 +- .../components/NotesCard.tsx} | 2 +- .../PlanCreationInterface/index.tsx | 8 +- src/common/components/StickyContainer.tsx | 11 - src/common/components/helpTextMessage.tsx | 10 - .../components/navigation/asideNav/index.tsx | 11 +- .../navigation/header/MobileToggle.tsx | 13 - .../navigation/header/brandLogo.tsx | 2 +- src/common/components/tag/StatusTag.tsx | 47 -- src/common/dateFormatter.ts | 8 - src/common/getStrapiData.ts | 2 +- src/common/openUrl.tsx | 6 - src/common/utils.ts | 56 -- src/constants.ts | 12 - src/features/backoffice/config.ts | 9 +- src/features/backoffice/strapi.ts | 110 ---- src/features/campaigns/index.ts | 7 - .../campaignsFilter/campaignsFilterSlice.ts | 2 +- src/features/express/expressSlice.ts | 103 ---- src/features/modules/useRequestQuotation.ts | 3 +- src/features/navigation/actions.types.ts | 3 - src/features/navigation/utils.ts | 14 - src/features/uxFilters/index.ts | 2 +- src/hooks/useCampaignTemplates.ts | 54 -- src/hooks/useGTMevent.ts | 2 +- src/pages/Bugs/Content/BugPreview.tsx | 2 +- src/pages/Bugs/Content/BugsTable/types.ts | 2 +- src/pages/Bugs/Filters/CustomStatusFilter.tsx | 73 --- src/pages/Bugs/Filters/DeviceFilter.tsx | 52 -- src/pages/Bugs/Filters/DropdownLabel.tsx | 7 - src/pages/Bugs/Filters/ItemGroup.tsx | 31 - src/pages/Bugs/Filters/OsFilter.tsx | 47 -- src/pages/Bugs/Filters/PriorityFilter.tsx | 56 -- .../Bugs/Filters/ReplicabilityFilter.tsx | 52 -- src/pages/Bugs/Filters/TagFilter.tsx | 59 -- src/pages/Bugs/Filters/TypeFilter.tsx | 50 -- src/pages/Bugs/Filters/UseCaseFilter.tsx | 54 -- src/pages/Bugs/Filters/index.tsx | 2 +- .../widgets/General/Methodology.tsx | 4 +- .../widgets/Insights/filters/useFilterData.ts | 2 +- .../widgetCards/FlipCard/FlipCardHeader.tsx | 2 +- src/pages/Dashboard/CardContainer.tsx | 12 - src/pages/Dashboard/campaigns-list/list.tsx | 2 - src/pages/Dashboard/filters/styledMenu.tsx | 9 - src/pages/Dashboard/filters/utils.tsx | 2 +- .../ActionModals/DiscardChangesModal.tsx | 54 -- src/pages/ExpressWizard/cardDivider.tsx | 7 - src/pages/ExpressWizard/drawer.tsx | 196 ------- src/pages/ExpressWizard/fields/confirm.ts | 3 - src/pages/ExpressWizard/fields/how.ts | 24 - src/pages/ExpressWizard/fields/what.ts | 5 - src/pages/ExpressWizard/fields/when.ts | 4 - src/pages/ExpressWizard/fields/whereApp.ts | 10 - src/pages/ExpressWizard/fields/whereWeb.ts | 16 - src/pages/ExpressWizard/fields/who.ts | 7 - src/pages/ExpressWizard/getLanguage.ts | 49 -- src/pages/ExpressWizard/getPlatform.ts | 57 -- src/pages/ExpressWizard/index.tsx | 544 ------------------ .../ExpressWizard/mapToCampaignFields.tsx | 59 -- src/pages/ExpressWizard/planningModal.tsx | 138 ----- src/pages/ExpressWizard/projectDropdown.tsx | 80 --- .../ExpressWizard/steps/express-1/confirm.tsx | 151 ----- .../steps/express-1/confirm/browsers.tsx | 30 - .../steps/express-1/confirm/devices.tsx | 26 - .../express-1/confirm/operativeSystems.tsx | 24 - .../steps/express-1/confirm/whatConfirm.tsx | 61 -- .../steps/express-1/confirm/whereConfirm.tsx | 46 -- .../steps/express-1/confirm/whoConfirm.tsx | 54 -- .../express-1/forms/ConfirmationForm.tsx | 32 -- .../steps/express-1/forms/WhatForm.tsx | 26 - .../steps/express-1/forms/WhereForm.tsx | 44 -- .../steps/express-1/forms/WhoForm.tsx | 38 -- .../ExpressWizard/steps/express-1/index.ts | 49 -- .../ExpressWizard/steps/express-1/what.tsx | 175 ------ .../steps/express-1/where/outOfScope.tsx | 95 --- .../steps/express-1/where/styled.tsx | 19 - .../steps/express-1/whereApp.tsx | 251 -------- .../steps/express-1/whereWeb.tsx | 367 ------------ .../ExpressWizard/steps/express-1/who.tsx | 157 ----- .../steps/express-2/ModalUseCase/index.tsx | 3 - .../express-2/ModalUseCase/modalUseCase.tsx | 132 ----- .../ModalUseCase/modalUseCaseBody.tsx | 153 ----- .../ModalUseCase/modalUseCaseHeader.tsx | 72 --- .../ModalUseCase/modalUseCaseHelp.tsx | 157 ----- .../ModalUseCase/modalUseCaseTabLayout.tsx | 213 ------- .../ModalUseCase/templateDropdown.tsx | 94 --- .../express-2/ModalUseCase/useCaseDetails.tsx | 19 - .../ModalUseCase/useCaseDetailsDropdown.tsx | 166 ------ .../ModalUseCase/useCaseDetailsEditor.tsx | 160 ------ .../ModalUseCase/useCaseDetailsLink.tsx | 72 --- .../ModalUseCase/useCaseDetailsTitle.tsx | 62 -- .../ExpressWizard/steps/express-2/confirm.tsx | 161 ------ .../steps/express-2/confirm/browsers.tsx | 30 - .../steps/express-2/confirm/devices.tsx | 26 - .../steps/express-2/confirm/howConfirm.tsx | 62 -- .../express-2/confirm/operativeSystems.tsx | 24 - .../steps/express-2/confirm/whatConfirm.tsx | 62 -- .../steps/express-2/confirm/whereConfirm.tsx | 46 -- .../steps/express-2/confirm/whoConfirm.tsx | 54 -- .../express-2/forms/ConfirmationForm.tsx | 32 -- .../steps/express-2/forms/HowForm.tsx | 38 -- .../steps/express-2/forms/WhatForm.tsx | 26 - .../steps/express-2/forms/WhereForm.tsx | 44 -- .../steps/express-2/forms/WhoForm.tsx | 38 -- .../ExpressWizard/steps/express-2/how.tsx | 313 ---------- .../steps/express-2/howLoading.tsx | 19 - .../ExpressWizard/steps/express-2/index.ts | 59 -- .../ExpressWizard/steps/express-2/what.tsx | 175 ------ .../steps/express-2/where/outOfScope.tsx | 91 --- .../steps/express-2/where/styled.tsx | 19 - .../steps/express-2/whereApp.tsx | 252 -------- .../steps/express-2/whereWeb.tsx | 360 ------------ .../ExpressWizard/steps/express-2/who.tsx | 156 ----- .../steps/express-3/ModalUseCase/index.tsx | 3 - .../express-3/ModalUseCase/modalUseCase.tsx | 132 ----- .../ModalUseCase/modalUseCaseBody.tsx | 153 ----- .../ModalUseCase/modalUseCaseHeader.tsx | 72 --- .../ModalUseCase/modalUseCaseHelp.tsx | 156 ----- .../ModalUseCase/modalUseCaseTabLayout.tsx | 213 ------- .../express-3/ModalUseCase/useCaseDetails.tsx | 19 - .../ModalUseCase/useCaseDetailsEditor.tsx | 151 ----- .../ModalUseCase/useCaseDetailsLink.tsx | 72 --- .../ModalUseCase/useCaseDetailsTitle.tsx | 59 -- .../ExpressWizard/steps/express-3/confirm.tsx | 97 ---- .../steps/express-3/confirm/ageRange.tsx | 35 -- .../steps/express-3/confirm/devices.tsx | 26 - .../express-3/confirm/digitalization.tsx | 40 -- .../steps/express-3/confirm/gender.tsx | 34 -- .../steps/express-3/confirm/howConfirm.tsx | 62 -- .../steps/express-3/confirm/language.tsx | 24 - .../express-3/confirm/operativeSystems.tsx | 24 - .../steps/express-3/confirm/whatConfirm.tsx | 61 -- .../steps/express-3/confirm/whereConfirm.tsx | 43 -- .../steps/express-3/confirm/whoConfirm.tsx | 48 -- .../express-3/forms/ConfirmationForm.tsx | 32 -- .../steps/express-3/forms/HowForm.tsx | 38 -- .../steps/express-3/forms/WhatForm.tsx | 26 - .../steps/express-3/forms/WhereForm.tsx | 44 -- .../steps/express-3/forms/WhoForm.tsx | 38 -- .../ExpressWizard/steps/express-3/how.tsx | 342 ----------- .../steps/express-3/howLoading.tsx | 19 - .../ExpressWizard/steps/express-3/index.ts | 59 -- .../ExpressWizard/steps/express-3/what.tsx | 137 ----- .../steps/express-3/where/outOfScope.tsx | 90 --- .../steps/express-3/where/styled.tsx | 19 - .../steps/express-3/whereApp.tsx | 255 -------- .../steps/express-3/whereWeb.tsx | 207 ------- .../ExpressWizard/steps/express-3/who.tsx | 346 ----------- .../steps/express-4/ModalUseCase/index.tsx | 3 - .../express-4/ModalUseCase/modalUseCase.tsx | 132 ----- .../ModalUseCase/modalUseCaseBody.tsx | 153 ----- .../ModalUseCase/modalUseCaseHeader.tsx | 72 --- .../ModalUseCase/modalUseCaseHelp.tsx | 156 ----- .../ModalUseCase/modalUseCaseTabLayout.tsx | 213 ------- .../express-4/ModalUseCase/useCaseDetails.tsx | 19 - .../ModalUseCase/useCaseDetailsEditor.tsx | 151 ----- .../ModalUseCase/useCaseDetailsLink.tsx | 72 --- .../ModalUseCase/useCaseDetailsTitle.tsx | 59 -- .../ExpressWizard/steps/express-4/confirm.tsx | 100 ---- .../steps/express-4/confirm/ageRange.tsx | 33 -- .../steps/express-4/confirm/devices.tsx | 26 - .../express-4/confirm/digitalization.tsx | 40 -- .../steps/express-4/confirm/gender.tsx | 34 -- .../steps/express-4/confirm/howConfirm.tsx | 62 -- .../steps/express-4/confirm/language.tsx | 24 - .../express-4/confirm/operativeSystems.tsx | 24 - .../steps/express-4/confirm/whatConfirm.tsx | 61 -- .../steps/express-4/confirm/whereConfirm.tsx | 43 -- .../steps/express-4/confirm/whoConfirm.tsx | 48 -- .../express-4/forms/ConfirmationForm.tsx | 32 -- .../steps/express-4/forms/HowForm.tsx | 38 -- .../steps/express-4/forms/WhatForm.tsx | 26 - .../steps/express-4/forms/WhereForm.tsx | 44 -- .../steps/express-4/forms/WhoForm.tsx | 38 -- .../ExpressWizard/steps/express-4/how.tsx | 339 ----------- .../steps/express-4/howLoading.tsx | 19 - .../ExpressWizard/steps/express-4/index.ts | 59 -- .../ExpressWizard/steps/express-4/what.tsx | 137 ----- .../steps/express-4/where/outOfScope.tsx | 95 --- .../steps/express-4/where/styled.tsx | 19 - .../steps/express-4/whereApp.tsx | 255 -------- .../steps/express-4/whereWeb.tsx | 205 ------- .../ExpressWizard/steps/express-4/who.tsx | 346 ----------- src/pages/ExpressWizard/steps/thankYou.tsx | 103 ---- src/pages/ExpressWizard/steps/types.ts | 8 - src/pages/ExpressWizard/steps/useSteps.tsx | 75 --- src/pages/ExpressWizard/wizardCol.tsx | 10 - src/pages/ExpressWizard/wizardHeader.tsx | 92 --- .../ExpressWizard/wizardInitialValues.tsx | 40 -- src/pages/ExpressWizard/wizardModel.tsx | 20 - src/pages/ExpressWizard/wizardSubmit.tsx | 221 ------- .../Collection/components/CardBackground.tsx | 13 - .../Collection/components/GrapeCheckbox.tsx | 82 --- .../hooks/usePublishInsight.tsx | 50 -- .../Manual/components/ScrollingContainer.tsx | 20 - .../Plan/summary/components/ActivityInfo.tsx | 2 +- src/pages/Service/ServiceContactUsCta.tsx | 16 - src/pages/Service/ServiceExpressCta.tsx | 37 -- src/pages/Service/ServiceTimeline.tsx | 348 ----------- src/pages/Service/SingleServicePageHeader.tsx | 129 ----- src/pages/Service/index.tsx | 112 ---- src/pages/Service/strapi.ts | 34 -- src/pages/Services/Categories.tsx | 70 --- src/pages/Services/CategoriesNav.tsx | 108 ---- src/pages/Services/Category.tsx | 93 --- src/pages/Services/LoadingServices.tsx | 41 -- src/pages/Services/index.tsx | 97 ---- .../Services/services-list/ServiceCol.tsx | 6 - .../Services/services-list/serviceItem.tsx | 125 ---- .../Services/services-list/serviceTip.tsx | 31 - src/pages/Videos/parts/InfoRow.tsx | 31 - 218 files changed, 35 insertions(+), 15849 deletions(-) delete mode 100644 src/common/apifetch.ts delete mode 100644 src/common/components/BugStateIcon.tsx delete mode 100644 src/common/components/HubspotModal.tsx delete mode 100644 src/common/components/HuspotProvider.tsx rename src/{pages/ExpressWizard/notesCard.tsx => common/components/NotesCard.tsx} (97%) delete mode 100644 src/common/components/StickyContainer.tsx delete mode 100644 src/common/components/helpTextMessage.tsx delete mode 100644 src/common/components/tag/StatusTag.tsx delete mode 100644 src/common/dateFormatter.ts delete mode 100644 src/common/openUrl.tsx delete mode 100644 src/features/express/expressSlice.ts delete mode 100644 src/features/navigation/actions.types.ts delete mode 100644 src/features/navigation/utils.ts delete mode 100644 src/hooks/useCampaignTemplates.ts delete mode 100644 src/pages/Bugs/Filters/CustomStatusFilter.tsx delete mode 100644 src/pages/Bugs/Filters/DeviceFilter.tsx delete mode 100644 src/pages/Bugs/Filters/DropdownLabel.tsx delete mode 100644 src/pages/Bugs/Filters/ItemGroup.tsx delete mode 100644 src/pages/Bugs/Filters/OsFilter.tsx delete mode 100644 src/pages/Bugs/Filters/PriorityFilter.tsx delete mode 100644 src/pages/Bugs/Filters/ReplicabilityFilter.tsx delete mode 100644 src/pages/Bugs/Filters/TagFilter.tsx delete mode 100644 src/pages/Bugs/Filters/TypeFilter.tsx delete mode 100644 src/pages/Bugs/Filters/UseCaseFilter.tsx delete mode 100644 src/pages/Dashboard/CardContainer.tsx delete mode 100644 src/pages/Dashboard/filters/styledMenu.tsx delete mode 100644 src/pages/ExpressWizard/ActionModals/DiscardChangesModal.tsx delete mode 100644 src/pages/ExpressWizard/cardDivider.tsx delete mode 100644 src/pages/ExpressWizard/drawer.tsx delete mode 100644 src/pages/ExpressWizard/fields/confirm.ts delete mode 100644 src/pages/ExpressWizard/fields/how.ts delete mode 100644 src/pages/ExpressWizard/fields/what.ts delete mode 100644 src/pages/ExpressWizard/fields/when.ts delete mode 100644 src/pages/ExpressWizard/fields/whereApp.ts delete mode 100644 src/pages/ExpressWizard/fields/whereWeb.ts delete mode 100644 src/pages/ExpressWizard/fields/who.ts delete mode 100644 src/pages/ExpressWizard/getLanguage.ts delete mode 100644 src/pages/ExpressWizard/getPlatform.ts delete mode 100644 src/pages/ExpressWizard/index.tsx delete mode 100644 src/pages/ExpressWizard/mapToCampaignFields.tsx delete mode 100644 src/pages/ExpressWizard/planningModal.tsx delete mode 100644 src/pages/ExpressWizard/projectDropdown.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-1/confirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-1/confirm/browsers.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-1/confirm/devices.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-1/confirm/operativeSystems.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-1/confirm/whatConfirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-1/confirm/whereConfirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-1/confirm/whoConfirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-1/forms/ConfirmationForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-1/forms/WhatForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-1/forms/WhereForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-1/forms/WhoForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-1/index.ts delete mode 100644 src/pages/ExpressWizard/steps/express-1/what.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-1/where/outOfScope.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-1/where/styled.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-1/whereApp.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-1/whereWeb.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-1/who.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/ModalUseCase/index.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/ModalUseCase/modalUseCase.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/ModalUseCase/modalUseCaseBody.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/ModalUseCase/modalUseCaseHeader.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/ModalUseCase/modalUseCaseHelp.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/ModalUseCase/modalUseCaseTabLayout.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/ModalUseCase/templateDropdown.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/ModalUseCase/useCaseDetails.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/ModalUseCase/useCaseDetailsDropdown.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/ModalUseCase/useCaseDetailsEditor.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/ModalUseCase/useCaseDetailsLink.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/ModalUseCase/useCaseDetailsTitle.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/confirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/confirm/browsers.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/confirm/devices.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/confirm/howConfirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/confirm/operativeSystems.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/confirm/whatConfirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/confirm/whereConfirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/confirm/whoConfirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/forms/ConfirmationForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/forms/HowForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/forms/WhatForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/forms/WhereForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/forms/WhoForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/how.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/howLoading.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/index.ts delete mode 100644 src/pages/ExpressWizard/steps/express-2/what.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/where/outOfScope.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/where/styled.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/whereApp.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/whereWeb.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-2/who.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/ModalUseCase/index.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/ModalUseCase/modalUseCase.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/ModalUseCase/modalUseCaseBody.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/ModalUseCase/modalUseCaseHeader.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/ModalUseCase/modalUseCaseHelp.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/ModalUseCase/modalUseCaseTabLayout.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/ModalUseCase/useCaseDetails.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/ModalUseCase/useCaseDetailsEditor.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/ModalUseCase/useCaseDetailsLink.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/ModalUseCase/useCaseDetailsTitle.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/confirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/confirm/ageRange.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/confirm/devices.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/confirm/digitalization.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/confirm/gender.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/confirm/howConfirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/confirm/language.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/confirm/operativeSystems.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/confirm/whatConfirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/confirm/whereConfirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/confirm/whoConfirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/forms/ConfirmationForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/forms/HowForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/forms/WhatForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/forms/WhereForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/forms/WhoForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/how.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/howLoading.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/index.ts delete mode 100644 src/pages/ExpressWizard/steps/express-3/what.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/where/outOfScope.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/where/styled.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/whereApp.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/whereWeb.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-3/who.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/ModalUseCase/index.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/ModalUseCase/modalUseCase.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/ModalUseCase/modalUseCaseBody.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/ModalUseCase/modalUseCaseHeader.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/ModalUseCase/modalUseCaseHelp.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/ModalUseCase/modalUseCaseTabLayout.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/ModalUseCase/useCaseDetails.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/ModalUseCase/useCaseDetailsEditor.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/ModalUseCase/useCaseDetailsLink.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/ModalUseCase/useCaseDetailsTitle.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/confirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/confirm/ageRange.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/confirm/devices.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/confirm/digitalization.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/confirm/gender.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/confirm/howConfirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/confirm/language.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/confirm/operativeSystems.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/confirm/whatConfirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/confirm/whereConfirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/confirm/whoConfirm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/forms/ConfirmationForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/forms/HowForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/forms/WhatForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/forms/WhereForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/forms/WhoForm.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/how.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/howLoading.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/index.ts delete mode 100644 src/pages/ExpressWizard/steps/express-4/what.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/where/outOfScope.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/where/styled.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/whereApp.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/whereWeb.tsx delete mode 100644 src/pages/ExpressWizard/steps/express-4/who.tsx delete mode 100644 src/pages/ExpressWizard/steps/thankYou.tsx delete mode 100644 src/pages/ExpressWizard/steps/types.ts delete mode 100644 src/pages/ExpressWizard/steps/useSteps.tsx delete mode 100644 src/pages/ExpressWizard/wizardCol.tsx delete mode 100644 src/pages/ExpressWizard/wizardHeader.tsx delete mode 100644 src/pages/ExpressWizard/wizardInitialValues.tsx delete mode 100644 src/pages/ExpressWizard/wizardModel.tsx delete mode 100644 src/pages/ExpressWizard/wizardSubmit.tsx delete mode 100644 src/pages/Insights/Collection/components/CardBackground.tsx delete mode 100644 src/pages/Insights/Collection/components/GrapeCheckbox.tsx delete mode 100644 src/pages/Insights/InsightsDrawer/hooks/usePublishInsight.tsx delete mode 100644 src/pages/Manual/components/ScrollingContainer.tsx delete mode 100644 src/pages/Service/ServiceContactUsCta.tsx delete mode 100644 src/pages/Service/ServiceExpressCta.tsx delete mode 100644 src/pages/Service/ServiceTimeline.tsx delete mode 100644 src/pages/Service/SingleServicePageHeader.tsx delete mode 100644 src/pages/Service/index.tsx delete mode 100644 src/pages/Service/strapi.ts delete mode 100644 src/pages/Services/Categories.tsx delete mode 100644 src/pages/Services/CategoriesNav.tsx delete mode 100644 src/pages/Services/Category.tsx delete mode 100644 src/pages/Services/LoadingServices.tsx delete mode 100644 src/pages/Services/index.tsx delete mode 100644 src/pages/Services/services-list/ServiceCol.tsx delete mode 100644 src/pages/Services/services-list/serviceItem.tsx delete mode 100644 src/pages/Services/services-list/serviceTip.tsx delete mode 100644 src/pages/Videos/parts/InfoRow.tsx diff --git a/src/app/store.ts b/src/app/store.ts index d947a0541..72ee872c1 100644 --- a/src/app/store.ts +++ b/src/app/store.ts @@ -4,7 +4,6 @@ import { unguessApiSlice } from 'src/features/api/apiTags'; import { strapiSlice } from '../features/backoffice/strapi'; import bugsPageReducer from '../features/bugsPage/bugsPageSlice'; import filterReducer from '../features/campaignsFilter/campaignsFilterSlice'; -import expressReducer from '../features/express/expressSlice'; import navigationReducer from '../features/navigation/navigationSlice'; import planModulesReducer from '../features/planModules'; import userReducer from '../features/user/userSlice'; @@ -17,7 +16,6 @@ export const store = configureStore({ navigation: navigationReducer, workspaces: workspaceReducer, filters: filterReducer, - express: expressReducer, bugsPage: bugsPageReducer, uxFilters: uxFilterReducer, planModules: planModulesReducer, diff --git a/src/common/Pages.tsx b/src/common/Pages.tsx index 3b7414cd7..dbf64772b 100644 --- a/src/common/Pages.tsx +++ b/src/common/Pages.tsx @@ -22,8 +22,6 @@ import Manual from 'src/pages/Manual'; import MediaNotFound from 'src/pages/NotFound/MediaNotFound'; import NotFound from 'src/pages/NotFound/NotFound'; import Plan from 'src/pages/Plan'; -import Service from 'src/pages/Service'; -import Catalog from 'src/pages/Services'; import Template from 'src/pages/Template'; import Templates from 'src/pages/Templates'; import Video from 'src/pages/Video'; @@ -80,14 +78,6 @@ const Pages = () => { path={`/${langPrefix}/campaigns/:campaignId/bugs/:bugId`} element={} /> - } - /> - } - /> } diff --git a/src/common/apifetch.ts b/src/common/apifetch.ts deleted file mode 100644 index a65161972..000000000 --- a/src/common/apifetch.ts +++ /dev/null @@ -1,60 +0,0 @@ -import HttpError from './HttpError'; - -const apifetch = async ({ - endpoint, - method = 'GET', - body, - params, - token, - paramType, -}: { - endpoint: string; - method?: string; - body?: object; - params?: object; - token?: string; - paramType?: string; -}) => { - let currentToken = token; - - if (process.env.REACT_APP_DEFAULT_TOKEN) - currentToken = process.env.REACT_APP_DEFAULT_TOKEN; - - const requestHeaders: HeadersInit = new Headers(); - requestHeaders.set('Content-Type', 'application/json'); - - if (currentToken) { - requestHeaders.set('Authorization', `Bearer ${currentToken}`); - } - - let query = ''; - if (params && Object.keys(params).length) { - const urlps = new URLSearchParams(); - Object.entries(params).forEach(([key, value]) => { - if (paramType === 'filterBy') { - urlps.set(`filterBy[${key}]`, value); - } else { - urlps.set(key, value); - } - }); - query = `?${urlps.toString()}`; - } - const fetchData: { method: string; headers: Headers; body?: string } = { - method, - headers: requestHeaders, - }; - if (body) { - fetchData.body = JSON.stringify(body); - } - const res = await fetch( - `${process.env.REACT_APP_API_URL}${endpoint}${query}`, - fetchData - ); - if (res.ok) { - return res.json(); - } - const json = await res.json(); - throw new HttpError(res.status, res.statusText, json.message || json.err); -}; - -export default apifetch; diff --git a/src/common/components/BugStateIcon.tsx b/src/common/components/BugStateIcon.tsx deleted file mode 100644 index 637442c67..000000000 --- a/src/common/components/BugStateIcon.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { ReactComponent as CircleFill } from 'src/assets/icons/circle-full-fill.svg'; -import styled from 'styled-components'; - -export const BugStateIcon = styled(CircleFill)<{ size?: 'regular' | 'small' }>` - width: auto; - height: 100%; - max-height: ${(p) => (p.size === 'small' ? '9px' : '11px')}; - overflow: visible; - stroke-width: 2; -`; diff --git a/src/common/components/ErrorBoundary/ErrorBoundaryPage.tsx b/src/common/components/ErrorBoundary/ErrorBoundaryPage.tsx index 12bac2db3..21a300e35 100644 --- a/src/common/components/ErrorBoundary/ErrorBoundaryPage.tsx +++ b/src/common/components/ErrorBoundary/ErrorBoundaryPage.tsx @@ -1,18 +1,26 @@ import { + Button, Col, Grid, + MD, + Paragraph, Row, theme, XXL, - MD, - Paragraph, - Button, } from '@appquality/unguess-design-system'; -import { ReactComponent as Illustration } from 'src/assets/errorBoundaryPage.svg'; import { useTranslation } from 'react-i18next'; -import { Logged } from 'src/features/templates/Logged'; -import { Container } from 'src/pages/ExpressWizard/wizardHeader'; +import { ReactComponent as Illustration } from 'src/assets/errorBoundaryPage.svg'; import { GoogleTagManager } from 'src/common/GoogleTagManager'; +import { Logged } from 'src/features/templates/Logged'; +import styled from 'styled-components'; + +const Container = styled.div` + display: flex; + flex-direction: row; + align-items: center; + justify-content: flex-start; + width: 100%; +`; const ErrorBoundaryPage = () => { const { t } = useTranslation(); diff --git a/src/common/components/HubspotModal.tsx b/src/common/components/HubspotModal.tsx deleted file mode 100644 index d323502e0..000000000 --- a/src/common/components/HubspotModal.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { ModalFullScreen } from '@appquality/unguess-design-system'; -import { useTranslation } from 'react-i18next'; -import styled from 'styled-components'; -import HubspotProvider from './HuspotProvider'; - -const MeetingsContainer = styled.div` - max-height: 90%; - overflow: hidden; -`; - -const checkHubSpotUrl = (url: string): string | boolean => { - try { - const urlObj = new URL(url); - if (urlObj.hostname !== 'meetings.hubspot.com') return false; - - const params = new URLSearchParams(urlObj.search); - - if (!params.has('embed')) params.append('embed', 'true'); - - return `${urlObj.origin}${urlObj.pathname}?${params.toString()}`; - } catch (e) { - // Not a valid url - return false; - } -}; - -interface HubspotModalArgs { - meetingUrl?: string; - isOpen?: boolean; - onClose?: () => void; -} - -const HubspotModal = (props: HubspotModalArgs) => { - const { t } = useTranslation(); - const { isOpen, onClose, meetingUrl } = props; - - const url = !meetingUrl ? false : checkHubSpotUrl(meetingUrl); - - if (!url) return null; - - return isOpen ? ( - - - {t('__CATALOG_PAGE_BUTTON_CONTACT_LABEL')} - - - - - - - ) : null; -}; - -export { HubspotModal }; diff --git a/src/common/components/HuspotProvider.tsx b/src/common/components/HuspotProvider.tsx deleted file mode 100644 index a45428d7d..000000000 --- a/src/common/components/HuspotProvider.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React, { createContext, useContext, useMemo } from 'react'; -import useScript from 'src/hooks/useScript'; - -export interface HubspotContextProps { - readonly loaded: boolean; // Is Hubspot script loaded - readonly error: boolean; // Is Hubspot failed to loaded -} - -export const HubspotContext = createContext({ - loaded: false, - error: false, -}); - -export const useHubspotContext = () => useContext(HubspotContext); - -interface HubspotProviderProps { - readonly async?: boolean; - readonly addToHead?: boolean; - readonly removeOnCleanup?: boolean; - readonly children: React.ReactNode; -} - -const HubspotProvider = ({ - async, - addToHead, - removeOnCleanup, - children, -}: HubspotProviderProps) => { - // Attach hubspot script to the document - const [loaded, error] = useScript( - 'https://static.hsappstatic.net/MeetingsEmbed/ex/MeetingsEmbedCode.js', - async, - addToHead, - removeOnCleanup - ); - - const HSProviderValue = useMemo(() => ({ loaded, error }), [loaded, error]); - - return ( - - {children} - - ); -}; - -export default HubspotProvider; diff --git a/src/common/components/Meta.tsx b/src/common/components/Meta.tsx index 175808738..d8b5b6075 100644 --- a/src/common/components/Meta.tsx +++ b/src/common/components/Meta.tsx @@ -3,7 +3,7 @@ import styled from 'styled-components'; export type MetaSize = 'medium' | 'large'; -export interface MetaArgs extends React.HTMLAttributes { +interface MetaArgs extends React.HTMLAttributes { size?: MetaSize; children?: React.ReactNode; color?: string; diff --git a/src/pages/ExpressWizard/notesCard.tsx b/src/common/components/NotesCard.tsx similarity index 97% rename from src/pages/ExpressWizard/notesCard.tsx rename to src/common/components/NotesCard.tsx index aee68de26..500ed754b 100644 --- a/src/pages/ExpressWizard/notesCard.tsx +++ b/src/common/components/NotesCard.tsx @@ -3,7 +3,7 @@ import { appTheme } from 'src/app/theme'; import { HTMLAttributes } from 'react'; import styled from 'styled-components'; -export const NotesTitle = styled(MD)` +const NotesTitle = styled(MD)` color: ${({ theme }) => theme.palette.teal[600]}; font-weight: ${({ theme }) => theme.fontWeights.medium}; display: flex; diff --git a/src/common/components/PlanCreationInterface/index.tsx b/src/common/components/PlanCreationInterface/index.tsx index a2d6c417d..f330c35e5 100644 --- a/src/common/components/PlanCreationInterface/index.tsx +++ b/src/common/components/PlanCreationInterface/index.tsx @@ -58,7 +58,7 @@ const RequirementsContainer = styled.div` } `; -export interface PlanCreationProps { +interface PlanCreationProps { isOpen: boolean; onClose: () => void; template: CpReqTemplate; @@ -242,11 +242,7 @@ const TemplateContent = ({ data }: { data: CpReqTemplate }) => { ); }; -export const NewPlanDrawer = ({ - onClose, - isOpen, - template, -}: PlanCreationProps) => { +const NewPlanDrawer = ({ onClose, isOpen, template }: PlanCreationProps) => { const { t } = useTranslation(); const handleClose = () => { diff --git a/src/common/components/StickyContainer.tsx b/src/common/components/StickyContainer.tsx deleted file mode 100644 index df06eba50..000000000 --- a/src/common/components/StickyContainer.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { ContainerCard } from '@appquality/unguess-design-system'; -import styled from 'styled-components'; - -export const StickyContainer = styled(ContainerCard)` - position: sticky; - top: ${({ theme }) => theme.space.md}; - z-index: 1; - padding: ${({ theme }) => theme.space.sm} - ${({ theme }) => theme.space.base * 4}px; - background-color: ${({ theme }) => theme.palette.white}; -`; diff --git a/src/common/components/helpTextMessage.tsx b/src/common/components/helpTextMessage.tsx deleted file mode 100644 index d2ebbcb51..000000000 --- a/src/common/components/helpTextMessage.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { Message } from '@appquality/unguess-design-system'; -import styled from 'styled-components'; - -export const HelpTextMessage = styled(Message)` - display: flex; - flex-direction: row; - align-items: center; - justify-content: flex-start; - margin-top: ${({ theme }) => theme.space.sm}; -`; diff --git a/src/common/components/navigation/asideNav/index.tsx b/src/common/components/navigation/asideNav/index.tsx index 87762928f..9b944fe19 100644 --- a/src/common/components/navigation/asideNav/index.tsx +++ b/src/common/components/navigation/asideNav/index.tsx @@ -1,7 +1,4 @@ -// TODO: Structure the menu in this components instead of using the children - import { - Anchor, ContainerCard, MD, Skeleton, @@ -11,7 +8,7 @@ import { Link } from 'react-scroll'; import { Divider } from 'src/common/components/divider'; import styled from 'styled-components'; -export const StickyNavContainer = styled(ContainerCard)` +const StickyNavContainer = styled(ContainerCard)` position: sticky; top: ${({ theme }) => theme.space.md}; z-index: 1; @@ -66,12 +63,6 @@ export const StickyNavItemLabel = styled(MD)` margin-bottom: ${({ theme }) => theme.space.xs}; `; -export const StickyNavItemExternal = styled(Anchor)` - display: block; - padding: ${({ theme }) => theme.space.sm} ${({ theme }) => theme.space.xs} - ${({ theme }) => theme.space.sm} ${({ theme }) => theme.space.md}; -`; - interface IAsideNav { containerId: string; isSpy?: boolean; diff --git a/src/common/components/navigation/header/MobileToggle.tsx b/src/common/components/navigation/header/MobileToggle.tsx index 5905dc13b..fd862365d 100644 --- a/src/common/components/navigation/header/MobileToggle.tsx +++ b/src/common/components/navigation/header/MobileToggle.tsx @@ -10,19 +10,6 @@ import { ReactComponent as MenuIcon } from 'src/assets/icons/menu-stroke.svg'; import { toggleSidebar } from 'src/features/navigation/navigationSlice'; import styled from 'styled-components'; -export const LogoIconContainer = styled(HeaderItem)` - margin-right: 2px; - border-right: none; - cursor: pointer; - @media (max-width: ${({ theme }) => theme.breakpoints.md}) { - right: 0; - left: 0; - margin-right: auto; - margin-left: auto; - position: absolute; - } -`; - const MenuItem = styled(HeaderItem)` ${(props) => retrieveComponentStyles('text.primary', props)}; @media (min-width: ${({ theme }) => theme.breakpoints.md}) { diff --git a/src/common/components/navigation/header/brandLogo.tsx b/src/common/components/navigation/header/brandLogo.tsx index b6ad69d10..1867b45bb 100644 --- a/src/common/components/navigation/header/brandLogo.tsx +++ b/src/common/components/navigation/header/brandLogo.tsx @@ -7,7 +7,7 @@ import { useNavigate } from 'react-router-dom'; import { ReactComponent as LogoFull } from 'src/assets/icons/logo.svg'; import styled from 'styled-components'; -export const LogoIconContainer = styled(HeaderItem)` +const LogoIconContainer = styled(HeaderItem)` margin-right: 2px; border-right: none; cursor: pointer; diff --git a/src/common/components/tag/StatusTag.tsx b/src/common/components/tag/StatusTag.tsx deleted file mode 100644 index 5094e83f4..000000000 --- a/src/common/components/tag/StatusTag.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { Tag } from '@appquality/unguess-design-system'; -import { useTranslation } from 'react-i18next'; -import { appTheme } from 'src/app/theme'; -import { CampaignStatus } from 'src/types'; -import { getStatusInfo } from '../utils/getStatusInfo'; - -interface StatusTagArgs extends React.HTMLAttributes { - status: CampaignStatus; - children?: React.ReactNode; - counter?: number | string; - isRound?: boolean; -} - -export const StatusTag = ({ - status, - children, - counter, - isRound, - ...props -}: StatusTagArgs) => { - const { t } = useTranslation(); - const statusInfo = getStatusInfo(status, t); - - return ( - - {typeof statusInfo.icon !== 'undefined' && ( - {statusInfo.icon} - )} - { - // children if passed, otherwise default text for normal pills and icon for round pills - children || (isRound ? statusInfo.icon : statusInfo.text) - } - {typeof counter !== 'undefined' && ( - - {counter.toString()} - - )} - - ); -}; diff --git a/src/common/dateFormatter.ts b/src/common/dateFormatter.ts deleted file mode 100644 index 2563dafac..000000000 --- a/src/common/dateFormatter.ts +++ /dev/null @@ -1,8 +0,0 @@ -export default (unformatted: string) => { - const d = new Date(unformatted); - return d.toLocaleString('it', { - year: 'numeric', - month: '2-digit', - day: '2-digit', - }); -}; diff --git a/src/common/getStrapiData.ts b/src/common/getStrapiData.ts index d6247cfc0..bde63b68d 100644 --- a/src/common/getStrapiData.ts +++ b/src/common/getStrapiData.ts @@ -9,7 +9,7 @@ import { import { StrapiIcon } from 'src/features/backoffice/strapi'; import { isDev } from './isDevEnvironment'; -export type StrapiResponse = +type StrapiResponse = | CategoryListResponse | CategoryResponse | ServiceListResponse diff --git a/src/common/openUrl.tsx b/src/common/openUrl.tsx deleted file mode 100644 index 914f8418e..000000000 --- a/src/common/openUrl.tsx +++ /dev/null @@ -1,6 +0,0 @@ -const openUrl = (url: string, options?: { newTab: boolean }): void => { - // eslint-disable-next-line security/detect-non-literal-fs-filename - window.open(url, options && options.newTab ? '_blank' : undefined); -}; - -export { openUrl }; diff --git a/src/common/utils.ts b/src/common/utils.ts index 0641370da..dc1e8cac2 100644 --- a/src/common/utils.ts +++ b/src/common/utils.ts @@ -1,66 +1,10 @@ import { getColor } from '@appquality/unguess-design-system'; -import { extractStrapiData, StrapiResponse } from './getStrapiData'; export const prepareGravatar = (url: string, size?: number) => `${url}?s=${size || 48}`; -export const toggleChat = (open: boolean) => { - if ( - typeof HubSpotConversations !== 'undefined' && - HubSpotConversations.widget - ) { - if (open) { - HubSpotConversations.widget.refresh(); - } else { - HubSpotConversations.widget.remove(); - } - } -}; - export const isMinMedia = (breakpoint: string) => window.matchMedia(`only screen and (min-width: ${breakpoint})`).matches; -export const isMaxMedia = (breakpoint: string) => - window.matchMedia(`only screen and (max-width: ${breakpoint})`).matches; - -export const checkHubspotURL = (url: string) => { - try { - const urlObj = new URL(url); - return urlObj.hostname === 'meetings.hubspot.com'; - } catch (e) { - return false; - } -}; - -export const getLocalizedStrapiData = ({ - item, - language, -}: { - item: StrapiResponse; - language: string; -}): any => { - // Extract the data from the item - const data = extractStrapiData(item); - - // Verify if localizations are available - if (data && data.localizations) { - // Extract the localized items - const localizations = extractStrapiData(data.localizations); - - // Filter localizations by language - const localizedItem = localizations.find( - (localization: any) => localization.locale === language - ); - - if (localizedItem) { - // Return the localized item - return localizedItem; - } - } - - // Return the default language item (EN) - return data; -}; - export const getColorWithAlpha = (hue: string, alpha: number) => getColor(hue, undefined, undefined, alpha); diff --git a/src/constants.ts b/src/constants.ts index 8eb4fc2ed..0624533ef 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -7,15 +7,10 @@ today.setMinutes(59); today.setSeconds(0); export const PLAN_MINIMUM_DATE = addBusinessDays(today, 1); -export const FEATURE_FLAG_EXPRESS = 'exploratory-express'; export const FEATURE_FLAG_SKY_JOTFORM = 'sky-custom-jotform'; export const FEATURE_FLAG_CATALOG = 'catalog-pages'; export const FEATURE_FLAG_TAGGING_TOOL = 'tagging-tool'; export const FEATURE_FLAG_CHANGE_MODULES_VARIANTS = 'change-modules-variants'; -export const EXPRESS_1_CAMPAIGN_TYPE_ID = 79; -export const EXPRESS_2_CAMPAIGN_TYPE_ID = 51; -export const EXPRESS_3_CAMPAIGN_TYPE_ID = 52; -export const EXPRESS_4_CAMPAIGN_TYPE_ID = 66; export const BASE_DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss'; export const ZAPIER_WEBHOOK_TRIGGER = process.env.REACT_ZAPIER_WEBHOOK || @@ -29,20 +24,13 @@ export const DESKTOP_MAC = { id: 7, deviceType: 2 }; export const DESKTOP_WINDOWS = { id: 8, deviceType: 2 }; export const STRAPI_URL = process.env.REACT_APP_STRAPI_URL || ''; -export const DEFAULT_EXPRESS_REQUIRED_COINS = 1; export const SERVICES_SHOW_TIPS = true; -export const EXPRESS_USE_CASES_LIMIT = 5; export const DEFAULT_BUG_PRIORITY = { id: 3, name: 'medium', }; -export const EXPRESS_START_DATE_MAX_VALUE = 30; -export const EXPRESS_BUSINESS_DAYS_TO_ADD = 2; -export const EXPRESS_3_BUSINESS_DAYS_TO_ADD = 3; -export const EXPRESS_4_UX_TAGGING_BUSINESS_DAYS_TO_ADD = 5; - export const RELATIVE_DATE_FORMAT_OPTS: { [key: string]: { [key: string]: string }; } = { diff --git a/src/features/backoffice/config.ts b/src/features/backoffice/config.ts index 6451acc7c..1d1a124c8 100644 --- a/src/features/backoffice/config.ts +++ b/src/features/backoffice/config.ts @@ -4,14 +4,7 @@ const config: ConfigFile = { schemaFile: './openapi/documentation.json', apiFile: './strapi.ts', apiImport: 'strapiSlice', - filterEndpoints: [ - /services/i, - /categories/i, - /express/i, - /express-types/i, - /manuals/i, - /templates/i, - ], + filterEndpoints: [/categories/i, /manuals/i, /templates/i], outputFile: 'index.ts', exportName: 'unguessStrapi', hooks: true, diff --git a/src/features/backoffice/strapi.ts b/src/features/backoffice/strapi.ts index 10cb5a52b..a3f0bf48a 100644 --- a/src/features/backoffice/strapi.ts +++ b/src/features/backoffice/strapi.ts @@ -4,15 +4,8 @@ import { GetCategoriesApiResponse, GetCategoriesByIdApiArg, GetCategoriesByIdApiResponse, - GetExpressesApiArg, - GetExpressesApiResponse, - GetExpressTypesByIdApiArg, - GetExpressTypesByIdApiResponse, GetManualsApiArg, GetManualsApiResponse, - GetServicesApiArg, - GetServicesApiResponse, - GetServicesByIdApiResponse, GetTemplatesByIdApiResponse, } from '.'; @@ -23,15 +16,6 @@ interface GetFullServicesByIdArgs { filters?: object; } -interface GetServicesApiArgs extends GetServicesApiArg { - locale?: string; -} - -interface Geti18nServicesFeaturedArgs extends GetServicesApiArg { - filters?: object; - locale?: string; -} - interface Geti18nCategoriesArgs { locale?: string; populate?: string[] | object; @@ -44,17 +28,6 @@ interface Geti18nCategoryArgs extends GetCategoriesByIdApiArg { filters?: object; } -interface Geti18nExpressesApiArgs extends GetExpressesApiArg { - locale?: string; - filters?: object; -} - -interface Geti18nExpressTypesByIdApiArgs extends GetExpressTypesByIdApiArg { - locale?: string; - filters?: object; - populate?: string[] | object; -} - interface Geti18nManualsApiArgs extends Omit { locale?: string; filters?: object; @@ -77,52 +50,6 @@ export const strapiSlice = createApi({ paramsSerializer: (params) => stringify(params, { encodeValuesOnly: true }), }), endpoints: (builder) => ({ - geti18nServices: builder.query({ - query: (queryArg) => ({ - url: `/services`, - params: { - sort: queryArg.sort, - pagination: queryArg.pagination, - fields: queryArg.fields, - populate: queryArg.populate, - locale: queryArg.locale, - }, - }), - }), - getFullServicesById: builder.query< - GetServicesByIdApiResponse, - GetFullServicesByIdArgs - >({ - query: (queryArg) => { - let url = `/services/${queryArg.id}`; - const args: GetFullServicesByIdArgs = { - id: queryArg.id, - ...(queryArg.locale && { locale: queryArg.locale }), - ...(queryArg.populate && { populate: queryArg.populate }), - ...(queryArg.filters && { filters: queryArg.filters }), - }; - const params = stringify(args, { encodeValuesOnly: true }); - params ? (url += `?${params}`) : null; - return { url }; - }, - }), - geti18nServicesFeatured: builder.query< - GetServicesApiResponse, - Geti18nServicesFeaturedArgs - >({ - query: (queryArg) => { - let url = `/services`; - const args: Geti18nServicesFeaturedArgs = { - ...(queryArg.filters && { filters: queryArg.filters }), - ...(queryArg.locale && { locale: queryArg.locale }), - ...(queryArg.populate && { populate: queryArg.populate }), - ...(queryArg.pagination && { pagination: queryArg.pagination }), - }; - const params = stringify(args, { encodeValuesOnly: true }); - params ? (url += `?${params}`) : null; - return { url }; - }, - }), geti18nCategories: builder.query< GetCategoriesApiResponse, Geti18nCategoriesArgs @@ -155,38 +82,6 @@ export const strapiSlice = createApi({ return { url }; }, }), - geti18nExpressTypes: builder.query< - GetExpressesApiResponse, - Geti18nExpressesApiArgs - >({ - query: (queryArg) => { - let url = '/express-types/'; - const args = { - ...(queryArg.locale && { locale: queryArg.locale }), - ...(queryArg.filters && { populate: queryArg.filters }), - }; - const params = stringify(args, { encodeValuesOnly: true }); - params ? (url += `?${params}`) : null; - return { url }; - }, - }), - geti18nExpressTypesById: builder.query< - GetExpressTypesByIdApiResponse, - Geti18nExpressTypesByIdApiArgs - >({ - query: (queryArg) => { - let url = `/express-types/${queryArg.id}`; - const args: Geti18nCategoriesArgs = { - ...(queryArg.locale && { locale: queryArg.locale }), - ...(queryArg.populate && { populate: queryArg.populate }), - ...(queryArg.filters && { filters: queryArg.filters }), - }; - const params = stringify(args, { encodeValuesOnly: true }); - params ? (url += `?${params}`) : null; - return { url }; - }, - }), - geti18nManuals: builder.query( { query: (queryArg) => { @@ -249,13 +144,8 @@ export interface TagItem { } export const { - useGetFullServicesByIdQuery, - useGeti18nServicesQuery, - useGeti18nServicesFeaturedQuery, useGeti18nCategoriesQuery, useGetFullCategoriesByIdQuery, - useGeti18nExpressTypesQuery, - useGeti18nExpressTypesByIdQuery, useGeti18nManualsQuery, useGetFullTemplatesByIdQuery, } = strapiSlice; diff --git a/src/features/campaigns/index.ts b/src/features/campaigns/index.ts index e6d718d8c..aa5a49d16 100644 --- a/src/features/campaigns/index.ts +++ b/src/features/campaigns/index.ts @@ -48,13 +48,6 @@ export const selectFilteredCampaigns = ( return true; }); -export const selectGroupedCampaigns = (campaigns: Campaign[]) => - campaigns.reduce((acc: Array, campaign) => { - acc[campaign.project.id] = acc[campaign.project.id] || []; - acc[campaign.project.id].push(campaign); - return acc; - }, []); - export const selectStatuses = (campaigns: Campaign[]): Array => { const statuses = ['all']; diff --git a/src/features/campaignsFilter/campaignsFilterSlice.ts b/src/features/campaignsFilter/campaignsFilterSlice.ts index 8bf9f87c4..12e34c960 100644 --- a/src/features/campaignsFilter/campaignsFilterSlice.ts +++ b/src/features/campaignsFilter/campaignsFilterSlice.ts @@ -1,6 +1,6 @@ import { createSlice } from '@reduxjs/toolkit'; -export const StatusFilters = { +const StatusFilters = { All: 'all', Running: 'running', Completed: 'completed', diff --git a/src/features/express/expressSlice.ts b/src/features/express/expressSlice.ts deleted file mode 100644 index a10168012..000000000 --- a/src/features/express/expressSlice.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { createSlice } from '@reduxjs/toolkit'; -import { Project } from '../api'; - -export interface ExpressWizardState { - steps: { [key: string]: Step }; - expressTypeId: number; - templateId: number; - project?: Project; - projectLocked?: boolean; - isWizardOpen?: boolean; - isDrawerOpen?: boolean; - isUseCaseModalOpen?: boolean; - isDirty?: boolean; - currentStep?: number; -} - -export interface Step { - data: { [key: string]: string }; -} - -const initialState: ExpressWizardState = { - isWizardOpen: false, - isUseCaseModalOpen: false, - isDrawerOpen: false, - steps: {}, - projectLocked: false, - expressTypeId: 0, - templateId: 0, -}; - -const expressSlice = createSlice({ - name: 'express', - initialState, - reducers: { - openWizard: (state) => { - state.isWizardOpen = true; - }, - closeWizard: (state) => { - state.isWizardOpen = false; - }, - openDrawer: (state) => { - state.isDrawerOpen = true; - }, - closeDrawer: (state) => { - state.isDrawerOpen = false; - }, - openUseCaseModal: (state) => { - state.isUseCaseModalOpen = true; - }, - closeUseCaseModal: (state) => { - state.isUseCaseModalOpen = false; - }, - setCurrentStep: (state, action) => { - state.currentStep = action.payload; - }, - addStep: (state, action) => { - state.steps[action.payload.id] = action.payload; - }, - removeStep: (state, action) => { - delete state.steps[action.payload]; - }, - resetWizard: (state) => { - state.steps = {}; - state.project = undefined; - state.projectLocked = false; - }, - lockProject: (state) => { - state.projectLocked = true; - }, - setExpressProject: (state, action) => { - state.project = action.payload; - }, - setExpressTypeId: (state, action) => { - state.expressTypeId = action.payload; - }, - setExpressTemplateId: (state, action) => { - state.templateId = action.payload; - }, - resetExpressTypeId: (state) => { - state.expressTypeId = 0; - }, - }, -}); - -export const { - openWizard, - closeWizard, - openDrawer, - closeDrawer, - openUseCaseModal, - closeUseCaseModal, - setCurrentStep, - addStep, - removeStep, - resetWizard, - setExpressProject, - lockProject, - setExpressTypeId, - setExpressTemplateId, - resetExpressTypeId, -} = expressSlice.actions; - -export default expressSlice.reducer; diff --git a/src/features/modules/useRequestQuotation.ts b/src/features/modules/useRequestQuotation.ts index a003fcada..d62c2864f 100644 --- a/src/features/modules/useRequestQuotation.ts +++ b/src/features/modules/useRequestQuotation.ts @@ -5,7 +5,8 @@ import { useAppSelector } from 'src/app/hooks'; import { usePatchPlansByPidStatusMutation } from '../api'; import { useModuleConfiguration, useSubmit } from './useModuleConfiguration'; -export const REQUIRED_MODULES = ['title', 'dates', 'tasks'] as const; +const REQUIRED_MODULES = ['title', 'dates', 'tasks'] as const; + export const useRequestQuotation = () => { const [error, setError] = useState(null); const { planId } = useParams(); diff --git a/src/features/navigation/actions.types.ts b/src/features/navigation/actions.types.ts deleted file mode 100644 index acdab0f1e..000000000 --- a/src/features/navigation/actions.types.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const GET_PROJECTS = 'NAVIGATION/GET_PROJECTS'; -export const GET_WORKSPACE = 'NAVIGATION/GET_SINGLE_WORKSPACE'; -export const GET_WORKSPACES = 'NAVIGATION/GET_WORKSPACES'; diff --git a/src/features/navigation/utils.ts b/src/features/navigation/utils.ts deleted file mode 100644 index 2553d6eda..000000000 --- a/src/features/navigation/utils.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { RootState } from 'src/app/types'; -import { Workspace } from '../api'; - -export const selectActiveWorkspace = (state: RootState) => - state.navigation.activeWorkspace; - -export const isValidWorkspace = ( - workspace: Workspace, - workspaces: Workspace[] -): Workspace | false => { - const workspaceExists = workspaces.find((ws) => ws.id === workspace.id); - - return workspaceExists || false; -}; diff --git a/src/features/uxFilters/index.ts b/src/features/uxFilters/index.ts index d6573bc59..988475804 100644 --- a/src/features/uxFilters/index.ts +++ b/src/features/uxFilters/index.ts @@ -4,7 +4,7 @@ import { ClusterFilter, ClusterFilterType } from './clusterFilter'; import { SeverityFilter, SeverityFilterType } from './severityFilter'; import { InsightState, InsightStateType } from './insights'; -export interface FilterState { +interface FilterState { currentCampaign?: number; campaigns: { [campaign_id: string]: ClusterFilterType & diff --git a/src/hooks/useCampaignTemplates.ts b/src/hooks/useCampaignTemplates.ts deleted file mode 100644 index 0f02d60be..000000000 --- a/src/hooks/useCampaignTemplates.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { STRAPI_URL } from 'src/constants'; -import { useGetTemplatesQuery } from 'src/features/backoffice'; - -const useCampaignTemplates = () => { - const { data, isLoading, isError } = useGetTemplatesQuery({ - // @ts-ignore - populate: { - icon: '*', - Price: '*', - output: { - populate: '*', - }, - express: { - populate: '*', - }, - }, - sort: 'sort_order', - }); - return { - data: (data?.data || []) - .filter( - (item) => - // @ts-ignore - item.attributes?.express?.data?.attributes?.express_type?.data - ) - .map((item) => { - const iconUrl = item.attributes?.icon?.data?.attributes?.url; - - const output = item.attributes?.output?.map((o) => { - const oUrl = o.Icon?.data?.attributes?.url; - return { - text: o.Text, - iconUrl: oUrl ? `${STRAPI_URL}${oUrl}` : '', - }; - }); - - return { - templateId: item.id, - ...item.attributes, - icon: iconUrl ? `${STRAPI_URL}${iconUrl}` : '', - output: output || [], - expressId: Number( - // @ts-ignore - item.attributes?.express?.data?.attributes?.express_type?.data - ?.id || '0' - ), - }; - }), - isLoading, - isError, - }; -}; - -export { useCampaignTemplates }; diff --git a/src/hooks/useGTMevent.ts b/src/hooks/useGTMevent.ts index 1115515bf..ee7f928de 100644 --- a/src/hooks/useGTMevent.ts +++ b/src/hooks/useGTMevent.ts @@ -4,7 +4,7 @@ import { shallowEqual } from 'react-redux'; import { useAppSelector } from 'src/app/hooks'; import { useActiveWorkspace } from './useActiveWorkspace'; -export interface GTMEventData { +interface GTMEventData { event: string; category?: string; content?: string; diff --git a/src/pages/Bugs/Content/BugPreview.tsx b/src/pages/Bugs/Content/BugPreview.tsx index f992feef2..0b70f289d 100644 --- a/src/pages/Bugs/Content/BugPreview.tsx +++ b/src/pages/Bugs/Content/BugPreview.tsx @@ -24,7 +24,7 @@ import { BugCommentsDetail } from './components/BugCommentsDetails'; import BugHeader from './components/BugHeader'; import { BugPreviewContextProvider } from './context/BugPreviewContext'; -export const filtersHeight = 56; +const filtersHeight = 56; const DetailContainer = styled.div<{ isFetching?: boolean; diff --git a/src/pages/Bugs/Content/BugsTable/types.ts b/src/pages/Bugs/Content/BugsTable/types.ts index 88cdb2a42..33e894972 100644 --- a/src/pages/Bugs/Content/BugsTable/types.ts +++ b/src/pages/Bugs/Content/BugsTable/types.ts @@ -27,4 +27,4 @@ export type BugByStateType = { bugs: TableBugType[]; }; -export type UseCaseType = ItemOfArray; +type UseCaseType = ItemOfArray; diff --git a/src/pages/Bugs/Filters/CustomStatusFilter.tsx b/src/pages/Bugs/Filters/CustomStatusFilter.tsx deleted file mode 100644 index 6c6594bac..000000000 --- a/src/pages/Bugs/Filters/CustomStatusFilter.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { CounterMultiselect } from '@appquality/unguess-design-system'; -import { - getCurrentCampaignData, - getIsNaBugExcluded, - updateFilters, -} from 'src/features/bugsPage/bugsPageSlice'; -import { useTranslation } from 'react-i18next'; -import { useAppDispatch } from 'src/app/hooks'; -import { getCustomStatusInfo } from 'src/common/components/utils/getCustomStatusInfo'; -import { BugCustomStatus } from 'src/features/api'; -import { getExcludeNotABugInfo } from 'src/common/components/utils/getExcludeNotABugInfo'; -import { useFilterData } from '../Drawer/useFilterData'; - -export const CustomStatusFilter = () => { - const dispatch = useAppDispatch(); - const data = getCurrentCampaignData(); - const { counters } = useFilterData('customStatuses'); - const { t } = useTranslation(); - const currentIsNaBugExcluded = getIsNaBugExcluded(); - - if ( - !data || - !counters || - !data.customStatuses || - !data.customStatuses.available || - !data.customStatuses.available.length - ) - return null; - - const customStatusNotABugInfo = getExcludeNotABugInfo(t); - - const shallDisable = (item: BugCustomStatus): boolean => { - if (item.id !== customStatusNotABugInfo.customStatusId) - return !counters[item.id]; - if (currentIsNaBugExcluded) return currentIsNaBugExcluded; - return !counters[item.id]; - }; - - return ( -
- t(`Status ({{count}})`, { count }), - noItems: t('__BUGS_CUSTOM_STATUS_FILTER_ITEM_NO_ITEMS'), - }} - onChange={(selected) => { - dispatch( - updateFilters({ - filters: { - customStatuses: selected.map((item) => ({ - id: item.itemId, - name: item.label, - })), - }, - }) - ); - }} - options={data.customStatuses.available - .slice(0) - .reverse() - .map((item) => ({ - itemId: item.id, - label: getCustomStatusInfo(item.name as BugState, t).text, - disabled: shallDisable(item), - selected: data.customStatuses.selected - .map((i) => i.id) - .includes(item.id), - }))} - /> -
- ); -}; diff --git a/src/pages/Bugs/Filters/DeviceFilter.tsx b/src/pages/Bugs/Filters/DeviceFilter.tsx deleted file mode 100644 index d633ff5a7..000000000 --- a/src/pages/Bugs/Filters/DeviceFilter.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { CounterMultiselect } from '@appquality/unguess-design-system'; -import { - getCurrentCampaignData, - updateFilters, -} from 'src/features/bugsPage/bugsPageSlice'; -import { useTranslation } from 'react-i18next'; -import { useAppDispatch } from 'src/app/hooks'; - -export const DeviceFilter = () => { - const dispatch = useAppDispatch(); - const data = getCurrentCampaignData(); - const { t } = useTranslation(); - - if ( - !data || - !data.devices || - !data.devices.available || - !data.devices.available.length - ) - return null; - - const options = data.devices.available.map((item) => ({ - itemId: item.device, - label: item.device, - selected: data.devices.selected.map((i) => i.device).includes(item.device), - })); - - return ( -
- t(`Devices ({{count}})`, { count }), - noItems: t('__BUGS_DEVICES_FILTER_ITEM_NO_ITEMS'), - }} - onChange={(selected) => { - dispatch( - updateFilters({ - filters: { - devices: selected.map((item) => ({ - id: item.itemId, - device: item.label, - })), - }, - }) - ); - }} - options={options} - /> -
- ); -}; diff --git a/src/pages/Bugs/Filters/DropdownLabel.tsx b/src/pages/Bugs/Filters/DropdownLabel.tsx deleted file mode 100644 index f58dab631..000000000 --- a/src/pages/Bugs/Filters/DropdownLabel.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import styled from 'styled-components'; - -export const DropdownLabel = styled.div` - display: flex; - align-items: center; - column-gap: ${({ theme }) => theme.space.xs}; -`; diff --git a/src/pages/Bugs/Filters/ItemGroup.tsx b/src/pages/Bugs/Filters/ItemGroup.tsx deleted file mode 100644 index 7c54eb22f..000000000 --- a/src/pages/Bugs/Filters/ItemGroup.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import React, { ReactChild } from 'react'; -import styled from 'styled-components'; - -const ItemGroupWrapper = styled.div` - height: max-content; - width: 100%; - display: flex; - flex-direction: column; - align-items: start; - justify-content: start; -`; - -const TitleSpan = styled.span` - padding: ${({ theme }) => `${theme.space.md} ${theme.space.sm}`}; - font-weight: ${({ theme }) => theme.fontWeights.semibold}; -`; - -const ItemGroup = ({ - title, - children, -}: { - title: string | undefined; - children: ReactChild | ReactChild[]; -}) => ( - - {title || ''} - {children} - -); - -export default ItemGroup; diff --git a/src/pages/Bugs/Filters/OsFilter.tsx b/src/pages/Bugs/Filters/OsFilter.tsx deleted file mode 100644 index 7051f997b..000000000 --- a/src/pages/Bugs/Filters/OsFilter.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { CounterMultiselect } from '@appquality/unguess-design-system'; -import { - getCurrentCampaignData, - updateFilters, -} from 'src/features/bugsPage/bugsPageSlice'; -import { useTranslation } from 'react-i18next'; -import { useAppDispatch } from 'src/app/hooks'; - -export const OsFilter = () => { - const dispatch = useAppDispatch(); - const data = getCurrentCampaignData(); - const { t } = useTranslation(); - - if (!data || !data.os || !data.os.available || !data.os.available.length) - return null; - - const options = data.os.available.map((item) => ({ - itemId: item.os, - label: item.os, - selected: data.os.selected.map((i) => i.os).includes(item.os), - })); - - return ( -
- t(`OS ({{count}})`, { count }), - noItems: t('__BUGS_OS_FILTER_ITEM_NO_ITEMS'), - }} - onChange={(selected) => { - dispatch( - updateFilters({ - filters: { - os: selected.map((item) => ({ - id: item.itemId, - os: item.label, - })), - }, - }) - ); - }} - options={options} - /> -
- ); -}; diff --git a/src/pages/Bugs/Filters/PriorityFilter.tsx b/src/pages/Bugs/Filters/PriorityFilter.tsx deleted file mode 100644 index ab1167933..000000000 --- a/src/pages/Bugs/Filters/PriorityFilter.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { CounterMultiselect } from '@appquality/unguess-design-system'; -import { - getCurrentCampaignData, - updateFilters, -} from 'src/features/bugsPage/bugsPageSlice'; -import { useTranslation } from 'react-i18next'; -import { useAppDispatch } from 'src/app/hooks'; -import { getPriorityInfo } from 'src/common/components/utils/getPriorityInfo'; -import { useFilterData } from '../Drawer/useFilterData'; - -export const PriorityFilter = () => { - const dispatch = useAppDispatch(); - const data = getCurrentCampaignData(); - const { counters } = useFilterData('priorities'); - const { t } = useTranslation(); - - if ( - !data || - !counters || - !data.priorities || - !data.priorities.available || - !data.priorities.available.length - ) - return null; - - return ( -
- t(`Priority ({{count}})`, { count }), - noItems: t('__BUGS_PRIORITY_FILTER_ITEM_NO_ITEMS'), - }} - onChange={(selected) => { - dispatch( - updateFilters({ - filters: { - priorities: selected.map((item) => ({ - id: item.itemId, - name: item.label, - })), - }, - }) - ); - }} - options={data.priorities.available.map((item) => ({ - itemId: item.id, - label: getPriorityInfo(item.name as Priority, t).text, - icon: getPriorityInfo(item.name as Priority, t).icon, - disabled: !counters[item.id], - selected: data.priorities.selected.map((i) => i.id).includes(item.id), - }))} - /> -
- ); -}; diff --git a/src/pages/Bugs/Filters/ReplicabilityFilter.tsx b/src/pages/Bugs/Filters/ReplicabilityFilter.tsx deleted file mode 100644 index 1d8eaf8b8..000000000 --- a/src/pages/Bugs/Filters/ReplicabilityFilter.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { CounterMultiselect } from '@appquality/unguess-design-system'; -import { - getCurrentCampaignData, - updateFilters, -} from 'src/features/bugsPage/bugsPageSlice'; -import { useTranslation } from 'react-i18next'; -import { useAppDispatch } from 'src/app/hooks'; - -export const ReplicabilityFilter = () => { - const dispatch = useAppDispatch(); - const data = getCurrentCampaignData(); - const { t } = useTranslation(); - - if ( - !data || - !data.replicabilities || - !data.replicabilities.available || - !data.replicabilities.available.length - ) - return null; - - return ( -
- t(`Replicability ({{count}})`, { count }), - noItems: t('__BUGS_REPLICABILITY_FILTER_ITEM_NO_ITEMS'), - }} - onChange={(selected) => { - dispatch( - updateFilters({ - filters: { - replicabilities: selected.map((item) => ({ - id: item.itemId, - name: item.label, - })), - }, - }) - ); - }} - options={data.replicabilities.available.map((item) => ({ - itemId: item.id, - label: item.name, - selected: data.replicabilities.selected - .map((i) => i.id) - .includes(item.id), - }))} - /> -
- ); -}; diff --git a/src/pages/Bugs/Filters/TagFilter.tsx b/src/pages/Bugs/Filters/TagFilter.tsx deleted file mode 100644 index c151bd359..000000000 --- a/src/pages/Bugs/Filters/TagFilter.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { CounterMultiselect } from '@appquality/unguess-design-system'; -import { - getCurrentCampaignData, - updateFilters, -} from 'src/features/bugsPage/bugsPageSlice'; -import { useTranslation } from 'react-i18next'; -import { useAppDispatch } from 'src/app/hooks'; - -export const TagFilter = () => { - const dispatch = useAppDispatch(); - const data = getCurrentCampaignData(); - const { t } = useTranslation(); - - if ( - !data || - !data.tags || - !data.tags.available || - !data.tags.available.length - ) - return null; - - const options = data.tags.available.map((item) => ({ - itemId: item.tag_id, - label: item.display_name, - selected: data.tags.selected.map((i) => i.tag_id).includes(item.tag_id), - })); - - // Add no tags option - options.push({ - itemId: 'none', - label: t('__BUGS_TAGS_FILTER_ITEM_NO_TAGS'), - selected: data.tags.selected.map((i) => i.tag_id).includes('none'), - }); - - return ( -
- t(`Tags ({{count}})`, { count }), - noItems: t('__BUGS_TAGS_FILTER_ITEM_NO_ITEMS'), - }} - onChange={(selected) => { - dispatch( - updateFilters({ - filters: { - tags: selected.map((item) => ({ - tag_id: item.itemId, - display_name: item.label, - })), - }, - }) - ); - }} - options={options} - /> -
- ); -}; diff --git a/src/pages/Bugs/Filters/TypeFilter.tsx b/src/pages/Bugs/Filters/TypeFilter.tsx deleted file mode 100644 index a86c3ea79..000000000 --- a/src/pages/Bugs/Filters/TypeFilter.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { CounterMultiselect } from '@appquality/unguess-design-system'; -import { - getCurrentCampaignData, - updateFilters, -} from 'src/features/bugsPage/bugsPageSlice'; -import { useTranslation } from 'react-i18next'; -import { useAppDispatch } from 'src/app/hooks'; - -export const TypeFilter = () => { - const dispatch = useAppDispatch(); - const data = getCurrentCampaignData(); - const { t } = useTranslation(); - - if ( - !data || - !data.types || - !data.types.available || - !data.types.available.length - ) - return null; - - return ( -
- t(`Typology ({{count}})`, { count }), - noItems: t('__BUGS_TYPES_FILTER_ITEM_NO_ITEMS'), - }} - onChange={(selected) => { - dispatch( - updateFilters({ - filters: { - types: selected.map((item) => ({ - id: item.itemId, - name: item.label, - })), - }, - }) - ); - }} - options={data.types.available.map((item) => ({ - itemId: item.id, - label: item.name, - selected: data.types.selected.map((i) => i.id).includes(item.id), - }))} - /> -
- ); -}; diff --git a/src/pages/Bugs/Filters/UseCaseFilter.tsx b/src/pages/Bugs/Filters/UseCaseFilter.tsx deleted file mode 100644 index 91aeec990..000000000 --- a/src/pages/Bugs/Filters/UseCaseFilter.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { CounterMultiselect } from '@appquality/unguess-design-system'; -import { - getCurrentCampaignData, - updateFilters, -} from 'src/features/bugsPage/bugsPageSlice'; -import { useTranslation } from 'react-i18next'; -import { useAppDispatch } from 'src/app/hooks'; - -export const UseCaseFilter = () => { - const dispatch = useAppDispatch(); - const data = getCurrentCampaignData(); - const { t } = useTranslation(); - - if ( - !data || - !data.useCases || - !data.useCases.available || - !data.useCases.available.length - ) - return null; - - const options = data.useCases.available.map((item) => ({ - itemId: item.id, - label: item.title.full, - selected: data.useCases.selected.map((i) => i.id).includes(item.id), - })); - - return ( -
- t(`Use Cases ({{count}})`, { count }), - noItems: t('__BUGS_USECASES_FILTER_ITEM_NO_ITEMS'), - }} - onChange={(selected) => { - dispatch( - updateFilters({ - filters: { - useCases: selected.map((item) => ({ - id: item.itemId, - title: { - full: item.label, - }, - })), - }, - }) - ); - }} - options={options} - /> -
- ); -}; diff --git a/src/pages/Bugs/Filters/index.tsx b/src/pages/Bugs/Filters/index.tsx index 281fcdd16..d05892d6d 100644 --- a/src/pages/Bugs/Filters/index.tsx +++ b/src/pages/Bugs/Filters/index.tsx @@ -41,7 +41,7 @@ const HideOnMobile = styled.div` ${hideOnMobile} `; -export const FlexWrapper = styled.div<{ +const FlexWrapper = styled.div<{ orderXl?: number; hideOnMobile?: boolean; }>` diff --git a/src/pages/Campaign/useWidgets/Experience/widgets/General/Methodology.tsx b/src/pages/Campaign/useWidgets/Experience/widgets/General/Methodology.tsx index 287fc5af1..ce8619f7c 100644 --- a/src/pages/Campaign/useWidgets/Experience/widgets/General/Methodology.tsx +++ b/src/pages/Campaign/useWidgets/Experience/widgets/General/Methodology.tsx @@ -58,8 +58,6 @@ export const Methodology = ({ ...(!isPreview && { showAsCustomer: true }), }); - const servicesRoute = useLocalizeRoute(`services/#experience-optimization`); - if ( isLoading || cpIsLoading || @@ -143,7 +141,7 @@ export const Methodology = ({ - + {t('__CAMPAIGN_PAGE_METHODOLOGY_SERVICES_LINK')} diff --git a/src/pages/Campaign/useWidgets/Experience/widgets/Insights/filters/useFilterData.ts b/src/pages/Campaign/useWidgets/Experience/widgets/Insights/filters/useFilterData.ts index 7d89cedac..bda8d7e5f 100644 --- a/src/pages/Campaign/useWidgets/Experience/widgets/Insights/filters/useFilterData.ts +++ b/src/pages/Campaign/useWidgets/Experience/widgets/Insights/filters/useFilterData.ts @@ -4,7 +4,7 @@ import { useGetCampaignsByCidUxQuery } from 'src/features/api'; import { getSelectedUxFiltersIds } from 'src/features/uxFilters'; type Filter = 'clusters' | 'severities'; -export interface CounterItems { +interface CounterItems { [key: string | number]: number; } diff --git a/src/pages/Campaign/widgetCards/FlipCard/FlipCardHeader.tsx b/src/pages/Campaign/widgetCards/FlipCard/FlipCardHeader.tsx index 594befa3b..807de4a83 100644 --- a/src/pages/Campaign/widgetCards/FlipCard/FlipCardHeader.tsx +++ b/src/pages/Campaign/widgetCards/FlipCard/FlipCardHeader.tsx @@ -10,7 +10,7 @@ const FlipButton = styled(IconButton)` margin-left: ${(p) => p.theme.space.xs}; `; -export const FlipButtonContainer = styled.div<{ breakpoint: number }>` +const FlipButtonContainer = styled.div<{ breakpoint: number }>` display: none; @container (min-width: ${(p) => p.breakpoint}px) { display: flex; diff --git a/src/pages/Dashboard/CardContainer.tsx b/src/pages/Dashboard/CardContainer.tsx deleted file mode 100644 index 481d209bf..000000000 --- a/src/pages/Dashboard/CardContainer.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { Row } from '@appquality/unguess-design-system'; -import styled from 'styled-components'; - -export const StyledRow = styled(Row)``; - -export const CardsContainer = styled.div` - ${StyledRow} { - overflow-x: auto; - flex-direction: row; - flex-wrap: nowrap; - } -`; diff --git a/src/pages/Dashboard/campaigns-list/list.tsx b/src/pages/Dashboard/campaigns-list/list.tsx index 1fa647701..4b6244f97 100644 --- a/src/pages/Dashboard/campaigns-list/list.tsx +++ b/src/pages/Dashboard/campaigns-list/list.tsx @@ -47,7 +47,6 @@ const CardGroup = ({ items }: { items: Array }) => { - {/* */} {campaigns.map((campaign) => ( }) => { /> ))} - {/* */} {items.length > 4 && ( diff --git a/src/pages/Dashboard/filters/styledMenu.tsx b/src/pages/Dashboard/filters/styledMenu.tsx deleted file mode 100644 index 01e8a8c8c..000000000 --- a/src/pages/Dashboard/filters/styledMenu.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { Menu } from '@appquality/unguess-design-system'; -import styled from 'styled-components'; - -export const UgMenu = styled(Menu)` - @media (min-width: ${({ theme }) => theme.breakpoints.sm}) { - width: auto !important; - min-width: 100%; - } -`; diff --git a/src/pages/Dashboard/filters/utils.tsx b/src/pages/Dashboard/filters/utils.tsx index cae4c33ca..0e9c80a34 100644 --- a/src/pages/Dashboard/filters/utils.tsx +++ b/src/pages/Dashboard/filters/utils.tsx @@ -3,7 +3,7 @@ import { Span } from '@appquality/unguess-design-system'; export interface DropdownItems { [key: string]: DropdownItem; } -export interface DropdownItem { +interface DropdownItem { label: string; value: string; icon?: React.ReactElement; diff --git a/src/pages/ExpressWizard/ActionModals/DiscardChangesModal.tsx b/src/pages/ExpressWizard/ActionModals/DiscardChangesModal.tsx deleted file mode 100644 index 614b6ddb0..000000000 --- a/src/pages/ExpressWizard/ActionModals/DiscardChangesModal.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { - Button, - FooterItem, - Modal, - ModalClose, - retrieveComponentStyles, -} from '@appquality/unguess-design-system'; -import { useTranslation } from 'react-i18next'; -import { ReactComponent as AlertIcon } from 'src/assets/icons/alert-icon.svg'; -import styled from 'styled-components'; - -const DangerHeader = styled(Modal.Header)` - display: flex; - justify-content: flex-start; - align-items: center; - margin-left: ${({ theme }) => theme.space.xs}; - padding-left: ${({ theme }) => theme.space.xs}; - gap: ${({ theme }) => theme.space.xs}; - ${(props) => retrieveComponentStyles('text.danger', props)}; -`; - -const DiscardChangesModal = ({ - handleCancel, - onClose, -}: { - handleCancel: () => void; - onClose?: () => void; -}) => { - const { t } = useTranslation(); - return ( - - - - {t('__EXPRESS_WIZARD_CONFIRM_CLOSE_HEADER')} - - {t('__EXPRESS_WIZARD_CONFIRM_CLOSE_MESSAGE')} - - - - - - - - - - - ); -}; - -export default DiscardChangesModal; diff --git a/src/pages/ExpressWizard/cardDivider.tsx b/src/pages/ExpressWizard/cardDivider.tsx deleted file mode 100644 index b092a8c33..000000000 --- a/src/pages/ExpressWizard/cardDivider.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Divider } from 'src/common/components/divider'; -import styled from 'styled-components'; - -export const CardDivider = styled(Divider)` - background-color: ${({ theme }) => theme.palette.grey[200]}; - margin: ${({ theme }) => theme.space.base * 3}px 0; -`; diff --git a/src/pages/ExpressWizard/drawer.tsx b/src/pages/ExpressWizard/drawer.tsx deleted file mode 100644 index b39a86922..000000000 --- a/src/pages/ExpressWizard/drawer.tsx +++ /dev/null @@ -1,196 +0,0 @@ -import { - Button, - Drawer, - MD, - Paragraph, - Tag, - UnorderedList, - XL, - theme, -} from '@appquality/unguess-design-system'; -import { useEffect } from 'react'; -import { useTranslation } from 'react-i18next'; -import { useNavigate } from 'react-router-dom'; -import { useAppDispatch, useAppSelector } from 'src/app/hooks'; -import { toggleChat } from 'src/common/utils'; -import { TagItem } from 'src/features/backoffice/strapi'; -import { - closeDrawer, - resetExpressTypeId, - resetWizard, -} from 'src/features/express/expressSlice'; -import { useCampaignTemplateById } from 'src/hooks/useCampaignTemplateById'; -import { useSendGTMevent } from 'src/hooks/useGTMevent'; -import styled from 'styled-components'; -import { CardDivider } from './cardDivider'; -import { Notes, NotesTitle } from './notesCard'; -import { ProjectDropdown } from './projectDropdown'; - -const SelectTitle = styled(MD)` - padding-top: ${theme.space.base * 3}px; - margin-bottom: ${theme.space.base * 2}px; -`; - -const TagsContainer = styled.div` - margin-top: ${theme.space.base * 4}px; - display: flex; - flex-align: flex-start; - justify-content: flex-start; - flex-wrap: wrap; -`; - -const BodyTitle = styled(XL)` - margin-top: ${theme.space.xxs}; - margin-bottom: ${theme.space.sm}; -`; - -const StyledTag = styled(Tag)` - margin-right: ${theme.space.base * 2}px; - margin-bottom: ${theme.space.base * 2}px; - - &:last-child { - margin-right: 0; - margin-bottom: 0; - } -`; - -export const ExpressDrawer = ({ onCtaClick }: { onCtaClick: () => void }) => { - const { t } = useTranslation(); - const dispatch = useAppDispatch(); - const sendGTMEvent = useSendGTMevent(); - const navigate = useNavigate(); - const { isDrawerOpen, project, templateId } = useAppSelector( - (state) => state.express - ); - const { - data: template, - isLoading, - isError, - } = useCampaignTemplateById(templateId.toString()); - - const onClose = () => { - dispatch(resetWizard()); - dispatch(resetExpressTypeId()); - dispatch(closeDrawer()); - toggleChat(true); - }; - - useEffect(() => { - if (isDrawerOpen) { - sendGTMEvent({ - event: 'express_navigation', - category: template.slug, - content: 'drawer_open', - }); - } - }, [isDrawerOpen]); - - if (isError) { - return null; - } - return !isLoading && isDrawerOpen ? ( - { - sendGTMEvent({ - action: 'drawer_close', - event: 'express_navigation', - category: template.slug, - }); - onClose(); - }} - restoreFocus={false} - focusOnMount={false} - > - {t('__WIZARD_EXPRESS_HEADER_TITLE')} - - {template.title} - {template.description} - - {template.tags && - template.tags.length > 0 && - template.tags.map((tag: TagItem) => ( - - - {tag.label} - - {tag.label} - - ))} - {template.price && ( - - {template.price.icon && ( - - {template.price.label} - - )} - {template.price.label} - - )} - - - - {t('__WIZARD_EXPRESS_BODY_SELECT_PROJECT_TITLE')} - - - {template.requirements && - (template.requirements.description || template.requirements.list) && ( - - {t('__WIZARD_EXPRESS_BODY_NOTES_TITLE')} - - {template.requirements.description && ( - {template.requirements?.description} - )} - {template.requirements?.list && - template.requirements.list.length > 0 && ( - - {template.requirements?.list.map((reason) => ( - {reason.item} - ))} - - )} - - )} - - - - - - - - - - ) : null; -}; diff --git a/src/pages/ExpressWizard/fields/confirm.ts b/src/pages/ExpressWizard/fields/confirm.ts deleted file mode 100644 index 1b5e78261..000000000 --- a/src/pages/ExpressWizard/fields/confirm.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface ConfirmStep { - campaign_more_info?: string; -} diff --git a/src/pages/ExpressWizard/fields/how.ts b/src/pages/ExpressWizard/fields/how.ts deleted file mode 100644 index 5af22a936..000000000 --- a/src/pages/ExpressWizard/fields/how.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { UseCaseTemplate } from 'src/features/api/api'; - -export interface UseCase { - id: number; - title: string; - functionality?: UseCaseTemplate; - logged: boolean; - description: string; - link?: string; -} - -export const emptyUseCase: UseCase = { - id: 0, - title: '', - logged: false, - description: - '

Descrizione della funzionalità

Stai per testare la funzionalità “barra di ricerca” il cui scopo è quello di “cercare prodotti”

Azioni da compiere per validare il funzionamento

Per testare il funzionamento:

  • Usa la barra di ricerca per cercare contenuti all’interno del sito, sia attraverso stringhe parziali che totali.

  • Usa eventuali opzioni di filtro e ordinamento

Assicurati che
I contenuti trovati siano sempre coerenti con quanto desiderato, in base ai loro dettagli

', - link: '', -}; - -export interface HowStep { - test_description?: string; - use_cases?: UseCase[]; -} diff --git a/src/pages/ExpressWizard/fields/what.ts b/src/pages/ExpressWizard/fields/what.ts deleted file mode 100644 index cae750dbe..000000000 --- a/src/pages/ExpressWizard/fields/what.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface WhatStep { - campaign_name?: string; - campaign_reason?: string; - product_type?: string; -} diff --git a/src/pages/ExpressWizard/fields/when.ts b/src/pages/ExpressWizard/fields/when.ts deleted file mode 100644 index 886b68fc1..000000000 --- a/src/pages/ExpressWizard/fields/when.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface WhenStep { - campaign_date?: Date; - campaign_date_end?: Date; -} diff --git a/src/pages/ExpressWizard/fields/whereApp.ts b/src/pages/ExpressWizard/fields/whereApp.ts deleted file mode 100644 index 5793a0413..000000000 --- a/src/pages/ExpressWizard/fields/whereApp.ts +++ /dev/null @@ -1,10 +0,0 @@ -export interface WhereAppStep { - iOSLink?: string; - androidLink?: string; - isIOS?: boolean; - isAndroid?: boolean; - withSmartphone?: boolean; - withTablet?: boolean; - hasOutOfScope?: boolean; - outOfScope?: string; -} diff --git a/src/pages/ExpressWizard/fields/whereWeb.ts b/src/pages/ExpressWizard/fields/whereWeb.ts deleted file mode 100644 index f4c4b56e8..000000000 --- a/src/pages/ExpressWizard/fields/whereWeb.ts +++ /dev/null @@ -1,16 +0,0 @@ -export interface WhereWebStep { - link?: string; - - withSmartphone?: boolean; - withTablet?: boolean; - withDesktop?: boolean; - - customBrowser?: boolean; - customBrowserFilled?: boolean; - withChrome?: boolean; - withSafari?: boolean; - withFirefox?: boolean; - withEdge?: boolean; - hasOutOfScope?: boolean; - outOfScope?: string; -} diff --git a/src/pages/ExpressWizard/fields/who.ts b/src/pages/ExpressWizard/fields/who.ts deleted file mode 100644 index 72aadde9a..000000000 --- a/src/pages/ExpressWizard/fields/who.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface WhoStep { - campaign_language?: string; - age_range?: string; - gender?: string; - digital_literacy?: string; - target_size?: number; -} diff --git a/src/pages/ExpressWizard/getLanguage.ts b/src/pages/ExpressWizard/getLanguage.ts deleted file mode 100644 index a21904a8f..000000000 --- a/src/pages/ExpressWizard/getLanguage.ts +++ /dev/null @@ -1,49 +0,0 @@ -import * as dateFns from 'date-fns'; -import { enGB, it, es, fr } from 'date-fns/locale'; -import { t } from 'i18next'; -import { RELATIVE_DATE_FORMAT_OPTS } from 'src/constants'; - -interface Language { - label: string; - locale: dateFns.Locale; - relativeDateFormat: { [key: string]: string }; -} - -export const getLanguage = (lang: string): Language => { - let label; - let locale; - let relativeDateFormat; - switch (lang) { - case 'en': - label = t('__APP_LANGUANGE_EN_TEXT'); - locale = enGB; - relativeDateFormat = RELATIVE_DATE_FORMAT_OPTS.en; - break; - case 'it': - label = t('__APP_LANGUANGE_IT_TEXT'); - locale = it; - relativeDateFormat = RELATIVE_DATE_FORMAT_OPTS.it; - break; - case 'es': - label = t('__APP_LANGUANGE_ES_TEXT'); - locale = es; - relativeDateFormat = RELATIVE_DATE_FORMAT_OPTS.en; - break; - case 'fr': - label = t('__APP_LANGUANGE_FR_TEXT'); - locale = fr; - relativeDateFormat = RELATIVE_DATE_FORMAT_OPTS.en; - break; - default: - label = t('__APP_LANGUANGE_EN_TEXT'); - locale = enGB; - relativeDateFormat = RELATIVE_DATE_FORMAT_OPTS.en; - break; - } - - return { - label, - locale, - relativeDateFormat, - }; -}; diff --git a/src/pages/ExpressWizard/getPlatform.ts b/src/pages/ExpressWizard/getPlatform.ts deleted file mode 100644 index ec243eb88..000000000 --- a/src/pages/ExpressWizard/getPlatform.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { - DESKTOP_MAC, - DESKTOP_WINDOWS, - SMARTPHONE_ANDROID, - SMARTPHONE_IOS, - TABLET_ANDROID, - TABLET_IOS, -} from 'src/constants'; -import { PlatformObject } from 'src/features/api'; -import { WizardModel } from './wizardModel'; - -export const getPlatform = (values: WizardModel): Array => { - const { withSmartphone, withTablet, withDesktop, isIOS, isAndroid } = values; - - const platforms = []; - - if (withSmartphone) { - if (!isIOS && !isAndroid) { - // WhereWeb Step - platforms.push(SMARTPHONE_ANDROID); - platforms.push(SMARTPHONE_IOS); - } else { - // WhereApp Step - if (isIOS) { - platforms.push(SMARTPHONE_IOS); - } - - if (isAndroid) { - platforms.push(SMARTPHONE_ANDROID); - } - } - } - - if (withTablet) { - if (!isIOS && !isAndroid) { - // WhereWeb Step - platforms.push(TABLET_ANDROID); - platforms.push(TABLET_IOS); - } else { - // WhereApp Step - if (isIOS) { - platforms.push(TABLET_IOS); - } - - if (isAndroid) { - platforms.push(TABLET_ANDROID); - } - } - } - - if (withDesktop) { - platforms.push(DESKTOP_MAC); - platforms.push(DESKTOP_WINDOWS); - } - - return platforms; -}; diff --git a/src/pages/ExpressWizard/index.tsx b/src/pages/ExpressWizard/index.tsx deleted file mode 100644 index 4a622dee0..000000000 --- a/src/pages/ExpressWizard/index.tsx +++ /dev/null @@ -1,544 +0,0 @@ -import { - Col, - ContainerCard, - Grid, - Message, - ModalFullScreen, - Row, - Stepper, -} from '@appquality/unguess-design-system'; -import { addBusinessDays, format } from 'date-fns'; -import { - Form, - Formik, - FormikHelpers, - FormikProps, - setNestedObjectValues, -} from 'formik'; -import { useEffect, useRef, useState } from 'react'; -import { useTranslation } from 'react-i18next'; -import { useNavigate, useNavigationType } from 'react-router-dom'; -import { useAppDispatch, useAppSelector } from 'src/app/hooks'; -import { appTheme } from 'src/app/theme'; -import { - createCrons, - createPages, - createTasks, - createUseCases, -} from 'src/common/campaigns'; -import { LayoutWrapper } from 'src/common/components/LayoutWrapper'; -import { extractStrapiData } from 'src/common/getStrapiData'; -import { isDev } from 'src/common/isDevEnvironment'; -import { toggleChat } from 'src/common/utils'; -import { - BASE_DATE_FORMAT, - EXPRESS_1_CAMPAIGN_TYPE_ID, - EXPRESS_2_CAMPAIGN_TYPE_ID, - EXPRESS_3_CAMPAIGN_TYPE_ID, - EXPRESS_4_CAMPAIGN_TYPE_ID, - ZAPIER_WEBHOOK_TRIGGER, -} from 'src/constants'; -import { - Campaign, - Project, - usePostCampaignsMutation, - usePostProjectsMutation, -} from 'src/features/api'; -import { useGeti18nExpressTypesByIdQuery } from 'src/features/backoffice/strapi'; -import { - closeDrawer, - closeWizard, - resetWizard, - setExpressProject, -} from 'src/features/express/expressSlice'; -import { useActiveWorkspace } from 'src/hooks/useActiveWorkspace'; -import { useSendGTMevent } from 'src/hooks/useGTMevent'; -import { useLocalizeRoute } from 'src/hooks/useLocalizedRoute'; -import i18n from 'src/i18n'; -import styled from 'styled-components'; -import * as Yup from 'yup'; -import DiscardChangesModal from './ActionModals/DiscardChangesModal'; -import { getPlatform } from './getPlatform'; -import { - mapBrowsers, - mapLanguages, - mapProductType, - mapTesterRequirements, -} from './mapToCampaignFields'; -import { reasonItems } from './steps/express-1/what'; -import { ThankYouStep } from './steps/thankYou'; -import { StepItem, useExpressStep } from './steps/useSteps'; -import { WizardHeader } from './wizardHeader'; -import defaultValues from './wizardInitialValues'; -import { WizardModel } from './wizardModel'; - -const StyledContainer = styled(ContainerCard)` - position: sticky; - top: 0; - padding: ${({ theme }) => theme.space.xxl}; - max-height: calc( - 100vh - ${({ theme }) => theme.components.chrome.header.height} - ); - overflow-y: auto; - - @media (max-width: ${({ theme }) => theme.breakpoints.sm}) { - padding: 0; - } -`; - -const StyledFooterItem = styled(ModalFullScreen.FooterItem)` - align-items: center; -`; - -const ModalFooter = styled(ModalFullScreen.Footer)` - background-color: ${({ theme }) => theme.palette.white}; -`; - -const StyledModal = styled(ModalFullScreen)` - background-color: ${({ theme }) => theme.palette.grey[100]}; -`; - -const ModalHeaderContent = styled.div` - display: flex; - align-items: center; - justify-content: space-between; -`; - -const PullRight = styled.div` - display: flex; - align-items: center; - justify-content: flex-end; - padding: 0 ${({ theme }) => theme.space.lg}; - - @media (max-width: ${({ theme }) => theme.breakpoints.sm}) { - padding: 0; - } -`; - -const getValidationSchema = (step: number, steps: StepItem[]) => { - if (step in steps) { - return steps[step as number].validationSchema; - } - return Yup.object(); -}; - -const getExpressCPTypeId = (expressSlug: string) => { - switch (expressSlug) { - case 'ux-tagging': - return EXPRESS_4_CAMPAIGN_TYPE_ID; - case 'unmoderated-usability-testing': - return EXPRESS_3_CAMPAIGN_TYPE_ID; - case 'bug-hunting': - return EXPRESS_2_CAMPAIGN_TYPE_ID; - default: // accessibility check - return EXPRESS_1_CAMPAIGN_TYPE_ID; - } -}; - -export const ExpressWizardContainer = () => { - const { t } = useTranslation(); - const dispatch = useAppDispatch(); - const formRef = useRef>(null); - const navigate = useNavigate(); - const [stepperTitle, setStepperTitle] = useState(''); - const { userData } = useAppSelector((state) => state.user); - const { project } = useAppSelector((state) => state.express); - const projRoute = useLocalizeRoute(`projects/${project?.id}`); - const { activeWorkspace } = useActiveWorkspace(); - const navigationType = useNavigationType(); - const { - isWizardOpen, - steps: draftSteps, - expressTypeId, - } = useAppSelector((state) => state.express); - const sendGTMEvent = useSendGTMevent(); - - // TODO: show an alert if isError is set - const { data } = useGeti18nExpressTypesByIdQuery({ - id: expressTypeId.toString(), - locale: i18n.language, - populate: { - express: { - populate: '*', - }, - }, - }); - - const expressTypeData = extractStrapiData(data); - const expressTypeMeta = extractStrapiData(expressTypeData.express); - - const [activeStep, setStep] = useState(0); - const [isThankyou, setThankyou] = useState(false); - const [createCampaign] = usePostCampaignsMutation(); - const [createProject] = usePostProjectsMutation(); - - // Reduce draftSteps to array of data - const draft: WizardModel = Object.values(draftSteps).reduce( - (filtered: {}, step) => ({ - ...filtered, - ...step.data, - }), - {} - ); - - const initialValues = { - ...defaultValues, - ...draft, - }; - - const steps: Array = useExpressStep(expressTypeMeta.slug); - - const onNext = () => { - if (activeStep === steps.length - 1) { - setThankyou(true); - } else if (formRef.current) { - formRef.current?.validateForm().then((errors) => { - if (formRef.current?.isValid) { - setStep(activeStep + 1); - } else { - // We want to touch all the fields to show the error - formRef.current?.setTouched(setNestedObjectValues(errors, true)); - } - }); - } - }; - const onBack = () => { - if (activeStep > 0) { - setStep(activeStep - 1); - } - }; - - // Form actions - const handleSubmit = async ( - values: WizardModel, - { setSubmitting, setStatus }: FormikHelpers - ) => { - const projectHandle = async () => { - // Create project if it doesn't exist - if ( - project && - project.id === -1 && - activeWorkspace && - activeWorkspace.id - ) { - const prj = await createProject({ - body: { - name: project.name, - customer_id: activeWorkspace.id, - }, - }).unwrap(); - - if (prj) dispatch(setExpressProject(prj)); - - return prj; - } - - return project; - }; - - const campaignHandle = async (prj: Project) => { - const fallBackDate = format( - addBusinessDays(new Date(), 1), - BASE_DATE_FORMAT - ); - // Create the campaign - const cp = await createCampaign({ - body: { - title: values.campaign_name || 'Express campaign', - start_date: values.campaign_date - ? format(values.campaign_date, BASE_DATE_FORMAT) - : fallBackDate, - end_date: values.campaign_date_end - ? format(values.campaign_date_end, BASE_DATE_FORMAT) - : fallBackDate, - close_date: values.campaign_date_end - ? format(values.campaign_date_end, BASE_DATE_FORMAT) - : fallBackDate, - customer_title: values.campaign_name, - campaign_type_id: getExpressCPTypeId(expressTypeMeta.slug), - project_id: prj?.id || -1, - pm_id: activeWorkspace?.csm.id || -1, - platforms: getPlatform(values), - customer_id: activeWorkspace?.id || -1, - express_slug: expressTypeMeta.slug, - has_bug_form: values.has_bug_form ? 1 : 0, - has_bug_parade: values.has_bug_parade ? 1 : 0, - ...(values.use_cases && { use_cases: values.use_cases }), - outOfScope: values.outOfScope, - productLink: - values.product_type === 'mobileapp' - ? [values.androidLink, values.iOSLink] - .filter((link) => link) - .join(',') - : values.link, - languages: mapLanguages([values.campaign_language || '']), - productType: mapProductType(values.product_type || ''), - browsers: mapBrowsers(values), - goal: values.test_description, - testerRequirements: mapTesterRequirements(values), - targetSize: values.target_size, - }, - }).unwrap(); - - return cp; - }; - - const zapierHandle = async (cp: Campaign) => { - // Post on webhook Zapier axios call - await fetch(expressTypeData.webhook_url ?? ZAPIER_WEBHOOK_TRIGGER, { - method: 'POST', - mode: 'no-cors', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json', - }, - body: JSON.stringify({ - cp: { - ...values, - id: cp.id, - ...(values.campaign_date && { - start_date: format(values.campaign_date, BASE_DATE_FORMAT), - }), - ...(values.campaign_date_end && { - end_date: format(values.campaign_date_end, BASE_DATE_FORMAT), - }), - ...(values.campaign_date_end && { - close_date: format(values.campaign_date_end, BASE_DATE_FORMAT), - }), - ...(values.campaign_reason && { - reason: reasonItems[values.campaign_reason], - }), - }, - user: userData, - workspace: activeWorkspace, - environment: isDev() ? 'staging' : 'production', - }), - }); - }; - - const wordpressHandle = async (cp: Campaign) => { - // Post on webhook WordPress axios call - try { - if (!values.use_cases) { - await createUseCases(cp.id); - } - - await createPages(cp.id); - await createCrons(cp.id); - await createTasks(cp.id); - } catch (e) { - // eslint-disable-next-line no-console - console.log('Something went wrong with wp', e); - } - }; - - try { - const prj = await projectHandle(); - - if (prj) { - const cp = await campaignHandle(prj); - if (cp) { - await zapierHandle(cp); - await wordpressHandle(cp); - onNext(); - } else { - throw Error('Something went wrong with campaign'); - } - } else { - throw Error('Something went wrong with project'); - } - } catch (e) { - // eslint-disable-next-line no-console - console.error('Submission error:', e); - - setSubmitting(false); - - // TODO: Show error message modal - setStatus({ submitError: true }); - - // Send error to GTM - sendGTMEvent({ - action: 'express_error', - event: 'express_navigation', - category: expressTypeMeta.slug, - }); - } - }; - - const [showDiscardChangesModal, setShowDiscardChangesModal] = useState(false); - const closeExpressWizard = () => { - if (isWizardOpen) { - if (isThankyou) { - dispatch(closeDrawer()); - dispatch(closeWizard()); - dispatch(resetWizard()); - setStep(0); - setThankyou(false); - navigate(projRoute); - } else { - setShowDiscardChangesModal(true); - } - } - }; - - useEffect(() => { - if (navigationType === 'POP') { - dispatch(closeDrawer()); - dispatch(closeWizard()); - dispatch(resetWizard()); - setStep(0); - setThankyou(false); - } - }, [navigationType]); - - useEffect(() => { - if (isWizardOpen) { - setStepperTitle( - t('__EXPRESS_WIZARD_STEPPER_ACCORDION_TITLE_MOBILE') - .replace('{current_step}', (activeStep + 1).toString()) - .replace('{total_steps}', steps.length.toString()) - ); - - sendGTMEvent({ - event: 'express_navigation', - category: expressTypeMeta.slug, - content: `express_step_${activeStep + 1}_of_${steps.length}`, - }); - } - }, [isWizardOpen, activeStep]); - - useEffect(() => { - if (isWizardOpen && isThankyou) - sendGTMEvent({ - action: 'express_end', - event: 'express_navigation', - category: expressTypeMeta.slug, - content: 'thank_you_page', - }); - }, [isWizardOpen, isThankyou]); - - return isWizardOpen ? ( - <> - - {!isThankyou ? ( - - {(formProps: FormikProps) => ( - <> - - - - - - - - - - -
- - - - - - {steps.map((item) => ( - - {item.label} - - {item.content} - - - ))} - - - - - {steps[activeStep as number].form(formProps)} - - - -
-
-
- - - - - - - - {formProps.status && - formProps.status.submitError && ( - - {t('__EXPRESS_WIZARD_SUBMIT_ERROR')} - - )} - - - {steps[activeStep as number].buttons({ - formikArgs: formProps, - onBackClick: onBack, - onNextClick: onNext, - })} - - - - - - - - - )} -
- ) : ( - - )} -
- {showDiscardChangesModal && ( - setShowDiscardChangesModal(false)} - onClose={() => { - setShowDiscardChangesModal(false); - dispatch(closeDrawer()); - dispatch(closeWizard()); - dispatch(resetWizard()); - setStep(0); - setThankyou(false); - if (formRef.current) { - formRef.current?.resetForm(); - } - toggleChat(true); - sendGTMEvent({ - action: 'express_close', - event: 'express_navigation', - category: expressTypeMeta.slug, - }); - }} - /> - )} - - ) : null; -}; diff --git a/src/pages/ExpressWizard/mapToCampaignFields.tsx b/src/pages/ExpressWizard/mapToCampaignFields.tsx deleted file mode 100644 index 3e31ed053..000000000 --- a/src/pages/ExpressWizard/mapToCampaignFields.tsx +++ /dev/null @@ -1,59 +0,0 @@ -export const mapLanguages = (language: string[]) => - language - .map((lang) => { - if (lang === 'en') return 'English'; - if (lang === 'it') return 'Italian'; - if (lang === 'es') return 'Spanish'; - if (lang === 'fr') return 'French'; - return ''; - }) - .filter((lang) => lang !== ''); - -export const mapProductType = (productType: string) => { - if (productType === 'webapp') return 1; - if (productType === 'mobileapp') return 2; - return 100; -}; - -export const mapBrowsers = (values: { - withChrome?: boolean; - withSafari?: boolean; - withFirefox?: boolean; - withEdge?: boolean; -}) => { - const { withChrome, withSafari, withFirefox, withEdge } = values; - const browsers = []; - if (withChrome) browsers.push(1); - if (withFirefox) browsers.push(2); - if (withSafari) browsers.push(3); - if (withEdge) browsers.push(4); - return browsers; -}; - -export const mapTesterRequirements = (values: { - age_range?: string; - gender?: string; - digital_literacy?: string; -}) => { - const { age_range, gender, digital_literacy } = values; - - let requirements = ''; - - if (age_range) { - if (age_range === 'all') requirements += `Age Range: All ages\n`; - else requirements += `Age Range: ${age_range}\n`; - } - - if (gender) { - if (gender === 'all') requirements += `Gender: All genders\n`; - else requirements += `Gender: ${gender}\n`; - } - - if (digital_literacy) { - if (digital_literacy === 'all') - requirements += `Digital Literacy: All levels\n`; - else requirements += `Digital Literacy: ${digital_literacy}\n`; - } - - return requirements; -}; diff --git a/src/pages/ExpressWizard/planningModal.tsx b/src/pages/ExpressWizard/planningModal.tsx deleted file mode 100644 index 8ee7b47c9..000000000 --- a/src/pages/ExpressWizard/planningModal.tsx +++ /dev/null @@ -1,138 +0,0 @@ -import { - Button, - Col, - Datepicker, - FormField as Field, - Input, - Label, - Modal, - ModalClose, - Row, -} from '@appquality/unguess-design-system'; -import { addBusinessDays, format, isTomorrow } from 'date-fns'; -import { t } from 'i18next'; -import { useState } from 'react'; -import { - EXPRESS_BUSINESS_DAYS_TO_ADD, - EXPRESS_START_DATE_MAX_VALUE, -} from 'src/constants'; -import i18n from 'src/i18n'; -import styled from 'styled-components'; -import { getLanguage } from './getLanguage'; - -const InBodyFooter = styled.div` - margin-top: 60px; - display: flex; - flex-direction: row; - justify-content: flex-end; -`; - -const PlanningModal = ({ - startDate, - duration = EXPRESS_BUSINESS_DAYS_TO_ADD, - onClose, - onSave, -}: { - startDate: Date; - duration: number; - onSave: (start: Date, end: Date) => void; - onClose: () => void; -}) => { - const [launchDate, setlaunchDate] = useState(startDate); - const [endDate, setEndDate] = useState( - addBusinessDays(startDate, duration) - ); - const lang = getLanguage(i18n.language || 'en'); - - const handleDateChange = (date: Date) => { - // We have to add 2 business days to determine the end date - setlaunchDate(date); - setEndDate(addBusinessDays(date, duration)); - }; - - return ( - - - {t('__EXPRESS_WIZARD_SUBMIT_PLANNING_TOOLTIP_TITLE')} - - - - - - - - isTomorrow(date) - ? `${t( - '__EXPRESS_WIZARD_STEP_WHEN_FIELD_CAMPAIGN_DATE_TOMORROW_LABEL' - )} (${format(date, 'EEEE d MMMM Y', { - locale: lang.locale, - })})` - : format(date, 'EEEE d MMMM Y', { locale: lang.locale }) - } - onChange={handleDateChange} - minValue={addBusinessDays(new Date(), 1)} - maxValue={ - new Date( - new Date().setDate( - new Date().getDate() + EXPRESS_START_DATE_MAX_VALUE - ) - ) - } - > - - - - - - - - - - - - - - - - - - - - - ); -}; - -export { PlanningModal }; diff --git a/src/pages/ExpressWizard/projectDropdown.tsx b/src/pages/ExpressWizard/projectDropdown.tsx deleted file mode 100644 index fbaa261f4..000000000 --- a/src/pages/ExpressWizard/projectDropdown.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { - Autocomplete, - DropdownFieldNew as Field, - Skeleton, -} from '@appquality/unguess-design-system'; -import { useEffect } from 'react'; -import { useTranslation } from 'react-i18next'; -import { useLocation, useParams } from 'react-router-dom'; -import { useAppDispatch, useAppSelector } from 'src/app/hooks'; - -import { ReactComponent as FolderIcon } from 'src/assets/icons/folder-icon.svg'; -import { useGetWorkspacesByWidProjectsQuery } from 'src/features/api'; -import { setExpressProject } from 'src/features/express/expressSlice'; -import { useActiveWorkspace } from 'src/hooks/useActiveWorkspace'; -import { useCanAccessToActiveWorkspace } from 'src/hooks/useCanAccessToActiveWorkspace'; - -export const ProjectDropdown = () => { - const { t } = useTranslation(); - const dispatch = useAppDispatch(); - const { activeWorkspace } = useActiveWorkspace(); - const canAccessWorkspace = useCanAccessToActiveWorkspace(); - const { project, projectLocked } = useAppSelector((state) => state.express); - - const isProjectPage = useLocation().pathname.includes('/projects/'); - const { projectId } = useParams(); - - // Get workspaces projects from rtk query - const { data, isLoading, isFetching } = useGetWorkspacesByWidProjectsQuery({ - wid: activeWorkspace?.id.toString() || '', - }); - - const projects = data?.items; - - if (!projects) return null; - - useEffect(() => { - if (projectId) { - const proj = projects.find((prj) => prj.id.toString() === projectId); - if (proj) { - dispatch(setExpressProject(proj)); - } - } - }, [projects]); - - return isLoading || isFetching ? ( - - ) : ( - - } - {...(projectLocked && project && { isDisabled: true })} - onCreateNewOption={async (value) => { - const v = { name: value, id: -1, campaigns_count: 0 }; - dispatch(setExpressProject(v)); - return { - id: '-1', - label: value, - value: v, - }; - }} - onOptionClick={({ selectionValue, inputValue }) => { - if (!inputValue || !selectionValue) return; - const value = projects.find( - (prj) => prj.id.toString() === selectionValue - ); - dispatch(setExpressProject(value)); - }} - options={(projects || []).map((prj) => ({ - id: prj.id.toString(), - value: prj.id.toString(), - label: prj.name, - isSelected: isProjectPage && projectId === prj.id.toString(), - }))} - placeholder={t('__WIZARD_EXPRESS_DEFAULT_ITEM')} - /> - - ); -}; diff --git a/src/pages/ExpressWizard/steps/express-1/confirm.tsx b/src/pages/ExpressWizard/steps/express-1/confirm.tsx deleted file mode 100644 index 0ed6f7409..000000000 --- a/src/pages/ExpressWizard/steps/express-1/confirm.tsx +++ /dev/null @@ -1,151 +0,0 @@ -import { - ContainerCard, - Grid, - Label, - Paragraph, - Row, - Span, - Textarea, - XXL, - retrieveComponentStyles, -} from '@appquality/unguess-design-system'; -import { FormikProps } from 'formik'; -import { t } from 'i18next'; -import { useEffect } from 'react'; -import { appTheme } from 'src/app/theme'; -import { ReactComponent as InfoIcon } from 'src/assets/icons/info-icon.svg'; -import { ReactComponent as NotAllowedIcon } from 'src/assets/icons/not-allowed-icon.svg'; -import { CardDivider } from 'src/pages/ExpressWizard/cardDivider'; -import { WizardCol } from 'src/pages/ExpressWizard/wizardCol'; -import { WizardModel } from 'src/pages/ExpressWizard/wizardModel'; -import styled from 'styled-components'; -import * as Yup from 'yup'; -import { WhatConfirm } from './confirm/whatConfirm'; -import { WhereConfirm } from './confirm/whereConfirm'; -import { WhoConfirm } from './confirm/whoConfirm'; - -const StepTitle = styled(XXL)` - margin-bottom: ${({ theme }) => theme.space.base * 2}px; - - span { - ${(props) => retrieveComponentStyles('text.primary', props)}; - } -`; - -const StyledFormField = styled.div` - margin-top: ${({ theme }) => theme.space.md}; -`; - -const StyledCard = styled(ContainerCard)` - background-color: ${({ theme }) => theme.palette.grey[100]}; - padding: ${({ theme }) => theme.space.base * 4}px; -`; - -const StyledLabel = styled(Label)` - font-size: ${({ theme }) => theme.fontSizes.sm}; - color: ${({ theme }) => theme.palette.grey[600]}; -`; - -const StyledParagraph = styled(Paragraph)` - margin-top: ${({ theme }) => theme.space.base}px; -`; - -const StyledTextarea = styled(Textarea)` - margin-top: ${({ theme }) => theme.space.base * 2}px; -`; - -const TextareaNote = styled(Paragraph)` - color: ${({ theme }) => theme.palette.grey[600]}; - margin-top: ${({ theme }) => theme.space.base * 3}px; - font-size: ${({ theme }) => theme.fontSizes.sm}; - line-height: 1.2; - - svg { - margin-bottom: -${({ theme }) => theme.space.base / 2}px; - margin-right: ${({ theme }) => theme.space.base}px; - } -`; - -export const ConfirmationStep = (props: FormikProps) => { - const { values, getFieldProps, setFieldValue } = props; - - const hasWhereStep = values.link || values.iOSLink || values.androidLink; - const hasWhoStep = values.campaign_language; - - useEffect(() => { - // Tryber campaign configuration specific for this XPS campaign - setFieldValue('has_bug_form', true); - }, []); - - return ( - - - {t('__EXPRESS_WIZARD_STEP_RECAP_TITLE')} - - {t('__EXPRESS_WIZARD_STEP_RECAP_DESCRIPTION')} - - - - - - - - - {hasWhereStep ? ( - - - - - - ) : null} - - {hasWhoStep ? ( - - - - - - ) : null} - - - - - - - - - - - {t('__EXPRESS_WIZARD_STEP_RECAP_OUT_OF_SCOPE_LABEL')} - - - - {t('__EXPRESS_WIZARD_STEP_RECAP_OUT_OF_SCOPE_DESCRIPTION')} - - - - - -   - {t('__EXPRESS_WIZARD_STEP_RECAP_MORE_TEXTAREA_NOTE')} - - - - - - - - ); -}; - -export const ConfirmationValidationSchema = Yup.object().shape({ - campaign_name: Yup.string().required( - t('__EXPRESS_WIZARD_STEP_WHAT_FIELD_CAMPAIGN_NAME_REQUIRED') - ), -}); diff --git a/src/pages/ExpressWizard/steps/express-1/confirm/browsers.tsx b/src/pages/ExpressWizard/steps/express-1/confirm/browsers.tsx deleted file mode 100644 index f009653d3..000000000 --- a/src/pages/ExpressWizard/steps/express-1/confirm/browsers.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { Span } from '@appquality/unguess-design-system'; -import { FormikProps } from 'formik'; -import { useTranslation } from 'react-i18next'; -import { WizardModel } from 'src/pages/ExpressWizard/wizardModel'; - -export const Browsers = (props: FormikProps) => { - const { t } = useTranslation(); - - const { values } = props; - - const items = []; - - if (values.withChrome) - items.push(t('__EXPRESS_WIZARD_STEP_WHERE_CUSTOM_BROWSER_CHROME')); - if (values.withSafari) - items.push(t('__EXPRESS_WIZARD_STEP_WHERE_CUSTOM_BROWSER_SAFARI')); - if (values.withFirefox) - items.push(t('__EXPRESS_WIZARD_STEP_WHERE_CUSTOM_BROWSER_FIREFOX')); - if (values.withEdge) - items.push(t('__EXPRESS_WIZARD_STEP_WHERE_CUSTOM_BROWSER_EDGE')); - - return values.customBrowser ? ( - <> - {t('__EXPRESS_WIZARD_STEP_RECAP_WHERE_CONTENT_TEXT_BROWSERS')}  - {items.join(', ')}. - - ) : ( - <>{t('__EXPRESS_WIZARD_STEP_RECAP_WHERE_CONTENT_TEXT_BROWSERS_EMPTY')} - ); -}; diff --git a/src/pages/ExpressWizard/steps/express-1/confirm/devices.tsx b/src/pages/ExpressWizard/steps/express-1/confirm/devices.tsx deleted file mode 100644 index cbf8935eb..000000000 --- a/src/pages/ExpressWizard/steps/express-1/confirm/devices.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { Span } from '@appquality/unguess-design-system'; -import { FormikProps } from 'formik'; -import { useTranslation } from 'react-i18next'; -import { WizardModel } from 'src/pages/ExpressWizard/wizardModel'; - -export const Devices = (props: FormikProps) => { - const { t } = useTranslation(); - - const { values } = props; - - const items = []; - - if (values.withSmartphone) - items.push(t('__EXPRESS_WIZARD_STEP_WHERE_DEVICE_TYPE_SMARTPHONE')); - if (values.withTablet) - items.push(t('__EXPRESS_WIZARD_STEP_WHERE_DEVICE_TYPE_TABLET')); - if (values.withDesktop) - items.push(t('__EXPRESS_WIZARD_STEP_WHERE_DEVICE_TYPE_DESKTOP')); - - return ( - <> - {t('__EXPRESS_WIZARD_STEP_RECAP_WHERE_CONTENT_TEXT_DEVICES')}  - {items.join(', ')}. - - ); -}; diff --git a/src/pages/ExpressWizard/steps/express-1/confirm/operativeSystems.tsx b/src/pages/ExpressWizard/steps/express-1/confirm/operativeSystems.tsx deleted file mode 100644 index 6ac04a0eb..000000000 --- a/src/pages/ExpressWizard/steps/express-1/confirm/operativeSystems.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { Span } from '@appquality/unguess-design-system'; -import { FormikProps } from 'formik'; -import { useTranslation } from 'react-i18next'; -import { WizardModel } from 'src/pages/ExpressWizard/wizardModel'; - -export const OperativeSystems = (props: FormikProps) => { - const { t } = useTranslation(); - - const { values } = props; - - const items = []; - - if (values.isAndroid) - items.push(t('__EXPRESS_WIZARD_STEP_APP_WHERE_OS_ANDROID_LABEL')); - if (values.isIOS) - items.push(t('__EXPRESS_WIZARD_STEP_APP_WHERE_OS_IOS_LABEL')); - - return ( - <> - {t('__EXPRESS_WIZARD_STEP_RECAP_WHERE_CONTENT_TEXT_OS')}  - {items.join(', ')}. - - ); -}; diff --git a/src/pages/ExpressWizard/steps/express-1/confirm/whatConfirm.tsx b/src/pages/ExpressWizard/steps/express-1/confirm/whatConfirm.tsx deleted file mode 100644 index 019547c53..000000000 --- a/src/pages/ExpressWizard/steps/express-1/confirm/whatConfirm.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { - Grid, - Row, - Label, - Paragraph, - Span, -} from '@appquality/unguess-design-system'; -import { FormikProps } from 'formik'; -import styled from 'styled-components'; -import { ReactComponent as WhatIcon } from 'src/assets/icons/step-what-icon.svg'; -import { useTranslation, Trans } from 'react-i18next'; -import { useAppSelector } from 'src/app/hooks'; -import { WizardCol } from 'src/pages/ExpressWizard/wizardCol'; -import { WizardModel } from 'src/pages/ExpressWizard/wizardModel'; - -const StyledLabel = styled(Label)` - font-size: ${({ theme }) => theme.fontSizes.sm}; - color: ${({ theme }) => theme.palette.grey[600]}; -`; - -const StyledParagraph = styled(Paragraph)` - margin-top: ${({ theme }) => theme.space.base}px; -`; - -export const WhatConfirm = (props: FormikProps) => { - const { t } = useTranslation(); - const { project } = useAppSelector((state) => state.express); - const { values } = props; - - const productType = - values.product_type === 'webapp' - ? t('__EXPRESS_WIZARD_STEP_WHAT_FIELD_PRODUCT_TYPE_WEBAPP_LABEL') - : t('__EXPRESS_WIZARD_STEP_WHAT_FIELD_PRODUCT_TYPE_MOBILEAPP_LABEL'); - - return ( - - - - - - - {t('__EXPRESS_WIZARD_STEP_WHAT_LABEL')} - - , - }} - values={{ - campaign_name: values.campaign_name, - project_name: project?.name, - product_type: productType, - }} - default="Stai lanciando la campagna {{ campaign_name }} all'interno del progetto {{ project_name }} per {{ product_type }}." - /> - - - - - ); -}; diff --git a/src/pages/ExpressWizard/steps/express-1/confirm/whereConfirm.tsx b/src/pages/ExpressWizard/steps/express-1/confirm/whereConfirm.tsx deleted file mode 100644 index 1b7735829..000000000 --- a/src/pages/ExpressWizard/steps/express-1/confirm/whereConfirm.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { Grid, Row, Label, Paragraph } from '@appquality/unguess-design-system'; -import { FormikProps } from 'formik'; -import { ReactComponent as WhereIcon } from 'src/assets/icons/step-where-icon.svg'; -import styled from 'styled-components'; -import { useTranslation } from 'react-i18next'; -import { WizardCol } from 'src/pages/ExpressWizard/wizardCol'; -import { WizardModel } from 'src/pages/ExpressWizard/wizardModel'; -import { Browsers } from './browsers'; -import { Devices } from './devices'; -import { OperativeSystems } from './operativeSystems'; - -const StyledLabel = styled(Label)` - font-size: ${({ theme }) => theme.fontSizes.sm}; - color: ${({ theme }) => theme.palette.grey[600]}; -`; - -const StyledParagraph = styled(Paragraph)` - margin-top: ${({ theme }) => theme.space.base}px; -`; - -export const WhereConfirm = (props: FormikProps) => { - const { t } = useTranslation(); - const { values } = props; - - return ( - - - - - - - {t('__EXPRESS_WIZARD_STEP_WHERE_LABEL')} - - -
- {values.product_type === 'webapp' ? ( - - ) : ( - - )} -
-
-
-
- ); -}; diff --git a/src/pages/ExpressWizard/steps/express-1/confirm/whoConfirm.tsx b/src/pages/ExpressWizard/steps/express-1/confirm/whoConfirm.tsx deleted file mode 100644 index e136f0bc4..000000000 --- a/src/pages/ExpressWizard/steps/express-1/confirm/whoConfirm.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { - Grid, - Row, - Label, - Paragraph, - Span, -} from '@appquality/unguess-design-system'; -import { FormikProps } from 'formik'; -import { ReactComponent as WhoIcon } from 'src/assets/icons/step-who-icon.svg'; -import styled from 'styled-components'; -import { useTranslation, Trans } from 'react-i18next'; -import { WizardCol } from 'src/pages/ExpressWizard/wizardCol'; -import { WizardModel } from 'src/pages/ExpressWizard/wizardModel'; -import { getLanguage } from 'src/pages/ExpressWizard/getLanguage'; - -const StyledLabel = styled(Label)` - font-size: ${({ theme }) => theme.fontSizes.sm}; - color: ${({ theme }) => theme.palette.grey[600]}; -`; - -const StyledParagraph = styled(Paragraph)` - margin-top: ${({ theme }) => theme.space.base}px; -`; - -export const WhoConfirm = (props: FormikProps) => { - const { t } = useTranslation(); - const { values } = props; - const lang = getLanguage(values.campaign_language || 'en'); - - return ( - - - - - - - {t('__EXPRESS_WIZARD_STEP_WHO_LABEL')} - - , - }} - default="Testers speak {{ campaign_language }}." - /> - - - - - ); -}; diff --git a/src/pages/ExpressWizard/steps/express-1/forms/ConfirmationForm.tsx b/src/pages/ExpressWizard/steps/express-1/forms/ConfirmationForm.tsx deleted file mode 100644 index ed800c6b6..000000000 --- a/src/pages/ExpressWizard/steps/express-1/forms/ConfirmationForm.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { FormikProps } from 'formik'; -import { useTranslation } from 'react-i18next'; -import { appTheme } from 'src/app/theme'; -import { WizardModel } from 'src/pages/ExpressWizard/wizardModel'; -import { WizardButtonsProps } from 'src/pages/ExpressWizard/steps/types'; -import { WizardSubmit } from 'src/pages/ExpressWizard/wizardSubmit'; -import { Button } from '@appquality/unguess-design-system'; -import { ConfirmationStep } from '../confirm'; - -export const ConfirmationForm = (props: FormikProps) => ( - -); - -export const ConfirmationFormButtons = (props: WizardButtonsProps) => { - const { t } = useTranslation(); - const { onBackClick, formikArgs } = props; - - return ( - <> - - - - ); -}; diff --git a/src/pages/ExpressWizard/steps/express-1/forms/WhatForm.tsx b/src/pages/ExpressWizard/steps/express-1/forms/WhatForm.tsx deleted file mode 100644 index 9a7992248..000000000 --- a/src/pages/ExpressWizard/steps/express-1/forms/WhatForm.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { FormikProps } from 'formik'; -import { useTranslation } from 'react-i18next'; -import { WizardModel } from 'src/pages/ExpressWizard/wizardModel'; -import { WizardButtonsProps } from 'src/pages/ExpressWizard/steps/types'; -import { Button } from '@appquality/unguess-design-system'; -import { WhatStep } from '../what'; - -export const WhatForm = (props: FormikProps) => ( - -); - -export const WhatFormButtons = (props: WizardButtonsProps) => { - const { t } = useTranslation(); - const { onNextClick } = props; - - return ( - - ); -}; diff --git a/src/pages/ExpressWizard/steps/express-1/forms/WhereForm.tsx b/src/pages/ExpressWizard/steps/express-1/forms/WhereForm.tsx deleted file mode 100644 index 48367e637..000000000 --- a/src/pages/ExpressWizard/steps/express-1/forms/WhereForm.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { FormikProps } from 'formik'; -import { useTranslation } from 'react-i18next'; -import { appTheme } from 'src/app/theme'; -import { WizardModel } from 'src/pages/ExpressWizard/wizardModel'; -import { WizardButtonsProps } from 'src/pages/ExpressWizard/steps/types'; -import { Button } from '@appquality/unguess-design-system'; -import { WhereWebStep } from '../whereWeb'; -import { WhereAppStep } from '../whereApp'; - -export const WhereForm = (props: FormikProps) => { - const { values } = props; - return values.product_type === 'webapp' ? ( - - ) : ( - - ); -}; - -export const WhereFormButtons = (props: WizardButtonsProps) => { - const { t } = useTranslation(); - const { onBackClick, onNextClick } = props; - - return ( - <> - - - - ); -}; diff --git a/src/pages/ExpressWizard/steps/express-1/forms/WhoForm.tsx b/src/pages/ExpressWizard/steps/express-1/forms/WhoForm.tsx deleted file mode 100644 index dfcc6abad..000000000 --- a/src/pages/ExpressWizard/steps/express-1/forms/WhoForm.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { FormikProps } from 'formik'; -import { useTranslation } from 'react-i18next'; -import { appTheme } from 'src/app/theme'; -import { WizardModel } from 'src/pages/ExpressWizard/wizardModel'; -import { WizardButtonsProps } from 'src/pages/ExpressWizard/steps/types'; -import { Button } from '@appquality/unguess-design-system'; -import { WhoStep } from '../who'; - -export const WhoForm = (props: FormikProps) => ( - -); - -export const WhoFormButtons = (props: WizardButtonsProps) => { - const { t } = useTranslation(); - const { onBackClick, onNextClick } = props; - - return ( - <> - - - - ); -}; diff --git a/src/pages/ExpressWizard/steps/express-1/index.ts b/src/pages/ExpressWizard/steps/express-1/index.ts deleted file mode 100644 index 26fc3a7c7..000000000 --- a/src/pages/ExpressWizard/steps/express-1/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { t } from 'i18next'; -import { WhatStepValidationSchema } from './what'; -import { WhereStepValidationSchema } from './whereWeb'; -import { WhoStepValidationSchema } from './who'; -import { ConfirmationValidationSchema } from './confirm'; -import { WhatForm, WhatFormButtons } from './forms/WhatForm'; -import { WhereForm, WhereFormButtons } from './forms/WhereForm'; -import { WhoForm, WhoFormButtons } from './forms/WhoForm'; - -import { - ConfirmationForm, - ConfirmationFormButtons, -} from './forms/ConfirmationForm'; - -export const What = { - id: 'what', - label: t('__EXPRESS_WIZARD_STEP_WHAT_LABEL'), - content: t('__EXPRESS_WIZARD_STEP_WHAT_DESCRIPTION'), - form: WhatForm, - validationSchema: WhatStepValidationSchema, - buttons: WhatFormButtons, -}; - -export const Where = { - id: 'where', - label: t('__EXPRESS_WIZARD_STEP_WHERE_LABEL'), - content: t('__EXPRESS_WIZARD_STEP_WHERE_DESCRIPTION'), - form: WhereForm, - validationSchema: WhereStepValidationSchema, - buttons: WhereFormButtons, -}; - -export const Who = { - id: 'who', - label: t('__EXPRESS_WIZARD_STEP_WHO_LABEL'), - content: t('__EXPRESS_WIZARD_STEP_WHO_DESCRIPTION'), - form: WhoForm, - validationSchema: WhoStepValidationSchema, - buttons: WhoFormButtons, -}; - -export const Confirmation = { - id: 'confirmation', - label: t('__EXPRESS_WIZARD_STEP_CONFIRM_LABEL'), - content: t('__EXPRESS_WIZARD_STEP_CONFIRM_DESCRIPTION'), - form: ConfirmationForm, - validationSchema: ConfirmationValidationSchema, - buttons: ConfirmationFormButtons, -}; diff --git a/src/pages/ExpressWizard/steps/express-1/what.tsx b/src/pages/ExpressWizard/steps/express-1/what.tsx deleted file mode 100644 index a38072d36..000000000 --- a/src/pages/ExpressWizard/steps/express-1/what.tsx +++ /dev/null @@ -1,175 +0,0 @@ -import { - Col, - ContainerCard, - FormField, - Grid, - Paragraph, - RadioCard, - Row, - Select, - Span, - XL, - XXL, - retrieveComponentStyles, -} from '@appquality/unguess-design-system'; -import { FormikProps } from 'formik'; -import { t } from 'i18next'; -import { useState } from 'react'; -import { appTheme } from 'src/app/theme'; -import { ReactComponent as FlagIcon } from 'src/assets/icons/flag-icon.svg'; -import { ReactComponent as MobileappIconActive } from 'src/assets/icons/mobileapp-active.svg'; -import { ReactComponent as MobileappIcon } from 'src/assets/icons/mobileapp.svg'; -import { ReactComponent as WebappIconActive } from 'src/assets/icons/webapp-active.svg'; -import { ReactComponent as WebappIcon } from 'src/assets/icons/webapp.svg'; -import { HelpTextMessage } from 'src/common/components/helpTextMessage'; -import { CardDivider } from 'src/pages/ExpressWizard/cardDivider'; -import { WizardCol } from 'src/pages/ExpressWizard/wizardCol'; -import { WizardModel } from 'src/pages/ExpressWizard/wizardModel'; -import styled from 'styled-components'; -import * as Yup from 'yup'; - -interface Reasons { - [key: string]: string; -} - -export const reasonItems: Reasons = { - 'reason-a': t('__EXPRESS_WIZARD_STEP_WHAT_FIELD_CAMPAIGN_REASON_OPTION_1'), - 'reason-b': t('__EXPRESS_WIZARD_STEP_WHAT_FIELD_CAMPAIGN_REASON_OPTION_2'), - 'reason-c': t('__EXPRESS_WIZARD_STEP_WHAT_FIELD_CAMPAIGN_REASON_OPTION_3'), -}; - -const StepTitle = styled(XXL)` - margin-bottom: ${({ theme }) => theme.space.base * 2}px; - span { - ${(props) => retrieveComponentStyles('text.primary', props)}; - } -`; - -const StyledOrCol = styled(Col)` - display: flex; - justify-content: center; - align-items: center; - text-align: center; - - @media screen and (max-width: ${({ theme }) => theme.breakpoints.sm}) { - display: none; - } -`; - -const StyledFormField = styled.div` - margin-top: ${({ theme }) => theme.space.md}; -`; - -const StyledProductTypeTitle = styled(XL)` - margin-bottom: ${({ theme }) => theme.space.sm}; -`; - -export const WhatStep = ({ - errors, - values, - ...props -}: FormikProps) => { - const [radioValue, setRadioValue] = useState(values.product_type); - const [selectedItem, setSelectedItem] = useState(values.campaign_reason); - - const handleRadioClick = (value: string) => { - setRadioValue(value); - props.setFieldValue('product_type', value); - }; - - return ( - - - {t('__EXPRESS_WIZARD_STEP_WHAT_LABEL')}  - {t('__EXPRESS_WIZARD_STEP_WHAT_LABEL_EXTRA')} - - {t('__EXPRESS_WIZARD_STEP_WHAT_DESCRIPTION')} - - - - {t('__EXPRESS_WIZARD_STEP_WHAT_FIELD_PRODUCT_TYPE_LABEL')} - - - - - - } - iconActive={} - {...props.getFieldProps('product_type')} - {...(errors.product_type && { validation: 'error' })} - value="webapp" - checked={radioValue === 'webapp'} - onChecked={handleRadioClick} - /> - - - - - {t('__EXPRESS_WIZARD_STEP_WHAT_FIELD_PRODUCT_TYPE_OR_LABEL')} - - - - - } - iconActive={} - {...props.getFieldProps('product_type')} - {...(errors.product_type && { validation: 'error' })} - value="mobileapp" - checked={radioValue === 'mobileapp'} - onChecked={handleRadioClick} - /> - - - - {errors.product_type && ( - - {errors.product_type} - - )} - - - -
- -
-
-
- ); -}; - -export const WhatStepValidationSchema = Yup.object().shape({ - campaign_reason: Yup.string().required( - t('__EXPRESS_WIZARD_STEP_WHAT_FIELD_CAMPAIGN_REASON_REQUIRED') - ), - product_type: Yup.string().required( - t('__EXPRESS_WIZARD_STEP_WHAT_FIELD_PRODUCT_TYPE_REQUIRED') - ), -}); diff --git a/src/pages/ExpressWizard/steps/express-1/where/outOfScope.tsx b/src/pages/ExpressWizard/steps/express-1/where/outOfScope.tsx deleted file mode 100644 index 2f1665af6..000000000 --- a/src/pages/ExpressWizard/steps/express-1/where/outOfScope.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import { - FormField as Field, - Label, - MD, - Message, - Span, - Textarea, - Toggle, - XL, -} from '@appquality/unguess-design-system'; -import { FormikProps } from 'formik'; -import { useTranslation } from 'react-i18next'; -import { appTheme } from 'src/app/theme'; -import { CardDivider } from 'src/pages/ExpressWizard/cardDivider'; -import { Notes } from 'src/pages/ExpressWizard/notesCard'; -import { WizardCol } from 'src/pages/ExpressWizard/wizardCol'; -import { WizardModel } from 'src/pages/ExpressWizard/wizardModel'; -import { StyledRow } from './styled'; - -export const OutOfScopeSection = ({ - errors, - values, - getFieldProps, -}: FormikProps) => { - const { t } = useTranslation(); - - return ( - <> - - - {t('__EXPRESS_WIZARD_STEP_WHERE_OUT_OF_SCOPE_TITLE')} - {t('__EXPRESS_WIZARD_STEP_WHERE_OUT_OF_SCOPE_DESCRIPTION')} - - - - - - {t('__EXPRESS_WIZARD_STEP_WHERE_BROWSER_TOGGLE_LABEL')} - - - - - - - - - - - - - {values.hasOutOfScope && ( - - - - -