diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index 9975a202f..000000000 --- a/.prettierrc.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "arrowParens": "always", - "bracketSameLine": false, - "bracketSpacing": true, - "embeddedLanguageFormatting": "auto", - "htmlWhitespaceSensitivity": "css", - "insertPragma": false, - "jsxSingleQuote": false, - "printWidth": 80, - "proseWrap": "preserve", - "quoteProps": "as-needed", - "requirePragma": false, - "semi": true, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "es5", - "useTabs": false, - "vueIndentScriptAndStyle": false -} diff --git a/index.html b/index.html index 5bad140fe..bdfca044a 100644 --- a/index.html +++ b/index.html @@ -48,7 +48,7 @@
- +
diff --git a/package.json b/package.json index bd382f344..7b0c12149 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "i18n-iso-countries": "^7.3.0", "i18next": "^23.15.1", "i18next-browser-languagedetector": "^8.0.0", + "motion": "^12.16.0", "qs": "^6.10.3", "query-string": "^7.1.1", "react": "^18.3.1", diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 000000000..3cea11055 --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,27 @@ +module.exports = { + arrowParens: 'always', + bracketSameLine: false, + bracketSpacing: true, + embeddedLanguageFormatting: 'auto', + htmlWhitespaceSensitivity: 'css', + insertPragma: false, + jsxSingleQuote: false, + printWidth: 80, + proseWrap: 'preserve', + quoteProps: 'as-needed', + requirePragma: false, + semi: true, + singleQuote: true, + tabWidth: 2, + trailingComma: 'es5', + useTabs: false, + vueIndentScriptAndStyle: false, + overrides: [ + { + files: ['src/common/schema.ts'], + options: { + singleQuote: false, + }, + }, + ], +}; 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/assets/icons/password-check-v.svg b/src/assets/icons/password-check-v.svg new file mode 100644 index 000000000..4438467b7 --- /dev/null +++ b/src/assets/icons/password-check-v.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/password-check-x.svg b/src/assets/icons/password-check-x.svg new file mode 100644 index 000000000..7fc25b025 --- /dev/null +++ b/src/assets/icons/password-check-x.svg @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/src/assets/join-bg-1.png b/src/assets/join-bg-1.png new file mode 100644 index 000000000..b2a8b7c45 Binary files /dev/null and b/src/assets/join-bg-1.png differ diff --git a/src/assets/join-bg-1.webp b/src/assets/join-bg-1.webp new file mode 100644 index 000000000..b1e72f235 Binary files /dev/null and b/src/assets/join-bg-1.webp differ diff --git a/src/assets/join-bg-2.png b/src/assets/join-bg-2.png new file mode 100644 index 000000000..1e66db7e9 Binary files /dev/null and b/src/assets/join-bg-2.png differ diff --git a/src/assets/join-bg-2.webp b/src/assets/join-bg-2.webp new file mode 100644 index 000000000..67d4964cb Binary files /dev/null and b/src/assets/join-bg-2.webp differ diff --git a/src/assets/join-bg-3.png b/src/assets/join-bg-3.png new file mode 100644 index 000000000..9aac47a70 Binary files /dev/null and b/src/assets/join-bg-3.png differ diff --git a/src/assets/join-bg-3.webp b/src/assets/join-bg-3.webp new file mode 100644 index 000000000..4a695fcfe Binary files /dev/null and b/src/assets/join-bg-3.webp differ diff --git a/src/assets/join-loghi.png b/src/assets/join-loghi.png new file mode 100644 index 000000000..77eb16ddf Binary files /dev/null and b/src/assets/join-loghi.png differ diff --git a/src/assets/join-loghi.webp b/src/assets/join-loghi.webp new file mode 100644 index 000000000..95b364565 Binary files /dev/null and b/src/assets/join-loghi.webp differ diff --git a/src/assets/join-step-1.svg b/src/assets/join-step-1.svg new file mode 100644 index 000000000..69f3ef230 --- /dev/null +++ b/src/assets/join-step-1.svg @@ -0,0 +1,344 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/join-step-1.webp b/src/assets/join-step-1.webp new file mode 100644 index 000000000..84e6575fa Binary files /dev/null and b/src/assets/join-step-1.webp differ diff --git a/src/assets/join-step-2.png b/src/assets/join-step-2.png new file mode 100644 index 000000000..4ce18d7fd Binary files /dev/null and b/src/assets/join-step-2.png differ diff --git a/src/assets/join-step-2.webp b/src/assets/join-step-2.webp new file mode 100644 index 000000000..a4b9b2b78 Binary files /dev/null and b/src/assets/join-step-2.webp differ diff --git a/src/assets/join-step-3.png b/src/assets/join-step-3.png new file mode 100644 index 000000000..f37baa8ff Binary files /dev/null and b/src/assets/join-step-3.png differ diff --git a/src/assets/join-step-3.webp b/src/assets/join-step-3.webp new file mode 100644 index 000000000..97a00ad33 Binary files /dev/null and b/src/assets/join-step-3.webp differ diff --git a/src/common/GoogleTagManager.tsx b/src/common/GoogleTagManager.tsx index fd96c0bbc..f4b5dd33c 100644 --- a/src/common/GoogleTagManager.tsx +++ b/src/common/GoogleTagManager.tsx @@ -41,8 +41,9 @@ export const GoogleTagManager = ({ if (userData?.role && activeWorkspace?.company) { const tagManagerDataLayer = { role: userData.role, + customer_role: userData.customer_role, wp_user_id: userData.tryber_wp_user_id, - tester_id: userData.id, + tester_id: userData.profile_id, name: userData.name, email: userData.email, company: activeWorkspace.company, diff --git a/src/common/Pages.tsx b/src/common/Pages.tsx index 3b7414cd7..c1411416c 100644 --- a/src/common/Pages.tsx +++ b/src/common/Pages.tsx @@ -17,13 +17,12 @@ import CampaignPreview from 'src/pages/Campaign/preview'; import Dashboard from 'src/pages/Dashboard'; import Project from 'src/pages/Dashboard/Project'; import InsightsPage from 'src/pages/Insights'; +import JoinPage from 'src/pages/JoinPage'; import LoginPage from 'src/pages/LoginPage'; 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'; @@ -68,6 +67,12 @@ const Pages = () => { path={`/${langPrefix}/login`} element={} /> + } /> + } + /> + } @@ -80,14 +85,6 @@ const Pages = () => { path={`/${langPrefix}/campaigns/:campaignId/bugs/:bugId`} element={} /> - } - /> - } - /> } @@ -156,6 +153,21 @@ const Pages = () => { } errorElement={} /> + + { + if (!searchParams || !searchParams.get('redirect')) + return '/oops'; + return `/campaigns/${searchParams.get('cid')}/bugform`; + }} + /> + } + errorElement={} + /> + } /> ) 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/schema.ts b/src/common/schema.ts index 75eee33f2..55d41d2e8 100644 --- a/src/common/schema.ts +++ b/src/common/schema.ts @@ -4,104 +4,100 @@ */ export interface paths { - '/': { + "/": { /** Get all routes available for this apis */ - get: operations['get-root']; + get: operations["get-root"]; parameters: {}; }; - '/authenticate': { - /** A request to login with your username and password */ - post: operations['post-authenticate']; - }; - '/analytics/views/campaigns/{cid}': { - post: operations['post-analytics-views-campaigns-cid']; + "/analytics/views/campaigns/{cid}": { + post: operations["post-analytics-views-campaigns-cid"]; parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; }; - '/campaigns': { - post: operations['post-campaigns']; - parameters: {}; + "/authenticate": { + /** A request to login with your username and password */ + post: operations["post-authenticate"]; }; - '/campaigns/{cid}': { - get: operations['get-campaign']; - patch: operations['patch-campaigns']; + "/campaigns/{cid}": { + get: operations["get-campaign"]; + patch: operations["patch-campaigns"]; parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; }; - '/campaigns/{cid}/bugTypes': { - get: operations['get-campaigns-cid-bug-types']; + "/campaigns/{cid}/bugTypes": { + get: operations["get-campaigns-cid-bug-types"]; parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; }; - '/campaigns/{cid}/bugs': { - get: operations['get-campaigns-cid-bugs']; + "/campaigns/{cid}/bugs": { + get: operations["get-campaigns-cid-bugs"]; parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; }; - '/campaigns/{cid}/bugs/{bid}': { - get: operations['get-campaigns-single-bug']; - patch: operations['patch-campaigns-cid-bugs-bid']; + "/campaigns/{cid}/bugs/{bid}": { + get: operations["get-campaigns-single-bug"]; + patch: operations["patch-campaigns-cid-bugs-bid"]; parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; /** Defines an identifier for the bug object (BUG ID) */ - bid: components['parameters']['bid']; + bid: components["parameters"]["bid"]; }; }; }; - '/campaigns/{cid}/bugs/{bid}/comments': { - get: operations['get-campaigns-cid-bugs-bid-comments']; - post: operations['post-campaigns-cid-bugs-bid-comments']; + "/campaigns/{cid}/bugs/{bid}/comments": { + get: operations["get-campaigns-cid-bugs-bid-comments"]; + post: operations["post-campaigns-cid-bugs-bid-comments"]; parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; /** Defines an identifier for the bug object (BUG ID) */ - bid: components['parameters']['bid']; + bid: components["parameters"]["bid"]; }; }; }; - '/campaigns/{cid}/bugs/{bid}/media': { - post: operations['post-campaigns-cid-bugs-bid-media']; + "/campaigns/{cid}/bugs/{bid}/comments/{cmid}": { + post: operations["post-campaigns-cid-bugs-bid-comments-cmid-media"]; + delete: operations["delete-campaigns-cid-bugs-bid-comments-cmid"]; parameters: { path: { - /** Campaign id */ cid: string; - /** Defines an identifier for the bug object (BUG ID) */ bid: string; + cmid: string; }; }; }; - '/campaigns/{cid}/bugs/{bid}/comments/{cmid}': { - post: operations['post-campaigns-cid-bugs-bid-comments-cmid-media']; - delete: operations['delete-campaigns-cid-bugs-bid-comments-cmid']; + "/campaigns/{cid}/bugs/{bid}/media": { + post: operations["post-campaigns-cid-bugs-bid-media"]; parameters: { path: { + /** Campaign id */ cid: string; + /** Defines an identifier for the bug object (BUG ID) */ bid: string; - cmid: string; }; }; }; - '/campaigns/{cid}/bugs/{bid}/siblings': { - get: operations['get-campaigns-bug-siblings']; + "/campaigns/{cid}/bugs/{bid}/siblings": { + get: operations["get-campaigns-bug-siblings"]; parameters: { path: { /** Campaign id */ @@ -111,18 +107,18 @@ export interface paths { }; }; }; - '/campaigns/{cid}/clusters': { - get: operations['get-campaigns-cid-clusters']; + "/campaigns/{cid}/clusters": { + get: operations["get-campaigns-cid-clusters"]; parameters: { path: { cid: string; }; }; }; - '/campaigns/{cid}/custom_statuses': { - get: operations['get-campaigns-cid-custom-statuses']; - delete: operations['delete-campaigns-cid-custom_statuses']; - patch: operations['patch-campaigns-cid-custom_statuses']; + "/campaigns/{cid}/custom_statuses": { + get: operations["get-campaigns-cid-custom-statuses"]; + delete: operations["delete-campaigns-cid-custom_statuses"]; + patch: operations["patch-campaigns-cid-custom_statuses"]; parameters: { path: { /** Campaign id */ @@ -130,8 +126,8 @@ export interface paths { }; }; }; - '/campaigns/{cid}/devices': { - get: operations['get-campaigns-cid-devices']; + "/campaigns/{cid}/devices": { + get: operations["get-campaigns-cid-devices"]; parameters: { path: { /** Campaign id */ @@ -139,51 +135,51 @@ export interface paths { }; }; }; - '/campaigns/{cid}/findings/{fid}': { - put: operations['put-campaigns-cid-findings-fid']; + "/campaigns/{cid}/findings/{fid}": { + put: operations["put-campaigns-cid-findings-fid"]; parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; /** Finding id */ fid: string; }; }; }; - '/campaigns/{cid}/insights': { - get: operations['get-insights']; - post: operations['post-insights']; + "/campaigns/{cid}/insights": { + get: operations["get-insights"]; + post: operations["post-insights"]; parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; }; - '/campaigns/{cid}/meta': { + "/campaigns/{cid}/meta": { /** Used to extra info about a selected campaign */ - get: operations['get-campaigns-cid-meta']; + get: operations["get-campaigns-cid-meta"]; parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; }; - '/campaigns/{cid}/observations': { + "/campaigns/{cid}/observations": { /** * Return all observations for a specificCampaigns. * You can group by observations for usecase and grapes (observations with same title) or get an ungrouped list. */ - get: operations['get-campaigns-cid-observations']; + get: operations["get-campaigns-cid-observations"]; parameters: { path: { cid: string; }; }; }; - '/campaigns/{cid}/os': { - get: operations['get-campaigns-cid-os']; + "/campaigns/{cid}/os": { + get: operations["get-campaigns-cid-os"]; parameters: { path: { /** Campaign id */ @@ -191,8 +187,8 @@ export interface paths { }; }; }; - '/campaigns/{cid}/priorities': { - get: operations['get-campaigns-cid-priorities']; + "/campaigns/{cid}/priorities": { + get: operations["get-campaigns-cid-priorities"]; parameters: { path: { /** Campaign id */ @@ -200,9 +196,9 @@ export interface paths { }; }; }; - '/campaigns/{cid}/replicabilities': { + "/campaigns/{cid}/replicabilities": { /** Return all accepted replicabilities of a specific campaign */ - get: operations['get-campaigns-replicabilities']; + get: operations["get-campaigns-replicabilities"]; parameters: { path: { /** Campaign id */ @@ -210,28 +206,28 @@ export interface paths { }; }; }; - '/campaigns/{cid}/reports': { + "/campaigns/{cid}/reports": { /** Return all available report of a specific campaign */ - get: operations['get-campaigns-reports']; + get: operations["get-campaigns-reports"]; parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; }; - '/campaigns/{cid}/severities': { - get: operations['get-campaigns-cid-severities']; + "/campaigns/{cid}/severities": { + get: operations["get-campaigns-cid-severities"]; parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; }; - '/campaigns/{cid}/suggestions': { - get: operations['get-campaigns-cid-suggestions']; - post: operations['post-campaigns-cid-suggestions']; + "/campaigns/{cid}/suggestions": { + get: operations["get-campaigns-cid-suggestions"]; + post: operations["post-campaigns-cid-suggestions"]; parameters: { path: { /** Campaign id */ @@ -239,40 +235,40 @@ export interface paths { }; }; }; - '/campaigns/{cid}/tags': { - get: operations['get-campaigns-cid-tags']; + "/campaigns/{cid}/tags": { + get: operations["get-campaigns-cid-tags"]; parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; }; - '/campaigns/{cid}/usecases': { - get: operations['get-campaigns-cid-usecases']; + "/campaigns/{cid}/usecases": { + get: operations["get-campaigns-cid-usecases"]; parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; }; - '/campaigns/{cid}/users': { + "/campaigns/{cid}/users": { /** Return a list of users from a specific campaign */ - get: operations['get-campaign-users']; + get: operations["get-campaign-users"]; /** Use this to add a new or existent user into a specific campaign. */ - post: operations['post-campaign-cid-users']; + post: operations["post-campaign-cid-users"]; /** Remove an user from campaign */ - delete: operations['delete-campaign-cid-users']; + delete: operations["delete-campaign-cid-users"]; parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; }; - '/campaigns/{cid}/ux': { - get: operations['get-campaigns-cid-ux']; + "/campaigns/{cid}/ux": { + get: operations["get-campaigns-cid-ux"]; parameters: { path: { /** Campaign id */ @@ -280,144 +276,184 @@ export interface paths { }; }; }; - '/campaigns/{cid}/video-tags': { + "/campaigns/{cid}/video-tags": { /** Retrieve all groups of public ux-tags for a specific campaign */ - get: operations['get-campaigns-cid-video-tags']; + get: operations["get-campaigns-cid-video-tags"]; /** Add videoTags with groups to a specific campaign */ - post: operations['post-campaigns-cid-video-tags']; + post: operations["post-campaigns-cid-video-tags"]; parameters: { path: { cid: string; }; }; }; - '/campaigns/{cid}/videos': { + "/campaigns/{cid}/videos": { /** Return all published video for a specific campaign */ - get: operations['get-campaigns-cid-videos']; + get: operations["get-campaigns-cid-videos"]; parameters: { path: { cid: string; }; }; }; - '/campaigns/{cid}/widgets': { - get: operations['get-campaigns-cid-widgets-wslug']; + "/campaigns/{cid}/widgets": { + get: operations["get-campaigns-cid-widgets-wslug"]; parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; }; - '/insights/{iid}': { - get: operations['get-insights-iid']; - delete: operations['delete-insights-iid']; - patch: operations['patch-insights-iid']; + "/insights/{iid}": { + get: operations["get-insights-iid"]; + delete: operations["delete-insights-iid"]; + patch: operations["patch-insights-iid"]; parameters: { path: { /** Insight id */ - iid: components['parameters']['iid']; + iid: components["parameters"]["iid"]; }; }; }; - '/media/{id}': { - get: operations['get-media-id']; + "/invites/{profile}/{token}": { + get: operations["get-invites-profile-token"]; parameters: { path: { - id: string; + profile: string; + token: string; }; }; }; - '/media-comment/{mcid}': { + "/media-comment/{mcid}": { /** Delete a media-comment */ - delete: operations['delete-media-comment-mcid']; + delete: operations["delete-media-comment-mcid"]; parameters: { path: { mcid: string; }; }; }; - '/projects': { - post: operations['post-projects']; + "/media/{id}": { + get: operations["get-media-id"]; + parameters: { + path: { + id: string; + }; + }; + }; + "/plans/{pid}": { + get: operations["get-workspaces-wid-plans-pid"]; + delete: operations["delete-workspaces-wid-plans-pid"]; + patch: operations["patch-workspaces-wid-plans-pid"]; + parameters: { + path: { + pid: string; + }; + }; + }; + "/plans/{pid}/status": { + /** */ + patch: operations["patch-workspaces-wid-plans-pid-status"]; + parameters: { + path: { + pid: string; + }; + }; + }; + "/projects": { + post: operations["post-projects"]; }; - '/projects/{pid}': { + "/projects/{pid}": { /** Retrieve projects details from an ID. */ - get: operations['get-projects-projectId']; - delete: operations['delete-projects-projectId']; + get: operations["get-projects-projectId"]; + delete: operations["delete-projects-projectId"]; /** Update fields of a specific project. Currently only the project name is editable. */ - patch: operations['patch-projects-pid']; + patch: operations["patch-projects-pid"]; parameters: { path: { /** Project id */ - pid: components['parameters']['pid']; + pid: components["parameters"]["pid"]; }; }; }; - '/projects/{pid}/campaigns': { - get: operations['get-project-campaigns']; + "/projects/{pid}/campaigns": { + get: operations["get-project-campaigns"]; parameters: { path: { /** Project id */ - pid: components['parameters']['pid']; + pid: components["parameters"]["pid"]; }; }; }; - '/projects/{pid}/users': { + "/projects/{pid}/users": { /** Return a list of users from a specific project */ - get: operations['get-projects-users']; + get: operations["get-projects-users"]; /** Use this to add a new or existent user into a specific project. */ - post: operations['post-projects-pid-users']; + post: operations["post-projects-pid-users"]; /** Remove an user from project */ - delete: operations['delete-projects-pid-users']; + delete: operations["delete-projects-pid-users"]; parameters: { path: { /** Project id */ - pid: components['parameters']['pid']; + pid: components["parameters"]["pid"]; }; }; }; - '/templates': { - /** Retrieve all available use case templates */ - get: operations['get-templates']; + "/users": { + post: operations["post-users"]; + parameters: {}; + }; + "/users/by-email/{email}": { + head: operations["head-users-by-email-email"]; + parameters: { + path: { + email: string; + }; + }; }; - '/users/me': { - get: operations['get-users-me']; + "/users/me": { + get: operations["get-users-me"]; }; - '/users/me/preferences': { - get: operations['get-users-me-preferences']; + "/users/me/preferences": { + get: operations["get-users-me-preferences"]; }; - '/users/me/preferences/{slug}': { - put: operations['put-users-me-preferences-slug']; + "/users/me/preferences/{slug}": { + put: operations["put-users-me-preferences-slug"]; parameters: { path: { slug: string; }; }; }; - '/videos/{vid}': { + "/users/roles": { + get: operations["get-users-roles"]; + parameters: {}; + }; + "/videos/{vid}": { /** Retrive single video data */ - get: operations['get-videos-vid']; + get: operations["get-videos-vid"]; parameters: { path: { vid: string; }; }; }; - '/videos/{vid}/observations': { + "/videos/{vid}/observations": { /** Retrive all observations of a specific video */ - get: operations['get-videos-vid-observations']; - post: operations['post-videos-vid-observations']; + get: operations["get-videos-vid-observations"]; + post: operations["post-videos-vid-observations"]; parameters: { path: { vid: string; }; }; }; - '/videos/{vid}/observations/{oid}': { + "/videos/{vid}/observations/{oid}": { /** delete an observation */ - delete: operations['delete-videos-vid-observations-oid']; + delete: operations["delete-videos-vid-observations-oid"]; /** Update partial data of a video observation. */ - patch: operations['patch-videos-vid-observations-oid']; + patch: operations["patch-videos-vid-observations-oid"]; parameters: { path: { vid: string; @@ -425,9 +461,9 @@ export interface paths { }; }; }; - '/videos/{vid}/translation': { + "/videos/{vid}/translation": { /** Return, if exists, a valid translation in the user preferred language or in the requested language (if provided) */ - get: operations['get-videos-vid-translation']; + get: operations["get-videos-vid-translation"]; /** * This endpoint generates a new translation for the provided video if it does not already exist. * @@ -440,30 +476,30 @@ export interface paths { * * language (string, required): The language code for the desired translation. */ - post: operations['post-videos-vid-translation']; + post: operations["post-videos-vid-translation"]; parameters: { path: { vid: string; }; }; }; - '/workspaces': { - get: operations['get-workspaces']; + "/workspaces": { + get: operations["get-workspaces"]; /** This endpoint is useful to add a new workspace. Only admin can use this. */ - post: operations['post-workspaces']; + post: operations["post-workspaces"]; }; - '/workspaces/{wid}': { - get: operations['get-workspace']; + "/workspaces/{wid}": { + get: operations["get-workspace"]; parameters: { path: { /** Workspace (company, customer) id */ - wid: components['parameters']['wid']; + wid: components["parameters"]["wid"]; }; }; }; - '/workspaces/{wid}/archive': { + "/workspaces/{wid}/archive": { /** Return the project Archive of a specific workspace. If not exist, create and return it */ - get: operations['get-workspaces-wid-archive']; + get: operations["get-workspaces-wid-archive"]; parameters: { path: { /** Workspace (company, customer) id */ @@ -471,25 +507,25 @@ export interface paths { }; }; }; - '/workspaces/{wid}/campaigns': { - get: operations['get-workspace-campaigns']; + "/workspaces/{wid}/campaigns": { + get: operations["get-workspace-campaigns"]; parameters: { path: { /** Workspace (company, customer) id */ - wid: components['parameters']['wid']; + wid: components["parameters"]["wid"]; }; }; }; - '/workspaces/{wid}/coins': { - get: operations['get-workspaces-coins']; + "/workspaces/{wid}/coins": { + get: operations["get-workspaces-coins"]; parameters: { path: { /** Workspace (company, customer) id */ - wid: components['parameters']['wid']; + wid: components["parameters"]["wid"]; }; }; }; - '/workspaces/{wid}/plans': { + "/workspaces/{wid}/plans": { /** * Function: Retrieves all plans within a specified workspace. * Plan Status: Includes plans in a working state, such as those that are in the "draft" or "pending review" stages. Also includes plans that are "approved," provided there is no active campaign currently linked to them. @@ -498,44 +534,47 @@ export interface paths { * - Reviewing all plans that are still in development or awaiting approval. * - Identifying approved plans that are not yet associated with any running campaigns. */ - get: operations['get-workspaces-wid-plans']; - post: operations['post-workspaces-wid-plans']; + get: operations["get-workspaces-wid-plans"]; + post: operations["post-workspaces-wid-plans"]; parameters: { path: { wid: string; }; }; }; - '/plans/{pid}': { - get: operations['get-workspaces-wid-plans-pid']; - delete: operations['delete-workspaces-wid-plans-pid']; - patch: operations['patch-workspaces-wid-plans-pid']; + "/workspaces/{wid}/projects": { + get: operations["get-workspace-projects"]; parameters: { path: { - pid: string; + /** Workspace (company, customer) id */ + wid: components["parameters"]["wid"]; }; }; }; - '/plans/{pid}/status': { - /** */ - patch: operations['patch-workspaces-wid-plans-pid-status']; + "/workspaces/{wid}/projects/{pid}": { + get: operations["get-workspace-project"]; parameters: { path: { - pid: string; + /** Workspace (company, customer) id */ + wid: components["parameters"]["wid"]; + /** Project id */ + pid: components["parameters"]["pid"]; }; }; }; - '/workspaces/{wid}/projects': { - get: operations['get-workspace-projects']; + "/workspaces/{wid}/projects/{pid}/campaigns": { + get: operations["get-workspace-project-campaigns"]; parameters: { path: { /** Workspace (company, customer) id */ - wid: components['parameters']['wid']; + wid: components["parameters"]["wid"]; + /** Project id */ + pid: components["parameters"]["pid"]; }; }; }; - '/workspaces/{wid}/templates': { - get: operations['get-workspaces-templates']; + "/workspaces/{wid}/templates": { + get: operations["get-workspaces-templates"]; parameters: { path: { /** Workspace (company, customer) id */ @@ -543,9 +582,9 @@ export interface paths { }; }; }; - '/workspaces/{wid}/templates/{tid}': { - get: operations['get-workspaces-wid-templates-tid']; - delete: operations['delete-workspaces-wid-templates-tid']; + "/workspaces/{wid}/templates/{tid}": { + get: operations["get-workspaces-wid-templates-tid"]; + delete: operations["delete-workspaces-wid-templates-tid"]; parameters: { path: { wid: string; @@ -553,39 +592,17 @@ export interface paths { }; }; }; - '/workspaces/{wid}/projects/{pid}': { - get: operations['get-workspace-project']; - parameters: { - path: { - /** Workspace (company, customer) id */ - wid: components['parameters']['wid']; - /** Project id */ - pid: components['parameters']['pid']; - }; - }; - }; - '/workspaces/{wid}/projects/{pid}/campaigns': { - get: operations['get-workspace-project-campaigns']; - parameters: { - path: { - /** Workspace (company, customer) id */ - wid: components['parameters']['wid']; - /** Project id */ - pid: components['parameters']['pid']; - }; - }; - }; - '/workspaces/{wid}/users': { + "/workspaces/{wid}/users": { /** Return a list of users from a specific workspace */ - get: operations['get-workspaces-users']; + get: operations["get-workspaces-users"]; /** Use this to add a new or existent user into a specific workspace. */ - post: operations['post-workspaces-wid-users']; + post: operations["post-workspaces-wid-users"]; /** Remove an user from workspace */ - delete: operations['delete-workspaces-wid-users']; + delete: operations["delete-workspaces-wid-users"]; parameters: { path: { /** Workspace (company, customer) id */ - wid: components['parameters']['wid']; + wid: components["parameters"]["wid"]; }; }; }; @@ -595,48 +612,56 @@ export interface components { schemas: { /** Authentication */ Authentication: { - id: number; /** Format: email */ email: string; - role: string; + exp?: number; + iat?: number; + id: number; name: string; picture?: string; + role: string; token: string; - iat?: number; - exp?: number; }; + /** + * BannerType + * @enum {string} + */ + BannerType: + | "banner_testing_automation" + | "banner_user_experience" + | "banner_cyber_security"; /** Bug */ Bug: { - id: number; - internal_id: string; - campaign_id: number; - title: components['schemas']['BugTitle']; - step_by_step: string; - expected_result: string; - current_result: string; - status: components['schemas']['BugStatus']; - severity: components['schemas']['BugSeverity']; - type: components['schemas']['BugType']; - replicability: components['schemas']['BugReplicability']; - priority: components['schemas']['BugPriority']; - custom_status: components['schemas']['BugCustomStatus']; - created: string; - occurred_date: string; - updated?: string; - note?: string; - device: - | components['schemas']['Smartphone'] - | components['schemas']['Tablet'] - | components['schemas']['Desktop']; application_section: { id?: number; prefix_title?: string; - title?: string; simple_title?: string; + title?: string; }; + campaign_id: number; + created: string; + current_result: string; + custom_status: components["schemas"]["BugCustomStatus"]; + device: + | components["schemas"]["Smartphone"] + | components["schemas"]["Tablet"] + | components["schemas"]["Desktop"]; duplicated_of_id?: number; + expected_result: string; + id: number; + internal_id: string; is_favorite?: number; + note?: string; + occurred_date: string; + priority: components["schemas"]["BugPriority"]; read?: boolean; + replicability: components["schemas"]["BugReplicability"]; + severity: components["schemas"]["BugSeverity"]; + status: components["schemas"]["BugStatus"]; + step_by_step: string; + title: components["schemas"]["BugTitle"]; + type: components["schemas"]["BugType"]; + updated?: string; }; /** * BugAdditionalField @@ -647,44 +672,44 @@ export interface components { name: string; value: string; } & ( - | components['schemas']['BugAdditionalFieldRegex'] - | components['schemas']['BugAdditionalFieldSelect'] + | components["schemas"]["BugAdditionalFieldRegex"] + | components["schemas"]["BugAdditionalFieldSelect"] ); /** BugAdditionalFieldRegex */ BugAdditionalFieldRegex: { - validation: string; /** @enum {string} */ - kind: 'regex'; + kind: "regex"; + validation: string; }; /** BugAdditionalFieldSelect */ BugAdditionalFieldSelect: { - options: string[]; /** @enum {string} */ - kind: 'select'; + kind: "select"; + options: string[]; }; /** BugComment */ BugComment: { - id: number; - text: string; creation_date: string; creator: { id: number; - name: string; isInternal: boolean; + name: string; }; + id: number; media?: { - url: string; id: number; type: string; + url: string; }[]; + text: string; }; /** BugCustomStatus */ BugCustomStatus: { - id: number; - name: string; color: string; - phase: components['schemas']['BugCustomStatusPhase']; + id: number; is_default: number; + name: string; + phase: components["schemas"]["BugCustomStatusPhase"]; }; /** BugCustomStatusPhase */ BugCustomStatusPhase: { @@ -693,14 +718,14 @@ export interface components { }; /** BugMedia */ BugMedia: { + creation_date: string; mime_type: { - /** @enum {string} */ - type: 'video' | 'image' | 'other'; extension: string; + /** @enum {string} */ + type: "video" | "image" | "other"; }; /** Format: uri */ url: string; - creation_date: string; }; /** BugPriority */ BugPriority: { @@ -724,23 +749,23 @@ export interface components { }; /** BugTag */ BugTag: { - id: number; - tag_id: number; - name: string; - slug: string; + author_tid?: number; + author_wp_id?: number; bug_id: number; campaign_id: number; - author_wp_id?: number; - author_tid?: number; creation_date: string; + id: number; is_visible_to_customer?: number; + name: string; + slug: string; + tag_id: number; }; /** BugTitle */ BugTitle: { - full: string; /** @description Bug title without context. */ compact: string; context?: string[]; + full: string; }; /** BugType */ BugType: { @@ -749,32 +774,34 @@ export interface components { }; /** Campaign */ Campaign: { - id: number; - start_date: string; - end_date: string; - close_date: string; - title: string; - customer_title: string; - is_public: number; + base_bug_internal_id?: string; /** * @description -1: no bug form; * 0: only bug form; * 1: bug form with bug parade; */ bug_form?: number; - type: { + close_date: string; + customer_title: string; + description?: string; + end_date: string; + family: { id: number; name: string; }; - family: { + id: number; + is_public: number; + project: { id: number; name: string; }; + start_date: string; status: { id: number; name: string; }; - project: { + title: string; + type: { id: number; name: string; }; @@ -782,12 +809,10 @@ export interface components { id: number; name: string; }; - description?: string; - base_bug_internal_id?: string; }; /** CampaignWithOutput */ - CampaignWithOutput: components['schemas']['Campaign'] & { - outputs?: components['schemas']['Output'][]; + CampaignWithOutput: components["schemas"]["Campaign"] & { + outputs?: components["schemas"]["Output"][]; }; /** Cluster */ Cluster: { @@ -800,42 +825,52 @@ export interface components { * The coin only valid currency in order to run an express campaign (no matter what type of express) */ Coin: { - id: number; - customer_id: number; + agreement_id?: number; /** @description Number of available coin */ amount: number; - agreement_id?: number; + created_on?: string; + customer_id: number; + id: number; /** * Format: float * @description This is the single coin price * @default 0 */ price?: number; - created_on?: string; /** @description On each coin use, the related package will be updated */ updated_on?: string; }; + /** CpReqTemplate */ + CpReqTemplate: { + config: string; + description?: string; + id: number; + name: string; + price?: string; + strapi?: components["schemas"]["StrapiTemplate"]; + workspace_id?: number; + }; /** Desktop */ Desktop: { desktop_type: string; os: string; os_version: string; /** @enum {string} */ - type: 'desktop'; + type: "desktop"; }; /** Error */ Error: { - message: string; code: number; error: boolean; + message: string; }; /** * Feature * @description Flags used to enable functionality to some users */ Feature: { - slug?: string; name?: string; + slug?: string; }; /** Generic Device */ GenericDevice: { @@ -845,212 +880,378 @@ export interface components { }; /** Grape */ Grapes: { - title: string; - severity: string; - usersNumber: number; - observations: (components['schemas']['Observation'] & { - uploaderId: number; - mediaId: number; + observations: (components["schemas"]["Observation"] & { deviceType: string; + mediaId: number; + uploaderId: number; usecaseTitle: string; })[]; + severity: string; + title: string; + usersNumber: number; }; /** Insight */ Insight: { - id: number; - title: string; + comment?: string; description: string; + id: number; + observations: (components["schemas"]["Observation"] & { + uploaderId: number; + usecaseTitle: string; + video: { + deviceType: string; + id: number; + }; + })[]; severity: { id: number; name: string; style: string; }; + title: string; visible?: number; - comment?: string; - observations: (components['schemas']['Observation'] & { - video: { - id: number; - deviceType: string; - }; - uploaderId: number; - usecaseTitle: string; - })[]; }; MediaSentiment: { - value: number; - reason: string; paragraphs: { - start: number; end: number; - value: number; reason: string; + start: number; + value: number; }[]; + reason: string; + value: number; }; Module: - | components['schemas']['ModuleTitle'] - | components['schemas']['ModuleDate'] - | components['schemas']['ModuleTask'] - | components['schemas']['ModuleAge'] - | components['schemas']['ModuleLanguage'] - | components['schemas']['ModuleLiteracy'] - | components['schemas']['ModuleTarget'] - | components['schemas']['ModuleGoal'] - | components['schemas']['ModuleGender'] - | components['schemas']['ModuleOutOfScope'] - | components['schemas']['ModuleBrowser'] - | components['schemas']['ModuleTargetNote'] - | components['schemas']['ModuleInstructionNote'] - | components['schemas']['ModuleSetupNote'] - | components['schemas']['ModuleTouchpoints'] - | components['schemas']['ModuleAdditionalTarget']; - ModuleDate: { + | components["schemas"]["ModuleTitle"] + | components["schemas"]["ModuleDate"] + | components["schemas"]["ModuleTask"] + | components["schemas"]["ModuleAge"] + | components["schemas"]["ModuleLanguage"] + | components["schemas"]["ModuleLiteracy"] + | components["schemas"]["ModuleTarget"] + | components["schemas"]["ModuleGoal"] + | components["schemas"]["ModuleGender"] + | components["schemas"]["ModuleOutOfScope"] + | components["schemas"]["ModuleBrowser"] + | components["schemas"]["ModuleTargetNote"] + | components["schemas"]["ModuleInstructionNote"] + | components["schemas"]["ModuleSetupNote"] + | components["schemas"]["ModuleTouchpoints"] + | components["schemas"]["ModuleAdditionalTarget"]; + /** ModuleAdditionalTarget */ + ModuleAdditionalTarget: { + output: string; /** @enum {string} */ - type: 'dates'; + type: "additional_target"; variant: string; - output: { - start: string; - }; }; - ModuleGoal: { + /** ModuleAge */ + ModuleAge: { + output: components["schemas"]["OutputModuleAge"]; /** @enum {string} */ - type: 'goal'; + type: "age"; variant: string; - output: string; }; - ModuleOutOfScope: { + /** ModuleBrowser */ + ModuleBrowser: { + output: components["schemas"]["OutputModuleBrowser"]; /** @enum {string} */ - type: 'out_of_scope'; + type: "browser"; variant: string; - output: string; }; - ModuleTitle: { + ModuleDate: { + output: { + start: string; + }; /** @enum {string} */ - type: 'title'; + type: "dates"; variant: string; - output: string; }; - /** ModuleTask */ - ModuleTask: { + /** ModuleGender */ + ModuleGender: { + output: components["schemas"]["OutputModuleGender"]; /** @enum {string} */ - type: 'tasks'; + type: "gender"; variant: string; - output: components['schemas']['OutputModuleTask'][]; }; - /** ModuleTouchpoints */ - ModuleTouchpoints: { + ModuleGoal: { + output: string; /** @enum {string} */ - type: 'touchpoints'; + type: "goal"; variant: string; - output: components['schemas']['OutputModuleTouchpoints'][]; }; - /** ModuleAge */ - ModuleAge: { + /** ModuleInstructionNote */ + ModuleInstructionNote: { + output: string; /** @enum {string} */ - type: 'age'; + type: "instruction_note"; variant: string; - output: components['schemas']['OutputModuleAge']; }; - /** ModuleGender */ - ModuleGender: { + /** ModuleLanguage */ + ModuleLanguage: { + output: string; /** @enum {string} */ - type: 'gender'; + type: "language"; variant: string; - output: components['schemas']['OutputModuleGender']; }; /** ModuleLiteracy */ ModuleLiteracy: { + output: components["schemas"]["OutputModuleLiteracy"]; /** @enum {string} */ - type: 'literacy'; + type: "literacy"; variant: string; - output: components['schemas']['OutputModuleLiteracy']; }; - /** ModuleLanguage */ - ModuleLanguage: { - /** @enum {string} */ - type: 'language'; + ModuleOutOfScope: { + output: string; + /** @enum {string} */ + type: "out_of_scope"; variant: string; + }; + /** ModuleSetupNote */ + ModuleSetupNote: { output: string; + /** @enum {string} */ + type: "setup_note"; + variant: string; }; /** ModuleTarget */ ModuleTarget: { + output: number; /** @enum {string} */ - type: 'target'; + type: "target"; variant: string; - output: number; }; /** ModuleTargetNote */ ModuleTargetNote: { - /** @enum {string} */ - type: 'target_note'; - variant: string; output: string; - }; - /** ModuleSetupNote */ - ModuleSetupNote: { /** @enum {string} */ - type: 'setup_note'; + type: "target_note"; variant: string; - output: string; }; - /** ModuleInstructionNote */ - ModuleInstructionNote: { + /** ModuleTask */ + ModuleTask: { + output: components["schemas"]["OutputModuleTask"][]; /** @enum {string} */ - type: 'instruction_note'; + type: "tasks"; variant: string; - output: string; }; - /** ModuleBrowser */ - ModuleBrowser: { + ModuleTitle: { + output: string; /** @enum {string} */ - type: 'browser'; + type: "title"; variant: string; - output: components['schemas']['OutputModuleBrowser']; }; - /** ModuleAdditionalTarget */ - ModuleAdditionalTarget: { + /** ModuleTouchpoints */ + ModuleTouchpoints: { + output: components["schemas"]["OutputModuleTouchpoints"][]; /** @enum {string} */ - type: 'additional_target'; + type: "touchpoints"; variant: string; - output: string; }; /** Observation */ Observation: { - id: number; - title: string; description: string; /** Format: float */ - start: number; - /** Format: float */ end: number; + id: number; quotes: string; + /** Format: float */ + start: number; + tags: components["schemas"]["VideoTag"][]; + title: string; uxNote?: string; - tags: components['schemas']['VideoTag'][]; }; /** * Output * @description campaign output item * @enum {string} */ - Output: 'bugs' | 'media' | 'insights'; + Output: "bugs" | "media" | "insights"; + /** OutputModuleAge */ + OutputModuleAge: { + max: number; + min: number; + percentage: number; + }[]; + /** OutputModuleBrowser */ + OutputModuleBrowser: { + /** @enum {string} */ + name: "firefox" | "edge" | "chrome" | "safari"; + percentage: number; + }[]; + /** OutputModuleGender */ + OutputModuleGender: { + /** @enum {string} */ + gender: "male" | "female"; + percentage: number; + }[]; + /** OutputModuleLiteracy */ + OutputModuleLiteracy: { + /** @enum {string} */ + level: "beginner" | "intermediate" | "expert"; + percentage: number; + }[]; + /** SubcomponentTask */ + OutputModuleTask: + | components["schemas"]["OutputModuleTaskVideo"] + | components["schemas"]["OutputModuleTaskBug"] + | components["schemas"]["OutputModuleTaskSurvey"] + | components["schemas"]["OutputModuleTaskModerateVideo"] + | components["schemas"]["OutputModuleTaskExplorativeBug"] + | components["schemas"]["OutputModuleTaskAccessibility"]; + /** OutputModuleTaskAccessibility */ + OutputModuleTaskAccessibility: { + description?: string; + /** @enum {string} */ + kind: "accessibility"; + title: string; + /** Format: uri */ + url?: string; + }; + /** SubcomponentTaskBug */ + OutputModuleTaskBug: { + description?: string; + /** @enum {string} */ + kind: "bug"; + title: string; + /** Format: uri */ + url?: string; + }; + /** OutputModuleTaskExplorativeBug */ + OutputModuleTaskExplorativeBug: { + description?: string; + /** @enum {string} */ + kind: "explorative-bug"; + title: string; + /** Format: uri */ + url?: string; + }; + /** OutputModuleTaskModerateVideo */ + OutputModuleTaskModerateVideo: { + description?: string; + /** @enum {string} */ + kind: "moderate-video"; + title: string; + /** Format: uri */ + url?: string; + }; + /** SubcomponentTaskSurvey */ + OutputModuleTaskSurvey: { + description?: string; + /** @enum {string} */ + kind: "survey"; + title: string; + /** Format: uri */ + url?: string; + }; + /** SubcomponentTaskVideo */ + OutputModuleTaskVideo: { + description?: string; + /** @enum {string} */ + kind: "video"; + title: string; + /** Format: uri */ + url?: string; + }; + /** SubcomponentTouchpoints */ + OutputModuleTouchpoints: + | components["schemas"]["OutputModuleTouchpointsAppDesktop"] + | components["schemas"]["OutputModuleTouchpointsAppTablet"] + | components["schemas"]["OutputModuleTouchpointsAppSmartphone"] + | components["schemas"]["OutputModuleTouchpointsWebDesktop"] + | components["schemas"]["OutputModuleTouchpointsWebTablet"] + | components["schemas"]["OutputModuleTouchpointsWebSmartphone"]; + /** OutputModuleTouchpointsAppDesktop */ + OutputModuleTouchpointsAppDesktop: { + /** @enum {undefined} */ + form_factor: "desktop"; + /** @enum {undefined} */ + kind: "app"; + os: { + linux?: string; + macos?: string; + windows?: string; + }; + }; + /** OutputModuleTouchpointsAppSmartphone */ + OutputModuleTouchpointsAppSmartphone: { + /** @enum {undefined} */ + form_factor: "smartphone"; + /** @enum {undefined} */ + kind: "app"; + os: { + android?: string; + ios?: string; + }; + }; + /** OutputModuleTouchpointsAppTablet */ + OutputModuleTouchpointsAppTablet: { + /** @enum {undefined} */ + form_factor: "tablet"; + /** @enum {undefined} */ + kind: "app"; + os: { + ios?: string; + linux?: string; + windows?: string; + }; + }; + /** OutputModuleTouchpointsWebDesktop */ + OutputModuleTouchpointsWebDesktop: { + /** @enum {undefined} */ + form_factor: "desktop"; + /** @enum {undefined} */ + kind: "web"; + os: { + linux?: string; + macos?: string; + windows?: string; + }; + }; + /** OutputModuleTouchpointsWebSmartphone */ + OutputModuleTouchpointsWebSmartphone: { + /** @enum {undefined} */ + form_factor: "smartphone"; + /** @enum {undefined} */ + kind: "web"; + os: { + android?: string; + ios?: string; + }; + }; + /** OutputModuleTouchpointsWebTablet */ + OutputModuleTouchpointsWebTablet: { + /** @enum {undefined} */ + form_factor: "tablet"; + /** @enum {undefined} */ + kind: "web"; + os: { + android?: string; + ios?: string; + }; + }; /** PaginationData */ PaginationData: { - start?: number; - size?: number; limit?: number; + size?: number; + start?: number; total?: number; }; Paragraph: { - text: string; - start: number; end: number; /** @description Id Of speaker */ speaker?: number; - words: components['schemas']['Word'][]; + start: number; + text: string; + words: components["schemas"]["Word"][]; }; + /** + * PlanStatus + * @enum {string} + */ + PlanStatus: "pending_review" | "draft" | "approved"; /** Platform Object */ Platform: { - /** @description os */ - id: number; /** * @description form_factor * @@ -1062,49 +1263,65 @@ export interface components { * 5 => tv */ deviceType: number; + /** @description os */ + id: number; + }; + /** Data for post-users request for invited user */ + PostUserInviteData: { + profileId: number; + token: string; + /** @enum {string} */ + type: "invite"; + }; + /** Data for post-users request for new user */ + PostUserNewData: { + email: string; + /** @enum {string} */ + type: "new"; + workspace: string; }; /** Project */ Project: { - id: number; - name: string; campaigns_count: number; - workspaceId: number; description?: string; + id: number; is_archive?: number; + name: string; + workspaceId: number; }; /** Report */ Report: { - id?: number; - title?: string; + creation_date?: string; description?: string; - url: string; file_type?: { - extension?: components['schemas']['ReportExtensions']; - type: string; domain_name?: string; + extension?: components["schemas"]["ReportExtensions"]; + type: string; }; - creation_date?: string; + id?: number; + title?: string; update_date?: string; + url: string; }; /** * ReportExtensions * @enum {string} */ ReportExtensions: - | 'pdf' - | 'doc' - | 'docx' - | 'xls' - | 'xlsx' - | 'ppt' - | 'pptx' - | 'rar' - | 'txt' - | 'csv' - | 'zip' - | 'gzip' - | 'gz' - | '7z'; + | "pdf" + | "doc" + | "docx" + | "xls" + | "xlsx" + | "ppt" + | "pptx" + | "rar" + | "txt" + | "csv" + | "zip" + | "gzip" + | "gz" + | "7z"; /** Smartphone */ Smartphone: { manufacturer: string; @@ -1112,7 +1329,51 @@ export interface components { os: string; os_version: string; /** @enum {string} */ - type: 'smartphone'; + type: "smartphone"; + }; + StrapiTemplate: { + background?: string; + description: string; + how?: { + description: string; + /** Format: uri */ + icon: string; + title: string; + }[]; + /** Format: uri */ + image?: string; + /** Format: uri */ + output_image?: string; + pre_title: string; + price?: { + /** @default 0 */ + is_strikethrough?: number; + previous_price?: string; + price: string; + }; + requirements?: { + description: string; + list: string[]; + }; + tags: { + /** Format: uri */ + icon: string; + text: string; + }[]; + title: string; + what?: { + description: string; + goal: string; + }; + why?: { + advantages: string[]; + reasons: { + description: string; + /** Format: uri */ + icon: string; + title: string; + }[]; + }; }; /** Tablet */ Tablet: { @@ -1121,113 +1382,76 @@ export interface components { os: string; os_version: string; /** @enum {string} */ - type: 'tablet'; - }; - /** - * Template - * @description Template of a usecase object - */ - Template: { - title: string; - /** @description Short description used as preview of template or in templates dropdown */ - description?: string; - /** @description HTML content used to pre-fill the use case editor */ - content?: string; - category?: components['schemas']['TemplateCategory']; - /** @enum {string} */ - device_type?: 'webapp' | 'mobileapp'; - /** - * @default en - * @enum {string} - */ - locale?: 'en' | 'it'; - /** Format: uri */ - image?: string; - /** - * @description The use case created by this template needs a login or not? - * @default false - */ - requiresLogin?: boolean; - }; - /** - * TemplateCategory - * @description Group different templates - */ - TemplateCategory: { - id?: number; - name: string; + type: "tablet"; }; /** Tenant */ Tenant: { + email: string; /** @description tryber wp_user_id */ id: number; - profile_id: number; - name: string; - email: string; invitationPending: boolean; + name: string; permissionFrom?: { - /** @enum {string} */ - type?: 'workspace' | 'project'; id?: number; + /** @enum {string} */ + type?: "workspace" | "project"; }; + profile_id: number; }; Transcript: { + paragraphs: components["schemas"]["Paragraph"][]; /** @description Number of spekers */ speakers: number; - paragraphs: components['schemas']['Paragraph'][]; }; /** UseCase */ UseCase: { - title: string; description: string; - /** @description Optional in experiential campaigns */ - functionality?: { - id?: number; - } & components['schemas']['Template']; - logged?: boolean; link?: string; + logged?: boolean; + title: string; }; /** User */ User: { - /** @description This is the main id of the user. Currently is equal to tryber_wp_user_id */ - id: number; + customer_role: string; /** Format: email */ email: string; - role: string; + features?: components["schemas"]["Feature"][]; + /** @description This is the main id of the user. Currently is equal to tryber_wp_user_id */ + id: number; name: string; + picture?: string; profile_id: number; + role: string; tryber_wp_user_id: number; unguess_wp_user_id: number; - picture?: string; - features?: components['schemas']['Feature'][]; }; /** UserPreference */ UserPreference: { + name: string; preference_id: number; value: string; - name: string; }; /** * Video * @description Video uploaded from a user */ Video: { + duration?: number; id: number; - url: string; - streamUrl?: string; poster?: string; - duration?: number; + sentiment?: components["schemas"]["MediaSentiment"]; + streamUrl?: string; tester: { - id: number; - name: string; - surname: string; device: { /** @enum {string} */ - type: 'smartphone' | 'tablet' | 'desktop' | 'other'; + type: "smartphone" | "tablet" | "desktop" | "other"; }; + id: number; + name: string; + surname: string; }; - transcript?: components['schemas']['Transcript']; - sentiment?: components['schemas']['MediaSentiment']; + transcript?: components["schemas"]["Transcript"]; + url: string; }; /** VideoTag */ VideoTag: { @@ -1248,31 +1472,31 @@ export interface components { */ WidgetBugsByDevice: { data: (( - | components['schemas']['Smartphone'] - | components['schemas']['Desktop'] - | components['schemas']['Tablet'] + | components["schemas"]["Smartphone"] + | components["schemas"]["Desktop"] + | components["schemas"]["Tablet"] ) & { - unique_bugs: number; /** @description Unique bugs */ bugs: number; + unique_bugs: number; })[]; /** * @default bugsByDevice * @example bugsByDevice * @enum {string} */ - kind: 'bugsByDevice'; + kind: "bugsByDevice"; }; /** * WidgetBugsByDuplicates * @description Returns the most 10 reported bugs ordered by numberd of duplicates */ WidgetBugsByDuplicates: { - data: (components['schemas']['Bug'] & { + data: (components["schemas"]["Bug"] & { duplicates: number; })[]; /** @enum {string} */ - kind: 'bugsByDuplicates'; + kind: "bugsByDuplicates"; }; /** * WidgetBugsByUseCase @@ -1280,15 +1504,15 @@ export interface components { */ WidgetBugsByUseCase: { data: { + bugs: number; + description: string; title: { full: string; - simple?: string; - prefix?: string; info?: string; + prefix?: string; + simple?: string; }; - description: string; uniqueBugs?: number; - bugs: number; usecase_completion?: number; usecase_id: number; }[]; @@ -1297,7 +1521,7 @@ export interface components { * @example bugsByUseCase * @enum {string} */ - kind: 'bugsByUseCase'; + kind: "bugsByUseCase"; }; /** * WidgetCampaignProgress @@ -1305,25 +1529,25 @@ export interface components { */ WidgetCampaignProgress: { data: { - start_date: string; end_date: string; + /** @description Expected amount of hours required to complete the campaign */ + expected_duration: number; + start_date: string; + /** @description Number of hours from start_date */ + time_elapsed: number; /** * Format: float * @description Percentage fixed rate of completion * @enum {number} */ usecase_completion: 12.5 | 37.5 | 62.5 | 87.5 | 100; - /** @description Number of hours from start_date */ - time_elapsed: number; - /** @description Expected amount of hours required to complete the campaign */ - expected_duration: number; }; /** * @default campaignProgress * @example campaignProgress * @enum {string} */ - kind: 'campaignProgress'; + kind: "campaignProgress"; }; /** * WidgetCampaignUniqueBugs @@ -1331,472 +1555,241 @@ export interface components { */ WidgetCampaignUniqueBugs: { data: { - unique: number; total: number; trend: number; + unique: number; }; /** * @default campaignUniqueBugs * @example campaignUniqueBugs * @enum {string} */ - kind: 'campaignUniqueBugs'; - }; - /** - * WidgetCampaignUxProgress - * @description Used to show an overview of Ux progress - */ - WidgetCampaignUxProgress: { - data: { - countMediaWithObservation?: number; - countMedia?: number; - countTitleTag?: number; - countObservation?: number; - countObservationNoTitle?: number; - countRecurrentTitles?: number; - severitiesDistribution?: { - countPositiveFindings: number; - countMinorIssue: number; - countMajorIssue: number; - countObservations: number; - }; - mostUsedTitles?: { - title: string; - usage: number; - mainSeverityAssignment: string; - }[]; - }; - /** - * @default uxTaggingVideoCompletion - * @example uxTaggingVideoCompletion - * @enum {string} - */ - kind: - | 'uxTaggingVideoCompletion' - | 'uxTotalTitlesVsRecurrentTitles' - | 'uxSeveritiesDistribution' - | 'uxMostUsedTitles'; - }; - Word: { - start: number; - end: number; - /** @description Id of Speaker */ - speaker?: number; - word: string; - }; - /** - * Workspace - * @description A workspace is the company area with projects and campaigns - */ - Workspace: { - id: number; - company: string; - tokens: number; - logo?: string; - csm: { - id: number; - email: string; - name: string; - profile_id: number; - tryber_wp_user_id: number; - picture?: string; - url?: string; - }; - /** @description express coins */ - coins?: number; - /** @description Do this workspace have shared items? */ - isShared?: boolean; - /** @description Number of shared items */ - sharedItems?: number; - }; - /** WidgetCampaignUxTaggingVideoCompletionData */ - WidgetCampaignUxTaggingVideoCompletionData: { - data: { - countMediaWithObservation: number; - countMedia: number; - }; - /** @enum {undefined} */ - kind: 'uxTaggingVideoCompletion'; - }; - /** WidgetCampaignUxTotalTitlesVsRecurrentTitles */ - WidgetCampaignUxTotalTitlesVsRecurrentTitles: { - data: { - countTitleTag: number; - countObservationNoTitle: number; - countRecurrentTitles: number; - }; - /** @enum {undefined} */ - kind: 'uxTotalTitlesVsRecurrentTitles'; - }; - /** WidgetCampaignUxSeveritiesDistribution */ - WidgetCampaignUxSeveritiesDistribution: { - data: { - countObservations: number; - severitiesDistribution: { - countPositiveFindings: number; - countMinorIssue: number; - countMajorIssue: number; - countObservationSeverity: number; - }; - }; - /** @enum {undefined} */ - kind: 'uxSeveritiesDistribution'; + kind: "campaignUniqueBugs"; }; /** WidgetCampaignUxMostUsedTitles */ WidgetCampaignUxMostUsedTitles: { data: { mostUsedTitles: { + mainSeverityAssignment: string; title: string; usage: number; - mainSeverityAssignment: string; }[]; }; /** @enum {undefined} */ - kind: 'uxMostUsedTitles'; - }; - /** - * BannerType - * @enum {string} - */ - BannerType: - | 'banner_testing_automation' - | 'banner_user_experience' - | 'banner_cyber_security'; - /** CpReqTemplate */ - CpReqTemplate: { - id: number; - name: string; - description?: string; - config: string; - workspace_id?: number; - price?: string; - strapi?: components['schemas']['StrapiTemplate']; - }; - /** SubcomponentTaskBug */ - OutputModuleTaskBug: { - /** @enum {string} */ - kind: 'bug'; - title: string; - description?: string; - /** Format: uri */ - url?: string; - }; - /** OutputModuleAge */ - OutputModuleAge: { - min: number; - max: number; - percentage: number; - }[]; - /** SubcomponentTaskVideo */ - OutputModuleTaskVideo: { - /** @enum {string} */ - kind: 'video'; - title: string; - description?: string; - /** Format: uri */ - url?: string; - }; - /** SubcomponentTaskSurvey */ - OutputModuleTaskSurvey: { - /** @enum {string} */ - kind: 'survey'; - title: string; - description?: string; - /** Format: uri */ - url?: string; - }; - /** OutputModuleTaskModerateVideo */ - OutputModuleTaskModerateVideo: { - /** @enum {string} */ - kind: 'moderate-video'; - title: string; - description?: string; - /** Format: uri */ - url?: string; - }; - /** OutputModuleTaskExplorativeBug */ - OutputModuleTaskExplorativeBug: { - /** @enum {string} */ - kind: 'explorative-bug'; - title: string; - description?: string; - /** Format: uri */ - url?: string; - }; - /** OutputModuleTaskAccessibility */ - OutputModuleTaskAccessibility: { - /** @enum {string} */ - kind: 'accessibility'; - title: string; - description?: string; - /** Format: uri */ - url?: string; - }; - /** SubcomponentTask */ - OutputModuleTask: - | components['schemas']['OutputModuleTaskVideo'] - | components['schemas']['OutputModuleTaskBug'] - | components['schemas']['OutputModuleTaskSurvey'] - | components['schemas']['OutputModuleTaskModerateVideo'] - | components['schemas']['OutputModuleTaskExplorativeBug'] - | components['schemas']['OutputModuleTaskAccessibility']; - /** SubcomponentTouchpoints */ - OutputModuleTouchpoints: - | components['schemas']['OutputModuleTouchpointsAppDesktop'] - | components['schemas']['OutputModuleTouchpointsAppTablet'] - | components['schemas']['OutputModuleTouchpointsAppSmartphone'] - | components['schemas']['OutputModuleTouchpointsWebDesktop'] - | components['schemas']['OutputModuleTouchpointsWebTablet'] - | components['schemas']['OutputModuleTouchpointsWebSmartphone']; - /** OutputModuleTouchpointsAppDesktop */ - OutputModuleTouchpointsAppDesktop: { - /** @enum {undefined} */ - kind: 'app'; - /** @enum {undefined} */ - form_factor: 'desktop'; - os: { - linux?: string; - macos?: string; - windows?: string; - }; - }; - /** OutputModuleTouchpointsAppTablet */ - OutputModuleTouchpointsAppTablet: { - /** @enum {undefined} */ - kind: 'app'; - /** @enum {undefined} */ - form_factor: 'tablet'; - os: { - linux?: string; - ios?: string; - windows?: string; - }; - }; - /** OutputModuleTouchpointsAppSmartphone */ - OutputModuleTouchpointsAppSmartphone: { - /** @enum {undefined} */ - kind: 'app'; - /** @enum {undefined} */ - form_factor: 'smartphone'; - os: { - android?: string; - ios?: string; - }; - }; - /** OutputModuleTouchpointsWebDesktop */ - OutputModuleTouchpointsWebDesktop: { - /** @enum {undefined} */ - kind: 'web'; - /** @enum {undefined} */ - form_factor: 'desktop'; - os: { - linux?: string; - macos?: string; - windows?: string; - }; + kind: "uxMostUsedTitles"; }; - /** OutputModuleTouchpointsWebTablet */ - OutputModuleTouchpointsWebTablet: { - /** @enum {undefined} */ - kind: 'web'; - /** @enum {undefined} */ - form_factor: 'tablet'; - os: { - android?: string; - ios?: string; - }; - }; - /** OutputModuleTouchpointsWebSmartphone */ - OutputModuleTouchpointsWebSmartphone: { - /** @enum {undefined} */ - kind: 'web'; - /** @enum {undefined} */ - form_factor: 'smartphone'; - os: { - android?: string; - ios?: string; - }; - }; - /** OutputModuleLiteracy */ - OutputModuleLiteracy: { - /** @enum {string} */ - level: 'beginner' | 'intermediate' | 'expert'; - percentage: number; - }[]; - /** OutputModuleGender */ - OutputModuleGender: { - /** @enum {string} */ - gender: 'male' | 'female'; - percentage: number; - }[]; - /** OutputModuleBrowser */ - OutputModuleBrowser: { - /** @enum {string} */ - name: 'firefox' | 'edge' | 'chrome' | 'safari'; - percentage: number; - }[]; /** - * PlanStatus - * @enum {string} + * WidgetCampaignUxProgress + * @description Used to show an overview of Ux progress */ - PlanStatus: 'pending_review' | 'draft' | 'approved'; - StrapiTemplate: { - title: string; - description: string; - pre_title: string; - /** Format: uri */ - image?: string; - /** Format: uri */ - output_image?: string; - requirements?: { - description: string; - list: string[]; - }; - tags: { - /** Format: uri */ - icon: string; - text: string; - }[]; - why?: { - reasons: { - /** Format: uri */ - icon: string; + WidgetCampaignUxProgress: { + data: { + countMedia?: number; + countMediaWithObservation?: number; + countObservation?: number; + countObservationNoTitle?: number; + countRecurrentTitles?: number; + countTitleTag?: number; + mostUsedTitles?: { + mainSeverityAssignment: string; title: string; - description: string; + usage: number; }[]; - advantages: string[]; + severitiesDistribution?: { + countMajorIssue: number; + countMinorIssue: number; + countObservations: number; + countPositiveFindings: number; + }; }; - what?: { - description: string; - goal: string; + /** + * @default uxTaggingVideoCompletion + * @example uxTaggingVideoCompletion + * @enum {string} + */ + kind: + | "uxTaggingVideoCompletion" + | "uxTotalTitlesVsRecurrentTitles" + | "uxSeveritiesDistribution" + | "uxMostUsedTitles"; + }; + /** WidgetCampaignUxSeveritiesDistribution */ + WidgetCampaignUxSeveritiesDistribution: { + data: { + countObservations: number; + severitiesDistribution: { + countMajorIssue: number; + countMinorIssue: number; + countObservationSeverity: number; + countPositiveFindings: number; + }; }; - how?: { - /** Format: uri */ - icon: string; - title: string; - description: string; - }[]; - price?: { - price: string; - previous_price?: string; - /** @default 0 */ - is_strikethrough?: number; + /** @enum {undefined} */ + kind: "uxSeveritiesDistribution"; + }; + /** WidgetCampaignUxTaggingVideoCompletionData */ + WidgetCampaignUxTaggingVideoCompletionData: { + data: { + countMedia: number; + countMediaWithObservation: number; }; - background?: string; + /** @enum {undefined} */ + kind: "uxTaggingVideoCompletion"; + }; + /** WidgetCampaignUxTotalTitlesVsRecurrentTitles */ + WidgetCampaignUxTotalTitlesVsRecurrentTitles: { + data: { + countObservationNoTitle: number; + countRecurrentTitles: number; + countTitleTag: number; + }; + /** @enum {undefined} */ + kind: "uxTotalTitlesVsRecurrentTitles"; + }; + Word: { + end: number; + /** @description Id of Speaker */ + speaker?: number; + start: number; + word: string; + }; + /** + * Workspace + * @description A workspace is the company area with projects and campaigns + */ + Workspace: { + /** @description express coins */ + coins?: number; + company: string; + csm: { + email: string; + id: number; + name: string; + picture?: string; + profile_id: number; + tryber_wp_user_id: number; + url?: string; + }; + id: number; + /** @description Do this workspace have shared items? */ + isShared?: boolean; + logo?: string; + /** @description Number of shared items */ + sharedItems?: number; + tokens: number; }; }; responses: { /** Shared error response */ Error: { content: { - 'application/json': components['schemas']['Error']; + "application/json": components["schemas"]["Error"]; }; }; }; parameters: { - /** @description Workspace (company, customer) id */ - wid: string; - /** @description Project id */ - pid: string; + /** @description Defines an identifier for the bug object (BUG ID) */ + bid: string; + /** @description Campaign id */ + cid: string; + /** @description Custom Status id */ + csid: string; + /** @description filterBy[]= */ + filterBy: unknown; + /** @description Insight id */ + iid: string; /** @description Limit pagination parameter */ limit: number; - /** @description Start pagination parameter */ - start: number; /** @description Order value (ASC, DESC) */ order: string; /** @description Order by accepted field */ orderBy: string; - /** @description filterBy[]= */ - filterBy: unknown; - /** @description Campaign id */ - cid: string; - /** @description Defines an identifier for the bug object (BUG ID) */ - bid: string; - /** @description Campaign widget slug */ - wslug: - | 'bugs-by-usecase' - | 'bugs-by-device' - | 'cp-progress' - | 'unique-bugs' - | 'bugs-by-duplicates' - | 'ux-tagging-video-completion' - | 'ux-total-titles-vs-recurrent-titles' - | 'ux-severities-distribution' - | 'ux-most-used-titles'; + /** @description Project id */ + pid: string; /** @description keywords to search */ search: string; - /** @description Custom Status id */ - csid: string; - /** @description Insight id */ - iid: string; + /** @description Start pagination parameter */ + start: number; + /** @description Workspace (company, customer) id */ + wid: string; + /** @description Campaign widget slug */ + wslug: + | "bugs-by-usecase" + | "bugs-by-device" + | "cp-progress" + | "unique-bugs" + | "bugs-by-duplicates" + | "ux-tagging-video-completion" + | "ux-total-titles-vs-recurrent-titles" + | "ux-severities-distribution" + | "ux-most-used-titles"; }; requestBodies: { - Credentials: { - content: { - 'application/json': { - username: string; - password: string; - }; - }; - }; Campaign: { content: { - 'application/json': { - title: string; - start_date: string; - end_date: string; - close_date: string; - customer_title?: string; - status_id?: number; - is_public?: number; + "application/json": { + base_bug_internal_id?: string; + browsers?: number[]; campaign_type_id: number; - project_id: number; - pm_id: number; - platforms: components['schemas']['Platform'][]; - /** @description Da togliere */ - page_preview_id?: number; - /** @description Da togliere */ - page_manual_id?: number; + close_date: string; /** @description Used to check available coins */ customer_id: number; + customer_title?: string; + description?: string; + end_date: string; + goal?: string; has_bug_form?: number; /** @description if has_bug_form is 0 this has to be 0 */ has_bug_parade?: number; - description?: string; - base_bug_internal_id?: string; - express_slug: string; - use_cases?: components['schemas']['UseCase'][]; - productType?: number; - productLink?: string; - browsers?: number[]; + is_public?: number; languages?: string[]; outOfScope?: string; - testerRequirements?: string; + /** @description Da togliere */ + page_manual_id?: number; + /** @description Da togliere */ + page_preview_id?: number; + platforms: components["schemas"]["Platform"][]; + pm_id: number; + productLink?: string; + productType?: number; + project_id: number; + start_date: string; + status_id?: number; targetSize?: number; - goal?: string; testDescription?: string; + testerRequirements?: string; + title: string; + use_cases?: components["schemas"]["UseCase"][]; }; }; }; - Project: { + Credentials: { content: { - 'application/json': { - name: string; - customer_id: number; - description?: string; + "application/json": { + password: string; + username: string; }; }; }; Invitation: { content: { - 'application/json': { + "application/json": { email: string; - name?: string; - surname?: string; - locale?: string; event_name?: string; - redirect_url?: string; + locale?: string; message?: string; + name?: string; + redirect_url?: string; + surname?: string; + }; + }; + }; + Project: { + content: { + "application/json": { + customer_id: number; + description?: string; + name: string; }; }; }; @@ -1805,79 +1798,63 @@ export interface components { export interface operations { /** Get all routes available for this apis */ - 'get-root': { - parameters: {}; - responses: { - /** OK */ - 200: { - content: { - 'application/json': { [key: string]: unknown }; - }; - }; - 500: components['responses']['Error']; - }; - }; - /** A request to login with your username and password */ - 'post-authenticate': { + "get-root": { parameters: {}; responses: { /** OK */ 200: { content: { - 'application/json': components['schemas']['Authentication']; + "application/json": { [key: string]: unknown }; }; }; - 500: components['responses']['Error']; + 500: components["responses"]["Error"]; }; - requestBody: components['requestBodies']['Credentials']; }; - 'post-analytics-views-campaigns-cid': { + "post-analytics-views-campaigns-cid": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { + "application/json": { success?: boolean; }; }; }; - 500: components['responses']['Error']; + 500: components["responses"]["Error"]; }; }; - 'post-campaigns': { + /** A request to login with your username and password */ + "post-authenticate": { parameters: {}; responses: { /** OK */ 200: { content: { - 'application/json': components['schemas']['Campaign']; + "application/json": components["schemas"]["Authentication"]; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 404: components['responses']['Error']; - 500: components['responses']['Error']; + 500: components["responses"]["Error"]; }; - requestBody: components['requestBodies']['Campaign']; + requestBody: components["requestBodies"]["Credentials"]; }; - 'get-campaign': { + "get-campaign": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': components['schemas']['CampaignWithOutput'] & { + "application/json": components["schemas"]["CampaignWithOutput"] & { isArchived?: boolean; plan?: number; }; @@ -1885,158 +1862,160 @@ export interface operations { }; }; }; - 'patch-campaigns': { + "patch-campaigns": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': components['schemas']['Campaign']; + "application/json": components["schemas"]["Campaign"]; }; }; }; requestBody: { content: { - 'application/json': { + "application/json": { customer_title?: string; project_id?: number; }; }; }; }; - 'get-campaigns-cid-bug-types': { + "get-campaigns-cid-bug-types": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': components['schemas']['BugType'][]; + "application/json": components["schemas"]["BugType"][]; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'get-campaigns-cid-bugs': { + "get-campaigns-cid-bugs": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; query: { /** Limit pagination parameter */ - limit?: components['parameters']['limit']; + limit?: components["parameters"]["limit"]; /** Start pagination parameter */ - start?: components['parameters']['start']; + start?: components["parameters"]["start"]; /** Order value (ASC, DESC) */ - order?: components['parameters']['order']; + order?: components["parameters"]["order"]; /** Order by accepted field */ - orderBy?: components['parameters']['orderBy']; + orderBy?: components["parameters"]["orderBy"]; /** filterBy[]= */ - filterBy?: components['parameters']['filterBy']; + filterBy?: components["parameters"]["filterBy"]; /** keywords to search */ - search?: components['parameters']['search']; + search?: components["parameters"]["search"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - items?: (components['schemas']['Bug'] & { - tags?: { - tag_id: number; - tag_name: string; - }[]; - siblings: number; - comments: number; + "application/json": { + items?: (components["schemas"]["Bug"] & { additional_fields?: { + name: string; slug: string; value: string; - name: string; + }[]; + comments: number; + siblings: number; + tags?: { + tag_id: number; + tag_name: string; }[]; })[]; - start?: number; limit?: number; size?: number; + start?: number; total?: number; }; }; }; - 400: components['responses']['Error']; - 401: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 401: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'get-campaigns-single-bug': { + "get-campaigns-single-bug": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; /** Defines an identifier for the bug object (BUG ID) */ - bid: components['parameters']['bid']; + bid: components["parameters"]["bid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': components['schemas']['Bug'] & { - media: components['schemas']['BugMedia'][]; - tags: components['schemas']['BugTag'][]; - additional_fields: components['schemas']['BugAdditionalField'][]; + "application/json": components["schemas"]["Bug"] & { + additional_fields: components["schemas"]["BugAdditionalField"][]; + media: components["schemas"]["BugMedia"][]; reporter: { - tester_id: number; name: string; + tester_id: number; }; + tags: components["schemas"]["BugTag"][]; }; }; }; - 400: components['responses']['Error']; - 401: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 401: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'patch-campaigns-cid-bugs-bid': { + "patch-campaigns-cid-bugs-bid": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; /** Defines an identifier for the bug object (BUG ID) */ - bid: components['parameters']['bid']; + bid: components["parameters"]["bid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { + "application/json": { + custom_status?: components["schemas"]["BugCustomStatus"]; + priority?: components["schemas"]["BugPriority"]; tags?: { tag_id: number; tag_name: string; }[]; - priority?: components['schemas']['BugPriority']; - custom_status?: components['schemas']['BugCustomStatus']; }; }; }; }; requestBody: { content: { - 'application/json': { + "application/json": { + custom_status_id?: number; + priority_id?: number; tags?: ( | { tag_id: number; @@ -2045,90 +2024,91 @@ export interface operations { tag_name: string; } )[]; - priority_id?: number; - custom_status_id?: number; }; }; }; }; - 'get-campaigns-cid-bugs-bid-comments': { + "get-campaigns-cid-bugs-bid-comments": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; /** Defines an identifier for the bug object (BUG ID) */ - bid: components['parameters']['bid']; + bid: components["parameters"]["bid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - items: components['schemas']['BugComment'][]; + "application/json": { + items: components["schemas"]["BugComment"][]; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'post-campaigns-cid-bugs-bid-comments': { + "post-campaigns-cid-bugs-bid-comments": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; /** Defines an identifier for the bug object (BUG ID) */ - bid: components['parameters']['bid']; + bid: components["parameters"]["bid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': components['schemas']['BugComment']; + "application/json": components["schemas"]["BugComment"]; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; requestBody: { content: { - 'application/json': { - text: string; - mentioned?: { + "application/json": { + media_id?: { id: number; }[]; - media_id?: { + mentioned?: { id: number; }[]; + text: string; }; }; }; }; - 'post-campaigns-cid-bugs-bid-media': { + "post-campaigns-cid-bugs-bid-comments-cmid-media": { parameters: { path: { - /** Campaign id */ cid: string; - /** Defines an identifier for the bug object (BUG ID) */ bid: string; + cmid: string; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { + "application/json": { failed?: { - name: string; /** @enum {string} */ errorCode: - | 'FILE_TOO_BIG' - | 'INVALID_FILE_EXTENSION' - | 'GENERIC_ERROR'; + | "FILE_TOO_BIG" + | "INVALID_FILE_EXTENSION" + | "GENERIC_ERROR"; + name: string; + }[]; + files?: { + name: string; + path: string; }[]; uploaded_ids?: { id: number; @@ -2139,36 +2119,54 @@ export interface operations { }; requestBody: { content: { - 'multipart/form-data': { - media: string | string[]; - }; + "multipart/form-data": { + media: string | string[]; + }; + }; + }; + }; + "delete-campaigns-cid-bugs-bid-comments-cmid": { + parameters: { + path: { + cid: string; + bid: string; + cmid: string; + }; + }; + responses: { + /** OK */ + 200: unknown; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; + }; + requestBody: { + content: { + "application/json": { [key: string]: unknown }; }; }; }; - 'post-campaigns-cid-bugs-bid-comments-cmid-media': { + "post-campaigns-cid-bugs-bid-media": { parameters: { path: { + /** Campaign id */ cid: string; + /** Defines an identifier for the bug object (BUG ID) */ bid: string; - cmid: string; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - files?: { - name: string; - path: string; - }[]; + "application/json": { failed?: { - name: string; /** @enum {string} */ errorCode: - | 'FILE_TOO_BIG' - | 'INVALID_FILE_EXTENSION' - | 'GENERIC_ERROR'; + | "FILE_TOO_BIG" + | "INVALID_FILE_EXTENSION" + | "GENERIC_ERROR"; + name: string; }[]; uploaded_ids?: { id: number; @@ -2179,34 +2177,13 @@ export interface operations { }; requestBody: { content: { - 'multipart/form-data': { + "multipart/form-data": { media: string | string[]; }; }; }; }; - 'delete-campaigns-cid-bugs-bid-comments-cmid': { - parameters: { - path: { - cid: string; - bid: string; - cmid: string; - }; - }; - responses: { - /** OK */ - 200: unknown; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; - }; - requestBody: { - content: { - 'application/json': { [key: string]: unknown }; - }; - }; - }; - 'get-campaigns-bug-siblings': { + "get-campaigns-bug-siblings": { parameters: { path: { /** Campaign id */ @@ -2219,45 +2196,45 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': { + "application/json": { father?: { - id: number; - title: { - full: string; - compact: string; - context?: string[]; - }; context?: string; device: string; + id: number; os: { name: string; version: string; }; - }; - siblings: { - id: number; title: { - full: string; compact: string; context?: string[]; + full: string; }; + }; + siblings: { context?: string; device: string; + id: number; os: { name: string; version: string; }; + title: { + compact: string; + context?: string[]; + full: string; + }; }[]; }; }; }; - 400: components['responses']['Error']; - 401: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 401: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'get-campaigns-cid-clusters': { + "get-campaigns-cid-clusters": { parameters: { path: { cid: string; @@ -2267,17 +2244,17 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': { - items?: components['schemas']['Cluster'][]; + "application/json": { + items?: components["schemas"]["Cluster"][]; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'get-campaigns-cid-custom-statuses': { + "get-campaigns-cid-custom-statuses": { parameters: { path: { /** Campaign id */ @@ -2288,15 +2265,15 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': components['schemas']['BugCustomStatus'][]; + "application/json": components["schemas"]["BugCustomStatus"][]; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'delete-campaigns-cid-custom_statuses': { + "delete-campaigns-cid-custom_statuses": { parameters: { path: { /** Campaign id */ @@ -2307,7 +2284,7 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': { + "application/json": { status?: boolean; }; }; @@ -2315,14 +2292,14 @@ export interface operations { }; requestBody: { content: { - 'application/json': { + "application/json": { custom_status_id: number; to_custom_status_id?: number; }[]; }; }; }; - 'patch-campaigns-cid-custom_statuses': { + "patch-campaigns-cid-custom_statuses": { parameters: { path: { /** Campaign id */ @@ -2333,22 +2310,22 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': components['schemas']['BugCustomStatus'][]; + "application/json": components["schemas"]["BugCustomStatus"][]; }; }; }; requestBody: { content: { - 'application/json': { + "application/json": { + color: string; /** @description se esiste già questo parametro viene passato nel request body\r\nse invece non esiste ed il custom status deve essere creato, non viene passato */ custom_status_id?: number; name: string; - color: string; }[]; }; }; }; - 'get-campaigns-cid-devices': { + "get-campaigns-cid-devices": { parameters: { path: { /** Campaign id */ @@ -2359,21 +2336,21 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': { + "application/json": { device: string; }[]; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'put-campaigns-cid-findings-fid': { + "put-campaigns-cid-findings-fid": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; /** Finding id */ fid: string; }; @@ -2384,24 +2361,24 @@ export interface operations { }; requestBody: { content: { - 'application/json': { + "application/json": { comment: string; }; }; }; }; - 'get-insights': { + "get-insights": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': (components['schemas']['Insight'] & { + "application/json": (components["schemas"]["Insight"] & { usecases: { id: number; name: string; @@ -2409,123 +2386,123 @@ export interface operations { })[]; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'post-insights': { + "post-insights": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': components['schemas']['Insight']; + "application/json": components["schemas"]["Insight"]; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; requestBody: { content: { - 'application/json': { - title: string; + "application/json": { + comment?: string; description?: string; - severity_id: number; observations_ids: number[]; - comment?: string; + severity_id: number; + title: string; visible?: number; }; }; }; }; /** Used to extra info about a selected campaign */ - 'get-campaigns-cid-meta': { + "get-campaigns-cid-meta": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': components['schemas']['Campaign'] & { - selected_testers: number; + "application/json": components["schemas"]["Campaign"] & { /** @description Array of form factors */ allowed_devices: string[]; + selected_testers: number; }; }; }; - 400: components['responses']['Error']; - 401: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 401: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; /** * Return all observations for a specificCampaigns. * You can group by observations for usecase and grapes (observations with same title) or get an ungrouped list. */ - 'get-campaigns-cid-observations': { + "get-campaigns-cid-observations": { parameters: { path: { cid: string; }; query: { - groupBy?: 'usecase-grapes'; + groupBy?: "usecase-grapes"; }; }; responses: { /** OK */ 200: { content: { - 'application/json': + "application/json": | { - results: { - usecaseId: number; - usecaseTitle: string; - grapes: components['schemas']['Grapes'][]; - ungrouped: (components['schemas']['Observation'] & { - uploaderId: number; - mediaId: number; - deviceType: string; - usecaseTitle: string; - })[]; - }[]; /** * @default usecase-grapes * @example usecase-grapes * @enum {string} */ - kind: 'usecase-grapes'; + kind: "usecase-grapes"; + results: { + grapes: components["schemas"]["Grapes"][]; + ungrouped: (components["schemas"]["Observation"] & { + deviceType: string; + mediaId: number; + uploaderId: number; + usecaseTitle: string; + })[]; + usecaseId: number; + usecaseTitle: string; + }[]; } | { - results: (components['schemas']['Observation'] & { - uploaderId: number; - mediaId: number; - deviceType: string; - usecaseTitle: string; - })[]; /** * @default ungrouped * @example ungrouped * @enum {string} */ - kind: 'ungrouped'; + kind: "ungrouped"; + results: (components["schemas"]["Observation"] & { + deviceType: string; + mediaId: number; + uploaderId: number; + usecaseTitle: string; + })[]; }; }; }; }; }; - 'get-campaigns-cid-os': { + "get-campaigns-cid-os": { parameters: { path: { /** Campaign id */ @@ -2536,17 +2513,17 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': { + "application/json": { os: string; }[]; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'get-campaigns-cid-priorities': { + "get-campaigns-cid-priorities": { parameters: { path: { /** Campaign id */ @@ -2557,16 +2534,16 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': components['schemas']['BugPriority'][]; + "application/json": components["schemas"]["BugPriority"][]; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; /** Return all accepted replicabilities of a specific campaign */ - 'get-campaigns-replicabilities': { + "get-campaigns-replicabilities": { parameters: { path: { /** Campaign id */ @@ -2577,7 +2554,7 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': components['schemas']['BugReplicability'][]; + "application/json": components["schemas"]["BugReplicability"][]; }; }; /** Bad Request */ @@ -2587,42 +2564,42 @@ export interface operations { }; }; /** Return all available report of a specific campaign */ - 'get-campaigns-reports': { + "get-campaigns-reports": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': components['schemas']['Report'][]; + "application/json": components["schemas"]["Report"][]; }; }; }; }; - 'get-campaigns-cid-severities': { + "get-campaigns-cid-severities": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': components['schemas']['BugSeverity'][]; + "application/json": components["schemas"]["BugSeverity"][]; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'get-campaigns-cid-suggestions': { + "get-campaigns-cid-suggestions": { parameters: { path: { /** Campaign id */ @@ -2633,21 +2610,21 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': { + "application/json": { suggestion?: { - slug: components['schemas']['BannerType']; /** @description ServiceId from strapi */ serviceId?: number; + slug: components["schemas"]["BannerType"]; }; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'post-campaigns-cid-suggestions': { + "post-campaigns-cid-suggestions": { parameters: { path: { /** Campaign id */ @@ -2658,47 +2635,47 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': { [key: string]: unknown }; + "application/json": { [key: string]: unknown }; }; }; }; requestBody: { content: { - 'application/json': { - slug: components['schemas']['BannerType']; + "application/json": { + slug: components["schemas"]["BannerType"]; }; }; }; }; - 'get-campaigns-cid-tags': { + "get-campaigns-cid-tags": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - tag_id: number; + "application/json": { display_name: string; - slug: string; is_public?: number; + slug: string; + tag_id: number; }[]; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'get-campaigns-cid-usecases': { + "get-campaigns-cid-usecases": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; query: { /** bugs, videos */ @@ -2709,115 +2686,116 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': { + "application/json": { + completion: number; + content?: string; id: number; title: { full: string; - simple?: string; - prefix?: string; info?: string; + prefix?: string; + simple?: string; }; - completion: number; }[]; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; /** Return a list of users from a specific campaign */ - 'get-campaign-users': { + "get-campaign-users": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; query: { /** Limit pagination parameter */ - limit?: components['parameters']['limit']; + limit?: components["parameters"]["limit"]; /** Start pagination parameter */ - start?: components['parameters']['start']; + start?: components["parameters"]["start"]; /** Order value (ASC, DESC) */ - order?: components['parameters']['order']; + order?: components["parameters"]["order"]; /** Order by accepted field */ - orderBy?: components['parameters']['orderBy']; + orderBy?: components["parameters"]["orderBy"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - items: components['schemas']['Tenant'][]; - start?: number; + "application/json": { + items: components["schemas"]["Tenant"][]; limit?: number; size?: number; + start?: number; total?: number; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; /** Use this to add a new or existent user into a specific campaign. */ - 'post-campaign-cid-users': { + "post-campaign-cid-users": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { + "application/json": { + email: string; profile_id: number; tryber_wp_user_id: number; - email: string; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; - requestBody: components['requestBodies']['Invitation']; + requestBody: components["requestBodies"]["Invitation"]; }; /** Remove an user from campaign */ - 'delete-campaign-cid-users': { + "delete-campaign-cid-users": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - items: components['schemas']['Tenant'][]; + "application/json": { + items: components["schemas"]["Tenant"][]; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; requestBody: { content: { - 'application/json': { + "application/json": { /** @description Tryber WP USER ID */ user_id: number; }; }; }; }; - 'get-campaigns-cid-ux': { + "get-campaigns-cid-ux": { parameters: { path: { /** Campaign id */ @@ -2826,68 +2804,68 @@ export interface operations { query: { showAsCustomer?: boolean; /** filterBy[]= */ - filterBy?: components['parameters']['filterBy']; + filterBy?: components["parameters"]["filterBy"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - goal?: string; - users?: number; + "application/json": { findings?: { + cluster: + | { + id: number; + name: string; + }[] + | "all"; + comment?: string; + description: string; /** @description this field is the Finding ID */ id: number; - title: string; - description: string; - comment?: string; severity: { id: number; name: string; style: string; }; - cluster: - | { - id: number; - name: string; - }[] - | 'all'; + title: string; video?: { - url: string; - streamUrl: string; + description?: string; + end: number; poster?: string; start: number; - end: number; - description?: string; + streamUrl: string; + url: string; }[]; }[]; + goal?: string; + methodology?: { + description: string; + type: string; + }; + questions?: { + text: string; + }[]; sentiment?: { cluster: { id: number; name: string; }; - value: number; comment: string; + value: number; }[]; - methodology?: { - type: string; - description: string; - }; - questions?: { - text: string; - }[]; + users?: number; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 404: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 404: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; /** Retrieve all groups of public ux-tags for a specific campaign */ - 'get-campaigns-cid-video-tags': { + "get-campaigns-cid-video-tags": { parameters: { path: { cid: string; @@ -2897,7 +2875,7 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': { + "application/json": { group: { id: number; name: string; @@ -2914,7 +2892,7 @@ export interface operations { }; }; /** Add videoTags with groups to a specific campaign */ - 'post-campaigns-cid-video-tags': { + "post-campaigns-cid-video-tags": { parameters: { path: { cid: string; @@ -2924,14 +2902,14 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': components['schemas']['VideoTag']; + "application/json": components["schemas"]["VideoTag"]; }; }; }; /** If there is a group, post new tag into that group; otherwise, create the group and add tag into the new group. */ requestBody: { content: { - 'application/json': { + "application/json": { group: { name: string; }; @@ -2944,46 +2922,46 @@ export interface operations { }; }; /** Return all published video for a specific campaign */ - 'get-campaigns-cid-videos': { + "get-campaigns-cid-videos": { parameters: { path: { cid: string; }; query: { /** Limit pagination parameter */ - limit?: components['parameters']['limit']; + limit?: components["parameters"]["limit"]; /** Start pagination parameter */ - start?: components['parameters']['start']; + start?: components["parameters"]["start"]; /** Order value (ASC, DESC) */ - order?: components['parameters']['order']; + order?: components["parameters"]["order"]; /** Order by accepted field */ - orderBy?: components['parameters']['orderBy']; + orderBy?: components["parameters"]["orderBy"]; /** filterBy[]= */ - filterBy?: components['parameters']['filterBy']; + filterBy?: components["parameters"]["filterBy"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - items: (components['schemas']['Video'] & { + "application/json": { + items: (components["schemas"]["Video"] & { usecaseId: number; })[]; - } & components['schemas']['PaginationData']; + } & components["schemas"]["PaginationData"]; }; }; }; }; - 'get-campaigns-cid-widgets-wslug': { + "get-campaigns-cid-widgets-wslug": { parameters: { path: { /** Campaign id */ - cid: components['parameters']['cid']; + cid: components["parameters"]["cid"]; }; query: { /** Campaign widget slug */ - s: components['parameters']['wslug']; + s: components["parameters"]["wslug"]; /** should update bug trend after request resolves? */ updateTrend?: boolean; }; @@ -2992,197 +2970,316 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': - | components['schemas']['WidgetBugsByUseCase'] - | components['schemas']['WidgetBugsByDevice'] - | components['schemas']['WidgetCampaignProgress'] - | components['schemas']['WidgetCampaignUniqueBugs'] - | components['schemas']['WidgetBugsByDuplicates'] - | components['schemas']['WidgetCampaignUxTaggingVideoCompletionData'] - | components['schemas']['WidgetCampaignUxTotalTitlesVsRecurrentTitles'] - | components['schemas']['WidgetCampaignUxSeveritiesDistribution'] - | components['schemas']['WidgetCampaignUxMostUsedTitles']; + "application/json": + | components["schemas"]["WidgetBugsByUseCase"] + | components["schemas"]["WidgetBugsByDevice"] + | components["schemas"]["WidgetCampaignProgress"] + | components["schemas"]["WidgetCampaignUniqueBugs"] + | components["schemas"]["WidgetBugsByDuplicates"] + | components["schemas"]["WidgetCampaignUxTaggingVideoCompletionData"] + | components["schemas"]["WidgetCampaignUxTotalTitlesVsRecurrentTitles"] + | components["schemas"]["WidgetCampaignUxSeveritiesDistribution"] + | components["schemas"]["WidgetCampaignUxMostUsedTitles"]; + }; + }; + 400: components["responses"]["Error"]; + 401: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; + }; + }; + "get-insights-iid": { + parameters: { + path: { + /** Insight id */ + iid: components["parameters"]["iid"]; + }; + }; + responses: { + /** OK */ + 200: { + content: { + "application/json": components["schemas"]["Insight"]; }; }; - 400: components['responses']['Error']; - 401: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; + }; + }; + "delete-insights-iid": { + parameters: { + path: { + /** Insight id */ + iid: components["parameters"]["iid"]; + }; + }; + responses: { + /** OK */ + 200: unknown; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'get-insights-iid': { + "patch-insights-iid": { parameters: { path: { /** Insight id */ - iid: components['parameters']['iid']; + iid: components["parameters"]["iid"]; + }; + }; + responses: { + /** OK */ + 200: { + content: { + "application/json": components["schemas"]["Insight"]; + }; + }; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; + }; + requestBody: { + content: { + "application/json": { + comment?: string; + description?: string; + observations_ids?: number[]; + severity_id?: number; + title?: string; + visible?: number; + }; + }; + }; + }; + "get-invites-profile-token": { + parameters: { + path: { + profile: string; + token: string; + }; + }; + responses: { + /** OK */ + 200: { + content: { + "application/json": { + email: string; + name: string; + surname: string; + workspace: string; + }; + }; + }; + /** Bad Request */ + 400: unknown; + }; + }; + /** Delete a media-comment */ + "delete-media-comment-mcid": { + parameters: { + path: { + mcid: string; + }; + }; + responses: { + /** OK */ + 200: { + content: { + "application/json": { [key: string]: unknown }; + }; + }; + /** Unauthorized */ + 401: unknown; + /** Not Found */ + 404: unknown; + }; + }; + "get-media-id": { + parameters: { + path: { + id: string; + }; + }; + responses: { + /** Found */ + 302: never; + }; + }; + "get-workspaces-wid-plans-pid": { + parameters: { + path: { + pid: string; }; }; responses: { /** OK */ 200: { content: { - 'application/json': components['schemas']['Insight']; + "application/json": { + campaign?: { + id: number; + startDate: string; + /** @description CustomerTitle ?? Title */ + title: string; + }; + config: { + modules: components["schemas"]["Module"][]; + }; + id: number; + project: { + id: number; + name: string; + }; + quote?: { + id: number; + /** @enum {string} */ + status: "pending" | "proposed" | "approved" | "rejected"; + value: string; + }; + status: components["schemas"]["PlanStatus"]; + workspace_id: number; + }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; }; }; - 'delete-insights-iid': { + "delete-workspaces-wid-plans-pid": { parameters: { path: { - /** Insight id */ - iid: components['parameters']['iid']; + pid: string; }; }; responses: { /** OK */ 200: unknown; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; }; }; - 'patch-insights-iid': { + "patch-workspaces-wid-plans-pid": { parameters: { path: { - /** Insight id */ - iid: components['parameters']['iid']; + pid: string; }; }; responses: { /** OK */ - 200: { - content: { - 'application/json': components['schemas']['Insight']; - }; - }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 200: unknown; + /** Forbidden */ + 403: unknown; + /** Not Found */ + 404: unknown; }; requestBody: { content: { - 'application/json': { - title?: string; - description?: string; - severity_id?: number; - observations_ids?: number[]; - comment?: string; - visible?: number; + "application/json": { + config: { + modules: components["schemas"]["Module"][]; + }; }; }; }; }; - 'get-media-id': { - parameters: { - path: { - id: string; - }; - }; - responses: { - /** Found */ - 302: never; - }; - }; - /** Delete a media-comment */ - 'delete-media-comment-mcid': { + /** */ + "patch-workspaces-wid-plans-pid-status": { parameters: { path: { - mcid: string; + pid: string; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { [key: string]: unknown }; + "application/json": { [key: string]: unknown }; + }; + }; + }; + requestBody: { + content: { + "application/json": { + status: components["schemas"]["PlanStatus"]; }; }; - /** Unauthorized */ - 401: unknown; - /** Not Found */ - 404: unknown; }; }; - 'post-projects': { + "post-projects": { responses: { /** OK */ 200: { content: { - 'application/json': components['schemas']['Project']; + "application/json": components["schemas"]["Project"]; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 404: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 404: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; - requestBody: components['requestBodies']['Project']; + requestBody: components["requestBodies"]["Project"]; }; /** Retrieve projects details from an ID. */ - 'get-projects-projectId': { + "get-projects-projectId": { parameters: { path: { /** Project id */ - pid: components['parameters']['pid']; + pid: components["parameters"]["pid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': components['schemas']['Project']; + "application/json": components["schemas"]["Project"]; }; }; - 400: components['responses']['Error']; - 401: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 401: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'delete-projects-projectId': { + "delete-projects-projectId": { parameters: { path: { /** Project id */ - pid: components['parameters']['pid']; + pid: components["parameters"]["pid"]; }; }; responses: { /** OK */ 200: unknown; - 400: components['responses']['Error']; - 401: components['responses']['Error']; - 403: components['responses']['Error']; - 405: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 401: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 405: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; /** Update fields of a specific project. Currently only the project name is editable. */ - 'patch-projects-pid': { + "patch-projects-pid": { parameters: { path: { /** Project id */ - pid: components['parameters']['pid']; + pid: components["parameters"]["pid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': components['schemas']['Project']; + "application/json": components["schemas"]["Project"]; }; }; - 400: components['responses']['Error']; - 401: components['responses']['Error']; - 403: components['responses']['Error']; - 405: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 401: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 405: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; requestBody: { content: { - 'application/json': Partial<{ + "application/json": Partial<{ display_name: string; }> & Partial<{ @@ -3191,188 +3288,205 @@ export interface operations { }; }; }; - 'get-project-campaigns': { + "get-project-campaigns": { parameters: { path: { /** Project id */ - pid: components['parameters']['pid']; + pid: components["parameters"]["pid"]; }; query: { /** Limit pagination parameter */ - limit?: components['parameters']['limit']; + limit?: components["parameters"]["limit"]; /** Start pagination parameter */ - start?: components['parameters']['start']; + start?: components["parameters"]["start"]; /** Order value (ASC, DESC) */ - order?: components['parameters']['order']; + order?: components["parameters"]["order"]; /** Order by accepted field */ - orderBy?: components['parameters']['orderBy']; + orderBy?: components["parameters"]["orderBy"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - items?: components['schemas']['CampaignWithOutput'][]; - start?: number; + "application/json": { + items?: components["schemas"]["CampaignWithOutput"][]; limit?: number; size?: number; + start?: number; total?: number; }; }; }; - 400: components['responses']['Error']; - 401: components['responses']['Error']; - 403: components['responses']['Error']; - 404: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 401: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 404: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; /** Return a list of users from a specific project */ - 'get-projects-users': { + "get-projects-users": { parameters: { path: { /** Project id */ - pid: components['parameters']['pid']; + pid: components["parameters"]["pid"]; }; query: { /** Limit pagination parameter */ - limit?: components['parameters']['limit']; + limit?: components["parameters"]["limit"]; /** Start pagination parameter */ - start?: components['parameters']['start']; + start?: components["parameters"]["start"]; /** Order value (ASC, DESC) */ - order?: components['parameters']['order']; + order?: components["parameters"]["order"]; /** Order by accepted field */ - orderBy?: components['parameters']['orderBy']; + orderBy?: components["parameters"]["orderBy"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - items: components['schemas']['Tenant'][]; - start?: number; + "application/json": { + items: components["schemas"]["Tenant"][]; limit?: number; size?: number; + start?: number; total?: number; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; /** Use this to add a new or existent user into a specific project. */ - 'post-projects-pid-users': { + "post-projects-pid-users": { parameters: { path: { /** Project id */ - pid: components['parameters']['pid']; + pid: components["parameters"]["pid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { + "application/json": { + email: string; profile_id: number; tryber_wp_user_id: number; - email: string; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; - requestBody: components['requestBodies']['Invitation']; + requestBody: components["requestBodies"]["Invitation"]; }; /** Remove an user from project */ - 'delete-projects-pid-users': { + "delete-projects-pid-users": { parameters: { path: { /** Project id */ - pid: components['parameters']['pid']; + pid: components["parameters"]["pid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - items: components['schemas']['Tenant'][]; + "application/json": { + items: components["schemas"]["Tenant"][]; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; requestBody: { content: { - 'application/json': { + "application/json": { + include_shared?: boolean; /** @description Tryber WP USER ID */ user_id: number; - include_shared?: boolean; }; }; }; }; - /** Retrieve all available use case templates */ - 'get-templates': { + "post-users": { + parameters: {}; + responses: { + /** Created */ + 201: { + content: { + "application/json": { + projectId?: number; + workspaceId: number; + }; + }; + }; + 400: components["responses"]["Error"]; + }; + requestBody: { + content: { + "application/json": { + name: string; + password: string; + roleId: number; + surname: string; + } & ( + | components["schemas"]["PostUserInviteData"] + | components["schemas"]["PostUserNewData"] + ); + }; + }; + }; + "head-users-by-email-email": { parameters: { - query: { - /** filterBy[]= */ - filterBy?: components['parameters']['filterBy']; - /** Order value (ASC, DESC) */ - order?: components['parameters']['order']; - /** Order by accepted field */ - orderBy?: components['parameters']['orderBy']; + path: { + email: string; }; }; responses: { /** OK */ - 200: { - content: { - 'application/json': ({ - id?: number; - } & components['schemas']['Template'])[]; - }; - }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 200: unknown; + /** Bad Request */ + 400: unknown; + /** Not Found */ + 404: unknown; }; }; - 'get-users-me': { + "get-users-me": { responses: { 200: { content: { - 'application/json': components['schemas']['User']; + "application/json": components["schemas"]["User"]; }; }; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'get-users-me-preferences': { + "get-users-me-preferences": { responses: { /** OK */ 200: { content: { - 'application/json': { - items?: components['schemas']['UserPreference'][]; + "application/json": { + items?: components["schemas"]["UserPreference"][]; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'put-users-me-preferences-slug': { + "put-users-me-preferences-slug": { parameters: { path: { slug: string; @@ -3382,23 +3496,37 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': components['schemas']['UserPreference']; + "application/json": components["schemas"]["UserPreference"]; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; requestBody: { content: { - 'application/json': { + "application/json": { value: string; }; }; }; }; + "get-users-roles": { + parameters: {}; + responses: { + /** OK */ + 200: { + content: { + "application/json": { + id: number; + name: string; + }[]; + }; + }; + }; + }; /** Retrive single video data */ - 'get-videos-vid': { + "get-videos-vid": { parameters: { path: { vid: string; @@ -3408,7 +3536,7 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': components['schemas']['Video'] & { + "application/json": components["schemas"]["Video"] & { usecase: { id: number; name: string; @@ -3421,7 +3549,7 @@ export interface operations { }; }; /** Retrive all observations of a specific video */ - 'get-videos-vid-observations': { + "get-videos-vid-observations": { parameters: { path: { vid: string; @@ -3431,12 +3559,12 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': components['schemas']['Observation'][]; + "application/json": components["schemas"]["Observation"][]; }; }; }; }; - 'post-videos-vid-observations': { + "post-videos-vid-observations": { parameters: { path: { vid: string; @@ -3446,23 +3574,23 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': components['schemas']['Observation']; + "application/json": components["schemas"]["Observation"]; }; }; }; requestBody: { content: { - 'application/json': { - /** Format: float */ - start: number; + "application/json": { /** Format: float */ end: number; + /** Format: float */ + start: number; }; }; }; }; /** delete an observation */ - 'delete-videos-vid-observations-oid': { + "delete-videos-vid-observations-oid": { parameters: { path: { vid: string; @@ -3475,7 +3603,7 @@ export interface operations { }; }; /** Update partial data of a video observation. */ - 'patch-videos-vid-observations-oid': { + "patch-videos-vid-observations-oid": { parameters: { path: { vid: string; @@ -3486,27 +3614,27 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': components['schemas']['Observation']; + "application/json": components["schemas"]["Observation"]; }; }; }; requestBody: { content: { - 'application/json': { - title?: string; + "application/json": { description?: string; /** Format: float */ - start?: number; - /** Format: float */ end?: number; quotes?: string; + /** Format: float */ + start?: number; tags?: number[]; + title?: string; }; }; }; }; /** Return, if exists, a valid translation in the user preferred language or in the requested language (if provided) */ - 'get-videos-vid-translation': { + "get-videos-vid-translation": { parameters: { path: { vid: string; @@ -3520,21 +3648,21 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': { + "application/json": { language: string; /** @default 0 */ processing: number; sentences: { - text: string; - start: number; end: number; + start: number; + text: string; }[]; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; /** @@ -3549,7 +3677,7 @@ export interface operations { * * language (string, required): The language code for the desired translation. */ - 'post-videos-vid-translation': { + "post-videos-vid-translation": { parameters: { path: { vid: string; @@ -3559,100 +3687,100 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': { [key: string]: unknown }; + "application/json": { [key: string]: unknown }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; requestBody: { content: { - 'application/json': { + "application/json": { language: string; }; }; }; }; - 'get-workspaces': { + "get-workspaces": { parameters: { query: { /** Limit pagination parameter */ - limit?: components['parameters']['limit']; + limit?: components["parameters"]["limit"]; /** Start pagination parameter */ - start?: components['parameters']['start']; + start?: components["parameters"]["start"]; /** Order value (ASC, DESC) */ - order?: components['parameters']['order']; + order?: components["parameters"]["order"]; /** Order by accepted field */ - orderBy?: components['parameters']['orderBy']; + orderBy?: components["parameters"]["orderBy"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - items?: components['schemas']['Workspace'][]; - start?: number; + "application/json": { + items?: components["schemas"]["Workspace"][]; limit?: number; size?: number; + start?: number; total?: number; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 404: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 404: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; /** This endpoint is useful to add a new workspace. Only admin can use this. */ - 'post-workspaces': { + "post-workspaces": { responses: { /** OK */ 200: { content: { - 'application/json': { - id: number; + "application/json": { company: string; + id: number; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; requestBody: { content: { - 'application/json': { + "application/json": { company: string; pm_id?: number; }; }; }; }; - 'get-workspace': { + "get-workspace": { parameters: { path: { /** Workspace (company, customer) id */ - wid: components['parameters']['wid']; + wid: components["parameters"]["wid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': components['schemas']['Workspace']; + "application/json": components["schemas"]["Workspace"]; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 404: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 404: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; /** Return the project Archive of a specific workspace. If not exist, create and return it */ - 'get-workspaces-wid-archive': { + "get-workspaces-wid-archive": { parameters: { path: { /** Workspace (company, customer) id */ @@ -3663,90 +3791,90 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': { + "application/json": { + campaignsCounter: number; + description: string; id: number; name: string; - description: string; - campaignsCounter: number; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'get-workspace-campaigns': { + "get-workspace-campaigns": { parameters: { path: { /** Workspace (company, customer) id */ - wid: components['parameters']['wid']; + wid: components["parameters"]["wid"]; }; query: { /** Limit pagination parameter */ - limit?: components['parameters']['limit']; + limit?: components["parameters"]["limit"]; /** Start pagination parameter */ - start?: components['parameters']['start']; + start?: components["parameters"]["start"]; /** Order value (ASC, DESC) */ - order?: components['parameters']['order']; + order?: components["parameters"]["order"]; /** Order by accepted field */ - orderBy?: components['parameters']['orderBy']; + orderBy?: components["parameters"]["orderBy"]; /** filterBy[]= */ - filterBy?: components['parameters']['filterBy']; + filterBy?: components["parameters"]["filterBy"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - items?: components['schemas']['CampaignWithOutput'][]; - start?: number; + "application/json": { + items?: components["schemas"]["CampaignWithOutput"][]; limit?: number; size?: number; + start?: number; total?: number; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 404: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 404: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'get-workspaces-coins': { + "get-workspaces-coins": { parameters: { path: { /** Workspace (company, customer) id */ - wid: components['parameters']['wid']; + wid: components["parameters"]["wid"]; }; query: { /** Limit pagination parameter */ - limit?: components['parameters']['limit']; + limit?: components["parameters"]["limit"]; /** Start pagination parameter */ - start?: components['parameters']['start']; + start?: components["parameters"]["start"]; /** Order value (ASC, DESC) */ - order?: components['parameters']['order']; + order?: components["parameters"]["order"]; /** Order by accepted field */ - orderBy?: components['parameters']['orderBy']; + orderBy?: components["parameters"]["orderBy"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - items?: components['schemas']['Coin'][]; - start?: number; + "application/json": { + items?: components["schemas"]["Coin"][]; limit?: number; size?: number; + start?: number; total?: number; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; /** @@ -3757,31 +3885,28 @@ export interface operations { * - Reviewing all plans that are still in development or awaiting approval. * - Identifying approved plans that are not yet associated with any running campaigns. */ - 'get-workspaces-wid-plans': { + "get-workspaces-wid-plans": { parameters: { path: { wid: string; }; query: { /** Order by accepted field */ - orderBy?: components['parameters']['orderBy']; + orderBy?: components["parameters"]["orderBy"]; /** Order value (ASC, DESC) */ - order?: components['parameters']['order']; + order?: components["parameters"]["order"]; /** filterBy[]= */ - filterBy?: components['parameters']['filterBy']; + filterBy?: components["parameters"]["filterBy"]; /** Limit pagination parameter */ - limit?: components['parameters']['limit']; + limit?: components["parameters"]["limit"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { + "application/json": { id: number; - title: string; - /** @enum {string} */ - status: 'draft' | 'pending_review' | 'approved'; project: { id: number; title: string; @@ -3789,8 +3914,11 @@ export interface operations { quote?: { id: number; /** @enum {string} */ - status: 'pending' | 'proposed' | 'approved' | 'rejected'; + status: "pending" | "proposed" | "approved" | "rejected"; }; + /** @enum {string} */ + status: "draft" | "pending_review" | "approved"; + title: string; }[]; }; }; @@ -3800,7 +3928,7 @@ export interface operations { 403: unknown; }; }; - 'post-workspaces-wid-plans': { + "post-workspaces-wid-plans": { parameters: { path: { wid: string; @@ -3810,7 +3938,7 @@ export interface operations { /** Created */ 201: { content: { - 'application/json': { + "application/json": { id: number; }; }; @@ -3818,142 +3946,102 @@ export interface operations { }; requestBody: { content: { - 'application/json': { - template_id: number; + "application/json": { project_id: number; + template_id: number; }; }; }; }; - 'get-workspaces-wid-plans-pid': { + "get-workspace-projects": { parameters: { path: { - pid: string; + /** Workspace (company, customer) id */ + wid: components["parameters"]["wid"]; + }; + query: { + /** Limit pagination parameter */ + limit?: components["parameters"]["limit"]; + /** Start pagination parameter */ + start?: components["parameters"]["start"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - id: number; - config: { - modules: components['schemas']['Module'][]; - }; - status: components['schemas']['PlanStatus']; - project: { - id: number; - name: string; - }; - quote?: { - id: number; - /** @enum {string} */ - status: 'pending' | 'proposed' | 'approved' | 'rejected'; - value: string; - }; - campaign?: { - id: number; - /** @description CustomerTitle ?? Title */ - title: string; - startDate: string; - }; - workspace_id: number; - }; - }; - }; - }; - }; - 'delete-workspaces-wid-plans-pid': { - parameters: { - path: { - pid: string; - }; - }; - responses: { - /** OK */ - 200: unknown; - }; - }; - 'patch-workspaces-wid-plans-pid': { - parameters: { - path: { - pid: string; - }; - }; - responses: { - /** OK */ - 200: unknown; - /** Forbidden */ - 403: unknown; - /** Not Found */ - 404: unknown; - }; - requestBody: { - content: { - 'application/json': { - config: { - modules: components['schemas']['Module'][]; + "application/json": { + items?: components["schemas"]["Project"][]; + limit?: number; + size?: number; + start?: number; + total?: number; }; }; }; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 404: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - /** */ - 'patch-workspaces-wid-plans-pid-status': { + "get-workspace-project": { parameters: { path: { - pid: string; + /** Workspace (company, customer) id */ + wid: components["parameters"]["wid"]; + /** Project id */ + pid: components["parameters"]["pid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { [key: string]: unknown }; - }; - }; - }; - requestBody: { - content: { - 'application/json': { - status: components['schemas']['PlanStatus']; + "application/json": components["schemas"]["Project"]; }; }; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 404: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'get-workspace-projects': { + "get-workspace-project-campaigns": { parameters: { path: { /** Workspace (company, customer) id */ - wid: components['parameters']['wid']; + wid: components["parameters"]["wid"]; + /** Project id */ + pid: components["parameters"]["pid"]; }; query: { /** Limit pagination parameter */ - limit?: components['parameters']['limit']; + limit?: components["parameters"]["limit"]; /** Start pagination parameter */ - start?: components['parameters']['start']; + start?: components["parameters"]["start"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - items?: components['schemas']['Project'][]; - start?: number; + "application/json": { + items?: components["schemas"]["CampaignWithOutput"][]; limit?: number; size?: number; + start?: number; total?: number; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 404: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 404: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'get-workspaces-templates': { + "get-workspaces-templates": { parameters: { path: { /** Workspace (company, customer) id */ @@ -3961,33 +4049,33 @@ export interface operations { }; query: { /** Limit pagination parameter */ - limit?: components['parameters']['limit']; + limit?: components["parameters"]["limit"]; /** Start pagination parameter */ - start?: components['parameters']['start']; + start?: components["parameters"]["start"]; /** Orders results */ - orderBy?: 'updated_at' | 'id' | 'order'; + orderBy?: "updated_at" | "id" | "order"; /** Order value (ASC, DESC) */ - order?: components['parameters']['order']; + order?: components["parameters"]["order"]; /** filterBy[]= */ - filterBy?: components['parameters']['filterBy']; + filterBy?: components["parameters"]["filterBy"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - items: components['schemas']['CpReqTemplate'][]; - } & components['schemas']['PaginationData']; + "application/json": { + items: components["schemas"]["CpReqTemplate"][]; + } & components["schemas"]["PaginationData"]; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 404: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 404: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; - 'get-workspaces-wid-templates-tid': { + "get-workspaces-wid-templates-tid": { parameters: { path: { wid: string; @@ -3998,14 +4086,14 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': { + "application/json": { + config: string; + description?: string; id: number; name: string; - description?: string; - config: string; - workspace_id?: number; price?: string; - strapi?: components['schemas']['StrapiTemplate']; + strapi?: components["schemas"]["StrapiTemplate"]; + workspace_id?: number; }; }; }; @@ -4015,7 +4103,7 @@ export interface operations { 404: unknown; }; }; - 'delete-workspaces-wid-templates-tid': { + "delete-workspaces-wid-templates-tid": { parameters: { path: { wid: string; @@ -4026,157 +4114,101 @@ export interface operations { /** OK */ 200: { content: { - 'application/json': { [key: string]: unknown }; + "application/json": { [key: string]: unknown }; }; }; /** Not Found */ 404: unknown; }; }; - 'get-workspace-project': { - parameters: { - path: { - /** Workspace (company, customer) id */ - wid: components['parameters']['wid']; - /** Project id */ - pid: components['parameters']['pid']; - }; - }; - responses: { - /** OK */ - 200: { - content: { - 'application/json': components['schemas']['Project']; - }; - }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 404: components['responses']['Error']; - 500: components['responses']['Error']; - }; - }; - 'get-workspace-project-campaigns': { - parameters: { - path: { - /** Workspace (company, customer) id */ - wid: components['parameters']['wid']; - /** Project id */ - pid: components['parameters']['pid']; - }; - query: { - /** Limit pagination parameter */ - limit?: components['parameters']['limit']; - /** Start pagination parameter */ - start?: components['parameters']['start']; - }; - }; - responses: { - /** OK */ - 200: { - content: { - 'application/json': { - items?: components['schemas']['CampaignWithOutput'][]; - start?: number; - limit?: number; - size?: number; - total?: number; - }; - }; - }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 404: components['responses']['Error']; - 500: components['responses']['Error']; - }; - }; /** Return a list of users from a specific workspace */ - 'get-workspaces-users': { + "get-workspaces-users": { parameters: { path: { /** Workspace (company, customer) id */ - wid: components['parameters']['wid']; + wid: components["parameters"]["wid"]; }; query: { /** Limit pagination parameter */ - limit?: components['parameters']['limit']; + limit?: components["parameters"]["limit"]; /** Start pagination parameter */ - start?: components['parameters']['start']; + start?: components["parameters"]["start"]; /** Order value (ASC, DESC) */ - order?: components['parameters']['order']; + order?: components["parameters"]["order"]; /** Order by accepted field */ - orderBy?: components['parameters']['orderBy']; + orderBy?: components["parameters"]["orderBy"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - items: components['schemas']['Tenant'][]; - start?: number; + "application/json": { + items: components["schemas"]["Tenant"][]; limit?: number; size?: number; + start?: number; total?: number; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; }; /** Use this to add a new or existent user into a specific workspace. */ - 'post-workspaces-wid-users': { + "post-workspaces-wid-users": { parameters: { path: { /** Workspace (company, customer) id */ - wid: components['parameters']['wid']; + wid: components["parameters"]["wid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { + "application/json": { + email: string; profile_id: number; tryber_wp_user_id: number; - email: string; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; - requestBody: components['requestBodies']['Invitation']; + requestBody: components["requestBodies"]["Invitation"]; }; /** Remove an user from workspace */ - 'delete-workspaces-wid-users': { + "delete-workspaces-wid-users": { parameters: { path: { /** Workspace (company, customer) id */ - wid: components['parameters']['wid']; + wid: components["parameters"]["wid"]; }; }; responses: { /** OK */ 200: { content: { - 'application/json': { - items: components['schemas']['Tenant'][]; + "application/json": { + items: components["schemas"]["Tenant"][]; }; }; }; - 400: components['responses']['Error']; - 403: components['responses']['Error']; - 500: components['responses']['Error']; + 400: components["responses"]["Error"]; + 403: components["responses"]["Error"]; + 500: components["responses"]["Error"]; }; requestBody: { content: { - 'application/json': { + "application/json": { + include_shared?: boolean; /** @description Tryber WP USER ID */ user_id: number; - include_shared?: boolean; }; }; }; 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/api/api.ts b/src/features/api/api.ts index a8050af93..0f2071819 100644 --- a/src/features/api/api.ts +++ b/src/features/api/api.ts @@ -1,6 +1,5 @@ import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'; import { stringify } from 'qs'; -import { Template } from '.'; export const apiSlice = createApi({ reducerPath: 'api', @@ -39,7 +38,3 @@ export const apiSlice = createApi({ ], endpoints: () => ({}), }); - -export interface UseCaseTemplate extends Template { - id?: number; -} diff --git a/src/features/api/apiTags.ts b/src/features/api/apiTags.ts index 578b553c5..817e60976 100644 --- a/src/features/api/apiTags.ts +++ b/src/features/api/apiTags.ts @@ -29,9 +29,6 @@ unguessApi.enhanceEndpoints({ patchProjectsByPid: { invalidatesTags: ['Projects'], }, - postCampaigns: { - invalidatesTags: ['Campaigns'], - }, patchCampaignsByCid: { invalidatesTags: ['Campaigns', 'Projects', 'Archive', 'Users'], }, @@ -53,9 +50,6 @@ unguessApi.enhanceEndpoints({ getWorkspacesByWidCoins: { providesTags: ['Workspaces'], }, - getTemplates: { - providesTags: ['Templates'], - }, getCampaignsByCidReports: { providesTags: ['Reports'], }, @@ -171,7 +165,9 @@ unguessApi.enhanceEndpoints({ ); dispatch(unguessApi.util.invalidateTags(['VideoTags', 'Insights'])); } catch { - dispatch(unguessApi.util.invalidateTags(['Observations'])); + dispatch( + unguessApi.util.invalidateTags(['Observations', 'Insights']) + ); } }, }, diff --git a/src/features/api/index.ts b/src/features/api/index.ts index a95c87b53..e38021afb 100644 --- a/src/features/api/index.ts +++ b/src/features/api/index.ts @@ -4,16 +4,6 @@ const injectedRtkApi = api.injectEndpoints({ $get: build.query<$getApiResponse, $getApiArg>({ query: () => ({ url: `/` }), }), - postAuthenticate: build.mutation< - PostAuthenticateApiResponse, - PostAuthenticateApiArg - >({ - query: (queryArg) => ({ - url: `/authenticate`, - method: 'POST', - body: queryArg.body, - }), - }), postAnalyticsViewsCampaignsByCid: build.mutation< PostAnalyticsViewsCampaignsByCidApiResponse, PostAnalyticsViewsCampaignsByCidApiArg @@ -23,16 +13,22 @@ const injectedRtkApi = api.injectEndpoints({ method: 'POST', }), }), - postCampaigns: build.mutation< - PostCampaignsApiResponse, - PostCampaignsApiArg + postAuthenticate: build.mutation< + PostAuthenticateApiResponse, + PostAuthenticateApiArg >({ query: (queryArg) => ({ - url: `/campaigns`, + url: `/authenticate`, method: 'POST', body: queryArg.body, }), }), + getCampaignsByCid: build.query< + GetCampaignsByCidApiResponse, + GetCampaignsByCidApiArg + >({ + query: (queryArg) => ({ url: `/campaigns/${queryArg.cid}` }), + }), patchCampaignsByCid: build.mutation< PatchCampaignsByCidApiResponse, PatchCampaignsByCidApiArg @@ -43,12 +39,6 @@ const injectedRtkApi = api.injectEndpoints({ body: queryArg.body, }), }), - getCampaignsByCid: build.query< - GetCampaignsByCidApiResponse, - GetCampaignsByCidApiArg - >({ - query: (queryArg) => ({ url: `/campaigns/${queryArg.cid}` }), - }), getCampaignsByCidBugTypes: build.query< GetCampaignsByCidBugTypesApiResponse, GetCampaignsByCidBugTypesApiArg @@ -107,13 +97,13 @@ const injectedRtkApi = api.injectEndpoints({ body: queryArg.body, }), }), - postCampaignsByCidBugsAndBidMedia: build.mutation< - PostCampaignsByCidBugsAndBidMediaApiResponse, - PostCampaignsByCidBugsAndBidMediaApiArg + deleteCampaignsByCidBugsAndBidCommentsCmid: build.mutation< + DeleteCampaignsByCidBugsAndBidCommentsCmidApiResponse, + DeleteCampaignsByCidBugsAndBidCommentsCmidApiArg >({ query: (queryArg) => ({ - url: `/campaigns/${queryArg.cid}/bugs/${queryArg.bid}/media`, - method: 'POST', + url: `/campaigns/${queryArg.cid}/bugs/${queryArg.bid}/comments/${queryArg.cmid}`, + method: 'DELETE', body: queryArg.body, }), }), @@ -127,13 +117,13 @@ const injectedRtkApi = api.injectEndpoints({ body: queryArg.body, }), }), - deleteCampaignsByCidBugsAndBidCommentsCmid: build.mutation< - DeleteCampaignsByCidBugsAndBidCommentsCmidApiResponse, - DeleteCampaignsByCidBugsAndBidCommentsCmidApiArg + postCampaignsByCidBugsAndBidMedia: build.mutation< + PostCampaignsByCidBugsAndBidMediaApiResponse, + PostCampaignsByCidBugsAndBidMediaApiArg >({ query: (queryArg) => ({ - url: `/campaigns/${queryArg.cid}/bugs/${queryArg.bid}/comments/${queryArg.cmid}`, - method: 'DELETE', + url: `/campaigns/${queryArg.cid}/bugs/${queryArg.bid}/media`, + method: 'POST', body: queryArg.body, }), }), @@ -151,6 +141,16 @@ const injectedRtkApi = api.injectEndpoints({ >({ query: (queryArg) => ({ url: `/campaigns/${queryArg.cid}/clusters` }), }), + deleteCampaignsByCidCustomStatuses: build.mutation< + DeleteCampaignsByCidCustomStatusesApiResponse, + DeleteCampaignsByCidCustomStatusesApiArg + >({ + query: (queryArg) => ({ + url: `/campaigns/${queryArg.cid}/custom_statuses`, + method: 'DELETE', + body: queryArg.body, + }), + }), getCampaignsByCidCustomStatuses: build.query< GetCampaignsByCidCustomStatusesApiResponse, GetCampaignsByCidCustomStatusesApiArg @@ -169,16 +169,6 @@ const injectedRtkApi = api.injectEndpoints({ body: queryArg.body, }), }), - deleteCampaignsByCidCustomStatuses: build.mutation< - DeleteCampaignsByCidCustomStatusesApiResponse, - DeleteCampaignsByCidCustomStatusesApiArg - >({ - query: (queryArg) => ({ - url: `/campaigns/${queryArg.cid}/custom_statuses`, - method: 'DELETE', - body: queryArg.body, - }), - }), getCampaignsByCidDevices: build.query< GetCampaignsByCidDevicesApiResponse, GetCampaignsByCidDevicesApiArg @@ -195,6 +185,12 @@ const injectedRtkApi = api.injectEndpoints({ body: queryArg.body, }), }), + getCampaignsByCidInsights: build.query< + GetCampaignsByCidInsightsApiResponse, + GetCampaignsByCidInsightsApiArg + >({ + query: (queryArg) => ({ url: `/campaigns/${queryArg.cid}/insights` }), + }), postCampaignsByCidInsights: build.mutation< PostCampaignsByCidInsightsApiResponse, PostCampaignsByCidInsightsApiArg @@ -205,12 +201,6 @@ const injectedRtkApi = api.injectEndpoints({ body: queryArg.body, }), }), - getCampaignsByCidInsights: build.query< - GetCampaignsByCidInsightsApiResponse, - GetCampaignsByCidInsightsApiArg - >({ - query: (queryArg) => ({ url: `/campaigns/${queryArg.cid}/insights` }), - }), getCampaignsByCidMeta: build.query< GetCampaignsByCidMetaApiResponse, GetCampaignsByCidMetaApiArg @@ -289,6 +279,16 @@ const injectedRtkApi = api.injectEndpoints({ params: { filterBy: queryArg.filterBy }, }), }), + deleteCampaignsByCidUsers: build.mutation< + DeleteCampaignsByCidUsersApiResponse, + DeleteCampaignsByCidUsersApiArg + >({ + query: (queryArg) => ({ + url: `/campaigns/${queryArg.cid}/users`, + method: 'DELETE', + body: queryArg.body, + }), + }), getCampaignsByCidUsers: build.query< GetCampaignsByCidUsersApiResponse, GetCampaignsByCidUsersApiArg @@ -313,16 +313,6 @@ const injectedRtkApi = api.injectEndpoints({ body: queryArg.body, }), }), - deleteCampaignsByCidUsers: build.mutation< - DeleteCampaignsByCidUsersApiResponse, - DeleteCampaignsByCidUsersApiArg - >({ - query: (queryArg) => ({ - url: `/campaigns/${queryArg.cid}/users`, - method: 'DELETE', - body: queryArg.body, - }), - }), getCampaignsByCidUx: build.query< GetCampaignsByCidUxApiResponse, GetCampaignsByCidUxApiArg @@ -375,12 +365,6 @@ const injectedRtkApi = api.injectEndpoints({ params: { s: queryArg.s, updateTrend: queryArg.updateTrend }, }), }), - getInsightsByIid: build.query< - GetInsightsByIidApiResponse, - GetInsightsByIidApiArg - >({ - query: (queryArg) => ({ url: `/insights/${queryArg.iid}` }), - }), deleteInsightsByIid: build.mutation< DeleteInsightsByIidApiResponse, DeleteInsightsByIidApiArg @@ -390,6 +374,12 @@ const injectedRtkApi = api.injectEndpoints({ method: 'DELETE', }), }), + getInsightsByIid: build.query< + GetInsightsByIidApiResponse, + GetInsightsByIidApiArg + >({ + query: (queryArg) => ({ url: `/insights/${queryArg.iid}` }), + }), patchInsightsByIid: build.mutation< PatchInsightsByIidApiResponse, PatchInsightsByIidApiArg @@ -400,8 +390,13 @@ const injectedRtkApi = api.injectEndpoints({ body: queryArg.body, }), }), - getMediaById: build.query({ - query: (queryArg) => ({ url: `/media/${queryArg.id}` }), + getInvitesByProfileAndToken: build.query< + GetInvitesByProfileAndTokenApiResponse, + GetInvitesByProfileAndTokenApiArg + >({ + query: (queryArg) => ({ + url: `/invites/${queryArg.profile}/${queryArg.token}`, + }), }), deleteMediaCommentByMcid: build.mutation< DeleteMediaCommentByMcidApiResponse, @@ -412,6 +407,41 @@ const injectedRtkApi = api.injectEndpoints({ method: 'DELETE', }), }), + getMediaById: build.query({ + query: (queryArg) => ({ url: `/media/${queryArg.id}` }), + }), + deletePlansByPid: build.mutation< + DeletePlansByPidApiResponse, + DeletePlansByPidApiArg + >({ + query: (queryArg) => ({ + url: `/plans/${queryArg.pid}`, + method: 'DELETE', + }), + }), + getPlansByPid: build.query({ + query: (queryArg) => ({ url: `/plans/${queryArg.pid}` }), + }), + patchPlansByPid: build.mutation< + PatchPlansByPidApiResponse, + PatchPlansByPidApiArg + >({ + query: (queryArg) => ({ + url: `/plans/${queryArg.pid}`, + method: 'PATCH', + body: queryArg.body, + }), + }), + patchPlansByPidStatus: build.mutation< + PatchPlansByPidStatusApiResponse, + PatchPlansByPidStatusApiArg + >({ + query: (queryArg) => ({ + url: `/plans/${queryArg.pid}/status`, + method: 'PATCH', + body: queryArg.body, + }), + }), postProjects: build.mutation({ query: (queryArg) => ({ url: `/projects`, @@ -419,6 +449,15 @@ const injectedRtkApi = api.injectEndpoints({ body: queryArg.body, }), }), + deleteProjectsByPid: build.mutation< + DeleteProjectsByPidApiResponse, + DeleteProjectsByPidApiArg + >({ + query: (queryArg) => ({ + url: `/projects/${queryArg.pid}`, + method: 'DELETE', + }), + }), getProjectsByPid: build.query< GetProjectsByPidApiResponse, GetProjectsByPidApiArg @@ -435,15 +474,6 @@ const injectedRtkApi = api.injectEndpoints({ body: queryArg.body, }), }), - deleteProjectsByPid: build.mutation< - DeleteProjectsByPidApiResponse, - DeleteProjectsByPidApiArg - >({ - query: (queryArg) => ({ - url: `/projects/${queryArg.pid}`, - method: 'DELETE', - }), - }), getProjectsByPidCampaigns: build.query< GetProjectsByPidCampaignsApiResponse, GetProjectsByPidCampaignsApiArg @@ -458,6 +488,16 @@ const injectedRtkApi = api.injectEndpoints({ }, }), }), + deleteProjectsByPidUsers: build.mutation< + DeleteProjectsByPidUsersApiResponse, + DeleteProjectsByPidUsersApiArg + >({ + query: (queryArg) => ({ + url: `/projects/${queryArg.pid}/users`, + method: 'DELETE', + body: queryArg.body, + }), + }), getProjectsByPidUsers: build.query< GetProjectsByPidUsersApiResponse, GetProjectsByPidUsersApiArg @@ -482,24 +522,20 @@ const injectedRtkApi = api.injectEndpoints({ body: queryArg.body, }), }), - deleteProjectsByPidUsers: build.mutation< - DeleteProjectsByPidUsersApiResponse, - DeleteProjectsByPidUsersApiArg - >({ + postUsers: build.mutation({ query: (queryArg) => ({ - url: `/projects/${queryArg.pid}/users`, - method: 'DELETE', + url: `/users`, + method: 'POST', body: queryArg.body, }), }), - getTemplates: build.query({ + headUsersByEmailByEmail: build.mutation< + HeadUsersByEmailByEmailApiResponse, + HeadUsersByEmailByEmailApiArg + >({ query: (queryArg) => ({ - url: `/templates`, - params: { - filterBy: queryArg.filterBy, - order: queryArg.order, - orderBy: queryArg.orderBy, - }, + url: `/users/by-email/${queryArg.email}`, + method: 'HEAD', }), }), getUsersMe: build.query({ @@ -521,6 +557,9 @@ const injectedRtkApi = api.injectEndpoints({ body: queryArg.body, }), }), + getUsersRoles: build.query({ + query: () => ({ url: `/users/roles` }), + }), getVideosByVid: build.query< GetVideosByVidApiResponse, GetVideosByVidApiArg @@ -543,23 +582,23 @@ const injectedRtkApi = api.injectEndpoints({ body: queryArg.body, }), }), - patchVideosByVidObservationsAndOid: build.mutation< - PatchVideosByVidObservationsAndOidApiResponse, - PatchVideosByVidObservationsAndOidApiArg + deleteVideosByVidObservationsAndOid: build.mutation< + DeleteVideosByVidObservationsAndOidApiResponse, + DeleteVideosByVidObservationsAndOidApiArg >({ query: (queryArg) => ({ url: `/videos/${queryArg.vid}/observations/${queryArg.oid}`, - method: 'PATCH', - body: queryArg.body, + method: 'DELETE', }), }), - deleteVideosByVidObservationsAndOid: build.mutation< - DeleteVideosByVidObservationsAndOidApiResponse, - DeleteVideosByVidObservationsAndOidApiArg + patchVideosByVidObservationsAndOid: build.mutation< + PatchVideosByVidObservationsAndOidApiResponse, + PatchVideosByVidObservationsAndOidApiArg >({ query: (queryArg) => ({ url: `/videos/${queryArg.vid}/observations/${queryArg.oid}`, - method: 'DELETE', + method: 'PATCH', + body: queryArg.body, }), }), getVideosByVidTranslation: build.query< @@ -643,16 +682,6 @@ const injectedRtkApi = api.injectEndpoints({ }, }), }), - postWorkspacesByWidPlans: build.mutation< - PostWorkspacesByWidPlansApiResponse, - PostWorkspacesByWidPlansApiArg - >({ - query: (queryArg) => ({ - url: `/workspaces/${queryArg.wid}/plans`, - method: 'POST', - body: queryArg.body, - }), - }), getWorkspacesByWidPlans: build.query< GetWorkspacesByWidPlansApiResponse, GetWorkspacesByWidPlansApiArg @@ -667,35 +696,13 @@ const injectedRtkApi = api.injectEndpoints({ }, }), }), - deletePlansByPid: build.mutation< - DeletePlansByPidApiResponse, - DeletePlansByPidApiArg - >({ - query: (queryArg) => ({ - url: `/plans/${queryArg.pid}`, - method: 'DELETE', - }), - }), - getPlansByPid: build.query({ - query: (queryArg) => ({ url: `/plans/${queryArg.pid}` }), - }), - patchPlansByPid: build.mutation< - PatchPlansByPidApiResponse, - PatchPlansByPidApiArg - >({ - query: (queryArg) => ({ - url: `/plans/${queryArg.pid}`, - method: 'PATCH', - body: queryArg.body, - }), - }), - patchPlansByPidStatus: build.mutation< - PatchPlansByPidStatusApiResponse, - PatchPlansByPidStatusApiArg + postWorkspacesByWidPlans: build.mutation< + PostWorkspacesByWidPlansApiResponse, + PostWorkspacesByWidPlansApiArg >({ query: (queryArg) => ({ - url: `/plans/${queryArg.pid}/status`, - method: 'PATCH', + url: `/workspaces/${queryArg.wid}/plans`, + method: 'POST', body: queryArg.body, }), }), @@ -708,10 +715,27 @@ const injectedRtkApi = api.injectEndpoints({ params: { limit: queryArg.limit, start: queryArg.start }, }), }), - getWorkspacesByWidTemplates: build.query< - GetWorkspacesByWidTemplatesApiResponse, - GetWorkspacesByWidTemplatesApiArg - >({ + getWorkspacesByWidProjectsAndPid: build.query< + GetWorkspacesByWidProjectsAndPidApiResponse, + GetWorkspacesByWidProjectsAndPidApiArg + >({ + query: (queryArg) => ({ + url: `/workspaces/${queryArg.wid}/projects/${queryArg.pid}`, + }), + }), + getWorkspacesByWidProjectsAndPidCampaigns: build.query< + GetWorkspacesByWidProjectsAndPidCampaignsApiResponse, + GetWorkspacesByWidProjectsAndPidCampaignsApiArg + >({ + query: (queryArg) => ({ + url: `/workspaces/${queryArg.wid}/projects/${queryArg.pid}/campaigns`, + params: { limit: queryArg.limit, start: queryArg.start }, + }), + }), + getWorkspacesByWidTemplates: build.query< + GetWorkspacesByWidTemplatesApiResponse, + GetWorkspacesByWidTemplatesApiArg + >({ query: (queryArg) => ({ url: `/workspaces/${queryArg.wid}/templates`, params: { @@ -740,21 +764,14 @@ const injectedRtkApi = api.injectEndpoints({ url: `/workspaces/${queryArg.wid}/templates/${queryArg.tid}`, }), }), - getWorkspacesByWidProjectsAndPid: build.query< - GetWorkspacesByWidProjectsAndPidApiResponse, - GetWorkspacesByWidProjectsAndPidApiArg - >({ - query: (queryArg) => ({ - url: `/workspaces/${queryArg.wid}/projects/${queryArg.pid}`, - }), - }), - getWorkspacesByWidProjectsAndPidCampaigns: build.query< - GetWorkspacesByWidProjectsAndPidCampaignsApiResponse, - GetWorkspacesByWidProjectsAndPidCampaignsApiArg + deleteWorkspacesByWidUsers: build.mutation< + DeleteWorkspacesByWidUsersApiResponse, + DeleteWorkspacesByWidUsersApiArg >({ query: (queryArg) => ({ - url: `/workspaces/${queryArg.wid}/projects/${queryArg.pid}/campaigns`, - params: { limit: queryArg.limit, start: queryArg.start }, + url: `/workspaces/${queryArg.wid}/users`, + method: 'DELETE', + body: queryArg.body, }), }), getWorkspacesByWidUsers: build.query< @@ -781,29 +798,12 @@ const injectedRtkApi = api.injectEndpoints({ body: queryArg.body, }), }), - deleteWorkspacesByWidUsers: build.mutation< - DeleteWorkspacesByWidUsersApiResponse, - DeleteWorkspacesByWidUsersApiArg - >({ - query: (queryArg) => ({ - url: `/workspaces/${queryArg.wid}/users`, - method: 'DELETE', - body: queryArg.body, - }), - }), }), overrideExisting: false, }); export { injectedRtkApi as unguessApi }; export type $getApiResponse = /** status 200 OK */ {}; export type $getApiArg = void; -export type PostAuthenticateApiResponse = /** status 200 OK */ Authentication; -export type PostAuthenticateApiArg = { - body: { - username: string; - password: string; - }; -}; export type PostAnalyticsViewsCampaignsByCidApiResponse = /** status 200 OK */ { success?: boolean; }; @@ -811,51 +811,11 @@ export type PostAnalyticsViewsCampaignsByCidApiArg = { /** Campaign id */ cid: string; }; -export type PostCampaignsApiResponse = /** status 200 OK */ Campaign; -export type PostCampaignsApiArg = { - body: { - title: string; - start_date: string; - end_date: string; - close_date: string; - customer_title?: string; - status_id?: number; - is_public?: number; - campaign_type_id: number; - project_id: number; - pm_id: number; - platforms: PlatformObject[]; - /** Da togliere */ - page_preview_id?: number; - /** Da togliere */ - page_manual_id?: number; - /** Used to check available coins */ - customer_id: number; - has_bug_form?: number; - /** if has_bug_form is 0 this has to be 0 */ - has_bug_parade?: number; - description?: string; - base_bug_internal_id?: string; - express_slug: string; - use_cases?: UseCase[]; - productType?: number; - productLink?: string; - browsers?: number[]; - languages?: string[]; - outOfScope?: string; - testerRequirements?: string; - targetSize?: number; - goal?: string; - testDescription?: string; - }; -}; -export type PatchCampaignsByCidApiResponse = /** status 200 OK */ Campaign; -export type PatchCampaignsByCidApiArg = { - /** Campaign id */ - cid: string; +export type PostAuthenticateApiResponse = /** status 200 OK */ Authentication; +export type PostAuthenticateApiArg = { body: { - customer_title?: string; - project_id?: number; + password: string; + username: string; }; }; export type GetCampaignsByCidApiResponse = @@ -867,6 +827,15 @@ export type GetCampaignsByCidApiArg = { /** Campaign id */ cid: string; }; +export type PatchCampaignsByCidApiResponse = /** status 200 OK */ Campaign; +export type PatchCampaignsByCidApiArg = { + /** Campaign id */ + cid: string; + body: { + customer_title?: string; + project_id?: number; + }; +}; export type GetCampaignsByCidBugTypesApiResponse = /** status 200 OK */ BugType[]; export type GetCampaignsByCidBugTypesApiArg = { @@ -875,21 +844,21 @@ export type GetCampaignsByCidBugTypesApiArg = { }; export type GetCampaignsByCidBugsApiResponse = /** status 200 OK */ { items?: (Bug & { - tags?: { - tag_id: number; - tag_name: string; - }[]; - siblings: number; - comments: number; additional_fields?: { + name: string; slug: string; value: string; - name: string; + }[]; + comments: number; + siblings: number; + tags?: { + tag_id: number; + tag_name: string; }[]; })[]; - start?: number; limit?: number; size?: number; + start?: number; total?: number; }; export type GetCampaignsByCidBugsApiArg = { @@ -910,13 +879,13 @@ export type GetCampaignsByCidBugsApiArg = { }; export type GetCampaignsByCidBugsAndBidApiResponse = /** status 200 OK */ Bug & { - media: BugMedia[]; - tags: BugTag[]; additional_fields: BugAdditionalField[]; + media: BugMedia[]; reporter: { - tester_id: number; name: string; + tester_id: number; }; + tags: BugTag[]; }; export type GetCampaignsByCidBugsAndBidApiArg = { /** Campaign id */ @@ -925,12 +894,12 @@ export type GetCampaignsByCidBugsAndBidApiArg = { bid: string; }; export type PatchCampaignsByCidBugsAndBidApiResponse = /** status 200 OK */ { + custom_status?: BugCustomStatus; + priority?: BugPriority; tags?: { tag_id: number; tag_name: string; }[]; - priority?: BugPriority; - custom_status?: BugCustomStatus; }; export type PatchCampaignsByCidBugsAndBidApiArg = { /** Campaign id */ @@ -938,6 +907,8 @@ export type PatchCampaignsByCidBugsAndBidApiArg = { /** Defines an identifier for the bug object (BUG ID) */ bid: string; body: { + custom_status_id?: number; + priority_id?: number; tags?: ( | { tag_id: number; @@ -946,8 +917,6 @@ export type PatchCampaignsByCidBugsAndBidApiArg = { tag_name: string; } )[]; - priority_id?: number; - custom_status_id?: number; }; }; export type GetCampaignsByCidBugsAndBidCommentsApiResponse = @@ -968,93 +937,93 @@ export type PostCampaignsByCidBugsAndBidCommentsApiArg = { /** Defines an identifier for the bug object (BUG ID) */ bid: string; body: { - text: string; - mentioned?: { + media_id?: { id: number; }[]; - media_id?: { + mentioned?: { id: number; }[]; + text: string; }; }; -export type PostCampaignsByCidBugsAndBidMediaApiResponse = +export type DeleteCampaignsByCidBugsAndBidCommentsCmidApiResponse = + /** status 200 OK */ string; +export type DeleteCampaignsByCidBugsAndBidCommentsCmidApiArg = { + cid: string; + bid: string; + cmid: string; + body: {}; +}; +export type PostCampaignsByCidBugsAndBidCommentsCmidApiResponse = /** status 200 OK */ { failed?: { - name: string; errorCode: 'FILE_TOO_BIG' | 'INVALID_FILE_EXTENSION' | 'GENERIC_ERROR'; + name: string; + }[]; + files?: { + name: string; + path: string; }[]; uploaded_ids?: { id: number; }[]; }; -export type PostCampaignsByCidBugsAndBidMediaApiArg = { - /** Campaign id */ +export type PostCampaignsByCidBugsAndBidCommentsCmidApiArg = { cid: string; - /** Defines an identifier for the bug object (BUG ID) */ bid: string; + cmid: string; body: { media: string | string[]; }; }; -export type PostCampaignsByCidBugsAndBidCommentsCmidApiResponse = +export type PostCampaignsByCidBugsAndBidMediaApiResponse = /** status 200 OK */ { - files?: { - name: string; - path: string; - }[]; failed?: { - name: string; errorCode: 'FILE_TOO_BIG' | 'INVALID_FILE_EXTENSION' | 'GENERIC_ERROR'; + name: string; }[]; uploaded_ids?: { id: number; }[]; }; -export type PostCampaignsByCidBugsAndBidCommentsCmidApiArg = { +export type PostCampaignsByCidBugsAndBidMediaApiArg = { + /** Campaign id */ cid: string; + /** Defines an identifier for the bug object (BUG ID) */ bid: string; - cmid: string; body: { media: string | string[]; }; }; -export type DeleteCampaignsByCidBugsAndBidCommentsCmidApiResponse = - /** status 200 OK */ string; -export type DeleteCampaignsByCidBugsAndBidCommentsCmidApiArg = { - cid: string; - bid: string; - cmid: string; - body: {}; -}; export type GetCampaignsByCidBugsAndBidSiblingsApiResponse = /** status 200 OK */ { father?: { - id: number; - title: { - full: string; - compact: string; - context?: string[]; - }; context?: string; device: string; + id: number; os: { name: string; version: string; }; - }; - siblings: { - id: number; title: { - full: string; compact: string; context?: string[]; + full: string; }; + }; + siblings: { context?: string; device: string; + id: number; os: { name: string; version: string; }; + title: { + compact: string; + context?: string[]; + full: string; + }; }[]; }; export type GetCampaignsByCidBugsAndBidSiblingsApiArg = { @@ -1069,6 +1038,18 @@ export type GetCampaignsByCidClustersApiResponse = /** status 200 OK */ { export type GetCampaignsByCidClustersApiArg = { cid: string; }; +export type DeleteCampaignsByCidCustomStatusesApiResponse = + /** status 200 OK */ { + status?: boolean; + }; +export type DeleteCampaignsByCidCustomStatusesApiArg = { + /** Campaign id */ + cid: string; + body: { + custom_status_id: number; + to_custom_status_id?: number; + }[]; +}; export type GetCampaignsByCidCustomStatusesApiResponse = /** status 200 OK */ BugCustomStatus[]; export type GetCampaignsByCidCustomStatusesApiArg = { @@ -1081,22 +1062,10 @@ export type PatchCampaignsByCidCustomStatusesApiArg = { /** Campaign id */ cid: string; body: { + color: string; /** se esiste già questo parametro viene passato nel request body\r\nse invece non esiste ed il custom status deve essere creato, non viene passato */ custom_status_id?: number; name: string; - color: string; - }[]; -}; -export type DeleteCampaignsByCidCustomStatusesApiResponse = - /** status 200 OK */ { - status?: boolean; - }; -export type DeleteCampaignsByCidCustomStatusesApiArg = { - /** Campaign id */ - cid: string; - body: { - custom_status_id: number; - to_custom_status_id?: number; }[]; }; export type GetCampaignsByCidDevicesApiResponse = /** status 200 OK */ { @@ -1116,20 +1085,6 @@ export type PutCampaignsByCidFindingsAndFidApiArg = { comment: string; }; }; -export type PostCampaignsByCidInsightsApiResponse = - /** status 200 OK */ Insight; -export type PostCampaignsByCidInsightsApiArg = { - /** Campaign id */ - cid: string; - body: { - title: string; - description?: string; - severity_id: number; - observations_ids: number[]; - comment?: string; - visible?: number; - }; -}; export type GetCampaignsByCidInsightsApiResponse = /** status 200 OK */ (Insight & { usecases: { @@ -1141,10 +1096,24 @@ export type GetCampaignsByCidInsightsApiArg = { /** Campaign id */ cid: string; }; +export type PostCampaignsByCidInsightsApiResponse = + /** status 200 OK */ Insight; +export type PostCampaignsByCidInsightsApiArg = { + /** Campaign id */ + cid: string; + body: { + comment?: string; + description?: string; + observations_ids: number[]; + severity_id: number; + title: string; + visible?: number; + }; +}; export type GetCampaignsByCidMetaApiResponse = /** status 200 OK */ Campaign & { - selected_testers: number; /** Array of form factors */ allowed_devices: string[]; + selected_testers: number; }; export type GetCampaignsByCidMetaApiArg = { /** Campaign id */ @@ -1153,27 +1122,27 @@ export type GetCampaignsByCidMetaApiArg = { export type GetCampaignsByCidObservationsApiResponse = /** status 200 OK */ | { + kind: 'usecase-grapes'; results: { - usecaseId: number; - usecaseTitle: string; grapes: Grape[]; ungrouped: (Observation & { - uploaderId: number; - mediaId: number; deviceType: string; + mediaId: number; + uploaderId: number; usecaseTitle: string; })[]; + usecaseId: number; + usecaseTitle: string; }[]; - kind: 'usecase-grapes'; } | { + kind: 'ungrouped'; results: (Observation & { - uploaderId: number; - mediaId: number; deviceType: string; + mediaId: number; + uploaderId: number; usecaseTitle: string; })[]; - kind: 'ungrouped'; }; export type GetCampaignsByCidObservationsApiArg = { cid: string; @@ -1211,9 +1180,9 @@ export type GetCampaignsByCidSeveritiesApiArg = { }; export type GetCampaignsByCidSuggestionsApiResponse = /** status 200 OK */ { suggestion?: { - slug: BannerType; /** ServiceId from strapi */ serviceId?: number; + slug: BannerType; }; }; export type GetCampaignsByCidSuggestionsApiArg = { @@ -1229,24 +1198,25 @@ export type PostCampaignsByCidSuggestionsApiArg = { }; }; export type GetCampaignsByCidTagsApiResponse = /** status 200 OK */ { - tag_id: number; display_name: string; - slug: string; is_public?: number; + slug: string; + tag_id: number; }[]; export type GetCampaignsByCidTagsApiArg = { /** Campaign id */ cid: string; }; export type GetCampaignsByCidUsecasesApiResponse = /** status 200 OK */ { + completion: number; + content?: string; id: number; title: { full: string; - simple?: string; - prefix?: string; info?: string; + prefix?: string; + simple?: string; }; - completion: number; }[]; export type GetCampaignsByCidUsecasesApiArg = { /** Campaign id */ @@ -1254,11 +1224,22 @@ export type GetCampaignsByCidUsecasesApiArg = { /** bugs, videos */ filterBy?: string; }; +export type DeleteCampaignsByCidUsersApiResponse = /** status 200 OK */ { + items: Tenant[]; +}; +export type DeleteCampaignsByCidUsersApiArg = { + /** Campaign id */ + cid: string; + body: { + /** Tryber WP USER ID */ + user_id: number; + }; +}; export type GetCampaignsByCidUsersApiResponse = /** status 200 OK */ { items: Tenant[]; - start?: number; limit?: number; size?: number; + start?: number; total?: number; }; export type GetCampaignsByCidUsersApiArg = { @@ -1274,78 +1255,67 @@ export type GetCampaignsByCidUsersApiArg = { orderBy?: string; }; export type PostCampaignsByCidUsersApiResponse = /** status 200 OK */ { + email: string; profile_id: number; tryber_wp_user_id: number; - email: string; }; export type PostCampaignsByCidUsersApiArg = { /** Campaign id */ cid: string; body: { email: string; - name?: string; - surname?: string; - locale?: string; event_name?: string; - redirect_url?: string; + locale?: string; message?: string; - }; -}; -export type DeleteCampaignsByCidUsersApiResponse = /** status 200 OK */ { - items: Tenant[]; -}; -export type DeleteCampaignsByCidUsersApiArg = { - /** Campaign id */ - cid: string; - body: { - /** Tryber WP USER ID */ - user_id: number; + name?: string; + redirect_url?: string; + surname?: string; }; }; export type GetCampaignsByCidUxApiResponse = /** status 200 OK */ { - goal?: string; - users?: number; findings?: { + cluster: + | { + id: number; + name: string; + }[] + | 'all'; + comment?: string; + description: string; /** this field is the Finding ID */ id: number; - title: string; - description: string; - comment?: string; severity: { id: number; name: string; style: string; }; - cluster: - | { - id: number; - name: string; - }[] - | 'all'; + title: string; video?: { - url: string; - streamUrl: string; + description?: string; + end: number; poster?: string; start: number; - end: number; - description?: string; + streamUrl: string; + url: string; }[]; }[]; + goal?: string; + methodology?: { + description: string; + type: string; + }; + questions?: { + text: string; + }[]; sentiment?: { cluster: { id: number; name: string; }; - value: number; comment: string; + value: number; }[]; - methodology?: { - type: string; - description: string; - }; - questions?: { - text: string; - }[]; + users?: number; }; export type GetCampaignsByCidUxApiArg = { /** Campaign id */ @@ -1430,13 +1400,13 @@ export type GetCampaignsByCidWidgetsApiArg = { /** should update bug trend after request resolves? */ updateTrend?: boolean; }; -export type GetInsightsByIidApiResponse = /** status 200 OK */ Insight; -export type GetInsightsByIidApiArg = { +export type DeleteInsightsByIidApiResponse = /** status 200 OK */ void; +export type DeleteInsightsByIidApiArg = { /** Insight id */ iid: string; }; -export type DeleteInsightsByIidApiResponse = /** status 200 OK */ void; -export type DeleteInsightsByIidApiArg = { +export type GetInsightsByIidApiResponse = /** status 200 OK */ Insight; +export type GetInsightsByIidApiArg = { /** Insight id */ iid: string; }; @@ -1445,30 +1415,91 @@ export type PatchInsightsByIidApiArg = { /** Insight id */ iid: string; body: { - title?: string; + comment?: string; description?: string; - severity_id?: number; observations_ids?: number[]; - comment?: string; + severity_id?: number; + title?: string; visible?: number; }; }; -export type GetMediaByIdApiResponse = unknown; -export type GetMediaByIdApiArg = { - id: string; +export type GetInvitesByProfileAndTokenApiResponse = /** status 200 OK */ { + email: string; + name: string; + surname: string; + workspace: string; +}; +export type GetInvitesByProfileAndTokenApiArg = { + profile: string; + token: string; }; export type DeleteMediaCommentByMcidApiResponse = /** status 200 OK */ object; export type DeleteMediaCommentByMcidApiArg = { mcid: string; }; +export type GetMediaByIdApiResponse = unknown; +export type GetMediaByIdApiArg = { + id: string; +}; +export type DeletePlansByPidApiResponse = unknown; +export type DeletePlansByPidApiArg = { + pid: string; +}; +export type GetPlansByPidApiResponse = /** status 200 OK */ { + campaign?: { + id: number; + startDate: string; + /** CustomerTitle ?? Title */ + title: string; + }; + config: { + modules: Module[]; + }; + id: number; + project: { + id: number; + name: string; + }; + quote?: { + id: number; + status: 'pending' | 'proposed' | 'approved' | 'rejected'; + value: string; + }; + status: PlanStatus; + workspace_id: number; +}; +export type GetPlansByPidApiArg = { + pid: string; +}; +export type PatchPlansByPidApiResponse = unknown; +export type PatchPlansByPidApiArg = { + pid: string; + body: { + config: { + modules: Module[]; + }; + }; +}; +export type PatchPlansByPidStatusApiResponse = /** status 200 OK */ {}; +export type PatchPlansByPidStatusApiArg = { + pid: string; + body: { + status: PlanStatus; + }; +}; export type PostProjectsApiResponse = /** status 200 OK */ Project; export type PostProjectsApiArg = { body: { - name: string; customer_id: number; description?: string; + name: string; }; }; +export type DeleteProjectsByPidApiResponse = /** status 200 OK */ void; +export type DeleteProjectsByPidApiArg = { + /** Project id */ + pid: string; +}; export type GetProjectsByPidApiResponse = /** status 200 OK */ Project; export type GetProjectsByPidApiArg = { /** Project id */ @@ -1486,16 +1517,11 @@ export type PatchProjectsByPidApiArg = { description: string; }; }; -export type DeleteProjectsByPidApiResponse = /** status 200 OK */ void; -export type DeleteProjectsByPidApiArg = { - /** Project id */ - pid: string; -}; export type GetProjectsByPidCampaignsApiResponse = /** status 200 OK */ { items?: CampaignWithOutput[]; - start?: number; limit?: number; size?: number; + start?: number; total?: number; }; export type GetProjectsByPidCampaignsApiArg = { @@ -1510,11 +1536,23 @@ export type GetProjectsByPidCampaignsApiArg = { /** Order by accepted field */ orderBy?: string; }; +export type DeleteProjectsByPidUsersApiResponse = /** status 200 OK */ { + items: Tenant[]; +}; +export type DeleteProjectsByPidUsersApiArg = { + /** Project id */ + pid: string; + body: { + include_shared?: boolean; + /** Tryber WP USER ID */ + user_id: number; + }; +}; export type GetProjectsByPidUsersApiResponse = /** status 200 OK */ { items: Tenant[]; - start?: number; limit?: number; size?: number; + start?: number; total?: number; }; export type GetProjectsByPidUsersApiArg = { @@ -1530,45 +1568,41 @@ export type GetProjectsByPidUsersApiArg = { orderBy?: string; }; export type PostProjectsByPidUsersApiResponse = /** status 200 OK */ { + email: string; profile_id: number; tryber_wp_user_id: number; - email: string; }; export type PostProjectsByPidUsersApiArg = { /** Project id */ pid: string; body: { email: string; - name?: string; - surname?: string; - locale?: string; event_name?: string; - redirect_url?: string; + locale?: string; message?: string; + name?: string; + redirect_url?: string; + surname?: string; }; }; -export type DeleteProjectsByPidUsersApiResponse = /** status 200 OK */ { - items: Tenant[]; +export type PostUsersApiResponse = /** status 201 Created */ { + projectId?: number; + workspaceId: number; }; -export type DeleteProjectsByPidUsersApiArg = { - /** Project id */ - pid: string; +export type PostUsersApiArg = { body: { - /** Tryber WP USER ID */ - user_id: number; - include_shared?: boolean; - }; + name: string; + password: string; + roleId: number; + surname: string; + } & ( + | DataForPostUsersRequestForInvitedUser + | DataForPostUsersRequestForNewUser + ); }; -export type GetTemplatesApiResponse = /** status 200 OK */ ({ - id?: number; -} & Template)[]; -export type GetTemplatesApiArg = { - /** filterBy[]= */ - filterBy?: any; - /** Order value (ASC, DESC) */ - order?: string; - /** Order by accepted field */ - orderBy?: string; +export type HeadUsersByEmailByEmailApiResponse = unknown; +export type HeadUsersByEmailByEmailApiArg = { + email: string; }; export type GetUsersMeApiResponse = /** status 200 */ User; export type GetUsersMeApiArg = void; @@ -1584,6 +1618,11 @@ export type PutUsersMePreferencesBySlugApiArg = { value: string; }; }; +export type GetUsersRolesApiResponse = /** status 200 OK */ { + id: number; + name: string; +}[]; +export type GetUsersRolesApiArg = void; export type GetVideosByVidApiResponse = /** status 200 OK */ Video & { usecase: { id: number; @@ -1605,36 +1644,36 @@ export type PostVideosByVidObservationsApiResponse = export type PostVideosByVidObservationsApiArg = { vid: string; body: { - start: number; end: number; + start: number; }; }; +export type DeleteVideosByVidObservationsAndOidApiResponse = unknown; +export type DeleteVideosByVidObservationsAndOidApiArg = { + vid: string; + oid: string; +}; export type PatchVideosByVidObservationsAndOidApiResponse = /** status 200 OK */ Observation; export type PatchVideosByVidObservationsAndOidApiArg = { vid: string; oid: string; body: { - title?: string; description?: string; - start?: number; end?: number; quotes?: string; + start?: number; tags?: number[]; + title?: string; }; }; -export type DeleteVideosByVidObservationsAndOidApiResponse = unknown; -export type DeleteVideosByVidObservationsAndOidApiArg = { - vid: string; - oid: string; -}; export type GetVideosByVidTranslationApiResponse = /** status 200 OK */ { language: string; processing: number; sentences: { - text: string; - start: number; end: number; + start: number; + text: string; }[]; }; export type GetVideosByVidTranslationApiArg = { @@ -1651,9 +1690,9 @@ export type PostVideosByVidTranslationApiArg = { }; export type GetWorkspacesApiResponse = /** status 200 OK */ { items?: Workspace[]; - start?: number; limit?: number; size?: number; + start?: number; total?: number; }; export type GetWorkspacesApiArg = { @@ -1667,8 +1706,8 @@ export type GetWorkspacesApiArg = { orderBy?: string; }; export type PostWorkspacesApiResponse = /** status 200 OK */ { - id: number; company: string; + id: number; }; export type PostWorkspacesApiArg = { body: { @@ -1682,10 +1721,10 @@ export type GetWorkspacesByWidApiArg = { wid: string; }; export type GetWorkspacesByWidArchiveApiResponse = /** status 200 OK */ { + campaignsCounter: number; + description: string; id: number; name: string; - description: string; - campaignsCounter: number; }; export type GetWorkspacesByWidArchiveApiArg = { /** Workspace (company, customer) id */ @@ -1693,9 +1732,9 @@ export type GetWorkspacesByWidArchiveApiArg = { }; export type GetWorkspacesByWidCampaignsApiResponse = /** status 200 OK */ { items?: CampaignWithOutput[]; - start?: number; limit?: number; size?: number; + start?: number; total?: number; }; export type GetWorkspacesByWidCampaignsApiArg = { @@ -1714,9 +1753,9 @@ export type GetWorkspacesByWidCampaignsApiArg = { }; export type GetWorkspacesByWidCoinsApiResponse = /** status 200 OK */ { items?: Coin[]; - start?: number; limit?: number; size?: number; + start?: number; total?: number; }; export type GetWorkspacesByWidCoinsApiArg = { @@ -1731,20 +1770,8 @@ export type GetWorkspacesByWidCoinsApiArg = { /** Order by accepted field */ orderBy?: string; }; -export type PostWorkspacesByWidPlansApiResponse = /** status 201 Created */ { - id: number; -}; -export type PostWorkspacesByWidPlansApiArg = { - wid: string; - body: { - template_id: number; - project_id: number; - }; -}; export type GetWorkspacesByWidPlansApiResponse = /** status 200 OK */ { id: number; - title: string; - status: 'draft' | 'pending_review' | 'approved'; project: { id: number; title: string; @@ -1753,6 +1780,8 @@ export type GetWorkspacesByWidPlansApiResponse = /** status 200 OK */ { id: number; status: 'pending' | 'proposed' | 'approved' | 'rejected'; }; + status: 'draft' | 'pending_review' | 'approved'; + title: string; }[]; export type GetWorkspacesByWidPlansApiArg = { wid: string; @@ -1765,57 +1794,21 @@ export type GetWorkspacesByWidPlansApiArg = { /** Limit pagination parameter */ limit?: number; }; -export type DeletePlansByPidApiResponse = unknown; -export type DeletePlansByPidApiArg = { - pid: string; -}; -export type GetPlansByPidApiResponse = /** status 200 OK */ { +export type PostWorkspacesByWidPlansApiResponse = /** status 201 Created */ { id: number; - config: { - modules: Module[]; - }; - status: PlanStatus; - project: { - id: number; - name: string; - }; - quote?: { - id: number; - status: 'pending' | 'proposed' | 'approved' | 'rejected'; - value: string; - }; - campaign?: { - id: number; - /** CustomerTitle ?? Title */ - title: string; - startDate: string; - }; - workspace_id: number; -}; -export type GetPlansByPidApiArg = { - pid: string; -}; -export type PatchPlansByPidApiResponse = unknown; -export type PatchPlansByPidApiArg = { - pid: string; - body: { - config: { - modules: Module[]; - }; - }; }; -export type PatchPlansByPidStatusApiResponse = /** status 200 OK */ {}; -export type PatchPlansByPidStatusApiArg = { - pid: string; +export type PostWorkspacesByWidPlansApiArg = { + wid: string; body: { - status: PlanStatus; + project_id: number; + template_id: number; }; }; export type GetWorkspacesByWidProjectsApiResponse = /** status 200 OK */ { items?: Project[]; - start?: number; limit?: number; size?: number; + start?: number; total?: number; }; export type GetWorkspacesByWidProjectsApiArg = { @@ -1826,6 +1819,32 @@ export type GetWorkspacesByWidProjectsApiArg = { /** Start pagination parameter */ start?: number; }; +export type GetWorkspacesByWidProjectsAndPidApiResponse = + /** status 200 OK */ Project; +export type GetWorkspacesByWidProjectsAndPidApiArg = { + /** Workspace (company, customer) id */ + wid: string; + /** Project id */ + pid: string; +}; +export type GetWorkspacesByWidProjectsAndPidCampaignsApiResponse = + /** status 200 OK */ { + items?: CampaignWithOutput[]; + limit?: number; + size?: number; + start?: number; + total?: number; + }; +export type GetWorkspacesByWidProjectsAndPidCampaignsApiArg = { + /** Workspace (company, customer) id */ + wid: string; + /** Project id */ + pid: string; + /** Limit pagination parameter */ + limit?: number; + /** Start pagination parameter */ + start?: number; +}; export type GetWorkspacesByWidTemplatesApiResponse = /** status 200 OK */ { items: CpReqTemplate[]; } & PaginationData; @@ -1851,49 +1870,35 @@ export type DeleteWorkspacesByWidTemplatesAndTidApiArg = { }; export type GetWorkspacesByWidTemplatesAndTidApiResponse = /** status 200 OK */ { + config: string; + description?: string; id: number; name: string; - description?: string; - config: string; - workspace_id?: number; price?: string; strapi?: StrapiTemplate; + workspace_id?: number; }; export type GetWorkspacesByWidTemplatesAndTidApiArg = { wid: string; tid: string; }; -export type GetWorkspacesByWidProjectsAndPidApiResponse = - /** status 200 OK */ Project; -export type GetWorkspacesByWidProjectsAndPidApiArg = { - /** Workspace (company, customer) id */ - wid: string; - /** Project id */ - pid: string; +export type DeleteWorkspacesByWidUsersApiResponse = /** status 200 OK */ { + items: Tenant[]; }; -export type GetWorkspacesByWidProjectsAndPidCampaignsApiResponse = - /** status 200 OK */ { - items?: CampaignWithOutput[]; - start?: number; - limit?: number; - size?: number; - total?: number; - }; -export type GetWorkspacesByWidProjectsAndPidCampaignsApiArg = { +export type DeleteWorkspacesByWidUsersApiArg = { /** Workspace (company, customer) id */ wid: string; - /** Project id */ - pid: string; - /** Limit pagination parameter */ - limit?: number; - /** Start pagination parameter */ - start?: number; + body: { + include_shared?: boolean; + /** Tryber WP USER ID */ + user_id: number; + }; }; export type GetWorkspacesByWidUsersApiResponse = /** status 200 OK */ { items: Tenant[]; - start?: number; limit?: number; size?: number; + start?: number; total?: number; }; export type GetWorkspacesByWidUsersApiArg = { @@ -1909,75 +1914,65 @@ export type GetWorkspacesByWidUsersApiArg = { orderBy?: string; }; export type PostWorkspacesByWidUsersApiResponse = /** status 200 OK */ { + email: string; profile_id: number; tryber_wp_user_id: number; - email: string; }; export type PostWorkspacesByWidUsersApiArg = { /** Workspace (company, customer) id */ wid: string; body: { email: string; - name?: string; - surname?: string; - locale?: string; event_name?: string; - redirect_url?: string; + locale?: string; message?: string; - }; -}; -export type DeleteWorkspacesByWidUsersApiResponse = /** status 200 OK */ { - items: Tenant[]; -}; -export type DeleteWorkspacesByWidUsersApiArg = { - /** Workspace (company, customer) id */ - wid: string; - body: { - /** Tryber WP USER ID */ - user_id: number; - include_shared?: boolean; + name?: string; + redirect_url?: string; + surname?: string; }; }; export type Error = { - message: string; code: number; error: boolean; + message: string; }; export type Authentication = { - id: number; email: string; - role: string; + exp?: number; + iat?: number; + id: number; name: string; picture?: string; + role: string; token: string; - iat?: number; - exp?: number; }; export type Campaign = { - id: number; - start_date: string; - end_date: string; - close_date: string; - title: string; - customer_title: string; - is_public: number; + base_bug_internal_id?: string; /** -1: no bug form; 0: only bug form; 1: bug form with bug parade; */ bug_form?: number; - type: { + close_date: string; + customer_title: string; + description?: string; + end_date: string; + family: { id: number; name: string; }; - family: { + id: number; + is_public: number; + project: { id: number; name: string; }; + start_date: string; status: { id: number; name: string; }; - project: { + title: string; + type: { id: number; name: string; }; @@ -1985,48 +1980,6 @@ export type Campaign = { id: number; name: string; }; - description?: string; - base_bug_internal_id?: string; -}; -export type PlatformObject = { - /** os */ - id: number; - /** form_factor - - 0 => smartphone, - 1 => tablet - 2 => pc - 3 => smartwatch - 4 => console - 5 => tv */ - deviceType: number; -}; -export type TemplateCategory = { - id?: number; - name: string; -}; -export type Template = { - title: string; - /** Short description used as preview of template or in templates dropdown */ - description?: string; - /** HTML content used to pre-fill the use case editor */ - content?: string; - category?: TemplateCategory; - device_type?: 'webapp' | 'mobileapp'; - locale?: 'en' | 'it'; - image?: string; - /** The use case created by this template needs a login or not? */ - requiresLogin?: boolean; -}; -export type UseCase = { - title: string; - description: string; - /** Optional in experiential campaigns */ - functionality?: { - id?: number; - } & Template; - logged?: boolean; - link?: string; }; export type Output = 'bugs' | 'media' | 'insights'; export type CampaignWithOutput = Campaign & { @@ -2036,38 +1989,16 @@ export type BugType = { id: number; name: string; }; -export type BugTitle = { - full: string; - /** Bug title without context. */ - compact: string; - context?: string[]; -}; -export type BugStatus = { - id: number; - name: string; -}; -export type BugSeverity = { - id: number; - name: string; -}; -export type BugReplicability = { - id: number; - name: string; -}; -export type BugPriority = { - id: number; - name: string; -}; export type BugCustomStatusPhase = { id: number; name: string; }; export type BugCustomStatus = { + color: string; id: number; + is_default: number; name: string; - color: string; phase: BugCustomStatusPhase; - is_default: number; }; export type Smartphone = { manufacturer: string; @@ -2089,82 +2020,104 @@ export type Desktop = { os_version: string; type: 'desktop'; }; -export type Bug = { +export type BugPriority = { id: number; - internal_id: string; - campaign_id: number; - title: BugTitle; - step_by_step: string; - expected_result: string; - current_result: string; - status: BugStatus; - severity: BugSeverity; - type: BugType; - replicability: BugReplicability; - priority: BugPriority; - custom_status: BugCustomStatus; - created: string; - occurred_date: string; - updated?: string; - note?: string; - device: Smartphone | Tablet | Desktop; - application_section: { - id?: number; - prefix_title?: string; - title?: string; - simple_title?: string; - }; - duplicated_of_id?: number; - is_favorite?: number; - read?: boolean; + name: string; }; -export type BugMedia = { - mime_type: { - type: 'video' | 'image' | 'other'; - extension: string; - }; - url: string; - creation_date: string; +export type BugReplicability = { + id: number; + name: string; }; -export type BugTag = { +export type BugSeverity = { id: number; - tag_id: number; name: string; - slug: string; - bug_id: number; +}; +export type BugStatus = { + id: number; + name: string; +}; +export type BugTitle = { + /** Bug title without context. */ + compact: string; + context?: string[]; + full: string; +}; +export type Bug = { + application_section: { + id?: number; + prefix_title?: string; + simple_title?: string; + title?: string; + }; campaign_id: number; - author_wp_id?: number; - author_tid?: number; - creation_date: string; - is_visible_to_customer?: number; + created: string; + current_result: string; + custom_status: BugCustomStatus; + device: Smartphone | Tablet | Desktop; + duplicated_of_id?: number; + expected_result: string; + id: number; + internal_id: string; + is_favorite?: number; + note?: string; + occurred_date: string; + priority: BugPriority; + read?: boolean; + replicability: BugReplicability; + severity: BugSeverity; + status: BugStatus; + step_by_step: string; + title: BugTitle; + type: BugType; + updated?: string; }; export type BugAdditionalFieldRegex = { - validation: string; kind: 'regex'; + validation: string; }; export type BugAdditionalFieldSelect = { - options: string[]; kind: 'select'; + options: string[]; }; export type BugAdditionalField = { id: number; name: string; value: string; } & (BugAdditionalFieldRegex | BugAdditionalFieldSelect); -export type BugComment = { +export type BugMedia = { + creation_date: string; + mime_type: { + extension: string; + type: 'video' | 'image' | 'other'; + }; + url: string; +}; +export type BugTag = { + author_tid?: number; + author_wp_id?: number; + bug_id: number; + campaign_id: number; + creation_date: string; id: number; - text: string; + is_visible_to_customer?: number; + name: string; + slug: string; + tag_id: number; +}; +export type BugComment = { creation_date: string; creator: { id: number; - name: string; isInternal: boolean; + name: string; }; + id: number; media?: { - url: string; id: number; type: string; + url: string; }[]; + text: string; }; export type Cluster = { id: number; @@ -2183,45 +2136,45 @@ export type VideoTag = { }; }; export type Observation = { - id: number; - title: string; description: string; - start: number; end: number; + id: number; quotes: string; - uxNote?: string; + start: number; tags: VideoTag[]; + title: string; + uxNote?: string; }; export type Insight = { - id: number; - title: string; + comment?: string; description: string; + id: number; + observations: (Observation & { + uploaderId: number; + usecaseTitle: string; + video: { + deviceType: string; + id: number; + }; + })[]; severity: { id: number; name: string; style: string; }; + title: string; visible?: number; - comment?: string; - observations: (Observation & { - video: { - id: number; - deviceType: string; - }; - uploaderId: number; - usecaseTitle: string; - })[]; }; export type Grape = { - title: string; - severity: string; - usersNumber: number; observations: (Observation & { - uploaderId: number; - mediaId: number; deviceType: string; + mediaId: number; + uploaderId: number; usecaseTitle: string; })[]; + severity: string; + title: string; + usersNumber: number; }; export type ReportExtensions = | 'pdf' @@ -2239,98 +2192,98 @@ export type ReportExtensions = | 'gz' | '7z'; export type Report = { - id?: number; - title?: string; + creation_date?: string; description?: string; - url: string; file_type?: { + domain_name?: string; extension?: ReportExtensions; type: string; - domain_name?: string; }; - creation_date?: string; + id?: number; + title?: string; update_date?: string; + url: string; }; export type BannerType = | 'banner_testing_automation' | 'banner_user_experience' | 'banner_cyber_security'; export type Tenant = { + email: string; /** tryber wp_user_id */ id: number; - profile_id: number; - name: string; - email: string; invitationPending: boolean; + name: string; permissionFrom?: { - type?: 'workspace' | 'project'; id?: number; + type?: 'workspace' | 'project'; }; + profile_id: number; +}; +export type MediaSentiment = { + paragraphs: { + end: number; + reason: string; + start: number; + value: number; + }[]; + reason: string; + value: number; }; export type Word = { - start: number; end: number; /** Id of Speaker */ speaker?: number; + start: number; word: string; }; export type Paragraph = { - text: string; - start: number; end: number; /** Id Of speaker */ speaker?: number; + start: number; + text: string; words: Word[]; }; export type Transcript = { + paragraphs: Paragraph[]; /** Number of spekers */ speakers: number; - paragraphs: Paragraph[]; -}; -export type MediaSentiment = { - value: number; - reason: string; - paragraphs: { - start: number; - end: number; - value: number; - reason: string; - }[]; }; export type Video = { + duration?: number; id: number; - url: string; - streamUrl?: string; poster?: string; - duration?: number; + sentiment?: MediaSentiment; + streamUrl?: string; tester: { - id: number; - name: string; - surname: string; device: { type: 'smartphone' | 'tablet' | 'desktop' | 'other'; }; + id: number; + name: string; + surname: string; }; transcript?: Transcript; - sentiment?: MediaSentiment; + url: string; }; export type PaginationData = { - start?: number; - size?: number; limit?: number; + size?: number; + start?: number; total?: number; }; export type WidgetBugsByUseCase = { data: { + bugs: number; + description: string; title: { full: string; - simple?: string; - prefix?: string; info?: string; + prefix?: string; + simple?: string; }; - description: string; uniqueBugs?: number; - bugs: number; usecase_completion?: number; usecase_id: number; }[]; @@ -2338,30 +2291,30 @@ export type WidgetBugsByUseCase = { }; export type WidgetBugsByDevice = { data: ((Smartphone | Desktop | Tablet) & { - unique_bugs: number; /** Unique bugs */ bugs: number; + unique_bugs: number; })[]; kind: 'bugsByDevice'; }; export type WidgetCampaignProgress = { data: { - start_date: string; end_date: string; - /** Percentage fixed rate of completion */ - usecase_completion: 12.5 | 37.5 | 62.5 | 87.5 | 100; - /** Number of hours from start_date */ - time_elapsed: number; /** Expected amount of hours required to complete the campaign */ expected_duration: number; + start_date: string; + /** Number of hours from start_date */ + time_elapsed: number; + /** Percentage fixed rate of completion */ + usecase_completion: 12.5 | 37.5 | 62.5 | 87.5 | 100; }; kind: 'campaignProgress'; }; export type WidgetCampaignUniqueBugs = { data: { - unique: number; total: number; trend: number; + unique: number; }; kind: 'campaignUniqueBugs'; }; @@ -2373,149 +2326,87 @@ export type WidgetBugsByDuplicates = { }; export type WidgetCampaignUxTaggingVideoCompletionData = { data: { - countMediaWithObservation: number; countMedia: number; + countMediaWithObservation: number; }; kind: 'uxTaggingVideoCompletion'; }; -export type WidgetCampaignUxTotalTitlesVsRecurrentTitles = { - data: { - countTitleTag: number; - countObservationNoTitle: number; - countRecurrentTitles: number; - }; - kind: 'uxTotalTitlesVsRecurrentTitles'; -}; -export type WidgetCampaignUxSeveritiesDistribution = { - data: { - countObservations: number; - severitiesDistribution: { - countPositiveFindings: number; - countMinorIssue: number; - countMajorIssue: number; - countObservationSeverity: number; - }; - }; - kind: 'uxSeveritiesDistribution'; -}; -export type WidgetCampaignUxMostUsedTitles = { - data: { - mostUsedTitles: { - title: string; - usage: number; - mainSeverityAssignment: string; - }[]; - }; - kind: 'uxMostUsedTitles'; -}; -export type Project = { - id: number; - name: string; - campaigns_count: number; - workspaceId: number; - description?: string; - is_archive?: number; -}; -export type Feature = { - slug?: string; - name?: string; -}; -export type User = { - /** This is the main id of the user. Currently is equal to tryber_wp_user_id */ - id: number; - email: string; - role: string; - name: string; - profile_id: number; - tryber_wp_user_id: number; - unguess_wp_user_id: number; - picture?: string; - features?: Feature[]; -}; -export type UserPreference = { - preference_id: number; - value: string; - name: string; -}; -export type Workspace = { - id: number; - company: string; - tokens: number; - logo?: string; - csm: { - id: number; - email: string; - name: string; - profile_id: number; - tryber_wp_user_id: number; - picture?: string; - url?: string; +export type WidgetCampaignUxTotalTitlesVsRecurrentTitles = { + data: { + countObservationNoTitle: number; + countRecurrentTitles: number; + countTitleTag: number; }; - /** express coins */ - coins?: number; - /** Do this workspace have shared items? */ - isShared?: boolean; - /** Number of shared items */ - sharedItems?: number; + kind: 'uxTotalTitlesVsRecurrentTitles'; }; -export type Coin = { - id: number; - customer_id: number; - /** Number of available coin */ - amount: number; - agreement_id?: number; - /** This is the single coin price */ - price?: number; - created_on?: string; - /** On each coin use, the related package will be updated */ - updated_on?: string; +export type WidgetCampaignUxSeveritiesDistribution = { + data: { + countObservations: number; + severitiesDistribution: { + countMajorIssue: number; + countMinorIssue: number; + countObservationSeverity: number; + countPositiveFindings: number; + }; + }; + kind: 'uxSeveritiesDistribution'; +}; +export type WidgetCampaignUxMostUsedTitles = { + data: { + mostUsedTitles: { + mainSeverityAssignment: string; + title: string; + usage: number; + }[]; + }; + kind: 'uxMostUsedTitles'; }; export type ModuleTitle = { + output: string; type: 'title'; variant: string; - output: string; }; export type ModuleDate = { - type: 'dates'; - variant: string; output: { start: string; }; + type: 'dates'; + variant: string; }; export type SubcomponentTaskVideo = { + description?: string; kind: 'video'; title: string; - description?: string; url?: string; }; export type SubcomponentTaskBug = { + description?: string; kind: 'bug'; title: string; - description?: string; url?: string; }; export type SubcomponentTaskSurvey = { + description?: string; kind: 'survey'; title: string; - description?: string; url?: string; }; export type OutputModuleTaskModerateVideo = { + description?: string; kind: 'moderate-video'; title: string; - description?: string; url?: string; }; export type OutputModuleTaskExplorativeBug = { + description?: string; kind: 'explorative-bug'; title: string; - description?: string; url?: string; }; export type OutputModuleTaskAccessibility = { + description?: string; kind: 'accessibility'; title: string; - description?: string; url?: string; }; export type SubcomponentTask = @@ -2526,85 +2417,85 @@ export type SubcomponentTask = | OutputModuleTaskExplorativeBug | OutputModuleTaskAccessibility; export type ModuleTask = { + output: SubcomponentTask[]; type: 'tasks'; variant: string; - output: SubcomponentTask[]; }; export type OutputModuleAge = { - min: number; max: number; + min: number; percentage: number; }[]; export type ModuleAge = { + output: OutputModuleAge; type: 'age'; variant: string; - output: OutputModuleAge; }; export type ModuleLanguage = { + output: string; type: 'language'; variant: string; - output: string; }; export type OutputModuleLiteracy = { level: 'beginner' | 'intermediate' | 'expert'; percentage: number; }[]; export type ModuleLiteracy = { + output: OutputModuleLiteracy; type: 'literacy'; variant: string; - output: OutputModuleLiteracy; }; export type ModuleTarget = { + output: number; type: 'target'; variant: string; - output: number; }; export type ModuleGoal = { + output: string; type: 'goal'; variant: string; - output: string; }; export type OutputModuleGender = { gender: 'male' | 'female'; percentage: number; }[]; export type ModuleGender = { + output: OutputModuleGender; type: 'gender'; variant: string; - output: OutputModuleGender; }; export type ModuleOutOfScope = { + output: string; type: 'out_of_scope'; variant: string; - output: string; }; export type OutputModuleBrowser = { name: 'firefox' | 'edge' | 'chrome' | 'safari'; percentage: number; }[]; export type ModuleBrowser = { + output: OutputModuleBrowser; type: 'browser'; variant: string; - output: OutputModuleBrowser; }; export type ModuleTargetNote = { + output: string; type: 'target_note'; variant: string; - output: string; }; export type ModuleInstructionNote = { + output: string; type: 'instruction_note'; variant: string; - output: string; }; export type ModuleSetupNote = { + output: string; type: 'setup_note'; variant: string; - output: string; }; export type OutputModuleTouchpointsAppDesktop = { - kind: 'app'; form_factor: 'desktop'; + kind: 'app'; os: { linux?: string; macos?: string; @@ -2612,25 +2503,25 @@ export type OutputModuleTouchpointsAppDesktop = { }; }; export type OutputModuleTouchpointsAppTablet = { - kind: 'app'; form_factor: 'tablet'; + kind: 'app'; os: { - linux?: string; ios?: string; + linux?: string; windows?: string; }; }; export type OutputModuleTouchpointsAppSmartphone = { - kind: 'app'; form_factor: 'smartphone'; + kind: 'app'; os: { android?: string; ios?: string; }; }; export type OutputModuleTouchpointsWebDesktop = { - kind: 'web'; form_factor: 'desktop'; + kind: 'web'; os: { linux?: string; macos?: string; @@ -2638,16 +2529,16 @@ export type OutputModuleTouchpointsWebDesktop = { }; }; export type OutputModuleTouchpointsWebTablet = { - kind: 'web'; form_factor: 'tablet'; + kind: 'web'; os: { android?: string; ios?: string; }; }; export type OutputModuleTouchpointsWebSmartphone = { - kind: 'web'; form_factor: 'smartphone'; + kind: 'web'; os: { android?: string; ios?: string; @@ -2661,14 +2552,14 @@ export type SubcomponentTouchpoints = | OutputModuleTouchpointsWebTablet | OutputModuleTouchpointsWebSmartphone; export type ModuleTouchpoints = { + output: SubcomponentTouchpoints[]; type: 'touchpoints'; variant: string; - output: SubcomponentTouchpoints[]; }; export type ModuleAdditionalTarget = { + output: string; type: 'additional_target'; variant: string; - output: string; }; export type Module = | ModuleTitle @@ -2688,12 +2579,95 @@ export type Module = | ModuleTouchpoints | ModuleAdditionalTarget; export type PlanStatus = 'pending_review' | 'draft' | 'approved'; +export type Project = { + campaigns_count: number; + description?: string; + id: number; + is_archive?: number; + name: string; + workspaceId: number; +}; +export type DataForPostUsersRequestForInvitedUser = { + profileId: number; + token: string; + type: 'invite'; +}; +export type DataForPostUsersRequestForNewUser = { + email: string; + type: 'new'; + workspace: string; +}; +export type Feature = { + name?: string; + slug?: string; +}; +export type User = { + customer_role: string; + email: string; + features?: Feature[]; + /** This is the main id of the user. Currently is equal to tryber_wp_user_id */ + id: number; + name: string; + picture?: string; + profile_id: number; + role: string; + tryber_wp_user_id: number; + unguess_wp_user_id: number; +}; +export type UserPreference = { + name: string; + preference_id: number; + value: string; +}; +export type Workspace = { + /** express coins */ + coins?: number; + company: string; + csm: { + email: string; + id: number; + name: string; + picture?: string; + profile_id: number; + tryber_wp_user_id: number; + url?: string; + }; + id: number; + /** Do this workspace have shared items? */ + isShared?: boolean; + logo?: string; + /** Number of shared items */ + sharedItems?: number; + tokens: number; +}; +export type Coin = { + agreement_id?: number; + /** Number of available coin */ + amount: number; + created_on?: string; + customer_id: number; + id: number; + /** This is the single coin price */ + price?: number; + /** On each coin use, the related package will be updated */ + updated_on?: string; +}; export type StrapiTemplate = { - title: string; + background?: string; description: string; - pre_title: string; + how?: { + description: string; + icon: string; + title: string; + }[]; image?: string; output_image?: string; + pre_title: string; + price?: { + is_strikethrough?: number; + previous_price?: string; + price: string; + }; requirements?: { description: string; list: string[]; @@ -2702,64 +2676,53 @@ export type StrapiTemplate = { icon: string; text: string; }[]; + title: string; + what?: { + description: string; + goal: string; + }; why?: { + advantages: string[]; reasons: { + description: string; icon: string; title: string; - description: string; }[]; - advantages: string[]; - }; - what?: { - description: string; - goal: string; - }; - how?: { - icon: string; - title: string; - description: string; - }[]; - price?: { - price: string; - previous_price?: string; - is_strikethrough?: number; }; - background?: string; }; export type CpReqTemplate = { + config: string; + description?: string; id: number; name: string; - description?: string; - config: string; - workspace_id?: number; price?: string; strapi?: StrapiTemplate; + workspace_id?: number; }; export const { use$getQuery, - usePostAuthenticateMutation, usePostAnalyticsViewsCampaignsByCidMutation, - usePostCampaignsMutation, - usePatchCampaignsByCidMutation, + usePostAuthenticateMutation, useGetCampaignsByCidQuery, + usePatchCampaignsByCidMutation, useGetCampaignsByCidBugTypesQuery, useGetCampaignsByCidBugsQuery, useGetCampaignsByCidBugsAndBidQuery, usePatchCampaignsByCidBugsAndBidMutation, useGetCampaignsByCidBugsAndBidCommentsQuery, usePostCampaignsByCidBugsAndBidCommentsMutation, - usePostCampaignsByCidBugsAndBidMediaMutation, - usePostCampaignsByCidBugsAndBidCommentsCmidMutation, useDeleteCampaignsByCidBugsAndBidCommentsCmidMutation, + usePostCampaignsByCidBugsAndBidCommentsCmidMutation, + usePostCampaignsByCidBugsAndBidMediaMutation, useGetCampaignsByCidBugsAndBidSiblingsQuery, useGetCampaignsByCidClustersQuery, + useDeleteCampaignsByCidCustomStatusesMutation, useGetCampaignsByCidCustomStatusesQuery, usePatchCampaignsByCidCustomStatusesMutation, - useDeleteCampaignsByCidCustomStatusesMutation, useGetCampaignsByCidDevicesQuery, usePutCampaignsByCidFindingsAndFidMutation, - usePostCampaignsByCidInsightsMutation, useGetCampaignsByCidInsightsQuery, + usePostCampaignsByCidInsightsMutation, useGetCampaignsByCidMetaQuery, useGetCampaignsByCidObservationsQuery, useGetCampaignsByCidOsQuery, @@ -2771,36 +2734,43 @@ export const { usePostCampaignsByCidSuggestionsMutation, useGetCampaignsByCidTagsQuery, useGetCampaignsByCidUsecasesQuery, + useDeleteCampaignsByCidUsersMutation, useGetCampaignsByCidUsersQuery, usePostCampaignsByCidUsersMutation, - useDeleteCampaignsByCidUsersMutation, useGetCampaignsByCidUxQuery, useGetCampaignsByCidVideoTagsQuery, usePostCampaignsByCidVideoTagsMutation, useGetCampaignsByCidVideosQuery, useGetCampaignsByCidWidgetsQuery, - useGetInsightsByIidQuery, useDeleteInsightsByIidMutation, + useGetInsightsByIidQuery, usePatchInsightsByIidMutation, - useGetMediaByIdQuery, + useGetInvitesByProfileAndTokenQuery, useDeleteMediaCommentByMcidMutation, + useGetMediaByIdQuery, + useDeletePlansByPidMutation, + useGetPlansByPidQuery, + usePatchPlansByPidMutation, + usePatchPlansByPidStatusMutation, usePostProjectsMutation, + useDeleteProjectsByPidMutation, useGetProjectsByPidQuery, usePatchProjectsByPidMutation, - useDeleteProjectsByPidMutation, useGetProjectsByPidCampaignsQuery, + useDeleteProjectsByPidUsersMutation, useGetProjectsByPidUsersQuery, usePostProjectsByPidUsersMutation, - useDeleteProjectsByPidUsersMutation, - useGetTemplatesQuery, + usePostUsersMutation, + useHeadUsersByEmailByEmailMutation, useGetUsersMeQuery, useGetUsersMePreferencesQuery, usePutUsersMePreferencesBySlugMutation, + useGetUsersRolesQuery, useGetVideosByVidQuery, useGetVideosByVidObservationsQuery, usePostVideosByVidObservationsMutation, - usePatchVideosByVidObservationsAndOidMutation, useDeleteVideosByVidObservationsAndOidMutation, + usePatchVideosByVidObservationsAndOidMutation, useGetVideosByVidTranslationQuery, usePostVideosByVidTranslationMutation, useGetWorkspacesQuery, @@ -2809,19 +2779,15 @@ export const { useGetWorkspacesByWidArchiveQuery, useGetWorkspacesByWidCampaignsQuery, useGetWorkspacesByWidCoinsQuery, - usePostWorkspacesByWidPlansMutation, useGetWorkspacesByWidPlansQuery, - useDeletePlansByPidMutation, - useGetPlansByPidQuery, - usePatchPlansByPidMutation, - usePatchPlansByPidStatusMutation, + usePostWorkspacesByWidPlansMutation, useGetWorkspacesByWidProjectsQuery, + useGetWorkspacesByWidProjectsAndPidQuery, + useGetWorkspacesByWidProjectsAndPidCampaignsQuery, useGetWorkspacesByWidTemplatesQuery, useDeleteWorkspacesByWidTemplatesAndTidMutation, useGetWorkspacesByWidTemplatesAndTidQuery, - useGetWorkspacesByWidProjectsAndPidQuery, - useGetWorkspacesByWidProjectsAndPidCampaignsQuery, + useDeleteWorkspacesByWidUsersMutation, useGetWorkspacesByWidUsersQuery, usePostWorkspacesByWidUsersMutation, - useDeleteWorkspacesByWidUsersMutation, } = injectedRtkApi; 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/templates/Logged.tsx b/src/features/templates/Logged.tsx index 3a25c738e..0b41ead8d 100644 --- a/src/features/templates/Logged.tsx +++ b/src/features/templates/Logged.tsx @@ -57,6 +57,7 @@ export const Logged = ({ wp_user_id: userData.unguess_wp_user_id ?? 0, tryber_id: userData.tryber_wp_user_id ?? 0, role: userData.role ?? 'unknown', + customer_role: userData.customer_role, }); return ( diff --git a/src/features/user/userSlice.ts b/src/features/user/userSlice.ts index 8c1a07b7a..af1ecee06 100644 --- a/src/features/user/userSlice.ts +++ b/src/features/user/userSlice.ts @@ -10,6 +10,7 @@ const initialState: UserState = { role: 'none', name: '', profile_id: 0, + customer_role: 'Not set', tryber_wp_user_id: 0, unguess_wp_user_id: 0, }, 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..a2df54677 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; @@ -12,10 +12,13 @@ export interface GTMEventData { target?: string; } -export const useSendGTMevent = () => { +export const useSendGTMevent = ({ + loggedUser = true, +}: { loggedUser?: boolean } = {}) => { const user = useAppSelector( (state) => ({ role: state.user.userData.role, + customer_role: state.user.userData.customer_role, tryber_wp_user_id: state.user.userData.tryber_wp_user_id, id: state.user.userData.id, name: state.user.userData.name, @@ -27,15 +30,21 @@ export const useSendGTMevent = () => { const callback = useCallback( (data: GTMEventData) => { - if (user && activeWorkspace && data) { + if ( + (loggedUser ? user : true) && + (loggedUser ? activeWorkspace : true) && + data + ) { + console.log('GTM Event Data sent'); TagManager.dataLayer({ dataLayer: { role: user.role, + customer_role: user.customer_role, wp_user_id: user.tryber_wp_user_id, tester_id: user.id, name: user.name, email: user.email, - company: activeWorkspace.company, + company: activeWorkspace?.company, event: data?.event ?? '(not set)', content: data?.content ?? '(not set)', category: data?.category ?? '(not set)', diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index 8c57b5aab..78812f79b 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -11,8 +11,6 @@ "__APP_HOURS_LABEL_many": "hours", "__APP_HOURS_LABEL_other": "hours", "__APP_LANGUANGE_EN_TEXT": "English", - "__APP_LANGUANGE_ES_TEXT": "Spanish", - "__APP_LANGUANGE_FR_TEXT": "French", "__APP_LANGUANGE_IT_TEXT": "Italian", "__APP_META_DESCRIPTION": "UNGUESS provides collective wisdom to improve your decision-making process. Eliminate inefficiencies with our testing, monitoring and research platform.", "__APP_META_PAYOFF": "Be smart from the start", @@ -46,7 +44,6 @@ "__BANNER_CROSS_FUNCTIONAL_MESSAGE_EXPERIENCE_ANCHOR": "Discover more", "__BANNER_CROSS_FUNCTIONAL_TITLE_CYBER": "Make your product bulletproof:", "__BANNER_CROSS_FUNCTIONAL_TITLE_EXPERIENCE": "Validate your UX:", - "__BREADCRUMB_ITEM_SERVICES": "Services", "__BROWSER_ERROR_REQUIRED": "No browser selected: Choose at least one browser to continue", "__BUG_COMMENTS_CHAT_BOLD": "Bold", "__BUG_COMMENTS_CHAT_CANCEL__": "Cancel", @@ -105,8 +102,6 @@ "__BUG_SEVERITY_LOW": "Low", "__BUG_SEVERITY_MEDIUM": "Medium", "__BUG_STATUS": "Status", - "__BUGS_CUSTOM_STATUS_FILTER_ITEM_NO_ITEMS": "All statuses", - "__BUGS_DEVICES_FILTER_ITEM_NO_ITEMS": "Devices", "__BUGS_EXCLUDE_NOT_A_BUG": "Exclude “Not a bug”", "__BUGS_EXCLUDED_NOT_A_BUG": "“Not a bug” excluded", "__BUGS_FILTER_VIEW_ALL_LABEL": "All filters", @@ -121,7 +116,6 @@ "__BUGS_ORDER_BY_OPEN_MENU": "Order by", "__BUGS_ORDER_HIGHEST_TO_LOWEST": "By highest to lowest", "__BUGS_ORDER_LOWEST_TO_HIGHEST": "By lowest to highest", - "__BUGS_OS_FILTER_ITEM_NO_ITEMS": "OS", "__BUGS_PAGE_BUG_CARD_DUPLICATES_LABEL": "Duplicates", "__BUGS_PAGE_BUG_COMMENTS_EMPTY_TEXT": "There are no comments yet.", "__BUGS_PAGE_BUG_COMMENTS_EXISITING_TEXT": "There are comments on this bug.", @@ -297,12 +291,10 @@ "__BUGS_PREVIEW_MEDIA_TOOLTIP_TEXT": "Attachments", "__BUGS_PREVIEW_RELATED_BUGS_TOOLTIP_TEXT": "Related bugs", "__BUGS_PREVIEW_TAG_TOOLTIP_TEXT": "Details", - "__BUGS_PRIORITY_FILTER_ITEM_NO_ITEMS": "All priorities", "__BUGS_READ_FILTER_ITEM_ALL": "All bugs", "__BUGS_READ_FILTER_ITEM_DRAWER_ALL": "All", "__BUGS_READ_FILTER_ITEM_PLACEHOLDER": "Read/unread", "__BUGS_READ_FILTER_ITEM_UNREAD": "Unread", - "__BUGS_REPLICABILITY_FILTER_ITEM_NO_ITEMS": "All replicabilities", "__BUGS_SEARCH_INPUT_PLACEHOLDER": "Search", "__BUGS_SEVERITY_FILTER_ITEM_NO_ITEMS": "Severity", "__BUGS_SEVERITY_FILTER_ITEM_WITH_COUNTER_one": "Severity ({{count}})", @@ -313,9 +305,7 @@ "__BUGS_TABLE_PRIORITY_HEADER_COLUMN": "Priority", "__BUGS_TABLE_SEVERITY_HEADER_COLUMN": "Severity", "__BUGS_TABLE_TITLE_HEADER_COLUMN": "Bug", - "__BUGS_TAGS_FILTER_ITEM_NO_ITEMS": "Tag", "__BUGS_TAGS_FILTER_ITEM_NO_TAGS": "No tags", - "__BUGS_TYPES_FILTER_ITEM_NO_ITEMS": "Typology", "__BUGS_UNIQUE_FILTER_DROWPDOWN_ITEM_UNIQUE": "Unique bugs only", "__BUGS_UNIQUE_FILTER_ITEM_ALL": "All bugs", "__BUGS_UNIQUE_FILTER_ITEM_PLACEHOLDER": "Unique/duplicated", @@ -560,16 +550,6 @@ "__CATALOG_DETAIL_TIMELINE_WHAT_TITLE": "<0>What you get", "__CATALOG_DETAIL_TIMELINE_WHY_DESCRIPTION": "This activity is for you if:", "__CATALOG_DETAIL_TIMELINE_WHY_TITLE": "<0>Why to choose this activity", - "__CATALOG_PAGE_BUTTON_CONTACT_LABEL": "Book a kick-off call", - "__CATALOG_PAGE_BUTTON_EXPRESS_LABEL": "Launch activity", - "__CATALOG_PAGE_BUTTON_HOW_LABEL": "How does it work?", - "__CATALOG_PAGE_DESCRIPTION": "Discover UNGUESS' superpowers", - "__CATALOG_PAGE_INFO_SERVICE_BUTTON_CONTACT_LABEL": "Get in touch with your CSM", - "__CATALOG_PAGE_INFO_SERVICE_SUBTITLE": "TIP", - "__CATALOG_PAGE_INFO_SERVICE_TITLE": "Can't find what you're looking for?", - "__CATALOG_PAGE_TITLE": "Services", - "__CATALOG_STICKY_CONTAINER_NAV_CATEGORIES_LABEL": "BY CATEGORY", - "__CATALOG_STICKY_CONTAINER_NAV_EXTERNAL_LINK_LABEL": "Discover services", "__COPY_ERROR": "Failed to copy text to clipboard", "__COPY_SUCCESS": "Text copied to clipboard", "__DASHABOARD_CAMPAIGN_CAMPAIGN_TYPE_FILTER_LABEL Max:10": "Type", @@ -619,256 +599,9 @@ "__ERROR_PAGE_BUTTON": "Refresh the page", "__ERROR_PAGE_SUBTITLE": "Let's try to solve it with the simplest trick.", "__ERROR_PAGE_TITLE": "This is unexpected.", - "__EXPERIENTIAL_LABEL": "Experiential", "__EXPRESS__SERVICE_TILES_DISCLAIMER": "* The price is to be understood as subject to any prior agreements with your customer success manager.", - "__EXPRESS_2_WIZARD_STEP_HOW_EDIT_USE_CASE_CARD_INCOMEPLETE_LABEL": "This use case is not complete", - "__EXPRESS_2_WIZARD_STEP_HOW_USE_CASE_MODAL_DELETE_USE_CASE_LABEL": "Delete Test Case", - "__EXPRESS_2_WIZARD_STEP_HOW_USE_CASE_MODAL_EMPTY_USE_CASE_DESCRIPTION": "Specify what actions testers will perform to verify one or more functionalities in real scenarios", - "__EXPRESS_2_WIZARD_STEP_HOW_USE_CASE_MODAL_EMPTY_USE_CASE_LABEL": "Add your first user task", - "__EXPRESS_2_WIZARD_STEP_HOW_USE_CASE_MODAL_TITLE_FIELD_TITLE": "User task title", - "__EXPRESS_2_WIZARD_STEP_HOW_USE_CASE_MODAL_TITLE_REQUIRED": "User task title is required", - "__EXPRESS_2_WIZARD_STEP_HOW_USE_CASE_MODAL_USE_CASE_LABEL": "User Task", - "__EXPRESS_3_WIZARD_STEP_CONFIRM_WHO_TEXT": "Your users", - "__EXPRESS_3_WIZARD_STEP_HOW_ADD_USE_CASE_CARD_TITLE": "Add user task", - "__EXPRESS_3_WIZARD_STEP_HOW_EDIT_USE_CASE_CARD_INCOMEPLETE_LABEL": "This user task is not complete", - "__EXPRESS_3_WIZARD_STEP_HOW_USE_CASE_MODAL_DELETE_USE_CASE_LABEL": "Delete User Task", - "__EXPRESS_3_WIZARD_STEP_HOW_USE_CASE_MODAL_EMPTY_USE_CASE_DESCRIPTION": "Specify what actions testers will perform to verify one or more functionalities in real scenarios", - "__EXPRESS_3_WIZARD_STEP_HOW_USE_CASE_MODAL_EMPTY_USE_CASE_LABEL": "Add your first user task", - "__EXPRESS_3_WIZARD_STEP_HOW_USE_CASE_MODAL_MIN_ERROR": "Please add at least one user task", - "__EXPRESS_3_WIZARD_STEP_HOW_USE_CASE_MODAL_TITLE_FIELD_TITLE": "User task title", - "__EXPRESS_3_WIZARD_STEP_HOW_USE_CASE_MODAL_TITLE_REQUIRED": "User task title is required", - "__EXPRESS_3_WIZARD_STEP_HOW_USE_CASE_MODAL_USE_CASE_LABEL": "User Task", - "__EXPRESS_3_WIZARD_STEP_RECAP_WHO_AGE_RANGE_TEXT": "Are aged between {{age_range_start}} and {{age_range_end}} years.", - "__EXPRESS_3_WIZARD_STEP_RECAP_WHO_AGE_RANGE_TEXT_ALL": "Are <1>evenly distributed by <3>age.", - "__EXPRESS_3_WIZARD_STEP_RECAP_WHO_CONTENT_TEXT": "Are speaking {{spoken_language}}.", - "__EXPRESS_3_WIZARD_STEP_RECAP_WHO_DIGITALIZATION_TEXT_ALL": "Are <1>evenly distributed by <4>digital literacy.", - "__EXPRESS_3_WIZARD_STEP_RECAP_WHO_DIGITALIZATION_TEXT_BEGINNER": "Have a <1>low level of <4>digital literacy.", - "__EXPRESS_3_WIZARD_STEP_RECAP_WHO_DIGITALIZATION_TEXT_EXPERT": "Have an <1>high level of <4>digital literacy.", - "__EXPRESS_3_WIZARD_STEP_RECAP_WHO_DIGITALIZATION_TEXT_INTERMEDIATE": "Have a <1>medium level of <4>digital literacy.", - "__EXPRESS_3_WIZARD_STEP_RECAP_WHO_GENDER_TEXT": "Are <1>{{gender}}.", - "__EXPRESS_3_WIZARD_STEP_RECAP_WHO_GENDER_TEXT_ALL": "Are <1>evenly distributed by <3>gender.", - "__EXPRESS_3_WIZARD_STEP_WHERE_SUBTITLE": "Choose a <1>type of device where to perform the test.", - "__EXPRESS_3_WIZARD_STEP_WHO_DEMOGRAPHICS_CRITERIA_DESCRIPTION": "Select the demographics that you want to target", - "__EXPRESS_3_WIZARD_STEP_WHO_DEMOGRAPHICS_CRITERIA_TITLE": "Demographics criteria", - "__EXPRESS_3_WIZARD_STEP_WHO_FIELD_AGE_RANGE_ALL": "All ages", - "__EXPRESS_3_WIZARD_STEP_WHO_FIELD_AGE_RANGE_ALL_HINT": "from 18 to 70", - "__EXPRESS_3_WIZARD_STEP_WHO_FIELD_AGE_RANGE_LABEL": "Age range", - "__EXPRESS_3_WIZARD_STEP_WHO_FIELD_GENDER_ALL": "All genders", - "__EXPRESS_3_WIZARD_STEP_WHO_FIELD_GENDER_ALL_HINT": "Testers equally divided by gender", - "__EXPRESS_3_WIZARD_STEP_WHO_FIELD_GENDER_LABEL": "How do you describe the gender identity?", - "__EXPRESS_3_WIZARD_STEP_WHO_FIELD_LITERACY_ALL": "All levels", - "__EXPRESS_3_WIZARD_STEP_WHO_FIELD_LITERACY_ALL_HINT": "Testers equally divided by literacy level", - "__EXPRESS_3_WIZARD_STEP_WHO_FIELD_LITERACY_LABEL": "Digital literacy level", - "__EXPRESS_3_WIZARD_STEP_WHO_GENDER_FEMALE": "Female", - "__EXPRESS_3_WIZARD_STEP_WHO_GENDER_FEMALE_PLURAL": "women", - "__EXPRESS_3_WIZARD_STEP_WHO_GENDER_MALE": "Male", - "__EXPRESS_3_WIZARD_STEP_WHO_GENDER_MALE_PLURAL": "men", - "__EXPRESS_3_WIZARD_STEP_WHO_LABEL_SELECTION_CRITERIA": "Specify selection criteria for the 6 users who will browse your product", - "__EXPRESS_3_WIZARD_STEP_WHO_LITERACY_BEGINNER": "Beginner", - "__EXPRESS_3_WIZARD_STEP_WHO_LITERACY_BEGINNER_DESCRIPTION": "This tester has no autonomy, needs help from family and friends", - "__EXPRESS_3_WIZARD_STEP_WHO_LITERACY_EXPERT": "Expert", - "__EXPRESS_3_WIZARD_STEP_WHO_LITERACY_EXPERT_DESCRIPTION": "Completely autonomous in any digital product use", - "__EXPRESS_3_WIZARD_STEP_WHO_LITERACY_INTERMEDIATE": "Intermediate", - "__EXPRESS_3_WIZARD_STEP_WHO_LITERACY_INTERMEDIATE_DESCRIPTION": "Partial autonomy, needs help in some scenarios", - "__EXPRESS_3_WIZARD_STEP_WHO_TAG_USERS": "N° of users 6", - "__EXPRESS_3_WIZARD_STEP_WHO_TAG_USERS_LANGUAGE": "Live in Italy", - "__EXPRESS_3_WIZARD_STEP_WHO_TAG_USERS_LOCATION": "Speak Italian", - "__EXPRESS_4_WIZARD_STEP_CONFIRM_WHO_TEXT": "Your users", - "__EXPRESS_4_WIZARD_STEP_HOW_ADD_USE_CASE_CARD_TITLE": "Add user task", - "__EXPRESS_4_WIZARD_STEP_HOW_EDIT_USE_CASE_CARD_INCOMEPLETE_LABEL": "This user task is not complete", - "__EXPRESS_4_WIZARD_STEP_HOW_USE_CASE_MODAL_DELETE_USE_CASE_LABEL": "Delete User Task", - "__EXPRESS_4_WIZARD_STEP_HOW_USE_CASE_MODAL_EMPTY_USE_CASE_DESCRIPTION": "Specify what actions testers will perform to verify one or more functionalities in real scenarios", - "__EXPRESS_4_WIZARD_STEP_HOW_USE_CASE_MODAL_EMPTY_USE_CASE_LABEL": "Add your first user task", - "__EXPRESS_4_WIZARD_STEP_HOW_USE_CASE_MODAL_MIN_ERROR": "Please add at least one user task", - "__EXPRESS_4_WIZARD_STEP_HOW_USE_CASE_MODAL_TITLE_FIELD_TITLE": "User task title", - "__EXPRESS_4_WIZARD_STEP_HOW_USE_CASE_MODAL_TITLE_REQUIRED": "User task title is required", - "__EXPRESS_4_WIZARD_STEP_HOW_USE_CASE_MODAL_USE_CASE_LABEL": "User Task", - "__EXPRESS_4_WIZARD_STEP_RECAP_WHO_AGE_RANGE_TEXT": "Are aged between <1><0>{{age_range_start}} and <2>{{age_range_end}} years.", - "__EXPRESS_4_WIZARD_STEP_RECAP_WHO_AGE_RANGE_TEXT_ALL": "Are <1>evenly distributed by <3>age.", - "__EXPRESS_4_WIZARD_STEP_RECAP_WHO_CONTENT_TEXT": "Are speaking {{spoken_language}}.", - "__EXPRESS_4_WIZARD_STEP_RECAP_WHO_DIGITALIZATION_TEXT_ALL": "Are <1>evenly distributed by <4>digital literacy.", - "__EXPRESS_4_WIZARD_STEP_RECAP_WHO_DIGITALIZATION_TEXT_BEGINNER": "Have a <1>low level of <4>digital literacy.", - "__EXPRESS_4_WIZARD_STEP_RECAP_WHO_DIGITALIZATION_TEXT_EXPERT": "Have an <1>high level of <4>digital literacy.", - "__EXPRESS_4_WIZARD_STEP_RECAP_WHO_DIGITALIZATION_TEXT_INTERMEDIATE": "Have a <1>medium level of <4>digital literacy.", - "__EXPRESS_4_WIZARD_STEP_RECAP_WHO_GENDER_TEXT": "Are <1>{{gender}}.", - "__EXPRESS_4_WIZARD_STEP_RECAP_WHO_GENDER_TEXT_ALL": "Are <1>evenly distributed by <3>gender.", - "__EXPRESS_4_WIZARD_STEP_WHERE_SUBTITLE": "Choose a <1>type of device where to perform the test.", - "__EXPRESS_4_WIZARD_STEP_WHO_DEMOGRAPHICS_CRITERIA_DESCRIPTION": "Select the demographics that you want to target", - "__EXPRESS_4_WIZARD_STEP_WHO_DEMOGRAPHICS_CRITERIA_TITLE": "Demographics criteria", - "__EXPRESS_4_WIZARD_STEP_WHO_FIELD_AGE_RANGE_ALL": "All ages", - "__EXPRESS_4_WIZARD_STEP_WHO_FIELD_AGE_RANGE_ALL_HINT": "from 18 to 70", - "__EXPRESS_4_WIZARD_STEP_WHO_FIELD_AGE_RANGE_LABEL": "Age range", - "__EXPRESS_4_WIZARD_STEP_WHO_FIELD_GENDER_ALL": "All genders", - "__EXPRESS_4_WIZARD_STEP_WHO_FIELD_GENDER_ALL_HINT": "Testers equally divided by gender", - "__EXPRESS_4_WIZARD_STEP_WHO_FIELD_GENDER_LABEL": "How do you describe the gender identity?", - "__EXPRESS_4_WIZARD_STEP_WHO_FIELD_LITERACY_ALL": "All levels", - "__EXPRESS_4_WIZARD_STEP_WHO_FIELD_LITERACY_ALL_HINT": "Testers equally divided by literacy level", - "__EXPRESS_4_WIZARD_STEP_WHO_FIELD_LITERACY_LABEL": "Digital literacy level", - "__EXPRESS_4_WIZARD_STEP_WHO_GENDER_FEMALE": "Female", - "__EXPRESS_4_WIZARD_STEP_WHO_GENDER_FEMALE_PLURAL": "women", - "__EXPRESS_4_WIZARD_STEP_WHO_GENDER_MALE": "Male", - "__EXPRESS_4_WIZARD_STEP_WHO_GENDER_MALE_PLURAL": "men", - "__EXPRESS_4_WIZARD_STEP_WHO_LABEL_SELECTION_CRITERIA": "Specify selection criteria for the 6 users who will browse your product", - "__EXPRESS_4_WIZARD_STEP_WHO_LITERACY_BEGINNER": "Beginner", - "__EXPRESS_4_WIZARD_STEP_WHO_LITERACY_BEGINNER_DESCRIPTION": "This tester has no autonomy, needs help from family and friends", - "__EXPRESS_4_WIZARD_STEP_WHO_LITERACY_EXPERT": "Expert", - "__EXPRESS_4_WIZARD_STEP_WHO_LITERACY_EXPERT_DESCRIPTION": "Completely autonomous in any digital product use", - "__EXPRESS_4_WIZARD_STEP_WHO_LITERACY_INTERMEDIATE": "Intermediate", - "__EXPRESS_4_WIZARD_STEP_WHO_LITERACY_INTERMEDIATE_DESCRIPTION": "Partial autonomy, needs help in some scenarios", - "__EXPRESS_4_WIZARD_STEP_WHO_TAG_USERS": "N° of users 6", - "__EXPRESS_4_WIZARD_STEP_WHO_TAG_USERS_LANGUAGE": "Live in Italy", - "__EXPRESS_4_WIZARD_STEP_WHO_TAG_USERS_LOCATION": "Speak Italian", - "__EXPRESS_LABEL": "Express", - "__EXPRESS_WIZARD_BACK_BUTTON_LABEL": "Back", - "__EXPRESS_WIZARD_CONFIRM_BUTTON_LABEL": "Launch", - "__EXPRESS_WIZARD_CONFIRM_CLOSE_CANCEL_BUTTON_TEXT": "Quit and discard", - "__EXPRESS_WIZARD_CONFIRM_CLOSE_CONTINUE_BUTTON_TEXT": "Continue editing", - "__EXPRESS_WIZARD_CONFIRM_CLOSE_HEADER": "Are you sure you want to quit this activity?", - "__EXPRESS_WIZARD_CONFIRM_CLOSE_MESSAGE": "If you quit now, your changes will be lost and you’ll have to restart.", - "__EXPRESS_WIZARD_CONFIRM_PLANNING_BUTTON_LABEL": "Plan", - "__EXPRESS_WIZARD_NEXT_BUTTON_LABEL": "Next", - "__EXPRESS_WIZARD_STEP_APP_WHERE_OS_ANDROID_LABEL": "Android", - "__EXPRESS_WIZARD_STEP_APP_WHERE_OS_IOS_LABEL": "iOS", - "__EXPRESS_WIZARD_STEP_APP_WHERE_OS_LABEL": "Choose the operating system", - "__EXPRESS_WIZARD_STEP_APP_WHERE_OS_TITLE": "Operating System", - "__EXPRESS_WIZARD_STEP_CONFIRM_DESCRIPTION": "Review your informations and launch the activity", - "__EXPRESS_WIZARD_STEP_CONFIRM_LABEL": "Review and Launch", - "__EXPRESS_WIZARD_STEP_HOW_ADD_USE_CASE_CARD_SUBTITLE": "The actions performed by the tester to test one or more functionalities", - "__EXPRESS_WIZARD_STEP_HOW_ADD_USE_CASE_CARD_TITLE": "Add use case", - "__EXPRESS_WIZARD_STEP_HOW_DESCRIPTION": "Test manual", - "__EXPRESS_WIZARD_STEP_HOW_EDIT_USE_CASE_CARD_LABEL": "Edit", - "__EXPRESS_WIZARD_STEP_HOW_EDIT_USE_CASE_CARD_LABEL_INCOMPLETE": "Finish", - "__EXPRESS_WIZARD_STEP_HOW_FIELD_DESCRIPTION_DESCRIPTION": "Give some instructions to the tester to perform the test", - "__EXPRESS_WIZARD_STEP_HOW_FIELD_DESCRIPTION_PLACEHOLDER": "You will test the X product, which is used for Y", - "__EXPRESS_WIZARD_STEP_HOW_FIELD_DESCRIPTION_REQUIRED": "Please fill in the description", - "__EXPRESS_WIZARD_STEP_HOW_FIELD_DESCRIPTION_TITLE": "Product description", - "__EXPRESS_WIZARD_STEP_HOW_FIELD_GOAL_DESCRIPTION": "Give some context to our tester leaders about why you want to do the test", - "__EXPRESS_WIZARD_STEP_HOW_FIELD_GOAL_PLACEHOLDER": "I want to know if my users...", - "__EXPRESS_WIZARD_STEP_HOW_FIELD_GOAL_REQUIRED": "Please fill in the goal of the test", - "__EXPRESS_WIZARD_STEP_HOW_FIELD_GOAL_TITLE": "Goal of the test", - "__EXPRESS_WIZARD_STEP_HOW_LABEL": "How", - "__EXPRESS_WIZARD_STEP_HOW_LABEL_EXTRA": "we test it?", - "__EXPRESS_WIZARD_STEP_HOW_SUBTITLE": "Build the tester's flow, creating from 1 to 5 use cases", - "__EXPRESS_WIZARD_STEP_HOW_TAG_THINK_ALOUD_LABEL": "Thinking Aloud", - "__EXPRESS_WIZARD_STEP_HOW_TAG_USER_TASKS_LABEL": "<0>N° User Tasks <2><0>{{express_use_cases_limit}}", - "__EXPRESS_WIZARD_STEP_HOW_UNMODERATED_SUBTITLE": "Identify the objective of the test and 5 user tasks to be performed by users, who will articulate their thoughts aloud during the test.", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_ADD_USE_CASE_BUTTON": "Add", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_DESCRIPTION_FIELD_DESCRIPTION": "These will be the informations the testers will receive in order to test the use case", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_DESCRIPTION_FIELD_ERROR_SUBTITLE": "You cannot add an empty use case", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_DESCRIPTION_FIELD_ERROR_TITLE": "Fill the description", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_DESCRIPTION_FIELD_TITLE": "Instructions for the test", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_EDITOR_CANCEL_BUTTON": "Cancel", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_EDITOR_SAVE_BUTTON": "Save", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_EMPTY_LABEL": "Empty", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_FUNCTIONALITY_REQUIRED": "Choose a use case type", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_INSTRUCTIONS_FIELD_DESCRIPTION": "Define the task that the tester will perform during the testing process, based on the functionality or section to be tested. (I.e.: To test the checkout process, give to the user the instruction to buy something)", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_INSTRUCTIONS_FIELD_TITLE": "Instructions for the users", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_LINK_FIELD_MESSAGE": "The link should be publicly visible, even on development environments", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_LINK_FIELD_PLACEHOLDER": "Insert test link", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_LINK_FIELD_SUBTITLE": "Insert a specific link to your product to access the use case", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_LINK_FIELD_TITLE": "Test link", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_LINK_INVALID": "Please insert a valid link", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_LOGGED_FIELD_DESCRIPTION": "To access this use case a login or a signup is required", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_LOGGED_FIELD_TITLE": "Requires authentication", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_MIN_ERROR": "Please add at least one use case", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_NOTES_FIELD_SUBTITLE": "Follow the instructions, our experts will check your test cases before launching the activity!", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_NOTES_FIELD_TITLE": "Don't be afraid to make mistakes!", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_PRODUCT_FIELD_PLACEHOLDER": "Search or add typology", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_PRODUCT_FIELD_TITLE": "Type of use case to be tested", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_TITLE_FIELD_PLACEHOLDER": "Insert test case title", - "__EXPRESS_WIZARD_STEP_RECAP_DESCRIPTION": "Check your informations and launch the activity", - "__EXPRESS_WIZARD_STEP_RECAP_HOW_CONTENT_TEXT": "You inserted <0><1>{{use_cases_count}} test cases:", - "__EXPRESS_WIZARD_STEP_RECAP_MORE_TEXTAREA_NOTE": "Do not use this field to insert sensitive informations such as credentials", - "__EXPRESS_WIZARD_STEP_RECAP_OUT_OF_SCOPE_DESCRIPTION": "Describe out of scope sections for the test", - "__EXPRESS_WIZARD_STEP_RECAP_OUT_OF_SCOPE_LABEL": "Out of scope", - "__EXPRESS_WIZARD_STEP_RECAP_OUT_OF_SCOPE_PLACEHOLDER": "Insert any sections that do not fit within the perimeter of the test.", - "__EXPRESS_WIZARD_STEP_RECAP_TITLE": "Summary and launch", - "__EXPRESS_WIZARD_STEP_RECAP_WHAT_CONTENT_TEXT": "You are launching the activity <0>{{campaign_name}} in the project <0>{{project_name}} for a <0>{{product_type}}.", - "__EXPRESS_WIZARD_STEP_RECAP_WHERE_CONTENT_TEXT_BROWSERS": "On the following browsers:", - "__EXPRESS_WIZARD_STEP_RECAP_WHERE_CONTENT_TEXT_BROWSERS_EMPTY": "You didn't select any browser.", - "__EXPRESS_WIZARD_STEP_RECAP_WHERE_CONTENT_TEXT_DEVICES": "The test will be executed on:", - "__EXPRESS_WIZARD_STEP_RECAP_WHERE_CONTENT_TEXT_OS": "On the following operating system:", - "__EXPRESS_WIZARD_STEP_RECAP_WHO_CONTENT_TEXT": "Testers speak: <0>{{campaign_language}}.", - "__EXPRESS_WIZARD_STEP_THANK_YOU_BUTTON": "Go to project", - "__EXPRESS_WIZARD_STEP_THANK_YOU_SUBTITLE": "Great! Your test request is now with the UNGUESS team for review. We'll notify you once it's approved or if we need any clarification. Meanwhile, you can track your test status in the Project area.", - "__EXPRESS_WIZARD_STEP_THANK_YOU_TITLE": "Request received.", - "__EXPRESS_WIZARD_STEP_WHAT_DESCRIPTION": "What is the activity about?", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_CAMPAIGN_NAME_REQUIRED": "Activity Name is required", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_CAMPAIGN_REASON_LABEL": "Select the reason for which you want to launch this activity", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_CAMPAIGN_REASON_OPTION_1": "New digital product", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_CAMPAIGN_REASON_OPTION_2": "New functionalities release", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_CAMPAIGN_REASON_OPTION_3": "Other", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_CAMPAIGN_REASON_REQUIRED": "Activity Reason is required", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_NAME_PLACEHOLDER": "New express activity", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_PRODUCT_TYPE_LABEL": "Product type", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_PRODUCT_TYPE_MOBILEAPP_LABEL": "Mobile App", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_PRODUCT_TYPE_OR_LABEL": "or", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_PRODUCT_TYPE_REQUIRED": "Product type is required", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_PRODUCT_TYPE_WEBAPP_LABEL": "Website or Web App", - "__EXPRESS_WIZARD_STEP_WHAT_LABEL": "What", - "__EXPRESS_WIZARD_STEP_WHAT_LABEL_EXTRA": "are we going to test?", - "__EXPRESS_WIZARD_STEP_WHEN_CUSTOM_DATE_CANCEL": "Cancel", - "__EXPRESS_WIZARD_STEP_WHEN_CUSTOM_DATE_CONFIRM": "Confirm", - "__EXPRESS_WIZARD_STEP_WHEN_FIELD_CAMPAIGN_DATE_LABEL": "Select a date", - "__EXPRESS_WIZARD_STEP_WHEN_FIELD_CAMPAIGN_DATE_PLACEHOLDER": "Launch date", - "__EXPRESS_WIZARD_STEP_WHEN_FIELD_CAMPAIGN_DATE_RESULTS_LABEL": "Results delivery date", - "__EXPRESS_WIZARD_STEP_WHEN_FIELD_CAMPAIGN_DATE_RESULTS_PLACEHOLDER": "Delivery date", - "__EXPRESS_WIZARD_STEP_WHEN_FIELD_CAMPAIGN_DATE_TOMORROW_LABEL": "Tomorrow", - "__EXPRESS_WIZARD_STEP_WHERE_ANDROID_LINK_DESCRIPTION": "Insert the link to the Android app", - "__EXPRESS_WIZARD_STEP_WHERE_ANDROID_LINK_ERROR": "Please provide a valid URL", - "__EXPRESS_WIZARD_STEP_WHERE_ANDROID_LINK_INFO": "Be sure the link is publicly accessible", - "__EXPRESS_WIZARD_STEP_WHERE_ANDROID_LINK_LABEL": "Application link", - "__EXPRESS_WIZARD_STEP_WHERE_BROWSER_TITLE": "Manage browsers preferences", - "__EXPRESS_WIZARD_STEP_WHERE_BROWSER_TOGGLE_LABEL": "Define out of scope areas", - "__EXPRESS_WIZARD_STEP_WHERE_CUSTOM_BROWSER_CHROME": "Chrome", - "__EXPRESS_WIZARD_STEP_WHERE_CUSTOM_BROWSER_EDGE": "Edge", - "__EXPRESS_WIZARD_STEP_WHERE_CUSTOM_BROWSER_ERROR": "Choose at least one browser", - "__EXPRESS_WIZARD_STEP_WHERE_CUSTOM_BROWSER_FIREFOX": "Firefox", - "__EXPRESS_WIZARD_STEP_WHERE_CUSTOM_BROWSER_LABEL": "Choose the browser you want to include in the activity", - "__EXPRESS_WIZARD_STEP_WHERE_CUSTOM_BROWSER_SAFARI": "Safari", - "__EXPRESS_WIZARD_STEP_WHERE_DEFAULT_BROWSER_DESCRIPTION": "We guarantee you the right balance between the devices type and browsers based on market share and usage", - "__EXPRESS_WIZARD_STEP_WHERE_DEFAULT_BROWSER_TITLE": "Which browser will be used? we'll take care of it", - "__EXPRESS_WIZARD_STEP_WHERE_DESCRIPTION": "Where is the activity going to be executed?", - "__EXPRESS_WIZARD_STEP_WHERE_DEVICE_OPERATING_SYSTEM_ERROR": "You have to select one operating system", - "__EXPRESS_WIZARD_STEP_WHERE_DEVICE_TYPE_DESKTOP": "Desktop", - "__EXPRESS_WIZARD_STEP_WHERE_DEVICE_TYPE_ERROR": "You have to select at least one device type", - "__EXPRESS_WIZARD_STEP_WHERE_DEVICE_TYPE_SMARTPHONE": "Smartphone", - "__EXPRESS_WIZARD_STEP_WHERE_DEVICE_TYPE_TABLET": "Tablet", - "__EXPRESS_WIZARD_STEP_WHERE_IOS_LINK_DESCRIPTION": "Insert an AppStore or TestFlight link", - "__EXPRESS_WIZARD_STEP_WHERE_IOS_LINK_ERROR": "Please provide a valid URL", - "__EXPRESS_WIZARD_STEP_WHERE_IOS_LINK_INFO": "Be sure the link is publicly accessible", - "__EXPRESS_WIZARD_STEP_WHERE_IOS_LINK_LABEL": "Application link", - "__EXPRESS_WIZARD_STEP_WHERE_LABEL": "Where", - "__EXPRESS_WIZARD_STEP_WHERE_LINK_DESCRIPTION": "Our testers will be use this link to access the product", - "__EXPRESS_WIZARD_STEP_WHERE_LINK_ERROR": "Please provide a valid URL", - "__EXPRESS_WIZARD_STEP_WHERE_LINK_INFO": "This link must be publicly accessible", - "__EXPRESS_WIZARD_STEP_WHERE_LINK_LABEL": "Product link", - "__EXPRESS_WIZARD_STEP_WHERE_OUT_OF_SCOPE_DESCRIPTION": "In exploratory tests, our testers can freely explore the product. However you can define out of scope areas.", - "__EXPRESS_WIZARD_STEP_WHERE_OUT_OF_SCOPE_ERROR": "You can't define an empty out of scope", - "__EXPRESS_WIZARD_STEP_WHERE_OUT_OF_SCOPE_LABEL": "Tell us where to exclude", - "__EXPRESS_WIZARD_STEP_WHERE_OUT_OF_SCOPE_PLACEHOLDER": "The exploratory test doesn't cover all the...", - "__EXPRESS_WIZARD_STEP_WHERE_OUT_OF_SCOPE_TITLE": "Test scopes", - "__EXPRESS_WIZARD_STEP_WHERE_SUBTITLE": "Choose what kind of <1>devices do you want to test on", - "__EXPRESS_WIZARD_STEP_WHERE_TITLE": "<0>Where do we test?", - "__EXPRESS_WIZARD_STEP_WHO_DESCRIPTION": "Define the activity's target", - "__EXPRESS_WIZARD_STEP_WHO_FIELD_CAMPAIGN_LANGUAGE_REQUIRED": "Campaing language is required", - "__EXPRESS_WIZARD_STEP_WHO_FIELD_LANGUAGE_DESCRIPTION": "Select the testers' spoken language, it will be the same used for the activity's results.", - "__EXPRESS_WIZARD_STEP_WHO_FIELD_LANGUAGE_LABEL": "Select the testers' spoken language", - "__EXPRESS_WIZARD_STEP_WHO_FIELD_LANGUAGE_OPTION_EN": "English", - "__EXPRESS_WIZARD_STEP_WHO_FIELD_LANGUAGE_OPTION_ES": "Spanish", - "__EXPRESS_WIZARD_STEP_WHO_FIELD_LANGUAGE_OPTION_FR": "French", - "__EXPRESS_WIZARD_STEP_WHO_FIELD_LANGUAGE_OPTION_IT": "Italian", - "__EXPRESS_WIZARD_STEP_WHO_FIELD_LANGUAGE_TITLE": "Language", - "__EXPRESS_WIZARD_STEP_WHO_LABEL": "Who", - "__EXPRESS_WIZARD_STEP_WHO_LABEL_EXTRA": "is the target of the activity?", - "__EXPRESS_WIZARD_STEPPER_ACCORDION_TITLE_MOBILE": "Step {current_step} of {total_steps}", - "__EXPRESS_WIZARD_SUBMIT_ERROR": "An error occurred, please try again.", - "__EXPRESS_WIZARD_SUBMIT_PLANNING_TOOLTIP_FIRST_RESULTS": "First results", - "__EXPRESS_WIZARD_SUBMIT_PLANNING_TOOLTIP_TITLE": "Plan your activity", - "__EXPRESS_WIZARD_SUBMIT_TOOLTIP_MODAL_CUSTOM_DATE_ITEM": "Custom date", "__FORM_FIELD_REQUIRED_MESSAGE": "This field is required", "__FORM_OPTIONAL_LABEL": "(optional)", - "__FUNCTIONAL_LABEL": "Functional", "__INSIGHT_CLUSTER_GENERAL": "General", "__INSIGHT_LINK_TOAST_COPY_MESSAGE": "Link copied to clipboard", "__INSIGHTS_COLLECTION_OBSERVATION_CARD_LIGHTBOX_COPY_LINK_BUTTON_LABEL": "Copy observation link", @@ -936,7 +669,6 @@ "__LOGIN_FORM_EMAIL_FIELD_INVALID_MESSAGE": "Please enter a valid email address", "__LOGIN_FORM_EMAIL_PLACEHOLDER": "Insert your email", "__LOGIN_FORM_FAILED_INVALID": "Wrong username or password.", - "__LOGIN_FORM_PASSWORD_FIELD_LENGTH_INVALID": "Password must be at least 5 characters", "__LOGIN_FORM_PASSWORD_FORGOT_LABEL": "Forgot your password?", "__LOGIN_FORM_PASSWORD_PLACEHOLDER": "Insert your password", "__LOGIN_FORM_TITLE": "Log in to UNGUESS", @@ -971,7 +703,7 @@ "__PAGE_NOT_ACCESIBLE_DESCRIPTION": "It seems that your access is no longer active. You can log out or contact our support center. We are here to help you!", "__PAGE_NOT_ACCESIBLE_TITLE": "You cannot access this page at the moment.", "__PAGE_TITLE_BUGS_COLLECTION": "Bug collection", - "__PAGE_TITLE_CATALOG": "Services", + "__PAGE_TITLE_JOIN": "join page", "__PAGE_TITLE_LOGIN": "Log in", "__PAGE_TITLE_PRIMARY_DASHBOARD": "My activities", "__PAGE_TITLE_PRIMARY_DASHBOARD_ARCHIVE": "Archive", @@ -1262,6 +994,8 @@ "__PLAN_PAGE_TITLE": "Plan your activity", "__PLAN_REQUEST_QUOTATION_CTA": "Submit Request", "__PLAN_SAVE_CONFIGURATION_CTA": "Save Draft", + "__PLAN_SAVE_DRAFT_TOAST_ERROR": "We couldn't save your draft: please try again later.", + "__PLAN_SAVE_DRAFT_TOAST_SUCCESS": "Activity draft saved! You can safely continue editing.", "__PLAN_SETUP_NOTE_SIZE_ERROR_EMPTY": "Required: please enter a text to continue", "__PLAN_SETUP_NOTE_SIZE_ERROR_TOO_LONG": "Character limit exceeded: Please reduce your text to 512 characters", "__PLAN_TARGET_NOTE_SIZE_ERROR_EMPTY": "Please enter a text to continue", @@ -1315,11 +1049,9 @@ "__SENTIMENT_OVERVIEW_SUBTITLE": "Generated from transcript", "__SENTIMENT_OVERVIEW_TITLE": "Experience Summary", "__SENTIMENT_TOAST_COPY_MESSAGE": "Sentiment copied to clipboard", - "__SERVICE_DETAIL_PAGE_TAG_RESULTS_DAYS_LABEL": "First results in <0>{{hours}}h", "__SERVICE_TILES_HEADER": "Explore new ways of testing", "__SERVICE_TILES_SUBTITLE": "Launch lean tests autonomosly, get expert-verified results", "__SIDEBAR_CAMPAIGNS_LABEL": "activities", - "__TAILORED_LABEL": "Tailored", "__TEMPLATE_CARD_TAILORED_HEADER": "My tailored activities", "__TEMPLATE_CARD_UNGUESS_HEADER": "UNGUESS template", "__TEMPLATE_LAUNCH_ACTIVITY_BUTTON": "Launch activity now", @@ -1424,17 +1156,6 @@ "__VIDEOS_LIST_USECASE_INFO_one": "video", "__VIDEOS_LIST_USECASE_INFO_other": "videos", "__VIDEOS_PAGE_TITLE": "Playlist", - "__WIZARD_EXPRESS_2_USE_CASE_MODAL_HEADER_SAVE_BUTTON": "Save and continue", - "__WIZARD_EXPRESS_2_USE_CASE_MODAL_PRE_TITLE": "Step \"How\"", - "__WIZARD_EXPRESS_3_USE_CASE_MODAL_HEADER_SAVE_BUTTON": "Save and continue", - "__WIZARD_EXPRESS_3_USE_CASE_MODAL_PRE_TITLE": "Step \"How\"", - "__WIZARD_EXPRESS_BODY_NOTES_TITLE": "Before starting", - "__WIZARD_EXPRESS_BODY_SELECT_PROJECT_TITLE": "Select a project where to save the activity", - "__WIZARD_EXPRESS_DEFAULT_ITEM": "Search or add project", - "__WIZARD_EXPRESS_FOOTER_CONFIRM_BUTTON": "Let's go!", - "__WIZARD_EXPRESS_FOOTER_INFO_BUTTON": "More info", - "__WIZARD_EXPRESS_HEADER_TITLE": "Launch activity", - "__WIZARD_EXPRESS_USE_CASE_MODAL_TITLE": "Add one or more test cases", "__WORKSPACE_SETTINGS_ADD_MEMBER_BUTTON": "Invite", "__WORKSPACE_SETTINGS_ADD_MEMBER_EMAIL_LABEL": "Add new user", "__WORKSPACE_SETTINGS_ADD_MEMBER_EMAIL_PLACEHOLDER": "Email address", @@ -1470,36 +1191,68 @@ "_TOAST_UNPUBLISHED_MESSAGE": "successfully unpublished", "{{count}} bugs_one": "{{count}} bug", "{{count}} bugs_other": "{{count}} bugs", - "Devices ({{count}})_one": "Devices ({{count}})", - "Devices ({{count}})_other": "Devices ({{count}})", "INSIGHT_PAGE_COLLECTION_OBSERVATIONS_LABEL": "Observations: <1>{{counter}}", "INSIGHT_PAGE_COLLECTION_THEMES_LABEL": "Themes: <1>{{counter}}", "INSIGHT_PAGE_COLLECTION_UNGROUPED_USECASE_SUBTITTLE": "Isolated Observations", "INSIGHT_PAGE_COLLECTION_USECASE_SUBTITTLE": "Recurring Themes", "INSIGHTS_PAGE_COLLECTION_SUBTITLE": "Here you can find all the observations collected so far.", "INSIGHTS_PAGE_COLLECTION_TITLE": "Themes and Observations", - "OS ({{count}})_one": "OS ({{count}})", - "OS ({{count}})_other": "OS ({{count}})", + "JOIN_PAGE_ERROR_BUTTON_CONTACT": "Get Help", + "JOIN_PAGE_ERROR_BUTTON_LOGIN": "Go to Log in", + "JOIN_PAGE_ERROR_DESCRIPTION": "Your email might already be registered, or the invitation link may be invalid. Please check and try again, or log in if you already have an account.", + "JOIN_PAGE_ERROR_TITLE": "Something went wrong.", + "PASSWORD_VALIDATOR_CONTAIN_A_LOWERCASE_LETTER": "One lowercase character", + "PASSWORD_VALIDATOR_CONTAIN_A_NUMBER": "One numeric digit", + "PASSWORD_VALIDATOR_CONTAIN_AN_UPPERCASE_LETTER": "One uppercase character", + "PASSWORD_VALIDATOR_MINIMUM_OF_6_CHARACTERS": "Contain\u00a06 characters minimum", + "PASSWORD_VALIDATOR_PASSWORD_REQUIREMENTS": "Your password must:", "PLAN_GLOBAL_ALERT_APPROVED_STATE_MESSAGE": "You will be notified when the first data is available on your dashboard", "PLAN_GLOBAL_ALERT_APPROVED_STATE_TITLE": "The activity has been successfully launched!", "PLAN_GLOBAL_ALERT_AWATING_STATE_MESSAGE": "Review details and confirm to launch.", "PLAN_GLOBAL_ALERT_AWATING_STATE_TITLE": "Your quotation is ready!", "PLAN_GLOBAL_ALERT_SUBMITTED_STATE_MESSAGE": "You'll receive a notification once your quotation is available.", "PLAN_GLOBAL_ALERT_SUBMITTED_STATE_TITLE": "Activity submitted for review", - "Priority ({{count}})_one": "Priority ({{count}})", - "Priority ({{count}})_other": "Priority ({{count}})", - "Replicability ({{count}})_one": "Replicability ({{count}})", - "Replicability ({{count}})_other": "Replicability ({{count}})", "Severity ({{count}})_one": "Severity ({{count}})", "Severity ({{count}})_other": "Severities ({{count}})", - "Status ({{count}})_one": "Status ({{count}})", - "Status ({{count}})_other": "Statuses ({{count}})", - "Tags ({{count}})_one": "Tags ({{count}})", - "Tags ({{count}})_other": "Tags ({{count}})", - "Typology ({{count}})_one": "Typology ({{count}})", - "Typology ({{count}})_other": "Typologies ({{count}})", - "Use Cases ({{count}})_one": "Use Cases ({{count}})", - "Use Cases ({{count}})_other": "Use Cases ({{count}})", + "SIGNUP_FORM_CTA_RETURN_TO_UNGUESS_LANDING": "Go to the UNGUESS website", + "SIGNUP_FORM_EMAIL_ALREADY_TAKEN": "Error: User with provided email already exists", + "SIGNUP_FORM_EMAIL_ERROR_SERVER_MAIL_CHECK": "Oops! Check your email format", + "SIGNUP_FORM_EMAIL_IS_REQUIRED": "This field is required", + "SIGNUP_FORM_EMAIL_LABEL": "Work Email", + "SIGNUP_FORM_EMAIL_MUST_BE_A_VALID_EMAIL": "Oops! Check your email format", + "SIGNUP_FORM_EMAIL_PLACEHOLDER": "Insert Email", + "SIGNUP_FORM_GO_TO_STEP_2": "Create my account", + "SIGNUP_FORM_GO_TO_STEP_3": "Next", + "SIGNUP_FORM_NAME_IS_REQUIRED": "This field is required", + "SIGNUP_FORM_NAME_LABEL": "First name", + "SIGNUP_FORM_NAME_PLACEHOLDER": "Insert name", + "SIGNUP_FORM_PASSWORD_HIDE": "hide", + "SIGNUP_FORM_PASSWORD_IS_A_REQUIRED_FIELD": "This field is required", + "SIGNUP_FORM_PASSWORD_LABEL": "Insert password", + "SIGNUP_FORM_PASSWORD_MUST_BE_AT_LEAST_6_CHARACTER_LONG": "The password must be at least 6 characters long", + "SIGNUP_FORM_PASSWORD_MUST_CONTAIN_AT_LEAST_A_LOWERCASE_LETTER": "The password must contain at least one lowercase letter", + "SIGNUP_FORM_PASSWORD_MUST_CONTAIN_AT_LEAST_A_NUMBER": "The password must contain at least one number", + "SIGNUP_FORM_PASSWORD_MUST_CONTAIN_AT_LEAST_AN_UPPERCASE_LETTER": "The password must contain at least one uppercase letter", + "SIGNUP_FORM_PASSWORD_PLACEHOLDER": "Insert password", + "SIGNUP_FORM_PASSWORD_SHOW": "show", + "SIGNUP_FORM_RETURN_TO_STEP_1": "Back", + "SIGNUP_FORM_RETURN_TO_STEP_2": "Back", + "SIGNUP_FORM_ROLE_IS_REQUIRED": "This field is required", + "SIGNUP_FORM_ROLE_LABEL": "Job title", + "SIGNUP_FORM_STEP_1_TITLE": "Welcome!
Get started with your account!", + "SIGNUP_FORM_STEP_2_DESCRIPTION": "So we can tailor the experience to fit your role and needs.", + "SIGNUP_FORM_STEP_2_TITLE": "Tell us a bit about yourself", + "SIGNUP_FORM_STEP_3_DESCRIPTION": "Choose a name that represents your team — it’ll shape your personalized experience.", + "SIGNUP_FORM_STEP_3_TITLE": "Create your workspace", + "SIGNUP_FORM_SUBMIT": "Let's start!", + "SIGNUP_FORM_SURNAME_IS_REQUIRED": "This field is required", + "SIGNUP_FORM_SURNAME_LABEL": "Last name", + "SIGNUP_FORM_SURNAME_PLACEHOLDER": "Insert last name", + "SIGNUP_FORM_TERMS_AND_CONDITIONS": "By signing up, you agree to our Terms and Conditions", + "SIGNUP_FORM_WAITING_FOR_SIGNUP": "Setting up your accountThis will take just a few seconds.", + "SIGNUP_FORM_WORKSPACE_IS_REQUIRED": "This field is required", + "SIGNUP_FORM_WORKSPACE_LABEL": "Name your Workspace", + "SIGNUP_FORM_WORKSPACE_PLACEHOLDER": "Insert Workspace name", "UseCase ({{count}})_one": "Use Case ({{count}})", "UseCase ({{count}})_other": "Use Cases ({{count}})", "UX_SHORTCUT_ADD_OBSERVATION": "Start/Stop new observation", diff --git a/src/locales/it/translation.json b/src/locales/it/translation.json index 5da5fc760..5afb5c828 100644 --- a/src/locales/it/translation.json +++ b/src/locales/it/translation.json @@ -11,8 +11,6 @@ "__APP_HOURS_LABEL_many": "ore", "__APP_HOURS_LABEL_other": "ore", "__APP_LANGUANGE_EN_TEXT": "Inglese", - "__APP_LANGUANGE_ES_TEXT": "", - "__APP_LANGUANGE_FR_TEXT": "", "__APP_LANGUANGE_IT_TEXT": "Italiano", "__APP_META_DESCRIPTION": "UNGUESS provides collective wisdom to improve your decision-making process. Eliminate inefficiencies with our testing, monitoring and research platform.", "__APP_META_PAYOFF": "Be smart from the start", @@ -46,7 +44,6 @@ "__BANNER_CROSS_FUNCTIONAL_MESSAGE_EXPERIENCE_ANCHOR": "Scopri di più", "__BANNER_CROSS_FUNCTIONAL_TITLE_CYBER": "", "__BANNER_CROSS_FUNCTIONAL_TITLE_EXPERIENCE": "Risolvi i problemi di usabilità prima del tempo:", - "__BREADCRUMB_ITEM_SERVICES": "Servizi", "__BROWSER_ERROR_REQUIRED": "", "__BUG_COMMENTS_CHAT_BOLD": "Grassetto", "__BUG_COMMENTS_CHAT_CANCEL__": "Annulla", @@ -105,8 +102,6 @@ "__BUG_SEVERITY_LOW": "Bassi", "__BUG_SEVERITY_MEDIUM": "Medi", "__BUG_STATUS": "Stato", - "__BUGS_CUSTOM_STATUS_FILTER_ITEM_NO_ITEMS": "Tutti gli stati", - "__BUGS_DEVICES_FILTER_ITEM_NO_ITEMS": "Dispositivi", "__BUGS_EXCLUDE_NOT_A_BUG": "Escludi “Non un bug”", "__BUGS_EXCLUDED_NOT_A_BUG": "“Non un bug” esclusi", "__BUGS_FILTER_VIEW_ALL_LABEL": "Tutti i filtri", @@ -121,7 +116,6 @@ "__BUGS_ORDER_BY_OPEN_MENU": "Ordina per", "__BUGS_ORDER_HIGHEST_TO_LOWEST": "Più alta", "__BUGS_ORDER_LOWEST_TO_HIGHEST": "Meno alta", - "__BUGS_OS_FILTER_ITEM_NO_ITEMS": "OS", "__BUGS_PAGE_BUG_CARD_DUPLICATES_LABEL": "Duplicati", "__BUGS_PAGE_BUG_COMMENTS_EMPTY_TEXT": "Non ci sono ancora commenti su questo bug.", "__BUGS_PAGE_BUG_COMMENTS_EXISITING_TEXT": "Ci sono dei commenti su questo bug.", @@ -314,12 +308,10 @@ "__BUGS_PREVIEW_MEDIA_TOOLTIP_TEXT": "Allegati", "__BUGS_PREVIEW_RELATED_BUGS_TOOLTIP_TEXT": "Bug collegati", "__BUGS_PREVIEW_TAG_TOOLTIP_TEXT": "Dettagli", - "__BUGS_PRIORITY_FILTER_ITEM_NO_ITEMS": "Tutte le priorità", "__BUGS_READ_FILTER_ITEM_ALL": "Tutti i bug", "__BUGS_READ_FILTER_ITEM_DRAWER_ALL": "Tutti", "__BUGS_READ_FILTER_ITEM_PLACEHOLDER": "Letti/non letti", "__BUGS_READ_FILTER_ITEM_UNREAD": "Non letti", - "__BUGS_REPLICABILITY_FILTER_ITEM_NO_ITEMS": "Tutte le replicabilità", "__BUGS_SEARCH_INPUT_PLACEHOLDER": "Cerca bug", "__BUGS_SEVERITY_FILTER_ITEM_NO_ITEMS": "Gravità", "__BUGS_SEVERITY_FILTER_ITEM_WITH_COUNTER_one": "Gravità ({{count}})", @@ -331,9 +323,7 @@ "__BUGS_TABLE_PRIORITY_HEADER_COLUMN": "Priorità", "__BUGS_TABLE_SEVERITY_HEADER_COLUMN": "Gravità", "__BUGS_TABLE_TITLE_HEADER_COLUMN": "Bug", - "__BUGS_TAGS_FILTER_ITEM_NO_ITEMS": "Tag", "__BUGS_TAGS_FILTER_ITEM_NO_TAGS": "Nessun tag", - "__BUGS_TYPES_FILTER_ITEM_NO_ITEMS": "Tipologia", "__BUGS_UNIQUE_FILTER_DROWPDOWN_ITEM_UNIQUE": "Solo bug unici", "__BUGS_UNIQUE_FILTER_ITEM_ALL": "Con duplicati", "__BUGS_UNIQUE_FILTER_ITEM_PLACEHOLDER": "Tutti i bug", @@ -587,16 +577,6 @@ "__CATALOG_DETAIL_TIMELINE_WHAT_TITLE": "<0>Cosa ottieni", "__CATALOG_DETAIL_TIMELINE_WHY_DESCRIPTION": "Questa campagna fa per te se:", "__CATALOG_DETAIL_TIMELINE_WHY_TITLE": "<0>Perché scegliere questa campagna", - "__CATALOG_PAGE_BUTTON_CONTACT_LABEL": "Fissa la kick-off call", - "__CATALOG_PAGE_BUTTON_EXPRESS_LABEL": "Lancia campagna", - "__CATALOG_PAGE_BUTTON_HOW_LABEL": "Come funziona?", - "__CATALOG_PAGE_DESCRIPTION": "Scopri i superpoteri di UNGUESS", - "__CATALOG_PAGE_INFO_SERVICE_BUTTON_CONTACT_LABEL": "Contatta il tuo CSM", - "__CATALOG_PAGE_INFO_SERVICE_SUBTITLE": "SUGGERIMENTO", - "__CATALOG_PAGE_INFO_SERVICE_TITLE": "Non riesci a trovare quello che stavi cercando?", - "__CATALOG_PAGE_TITLE": "Servizi", - "__CATALOG_STICKY_CONTAINER_NAV_CATEGORIES_LABEL": "PER TIPOLOGIA", - "__CATALOG_STICKY_CONTAINER_NAV_EXTERNAL_LINK_LABEL": "Scopri tutti i servizi", "__COPY_ERROR": "", "__COPY_SUCCESS": "", "__DASHABOARD_CAMPAIGN_CAMPAIGN_TYPE_FILTER_LABEL Max:10": "Tipo", @@ -646,256 +626,9 @@ "__ERROR_PAGE_BUTTON": "Aggiorna la pagina", "__ERROR_PAGE_SUBTITLE": "Ecco un consiglio banale che il più delle volte funziona.", "__ERROR_PAGE_TITLE": "Non è così che doveva andare.", - "__EXPERIENTIAL_LABEL": "Esperienziali", "__EXPRESS__SERVICE_TILES_DISCLAIMER": "* Prezzo da intendersi salvo accordi pregressi con il tuo customer success manager.", - "__EXPRESS_2_WIZARD_STEP_HOW_EDIT_USE_CASE_CARD_INCOMEPLETE_LABEL": "", - "__EXPRESS_2_WIZARD_STEP_HOW_USE_CASE_MODAL_DELETE_USE_CASE_LABEL": "Elimina Test Case", - "__EXPRESS_2_WIZARD_STEP_HOW_USE_CASE_MODAL_EMPTY_USE_CASE_DESCRIPTION": "", - "__EXPRESS_2_WIZARD_STEP_HOW_USE_CASE_MODAL_EMPTY_USE_CASE_LABEL": "", - "__EXPRESS_2_WIZARD_STEP_HOW_USE_CASE_MODAL_TITLE_FIELD_TITLE": "", - "__EXPRESS_2_WIZARD_STEP_HOW_USE_CASE_MODAL_TITLE_REQUIRED": "", - "__EXPRESS_2_WIZARD_STEP_HOW_USE_CASE_MODAL_USE_CASE_LABEL": "", - "__EXPRESS_3_WIZARD_STEP_CONFIRM_WHO_TEXT": "I tuoi utenti", - "__EXPRESS_3_WIZARD_STEP_HOW_ADD_USE_CASE_CARD_TITLE": "Aggiungi", - "__EXPRESS_3_WIZARD_STEP_HOW_EDIT_USE_CASE_CARD_INCOMEPLETE_LABEL": "A questa task mancano alcuni dettagli", - "__EXPRESS_3_WIZARD_STEP_HOW_USE_CASE_MODAL_DELETE_USE_CASE_LABEL": "Elimina User Task", - "__EXPRESS_3_WIZARD_STEP_HOW_USE_CASE_MODAL_EMPTY_USE_CASE_DESCRIPTION": "Definisci le attività che dovranno svolgere gli utenti per testare una o più funzionalità.", - "__EXPRESS_3_WIZARD_STEP_HOW_USE_CASE_MODAL_EMPTY_USE_CASE_LABEL": "Aggiungi la tua prima User Task", - "__EXPRESS_3_WIZARD_STEP_HOW_USE_CASE_MODAL_MIN_ERROR": "Per favore, aggiungi almeno una user task", - "__EXPRESS_3_WIZARD_STEP_HOW_USE_CASE_MODAL_TITLE_FIELD_TITLE": "Titolo user task", - "__EXPRESS_3_WIZARD_STEP_HOW_USE_CASE_MODAL_TITLE_REQUIRED": "Campo obbligatorio", - "__EXPRESS_3_WIZARD_STEP_HOW_USE_CASE_MODAL_USE_CASE_LABEL": "User Task", - "__EXPRESS_3_WIZARD_STEP_RECAP_WHO_AGE_RANGE_TEXT": "Hanno un'età compresa fra i {{age_range_start}} e i {{age_range_end}} anni.", - "__EXPRESS_3_WIZARD_STEP_RECAP_WHO_AGE_RANGE_TEXT_ALL": "Sono <1>equamente distribuiti per <3>età.", - "__EXPRESS_3_WIZARD_STEP_RECAP_WHO_CONTENT_TEXT": "", - "__EXPRESS_3_WIZARD_STEP_RECAP_WHO_DIGITALIZATION_TEXT_ALL": "Sono <1>equamente distribuiti per <4>alfabetizzazione digitale.", - "__EXPRESS_3_WIZARD_STEP_RECAP_WHO_DIGITALIZATION_TEXT_BEGINNER": "Hanno un <1>livello basso di <4>alfabetizzazione digitale.", - "__EXPRESS_3_WIZARD_STEP_RECAP_WHO_DIGITALIZATION_TEXT_EXPERT": "Hanno un <1>livello alto di <4>alfabetizzazione digitale.", - "__EXPRESS_3_WIZARD_STEP_RECAP_WHO_DIGITALIZATION_TEXT_INTERMEDIATE": "Hanno un <1>livello medio di <4>alfabetizzazione digitale.", - "__EXPRESS_3_WIZARD_STEP_RECAP_WHO_GENDER_TEXT": "Sono <1>{{gender}}.", - "__EXPRESS_3_WIZARD_STEP_RECAP_WHO_GENDER_TEXT_ALL": "Sono <1>equamente distribuiti per <3>genere.", - "__EXPRESS_3_WIZARD_STEP_WHERE_SUBTITLE": "Scegli una <1>tipologia di device dove effettuare il test.", - "__EXPRESS_3_WIZARD_STEP_WHO_DEMOGRAPHICS_CRITERIA_DESCRIPTION": "Caratterizza un gruppo più o meno omogeneo di utenti per testare il tuo prodotto", - "__EXPRESS_3_WIZARD_STEP_WHO_DEMOGRAPHICS_CRITERIA_TITLE": "Criteri demografici", - "__EXPRESS_3_WIZARD_STEP_WHO_FIELD_AGE_RANGE_ALL": "Tutte le età", - "__EXPRESS_3_WIZARD_STEP_WHO_FIELD_AGE_RANGE_ALL_HINT": "Gruppo eterogeneo per età (18 - 70 anni)", - "__EXPRESS_3_WIZARD_STEP_WHO_FIELD_AGE_RANGE_LABEL": "Fascia d’età", - "__EXPRESS_3_WIZARD_STEP_WHO_FIELD_GENDER_ALL": "Tutti i generi", - "__EXPRESS_3_WIZARD_STEP_WHO_FIELD_GENDER_ALL_HINT": "Gruppo eterogeneo per genere", - "__EXPRESS_3_WIZARD_STEP_WHO_FIELD_GENDER_LABEL": "Identità di genere", - "__EXPRESS_3_WIZARD_STEP_WHO_FIELD_LITERACY_ALL": "Tutti i livelli", - "__EXPRESS_3_WIZARD_STEP_WHO_FIELD_LITERACY_ALL_HINT": "Gruppo eterogeneo per alfabetizzazione digitale", - "__EXPRESS_3_WIZARD_STEP_WHO_FIELD_LITERACY_LABEL": "Livello di alfabetizzazione digitale", - "__EXPRESS_3_WIZARD_STEP_WHO_GENDER_FEMALE": "Donna", - "__EXPRESS_3_WIZARD_STEP_WHO_GENDER_FEMALE_PLURAL": "donne", - "__EXPRESS_3_WIZARD_STEP_WHO_GENDER_MALE": "Uomo", - "__EXPRESS_3_WIZARD_STEP_WHO_GENDER_MALE_PLURAL": "uomini", - "__EXPRESS_3_WIZARD_STEP_WHO_LABEL_SELECTION_CRITERIA": "Specifica i criteri di selezione per i 6 utenti che esplorano il tuo prodotto.", - "__EXPRESS_3_WIZARD_STEP_WHO_LITERACY_BEGINNER": "Principiante", - "__EXPRESS_3_WIZARD_STEP_WHO_LITERACY_BEGINNER_DESCRIPTION": "Non ha autonomia, si fa aiutare da parenti e amici", - "__EXPRESS_3_WIZARD_STEP_WHO_LITERACY_EXPERT": "Esperto", - "__EXPRESS_3_WIZARD_STEP_WHO_LITERACY_EXPERT_DESCRIPTION": "Ha totale autonomia nell’uso dei prodotti digitali", - "__EXPRESS_3_WIZARD_STEP_WHO_LITERACY_INTERMEDIATE": "Itermedio", - "__EXPRESS_3_WIZARD_STEP_WHO_LITERACY_INTERMEDIATE_DESCRIPTION": "Ha parziale autonomia, ma per alcune cose si fa aiutare", - "__EXPRESS_3_WIZARD_STEP_WHO_TAG_USERS": "N° Utenti: 6", - "__EXPRESS_3_WIZARD_STEP_WHO_TAG_USERS_LANGUAGE": "Vivono in Italia", - "__EXPRESS_3_WIZARD_STEP_WHO_TAG_USERS_LOCATION": "Parlano Italiano", - "__EXPRESS_4_WIZARD_STEP_CONFIRM_WHO_TEXT": "I tuoi utenti", - "__EXPRESS_4_WIZARD_STEP_HOW_ADD_USE_CASE_CARD_TITLE": "Aggiungi", - "__EXPRESS_4_WIZARD_STEP_HOW_EDIT_USE_CASE_CARD_INCOMEPLETE_LABEL": "A questa task mancano alcuni dettagli", - "__EXPRESS_4_WIZARD_STEP_HOW_USE_CASE_MODAL_DELETE_USE_CASE_LABEL": "Elimina User Task", - "__EXPRESS_4_WIZARD_STEP_HOW_USE_CASE_MODAL_EMPTY_USE_CASE_DESCRIPTION": "Definisci le attività che dovranno svolgere gli utenti per testare una o più funzionalità.", - "__EXPRESS_4_WIZARD_STEP_HOW_USE_CASE_MODAL_EMPTY_USE_CASE_LABEL": "Aggiungi la tua prima User Task", - "__EXPRESS_4_WIZARD_STEP_HOW_USE_CASE_MODAL_MIN_ERROR": "Per favore, aggiungi almeno una user task", - "__EXPRESS_4_WIZARD_STEP_HOW_USE_CASE_MODAL_TITLE_FIELD_TITLE": "Titolo user task", - "__EXPRESS_4_WIZARD_STEP_HOW_USE_CASE_MODAL_TITLE_REQUIRED": "Campo obbligatorio", - "__EXPRESS_4_WIZARD_STEP_HOW_USE_CASE_MODAL_USE_CASE_LABEL": "User Task", - "__EXPRESS_4_WIZARD_STEP_RECAP_WHO_AGE_RANGE_TEXT": "Hanno un'età compresa fra i <1><0>{{age_range_start}} e i <2>{{age_range_end}} anni.", - "__EXPRESS_4_WIZARD_STEP_RECAP_WHO_AGE_RANGE_TEXT_ALL": "Sono <1>equamente distribuiti per <3>età.", - "__EXPRESS_4_WIZARD_STEP_RECAP_WHO_CONTENT_TEXT": "", - "__EXPRESS_4_WIZARD_STEP_RECAP_WHO_DIGITALIZATION_TEXT_ALL": "Sono <1>equamente distribuiti per <4>alfabetizzazione digitale.", - "__EXPRESS_4_WIZARD_STEP_RECAP_WHO_DIGITALIZATION_TEXT_BEGINNER": "Hanno un <1>livello basso di <4>alfabetizzazione digitale.", - "__EXPRESS_4_WIZARD_STEP_RECAP_WHO_DIGITALIZATION_TEXT_EXPERT": "Hanno un <1>livello alto di <4>alfabetizzazione digitale.", - "__EXPRESS_4_WIZARD_STEP_RECAP_WHO_DIGITALIZATION_TEXT_INTERMEDIATE": "Hanno un <1>livello medio di <4>alfabetizzazione digitale.", - "__EXPRESS_4_WIZARD_STEP_RECAP_WHO_GENDER_TEXT": "Sono <1>{{gender}}.", - "__EXPRESS_4_WIZARD_STEP_RECAP_WHO_GENDER_TEXT_ALL": "Sono <1>equamente distribuiti per <3>genere.", - "__EXPRESS_4_WIZARD_STEP_WHERE_SUBTITLE": "Scegli una <1>tipologia di device dove effettuare il test.", - "__EXPRESS_4_WIZARD_STEP_WHO_DEMOGRAPHICS_CRITERIA_DESCRIPTION": "Caratterizza un gruppo più o meno omogeneo di utenti per testare il tuo prodotto", - "__EXPRESS_4_WIZARD_STEP_WHO_DEMOGRAPHICS_CRITERIA_TITLE": "Criteri demografici", - "__EXPRESS_4_WIZARD_STEP_WHO_FIELD_AGE_RANGE_ALL": "Tutte le età", - "__EXPRESS_4_WIZARD_STEP_WHO_FIELD_AGE_RANGE_ALL_HINT": "Gruppo eterogeneo per età (18 - 70 anni)", - "__EXPRESS_4_WIZARD_STEP_WHO_FIELD_AGE_RANGE_LABEL": "Fascia d’età", - "__EXPRESS_4_WIZARD_STEP_WHO_FIELD_GENDER_ALL": "Tutti i generi", - "__EXPRESS_4_WIZARD_STEP_WHO_FIELD_GENDER_ALL_HINT": "Gruppo eterogeneo per genere", - "__EXPRESS_4_WIZARD_STEP_WHO_FIELD_GENDER_LABEL": "Identità di genere", - "__EXPRESS_4_WIZARD_STEP_WHO_FIELD_LITERACY_ALL": "Tutti i livelli", - "__EXPRESS_4_WIZARD_STEP_WHO_FIELD_LITERACY_ALL_HINT": "Gruppo eterogeneo per alfabetizzazione digitale", - "__EXPRESS_4_WIZARD_STEP_WHO_FIELD_LITERACY_LABEL": "Livello di alfabetizzazione digitale", - "__EXPRESS_4_WIZARD_STEP_WHO_GENDER_FEMALE": "Donna", - "__EXPRESS_4_WIZARD_STEP_WHO_GENDER_FEMALE_PLURAL": "donne", - "__EXPRESS_4_WIZARD_STEP_WHO_GENDER_MALE": "Uomo", - "__EXPRESS_4_WIZARD_STEP_WHO_GENDER_MALE_PLURAL": "uomini", - "__EXPRESS_4_WIZARD_STEP_WHO_LABEL_SELECTION_CRITERIA": "Specifica i criteri di selezione per i 6 utenti che esplorano il tuo prodotto.", - "__EXPRESS_4_WIZARD_STEP_WHO_LITERACY_BEGINNER": "Principiante", - "__EXPRESS_4_WIZARD_STEP_WHO_LITERACY_BEGINNER_DESCRIPTION": "Non ha autonomia, si fa aiutare da parenti e amici", - "__EXPRESS_4_WIZARD_STEP_WHO_LITERACY_EXPERT": "Esperto", - "__EXPRESS_4_WIZARD_STEP_WHO_LITERACY_EXPERT_DESCRIPTION": "Ha totale autonomia nell’uso dei prodotti digitali", - "__EXPRESS_4_WIZARD_STEP_WHO_LITERACY_INTERMEDIATE": "Itermedio", - "__EXPRESS_4_WIZARD_STEP_WHO_LITERACY_INTERMEDIATE_DESCRIPTION": "Ha parziale autonomia, ma per alcune cose si fa aiutare", - "__EXPRESS_4_WIZARD_STEP_WHO_TAG_USERS": "N° Utenti: 6", - "__EXPRESS_4_WIZARD_STEP_WHO_TAG_USERS_LANGUAGE": "Vivono in Italia", - "__EXPRESS_4_WIZARD_STEP_WHO_TAG_USERS_LOCATION": "Parlano Italiano", - "__EXPRESS_LABEL": "Express", - "__EXPRESS_WIZARD_BACK_BUTTON_LABEL": "Indietro", - "__EXPRESS_WIZARD_CONFIRM_BUTTON_LABEL": "Lancia", - "__EXPRESS_WIZARD_CONFIRM_CLOSE_CANCEL_BUTTON_TEXT": "Esci & Elimina", - "__EXPRESS_WIZARD_CONFIRM_CLOSE_CONTINUE_BUTTON_TEXT": "Torna alla campagna", - "__EXPRESS_WIZARD_CONFIRM_CLOSE_HEADER": "Uscire dalle modifiche?", - "__EXPRESS_WIZARD_CONFIRM_CLOSE_MESSAGE": "Uscendo dalle modifiche la campagna verrà eliminata per sempre.", - "__EXPRESS_WIZARD_CONFIRM_PLANNING_BUTTON_LABEL": "Pianifica", - "__EXPRESS_WIZARD_NEXT_BUTTON_LABEL": "Avanti", - "__EXPRESS_WIZARD_STEP_APP_WHERE_OS_ANDROID_LABEL": "Android", - "__EXPRESS_WIZARD_STEP_APP_WHERE_OS_IOS_LABEL": "iOS", - "__EXPRESS_WIZARD_STEP_APP_WHERE_OS_LABEL": "Seleziona il sistema operativo", - "__EXPRESS_WIZARD_STEP_APP_WHERE_OS_TITLE": "Sistema operativo", - "__EXPRESS_WIZARD_STEP_CONFIRM_DESCRIPTION": "Conferma i dati inseriti e lancia la campagna", - "__EXPRESS_WIZARD_STEP_CONFIRM_LABEL": "Recap e Lancio", - "__EXPRESS_WIZARD_STEP_HOW_ADD_USE_CASE_CARD_SUBTITLE": "L'insieme di azioni eseguite dal tester per verificare uno o più casì d'uso", - "__EXPRESS_WIZARD_STEP_HOW_ADD_USE_CASE_CARD_TITLE": "Aggiungi test case", - "__EXPRESS_WIZARD_STEP_HOW_DESCRIPTION": "Il manuale di test", - "__EXPRESS_WIZARD_STEP_HOW_EDIT_USE_CASE_CARD_LABEL": "Modifica", - "__EXPRESS_WIZARD_STEP_HOW_EDIT_USE_CASE_CARD_LABEL_INCOMPLETE": "Completa", - "__EXPRESS_WIZARD_STEP_HOW_FIELD_DESCRIPTION_DESCRIPTION": "Dai qualche indicazioni ai tester sul prodotto", - "__EXPRESS_WIZARD_STEP_HOW_FIELD_DESCRIPTION_PLACEHOLDER": "Testerai il prodotto X, il cui scopo principale è Y", - "__EXPRESS_WIZARD_STEP_HOW_FIELD_DESCRIPTION_REQUIRED": "Campo obbligatorio", - "__EXPRESS_WIZARD_STEP_HOW_FIELD_DESCRIPTION_TITLE": "Descrizione del prodotto", - "__EXPRESS_WIZARD_STEP_HOW_FIELD_GOAL_DESCRIPTION": "Dai un po’ di contesto ai nostri tester manger, spiegando brevemente cosa vuoi imparare da questo test.", - "__EXPRESS_WIZARD_STEP_HOW_FIELD_GOAL_PLACEHOLDER": "Vorrei capire se i miei utenti...", - "__EXPRESS_WIZARD_STEP_HOW_FIELD_GOAL_REQUIRED": "Campo obbligatorio", - "__EXPRESS_WIZARD_STEP_HOW_FIELD_GOAL_TITLE": "Obiettivo del test", - "__EXPRESS_WIZARD_STEP_HOW_LABEL": "Come", - "__EXPRESS_WIZARD_STEP_HOW_LABEL_EXTRA": "lo testiamo?", - "__EXPRESS_WIZARD_STEP_HOW_SUBTITLE": "Individua da 1 fino a 5 test case e costruisci il percorso del tester.", - "__EXPRESS_WIZARD_STEP_HOW_TAG_THINK_ALOUD_LABEL": "Thinking Aloud", - "__EXPRESS_WIZARD_STEP_HOW_TAG_USER_TASKS_LABEL": "<0>N° User Tasks: <2><0>{{express_use_cases_limit}}", - "__EXPRESS_WIZARD_STEP_HOW_UNMODERATED_SUBTITLE": "Individua l’obiettivo del test e 5 user task da far svolgere agli utenti, che articoleranno i loro pensieri ad alta voce durante il test.", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_ADD_USE_CASE_BUTTON": "Aggiungi", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_DESCRIPTION_FIELD_DESCRIPTION": "", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_DESCRIPTION_FIELD_ERROR_SUBTITLE": "Non puoi andare avanti se non compili il campo", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_DESCRIPTION_FIELD_ERROR_TITLE": "Campo obbligatorio", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_DESCRIPTION_FIELD_TITLE": "", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_EDITOR_CANCEL_BUTTON": "", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_EDITOR_SAVE_BUTTON": "", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_EMPTY_LABEL": "Vuoto", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_FUNCTIONALITY_REQUIRED": "", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_INSTRUCTIONS_FIELD_DESCRIPTION": "Definisci il compito che l’utente deve portare a termine durante l’attività di test, in base alla funzione o sezione da testare.\n(Es: per testare il processo di checkout, dai all'utente il compito di acquistare qualcosa)", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_INSTRUCTIONS_FIELD_TITLE": "Istruzioni per gli utenti", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_LINK_FIELD_MESSAGE": "Il link deve essere pubblico", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_LINK_FIELD_PLACEHOLDER": "www.mycompany.com", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_LINK_FIELD_SUBTITLE": "Indica un link specifico del prodotto da cui cominciare il test", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_LINK_FIELD_TITLE": "Link per il test", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_LINK_INVALID": "Il link non risulta funzionante: controlla di averlo scritto correttamente", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_LOGGED_FIELD_DESCRIPTION": "", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_LOGGED_FIELD_TITLE": "", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_MIN_ERROR": "Per favore, specifica almeno un test case", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_NOTES_FIELD_SUBTITLE": "Quando scrivi un manuale di test, i nostri tester leader lo controllano e lo ottimizzano prima del lancio effettivo.", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_NOTES_FIELD_TITLE": "Il check finale? È tutto nostro", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_PRODUCT_FIELD_PLACEHOLDER": "Cerca o aggiungi tipologia", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_PRODUCT_FIELD_TITLE": "Tipologia di caso d'uso da testare", - "__EXPRESS_WIZARD_STEP_HOW_USE_CASE_MODAL_TITLE_FIELD_PLACEHOLDER": "Titolo nuovo caso d'uso", - "__EXPRESS_WIZARD_STEP_RECAP_DESCRIPTION": "Controlla i dati e fai partire la campagna", - "__EXPRESS_WIZARD_STEP_RECAP_HOW_CONTENT_TEXT": "Hai indicato <0><1>{{use_cases_count}} test case:", - "__EXPRESS_WIZARD_STEP_RECAP_MORE_TEXTAREA_NOTE": "Non utilizzare questo spazio per comunicare dati sensibili come credenziali di accesso", - "__EXPRESS_WIZARD_STEP_RECAP_OUT_OF_SCOPE_DESCRIPTION": "Indica sezioni out of scope per il test", - "__EXPRESS_WIZARD_STEP_RECAP_OUT_OF_SCOPE_LABEL": "Out of scope", - "__EXPRESS_WIZARD_STEP_RECAP_OUT_OF_SCOPE_PLACEHOLDER": "Indica eventuali sezioni che non rientrano nel perimetro del test.", - "__EXPRESS_WIZARD_STEP_RECAP_TITLE": "Recap e lancio", - "__EXPRESS_WIZARD_STEP_RECAP_WHAT_CONTENT_TEXT": "Stai lanciando la campagna <0>{{campaign_name}} all'interno del progetto <0>{{project_name}} per <0>{{product_type}}.", - "__EXPRESS_WIZARD_STEP_RECAP_WHERE_CONTENT_TEXT_BROWSERS": "Sui browser:", - "__EXPRESS_WIZARD_STEP_RECAP_WHERE_CONTENT_TEXT_BROWSERS_EMPTY": "Non hai selezionato alcun browser.", - "__EXPRESS_WIZARD_STEP_RECAP_WHERE_CONTENT_TEXT_DEVICES": "Il test verrà eseguito su:", - "__EXPRESS_WIZARD_STEP_RECAP_WHERE_CONTENT_TEXT_OS": "Sul sistema operativo:", - "__EXPRESS_WIZARD_STEP_RECAP_WHO_CONTENT_TEXT": "I tester parlano: <0>{{campaign_language}}.", - "__EXPRESS_WIZARD_STEP_THANK_YOU_BUTTON": "Torna alla dashboard", - "__EXPRESS_WIZARD_STEP_THANK_YOU_SUBTITLE": "Tieni sotto controllo i risultati in tempo reale, direttamente dalla dashboard.", - "__EXPRESS_WIZARD_STEP_THANK_YOU_TITLE": "Campagna lanciata!", - "__EXPRESS_WIZARD_STEP_WHAT_DESCRIPTION": "Definisci il prodotto per il test esplorativo.", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_CAMPAIGN_NAME_REQUIRED": "Campo obbligatorio", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_CAMPAIGN_REASON_LABEL": "Seleziona il motivo per cui vuoi lanciare questa campagna di test", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_CAMPAIGN_REASON_OPTION_1": "Nuovo prodotto digitale", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_CAMPAIGN_REASON_OPTION_2": "Release nuove funzionalità", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_CAMPAIGN_REASON_OPTION_3": "Altro", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_CAMPAIGN_REASON_REQUIRED": "Campo obbligatorio", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_NAME_PLACEHOLDER": "Nuova campagna express", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_PRODUCT_TYPE_LABEL": "Tipologia di prodotto", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_PRODUCT_TYPE_MOBILEAPP_LABEL": "Mobile App", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_PRODUCT_TYPE_OR_LABEL": "oppure", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_PRODUCT_TYPE_REQUIRED": "Campo obbligatorio", - "__EXPRESS_WIZARD_STEP_WHAT_FIELD_PRODUCT_TYPE_WEBAPP_LABEL": "Sito Web o Web App", - "__EXPRESS_WIZARD_STEP_WHAT_LABEL": "Cosa", - "__EXPRESS_WIZARD_STEP_WHAT_LABEL_EXTRA": "testiamo?", - "__EXPRESS_WIZARD_STEP_WHEN_CUSTOM_DATE_CANCEL": "Annulla", - "__EXPRESS_WIZARD_STEP_WHEN_CUSTOM_DATE_CONFIRM": "Conferma", - "__EXPRESS_WIZARD_STEP_WHEN_FIELD_CAMPAIGN_DATE_LABEL": "Seleziona una data", - "__EXPRESS_WIZARD_STEP_WHEN_FIELD_CAMPAIGN_DATE_PLACEHOLDER": "Data di lancio", - "__EXPRESS_WIZARD_STEP_WHEN_FIELD_CAMPAIGN_DATE_RESULTS_LABEL": "Data di consegna risultati", - "__EXPRESS_WIZARD_STEP_WHEN_FIELD_CAMPAIGN_DATE_RESULTS_PLACEHOLDER": "Data di consegna", - "__EXPRESS_WIZARD_STEP_WHEN_FIELD_CAMPAIGN_DATE_TOMORROW_LABEL": "", - "__EXPRESS_WIZARD_STEP_WHERE_ANDROID_LINK_DESCRIPTION": "Inserisci un link ad una pagina web o di Google Play", - "__EXPRESS_WIZARD_STEP_WHERE_ANDROID_LINK_ERROR": "Per favore inserisci un link valido", - "__EXPRESS_WIZARD_STEP_WHERE_ANDROID_LINK_INFO": "Accertati che il link sia pubblico", - "__EXPRESS_WIZARD_STEP_WHERE_ANDROID_LINK_LABEL": "Link per scaricare l'app", - "__EXPRESS_WIZARD_STEP_WHERE_BROWSER_TITLE": "Gestisci preferenze browser", - "__EXPRESS_WIZARD_STEP_WHERE_BROWSER_TOGGLE_LABEL": "Definisci sezioni Out of Scope", - "__EXPRESS_WIZARD_STEP_WHERE_CUSTOM_BROWSER_CHROME": "Chrome", - "__EXPRESS_WIZARD_STEP_WHERE_CUSTOM_BROWSER_EDGE": "Edge", - "__EXPRESS_WIZARD_STEP_WHERE_CUSTOM_BROWSER_ERROR": "Seleziona almeno un browser (se non vuoi indicare preferenze, disabilita l’opzione)", - "__EXPRESS_WIZARD_STEP_WHERE_CUSTOM_BROWSER_FIREFOX": "Firefox", - "__EXPRESS_WIZARD_STEP_WHERE_CUSTOM_BROWSER_LABEL": "Scegli i browser su cui testare", - "__EXPRESS_WIZARD_STEP_WHERE_CUSTOM_BROWSER_SAFARI": "Safari", - "__EXPRESS_WIZARD_STEP_WHERE_DEFAULT_BROWSER_DESCRIPTION": "Ti garantiamo il giusto equilibrio tra le tipologie di dispositivi e browser in base alle statistiche di mercato e alla nostra esperienza.", - "__EXPRESS_WIZARD_STEP_WHERE_DEFAULT_BROWSER_TITLE": "Scelta dei browser? Ci pensiamo noi.", - "__EXPRESS_WIZARD_STEP_WHERE_DESCRIPTION": "I dispositivi del test", - "__EXPRESS_WIZARD_STEP_WHERE_DEVICE_OPERATING_SYSTEM_ERROR": "Seleziona un sistema operativo", - "__EXPRESS_WIZARD_STEP_WHERE_DEVICE_TYPE_DESKTOP": "Desktop", - "__EXPRESS_WIZARD_STEP_WHERE_DEVICE_TYPE_ERROR": "Seleziona almeno un dispositivo", - "__EXPRESS_WIZARD_STEP_WHERE_DEVICE_TYPE_SMARTPHONE": "Smartphone", - "__EXPRESS_WIZARD_STEP_WHERE_DEVICE_TYPE_TABLET": "Tablet", - "__EXPRESS_WIZARD_STEP_WHERE_IOS_LINK_DESCRIPTION": "Inserisci un link ad App Store o Test Flight", - "__EXPRESS_WIZARD_STEP_WHERE_IOS_LINK_ERROR": "Il link non risulta funzionante: controlla di averlo scritto correttamente", - "__EXPRESS_WIZARD_STEP_WHERE_IOS_LINK_INFO": "Accertati che il link sia pubblico, anche per le versioni di test", - "__EXPRESS_WIZARD_STEP_WHERE_IOS_LINK_LABEL": "Link per scaricare l'app", - "__EXPRESS_WIZARD_STEP_WHERE_LABEL": "Dove", - "__EXPRESS_WIZARD_STEP_WHERE_LINK_DESCRIPTION": "Da questo link i tester accedono al tuo prodotto per iniziare il test.", - "__EXPRESS_WIZARD_STEP_WHERE_LINK_ERROR": "Per favore inserisci un link valido", - "__EXPRESS_WIZARD_STEP_WHERE_LINK_INFO": "Il link deve essere pubblico, anche per gli ambienti di test", - "__EXPRESS_WIZARD_STEP_WHERE_LINK_LABEL": "Link per il test", - "__EXPRESS_WIZARD_STEP_WHERE_OUT_OF_SCOPE_DESCRIPTION": "Nei test esplorativi, gli utenti esplorano liberamente tutto il prodotto.Tuttavia, puoi segnalare delle sezioni da non testare.", - "__EXPRESS_WIZARD_STEP_WHERE_OUT_OF_SCOPE_ERROR": "Campo obbligatorio (se non vuoi indicare sezioni Out of Scope, disabilita l’opzione)", - "__EXPRESS_WIZARD_STEP_WHERE_OUT_OF_SCOPE_LABEL": "Indica le sezioni fuori perimetro", - "__EXPRESS_WIZARD_STEP_WHERE_OUT_OF_SCOPE_PLACEHOLDER": "Il test esplorativo non riguarda le sezioni...", - "__EXPRESS_WIZARD_STEP_WHERE_OUT_OF_SCOPE_TITLE": "Perimetro del test", - "__EXPRESS_WIZARD_STEP_WHERE_SUBTITLE": "Seleziona fino a <1>2 tipologie di dispositivi dove eseguire il test.", - "__EXPRESS_WIZARD_STEP_WHERE_TITLE": "<0>Dove lo testiamo?", - "__EXPRESS_WIZARD_STEP_WHO_DESCRIPTION": "Definisci il target della campagna", - "__EXPRESS_WIZARD_STEP_WHO_FIELD_CAMPAIGN_LANGUAGE_REQUIRED": "Campo obbligatorio", - "__EXPRESS_WIZARD_STEP_WHO_FIELD_LANGUAGE_DESCRIPTION": "Seleziona la lingua parlata dai tester, sarà la stessa in cui riceverai i risultati.", - "__EXPRESS_WIZARD_STEP_WHO_FIELD_LANGUAGE_LABEL": "Seleziona la lingua parlata dai tester", - "__EXPRESS_WIZARD_STEP_WHO_FIELD_LANGUAGE_OPTION_EN": "", - "__EXPRESS_WIZARD_STEP_WHO_FIELD_LANGUAGE_OPTION_ES": "", - "__EXPRESS_WIZARD_STEP_WHO_FIELD_LANGUAGE_OPTION_FR": "", - "__EXPRESS_WIZARD_STEP_WHO_FIELD_LANGUAGE_OPTION_IT": "", - "__EXPRESS_WIZARD_STEP_WHO_FIELD_LANGUAGE_TITLE": "Lingua", - "__EXPRESS_WIZARD_STEP_WHO_LABEL": "Chi", - "__EXPRESS_WIZARD_STEP_WHO_LABEL_EXTRA": "è il target della campagna?", - "__EXPRESS_WIZARD_STEPPER_ACCORDION_TITLE_MOBILE": "Step {current_step} di {total_steps}", - "__EXPRESS_WIZARD_SUBMIT_ERROR": "Qualcosa è andato storto. Per favore riprova.", - "__EXPRESS_WIZARD_SUBMIT_PLANNING_TOOLTIP_FIRST_RESULTS": "Primi risultati", - "__EXPRESS_WIZARD_SUBMIT_PLANNING_TOOLTIP_TITLE": "Pianifica lancio", - "__EXPRESS_WIZARD_SUBMIT_TOOLTIP_MODAL_CUSTOM_DATE_ITEM": "Data custom", "__FORM_FIELD_REQUIRED_MESSAGE": "Campo obbligatorio", "__FORM_OPTIONAL_LABEL": "(opzionale)", - "__FUNCTIONAL_LABEL": "Funzionali", "__INSIGHT_CLUSTER_GENERAL": "Generale", "__INSIGHT_LINK_TOAST_COPY_MESSAGE": "Hai copiato il link", "__INSIGHTS_COLLECTION_OBSERVATION_CARD_LIGHTBOX_COPY_LINK_BUTTON_LABEL": "Copia link osservazione", @@ -965,7 +698,6 @@ "__LOGIN_FORM_EMAIL_FIELD_INVALID_MESSAGE": "Inserisci un indirizzo email valido", "__LOGIN_FORM_EMAIL_PLACEHOLDER": "Inserisci email", "__LOGIN_FORM_FAILED_INVALID": "L'indirizzo email o la password non sono corretti.", - "__LOGIN_FORM_PASSWORD_FIELD_LENGTH_INVALID": "La password deve essere lunga almeno 5 caratteri", "__LOGIN_FORM_PASSWORD_FORGOT_LABEL": "Password dimenticata?", "__LOGIN_FORM_PASSWORD_PLACEHOLDER": "Inserisci password", "__LOGIN_FORM_TITLE": "Entra in UNGUESS", @@ -1001,7 +733,7 @@ "__PAGE_NOT_ACCESIBLE_DESCRIPTION": "Sembra che tu non abbia più accesso al workspace. Se hai bisogno di aiuto, contatta il nostro centro assistenza. ", "__PAGE_NOT_ACCESIBLE_TITLE": "Al momento non è possibile accedere a questa pagina.", "__PAGE_TITLE_BUGS_COLLECTION": "Raccolta bug", - "__PAGE_TITLE_CATALOG": "Servizi", + "__PAGE_TITLE_JOIN": "", "__PAGE_TITLE_LOGIN": "Accedi", "__PAGE_TITLE_PRIMARY_DASHBOARD": "Le mie campagne", "__PAGE_TITLE_PRIMARY_DASHBOARD_ARCHIVE": "", @@ -1292,6 +1024,8 @@ "__PLAN_PAGE_TITLE": "Pianifica la tua attività", "__PLAN_REQUEST_QUOTATION_CTA": "", "__PLAN_SAVE_CONFIGURATION_CTA": "", + "__PLAN_SAVE_DRAFT_TOAST_ERROR": "", + "__PLAN_SAVE_DRAFT_TOAST_SUCCESS": "", "__PLAN_SETUP_NOTE_SIZE_ERROR_EMPTY": "", "__PLAN_SETUP_NOTE_SIZE_ERROR_TOO_LONG": "", "__PLAN_TARGET_NOTE_SIZE_ERROR_EMPTY": "", @@ -1322,6 +1056,7 @@ "__PROJECT_FORM_NAME_MAX": "", "__PROJECT_FORM_NAME_REQUIRED": "", "__PROJECT_PAGE_ARCHIVE_DESCRIPTION": "", + "__PROJECT_PAGE_DELETE_PROJECT_MODAL_BODY": "", "__PROJECT_PAGE_DELETE_PROJECT_MODAL_BODY_1": "", "__PROJECT_PAGE_DELETE_PROJECT_MODAL_BODY_2": "", "__PROJECT_PAGE_DELETE_PROJECT_MODAL_BUTTON_CANCEL": "", @@ -1346,11 +1081,9 @@ "__SENTIMENT_OVERVIEW_SUBTITLE": "", "__SENTIMENT_OVERVIEW_TITLE": "", "__SENTIMENT_TOAST_COPY_MESSAGE": "", - "__SERVICE_DETAIL_PAGE_TAG_RESULTS_DAYS_LABEL": "Primi risultati in <0>{{hours}}h", "__SERVICE_TILES_HEADER": "", "__SERVICE_TILES_SUBTITLE": "", "__SIDEBAR_CAMPAIGNS_LABEL": "campagne", - "__TAILORED_LABEL": "Tailored", "__TEMPLATE_CARD_TAILORED_HEADER": "", "__TEMPLATE_CARD_UNGUESS_HEADER": "", "__TEMPLATE_LAUNCH_ACTIVITY_BUTTON": "", @@ -1460,17 +1193,6 @@ "__VIDEOS_LIST_USECASE_INFO_many": "", "__VIDEOS_LIST_USECASE_INFO_other": "video", "__VIDEOS_PAGE_TITLE": "Lista Video", - "__WIZARD_EXPRESS_2_USE_CASE_MODAL_HEADER_SAVE_BUTTON": "Salva e continua", - "__WIZARD_EXPRESS_2_USE_CASE_MODAL_PRE_TITLE": "Step \"Come\"", - "__WIZARD_EXPRESS_3_USE_CASE_MODAL_HEADER_SAVE_BUTTON": "Salva e continua", - "__WIZARD_EXPRESS_3_USE_CASE_MODAL_PRE_TITLE": "Step \"Come\"", - "__WIZARD_EXPRESS_BODY_NOTES_TITLE": "Prima di iniziare", - "__WIZARD_EXPRESS_BODY_SELECT_PROJECT_TITLE": "Seleziona il progetto in cui salvare la campagna", - "__WIZARD_EXPRESS_DEFAULT_ITEM": "Cerca o aggiungi progetto", - "__WIZARD_EXPRESS_FOOTER_CONFIRM_BUTTON": "Iniziamo!", - "__WIZARD_EXPRESS_FOOTER_INFO_BUTTON": "", - "__WIZARD_EXPRESS_HEADER_TITLE": "Lancia campagna", - "__WIZARD_EXPRESS_USE_CASE_MODAL_TITLE": "Aggiungi uno o più test case", "__WORKSPACE_SETTINGS_ADD_MEMBER_BUTTON": "Invita", "__WORKSPACE_SETTINGS_ADD_MEMBER_EMAIL_LABEL": "Invita un nuovo utente", "__WORKSPACE_SETTINGS_ADD_MEMBER_EMAIL_PLACEHOLDER": "Indirizzo email", @@ -1507,45 +1229,69 @@ "{{count}} bugs_one": "", "{{count}} bugs_many": "", "{{count}} bugs_other": "", - "Devices ({{count}})_one": "Dispositivi ({{count}})", - "Devices ({{count}})_many": "", - "Devices ({{count}})_other": "Dispositivi ({{count}})", "INSIGHT_PAGE_COLLECTION_OBSERVATIONS_LABEL": "Osservazioni: <1>{{counter}}", "INSIGHT_PAGE_COLLECTION_THEMES_LABEL": "Temi: <1>{{counter}}", "INSIGHT_PAGE_COLLECTION_UNGROUPED_USECASE_SUBTITTLE": "Osservazioni isolate", "INSIGHT_PAGE_COLLECTION_USECASE_SUBTITTLE": "Titoli ricorrenti", "INSIGHTS_PAGE_COLLECTION_SUBTITLE": "Qui trovi tutte le tue osservazioni che hai collezionato fin ad ora.", "INSIGHTS_PAGE_COLLECTION_TITLE": "Temi e osservazioni", - "OS ({{count}})_one": "OS ({{count}})", - "OS ({{count}})_many": "", - "OS ({{count}})_other": "OS ({{count}})", + "JOIN_PAGE_ERROR_BUTTON_CONTACT": "", + "JOIN_PAGE_ERROR_BUTTON_LOGIN": "", + "JOIN_PAGE_ERROR_DESCRIPTION": "", + "JOIN_PAGE_ERROR_TITLE": "", + "PASSWORD_VALIDATOR_CONTAIN_A_LOWERCASE_LETTER": "", + "PASSWORD_VALIDATOR_CONTAIN_A_NUMBER": "", + "PASSWORD_VALIDATOR_CONTAIN_AN_UPPERCASE_LETTER": "", + "PASSWORD_VALIDATOR_MINIMUM_OF_6_CHARACTERS": "", + "PASSWORD_VALIDATOR_PASSWORD_REQUIREMENTS": "", "PLAN_GLOBAL_ALERT_APPROVED_STATE_MESSAGE": "", "PLAN_GLOBAL_ALERT_APPROVED_STATE_TITLE": "", "PLAN_GLOBAL_ALERT_AWATING_STATE_MESSAGE": "", "PLAN_GLOBAL_ALERT_AWATING_STATE_TITLE": "", "PLAN_GLOBAL_ALERT_SUBMITTED_STATE_MESSAGE": "", "PLAN_GLOBAL_ALERT_SUBMITTED_STATE_TITLE": "", - "Priority ({{count}})_one": "Priorità ({{count}})", - "Priority ({{count}})_many": "", - "Priority ({{count}})_other": "Priorità ({{count}})", - "Replicability ({{count}})_one": "Replicabilità ({{count}})", - "Replicability ({{count}})_many": "", - "Replicability ({{count}})_other": "Replicabilità ({{count}})", "Severity ({{count}})_one": "Gravità ({{count}})", "Severity ({{count}})_many": "", "Severity ({{count}})_other": "Gravità ({{count}})", - "Status ({{count}})_one": "Stato ({{count}})", - "Status ({{count}})_many": "", - "Status ({{count}})_other": "Stati ({{count}})", - "Tags ({{count}})_one": "Tag ({{count}})", - "Tags ({{count}})_many": "", - "Tags ({{count}})_other": "Tag ({{count}})", - "Typology ({{count}})_one": "Tipologia ({{count}})", - "Typology ({{count}})_many": "", - "Typology ({{count}})_other": "Tipologie ({{count}})", - "Use Cases ({{count}})_one": "Use Case ({{count}})", - "Use Cases ({{count}})_many": "", - "Use Cases ({{count}})_other": "Use Case ({{count}})", + "SIGNUP_FORM_CTA_RETURN_TO_UNGUESS_LANDING": "", + "SIGNUP_FORM_EMAIL_ALREADY_TAKEN": "", + "SIGNUP_FORM_EMAIL_ERROR_SERVER_MAIL_CHECK": "", + "SIGNUP_FORM_EMAIL_IS_REQUIRED": "", + "SIGNUP_FORM_EMAIL_LABEL": "", + "SIGNUP_FORM_EMAIL_MUST_BE_A_VALID_EMAIL": "", + "SIGNUP_FORM_EMAIL_PLACEHOLDER": "", + "SIGNUP_FORM_GO_TO_STEP_2": "", + "SIGNUP_FORM_GO_TO_STEP_3": "", + "SIGNUP_FORM_NAME_IS_REQUIRED": "", + "SIGNUP_FORM_NAME_LABEL": "", + "SIGNUP_FORM_NAME_PLACEHOLDER": "", + "SIGNUP_FORM_PASSWORD_HIDE": "", + "SIGNUP_FORM_PASSWORD_IS_A_REQUIRED_FIELD": "", + "SIGNUP_FORM_PASSWORD_LABEL": "", + "SIGNUP_FORM_PASSWORD_MUST_BE_AT_LEAST_6_CHARACTER_LONG": "", + "SIGNUP_FORM_PASSWORD_MUST_CONTAIN_AT_LEAST_A_LOWERCASE_LETTER": "", + "SIGNUP_FORM_PASSWORD_MUST_CONTAIN_AT_LEAST_A_NUMBER": "", + "SIGNUP_FORM_PASSWORD_MUST_CONTAIN_AT_LEAST_AN_UPPERCASE_LETTER": "", + "SIGNUP_FORM_PASSWORD_PLACEHOLDER": "", + "SIGNUP_FORM_PASSWORD_SHOW": "", + "SIGNUP_FORM_RETURN_TO_STEP_1": "", + "SIGNUP_FORM_RETURN_TO_STEP_2": "", + "SIGNUP_FORM_ROLE_IS_REQUIRED": "", + "SIGNUP_FORM_ROLE_LABEL": "", + "SIGNUP_FORM_STEP_1_TITLE": "", + "SIGNUP_FORM_STEP_2_DESCRIPTION": "", + "SIGNUP_FORM_STEP_2_TITLE": "", + "SIGNUP_FORM_STEP_3_DESCRIPTION": "", + "SIGNUP_FORM_STEP_3_TITLE": "", + "SIGNUP_FORM_SUBMIT": "", + "SIGNUP_FORM_SURNAME_IS_REQUIRED": "", + "SIGNUP_FORM_SURNAME_LABEL": "", + "SIGNUP_FORM_SURNAME_PLACEHOLDER": "", + "SIGNUP_FORM_TERMS_AND_CONDITIONS": "", + "SIGNUP_FORM_WAITING_FOR_SIGNUP": "", + "SIGNUP_FORM_WORKSPACE_IS_REQUIRED": "", + "SIGNUP_FORM_WORKSPACE_LABEL": "", + "SIGNUP_FORM_WORKSPACE_PLACEHOLDER": "", "UseCase ({{count}})_one": "Use Case ({{count}})", "UseCase ({{count}})_many": "", "UseCase ({{count}})_other": "Use Case ({{count}})", 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/CampaignWidgets.tsx b/src/pages/Campaign/CampaignWidgets.tsx index 4891df4c0..2151a3b16 100644 --- a/src/pages/Campaign/CampaignWidgets.tsx +++ b/src/pages/Campaign/CampaignWidgets.tsx @@ -6,6 +6,7 @@ import { StyledDivider, } from 'src/common/components/navigation/asideNav'; import { useParams } from 'react-router-dom'; +import { appTheme } from 'src/app/theme'; import { EmptyState } from './EmptyState'; import { useWidgets } from './useWidgets'; @@ -49,7 +50,15 @@ export const CampaignWidgets = () => { } })} {footers.length > 0 && } - {footers.map((widget) => widget.content)} +
+ {footers.map((widget) => widget.content)} +
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/useWidgets/Functional/widgets.tsx b/src/pages/Campaign/useWidgets/Functional/widgets.tsx index c37d4e1bc..eab1e8c4a 100644 --- a/src/pages/Campaign/useWidgets/Functional/widgets.tsx +++ b/src/pages/Campaign/useWidgets/Functional/widgets.tsx @@ -3,23 +3,13 @@ import { useGetCampaignsByCidBugsQuery, useGetCampaignsByCidQuery, } from 'src/features/api'; -import { - getLocalizedFunctionalDashboardUrl, - getLocalizedPlanUrl, -} from 'src/hooks/useLocalizeDashboardUrl'; -import styled from 'styled-components'; +import { getLocalizedFunctionalDashboardUrl } from 'src/hooks/useLocalizeDashboardUrl'; import { ExternalLink } from '../../ExternalLink'; import { Additionals } from './Additionals'; import { CampaignOverview } from './CampaignOverview'; import { DevicesAndTypes } from './DevicesAndTypes'; import { UniqueBugsSection } from './UniqueBugsSection'; -const NavFooterCTAContainer = styled.div` - display: flex; - flex-direction: column; - gap: ${({ theme }) => theme.space.sm}; -`; - const useAdditionalFieldsWidget = ({ campaignId }: { campaignId: number }) => { const { t } = useTranslation(); const { data, isLoading } = useGetCampaignsByCidBugsQuery({ @@ -87,25 +77,15 @@ export const widgets = ({ campaignId }: { campaignId: number }) => { ...additionalFieldsWidget, { content: ( - - {campaign.plan && ( - - {t('__CAMPAIGN_PAGE_NAVIGATION_PLAN_EXTERNAL_LINK_LABEL')} - + - {t('__CAMPAIGN_PAGE_NAVIGATION_BUG_EXTERNAL_LINK_LABEL')} - - + > + {t('__CAMPAIGN_PAGE_NAVIGATION_BUG_EXTERNAL_LINK_LABEL')} + ), type: 'footer' as const, }, diff --git a/src/pages/Campaign/useWidgets/Report/widgets.tsx b/src/pages/Campaign/useWidgets/Report/widgets.tsx index 1127b0217..cb9b414e4 100644 --- a/src/pages/Campaign/useWidgets/Report/widgets.tsx +++ b/src/pages/Campaign/useWidgets/Report/widgets.tsx @@ -4,10 +4,12 @@ import { useGetCampaignsByCidQuery, useGetCampaignsByCidReportsQuery, } from 'src/features/api'; +import { getLocalizedPlanUrl } from 'src/hooks/useLocalizeDashboardUrl'; +import { ExternalLink } from '../../ExternalLink'; import { ReportRow } from './ReportRow'; export const widgets = ({ campaignId }: { campaignId: number }) => { - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const { data: campaign } = useGetCampaignsByCidQuery({ cid: campaignId.toString(), }); @@ -49,5 +51,21 @@ export const widgets = ({ campaignId }: { campaignId: number }) => { type: 'item' as const, title: t('__CAMPAIGN_PAGE_NAVIGATION_BUG_ITEM_OTHER_REPORTS_LABEL'), }, + ...(campaign?.plan + ? [ + { + id: 'anchor-plan-navigation', + content: ( + + {t('__CAMPAIGN_PAGE_NAVIGATION_PLAN_EXTERNAL_LINK_LABEL')} + + ), + type: 'footer' as const, + }, + ] + : []), ]; }; diff --git a/src/pages/Campaign/widgetCards/FlipCard/FlipCardBody.tsx b/src/pages/Campaign/widgetCards/FlipCard/FlipCardBody.tsx index d5430c71b..b7e51ae9d 100644 --- a/src/pages/Campaign/widgetCards/FlipCard/FlipCardBody.tsx +++ b/src/pages/Campaign/widgetCards/FlipCard/FlipCardBody.tsx @@ -1,69 +1,11 @@ +import { useMemo } from 'react'; +import { AnimatePresence } from 'motion/react'; +import * as motion from 'motion/react-client'; +import useWindowSize from 'src/hooks/useWindowSize'; import styled from 'styled-components'; import { useFlipCardContext } from './context/FlipCardContext'; import { FlipCardBodyProps } from './types'; -const durationMilliseconds = 500; - -const FlipCardFaceContainer = styled.div<{ breakpoint: number }>` - container-type: inline-size; - .flipcard-face { - transform-style: preserve-3d; - animation-duration: ${durationMilliseconds}ms; - animation-timing-function: linear; - animation-fill-mode: forwards; - } - .flipcard-face-back { - animation-name: show; - } - .flipcard-face-front { - animation-name: hide; - } - @container (min-width: ${(p) => p.breakpoint}px) { - .flipcard-face-front { - z-index: 2; - } - .flipcard-face-back { - z-index: 1; - } - &.flipcard.front { - .flipcard-face-front { - animation-name: show; - } - .flipcard-face-back { - animation-name: hide; - } - } - &.flipcard.back { - .flipcard-face-front { - animation-name: hide; - } - .flipcard-face-back { - animation-name: show; - } - } - } - @keyframes hide { - 0% { - opacity: 1; - height: auto; - } - 100% { - opacity: 0; - height: 0; - } - } - @keyframes show { - 0% { - opacity: 0; - height: 0; - } - 100% { - opacity: 1; - height: auto; - } - } -`; - const FlipCardFaceContent = styled.div` display: flex; flex-direction: column; @@ -75,18 +17,29 @@ const FlipCardFaceContent = styled.div` export const FlipCardBody = ({ front, back }: FlipCardBodyProps) => { const { visibleFace, breakpoint } = useFlipCardContext(); + const { width } = useWindowSize(); + const isMobile = width < breakpoint; + + const cardContent = useMemo(() => { + if (isMobile) return back; + if (visibleFace === 'front') return front; + return back; + }, [isMobile, visibleFace, front, back]); return ( - - - {back} - - - {front} - - + + + + {cardContent} + + + ); }; 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/Modals/DeleteProjectModal.tsx b/src/pages/Dashboard/Modals/DeleteProjectModal.tsx index 7a6bb33f0..8d95b58ed 100644 --- a/src/pages/Dashboard/Modals/DeleteProjectModal.tsx +++ b/src/pages/Dashboard/Modals/DeleteProjectModal.tsx @@ -6,8 +6,6 @@ import { Button, FooterItem, Notification, - MD, - Span, useToast, Dots, } from '@appquality/unguess-design-system'; 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 && ( - - - - -