Skip to content

Commit 50ae498

Browse files
authored
Merge branch 'develop' into UN-1556
2 parents 737b9f7 + 0790b10 commit 50ae498

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+480
-254
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"dependencies": {
66
"@analytics/google-tag-manager": "^0.6.0",
77
"@appquality/languages": "1.4.3",
8-
"@appquality/unguess-design-system": "4.0.49",
8+
"@appquality/unguess-design-system": "4.0.50--canary.549.d20012e.0",
99
"@atlaskit/pragmatic-drag-and-drop": "^1.7.4",
1010
"@atlaskit/pragmatic-drag-and-drop-flourish": "^2.0.3",
1111
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0",

src/analytics.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const analytics = Analytics({
1515
}),
1616
}),
1717
userpilot({
18-
token: isDev() ? 'STG-NX-54e88e10' : 'NX-54e88e10',
18+
token: 'NX-54e88e10',
1919
}),
2020
],
2121
}),
Lines changed: 6 additions & 0 deletions
Loading

src/common/Track.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export const Track = ({
1919
const { data: userData, isLoading, isSuccess } = useGetUsersMeQuery();
2020
const { activeWorkspace } = useActiveWorkspace();
2121
const { track, identify, page } = useAnalytics();
22+
const utmSource = sessionStorage.getItem('utmSource');
2223
const location = useLocation();
2324

2425
const defaultMeta = [
@@ -63,6 +64,7 @@ export const Track = ({
6364
email: userData.email,
6465
company: activeWorkspace.company,
6566
workspace: activeWorkspace,
67+
...((utmSource && { utm_source: utmSource }) || {}),
6668
});
6769

6870
track(

src/common/analytics-plugins/userpilot.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { User } from 'src/features/api';
22
import { Userpilot } from 'userpilot';
3+
import { isDev } from '../isDevEnvironment';
34

45
declare global {
56
interface Window {
@@ -28,7 +29,14 @@ export default function userpilotPlugin(pluginSettings: UserpilotConfig) {
2829
name: 'userpilot',
2930
config: { ...pluginSettings },
3031
initialize: ({ config }: { config: UserpilotConfig }) => {
31-
Userpilot.initialize(config.token);
32+
if (isDev()) {
33+
const previewEnabled = localStorage.getItem('userpilot_ug_preview');
34+
if (previewEnabled !== null) {
35+
Userpilot.initialize(config.token);
36+
}
37+
} else {
38+
Userpilot.initialize(config.token);
39+
}
3240
},
3341
identify: ({ payload }: { payload: IIdentifyPayload }) => {
3442
const { userId, traits } = payload;
@@ -56,6 +64,6 @@ export default function userpilotPlugin(pluginSettings: UserpilotConfig) {
5664
Userpilot.track(event, { ...properties, userId });
5765
},
5866

59-
loaded: () => !!window.userpilot,
67+
loaded: () => true,
6068
};
6169
}

src/pages/Plan/hooks/usePlan.ts renamed to src/hooks/usePlan.ts

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,7 @@ import {
66
useGetCampaignsByCidQuery,
77
} from 'src/features/api';
88
import { useActiveWorkspace } from 'src/hooks/useActiveWorkspace';
9-
10-
export type PlanComposedStatusType =
11-
| 'UnquotedDraft'
12-
| 'PrequotedDraft'
13-
| 'PurchasableDraft'
14-
| 'Submitted'
15-
| 'OpsCheck'
16-
| 'AwaitingApproval'
17-
| 'Accepted'
18-
| 'RunningPlan'
19-
| 'AwaitingPayment'
20-
| 'Paying'
21-
| 'PurchasedPlan';
9+
import { PlanComposedStatusType } from 'src/types';
2210

2311
const usePlan = (planId?: string) => {
2412
const { activeWorkspace } = useActiveWorkspace();
@@ -119,7 +107,7 @@ const usePlan = (planId?: string) => {
119107
default:
120108
throw new Error(`Unknown plan status for plan: ${plan.id}`);
121109
}
122-
}, [plan, ci]);
110+
}, [plan, ci, planCampaign, planTemplate]);
123111

124112
if (!plan) {
125113
return {

src/hooks/usePlanStatusLabel.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { useTranslation } from 'react-i18next';
2+
import { PlanComposedStatusType } from 'src/types';
3+
4+
export const usePlanStatusLabel = ({
5+
planStatus,
6+
}: {
7+
planStatus?: PlanComposedStatusType;
8+
}): string => {
9+
const { t } = useTranslation();
10+
if (!planStatus) {
11+
return '';
12+
}
13+
const statusMap: Record<PlanComposedStatusType, string> = {
14+
UnquotedDraft: t('___PLAN_STATUS_UNQUOTED_DRAFT'),
15+
PrequotedDraft: t('___PLAN_STATUS_PREQUOTED_DRAFT'),
16+
PurchasableDraft: t('___PLAN_STATUS_PURCHASABLE_DRAFT'),
17+
Submitted: t('___PLAN_STATUS_SUBMITTED'),
18+
OpsCheck: t('___PLAN_STATUS_OPS_CHECK'),
19+
AwaitingApproval: t('___PLAN_STATUS_AWAITING_APPROVAL'),
20+
Accepted: t('___PLAN_STATUS_ACCEPTED'),
21+
RunningPlan: t('___PLAN_STATUS_RUNNING_PLAN'),
22+
AwaitingPayment: t('___PLAN_STATUS_AWAITING_PAYMENT'),
23+
Paying: t('___PLAN_STATUS_PAYING'),
24+
PurchasedPlan: t('___PLAN_STATUS_PURCHASED_PLAN'),
25+
};
26+
27+
return statusMap[`${planStatus}`];
28+
};

src/locales/en/translation.json

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,15 @@
11
{
2+
"___PLAN_STATUS_ACCEPTED": "Accepted",
3+
"___PLAN_STATUS_AWAITING_APPROVAL": "Waiting for you",
4+
"___PLAN_STATUS_AWAITING_PAYMENT": "Waiting for you",
5+
"___PLAN_STATUS_OPS_CHECK": "Under review",
6+
"___PLAN_STATUS_PAYING": "Ongoing Payment",
7+
"___PLAN_STATUS_PREQUOTED_DRAFT": "Draft",
8+
"___PLAN_STATUS_PURCHASABLE_DRAFT": "Draft",
9+
"___PLAN_STATUS_PURCHASED_PLAN": "Accepted",
10+
"___PLAN_STATUS_RUNNING_PLAN": "Running",
11+
"___PLAN_STATUS_SUBMITTED": "Under review",
12+
"___PLAN_STATUS_UNQUOTED_DRAFT": "Draft",
213
"__404_PAGE_BUTTON": "Back to home",
314
"__404_PAGE_DESCRIPTION": "Let’s find a better place for you to go.",
415
"__404_PAGE_SUB_TITLE MAX:80": "This page could have been removed or it’s unavailable.",
@@ -765,6 +776,7 @@
765776
"__PLAN_INSTRUCTION_NOTE_SIZE_ERROR_EMPTY": "Required field: enter a text to continue",
766777
"__PLAN_MISSING_MODULES_ERROR": "Some items are missing",
767778
"__PLAN_OUT_OF_SCOPE_SIZE_ERROR_TOO_LONG": "Character limit exceeded: Please reduce your text to 512 characters",
779+
"__PLAN_PAGE_ADD_CUSTOM_FEATURE_BUTTON": "Add custom features",
768780
"__PLAN_PAGE_ADD_MODULE_BLOCK_BUTTON": "Add item",
769781
"__PLAN_PAGE_ADD_MODULE_BLOCK_MODAL_SUBTITLE": "Provide the necessary details to describe this activity",
770782
"__PLAN_PAGE_ADD_MODULE_BLOCK_MODAL_TITLE": "Available informations",
@@ -783,6 +795,8 @@
783795
"__PLAN_PAGE_DRAFT_ACTIVITY_INFO_STARTING_PRICE_INFO": "*Adding features may require a custom quote",
784796
"__PLAN_PAGE_DRAFT_ACTIVITY_INFO_TEMPLATE_TYPE": "STANDARD PACKAGE",
785797
"__PLAN_PAGE_DRAFT_ACTIVITY_INFO_TITLE": "Activity Info",
798+
"__PLAN_PAGE_EXPERT_REVIEW_TOOLTIP_CONTENT": "Custom features require expert review (2 days) and personalized pricing. You can always return to the standard setup.",
799+
"__PLAN_PAGE_EXPERT_REVIEW_WARNING": "Requires expert review",
786800
"__PLAN_PAGE_GROUP_TITLE_ACTIVITY_SCOPE": "Activity Scope",
787801
"__PLAN_PAGE_GROUP_TITLE_ADDITIONAL_DETAILS": "Additional Details",
788802
"__PLAN_PAGE_GROUP_TITLE_ADVANCED_CRITERIA": "Other",
@@ -847,7 +861,7 @@
847861
"__PLAN_PAGE_MODULE_BANK_REMOVE_TOOLTIP_BUTTON": "Delete",
848862
"__PLAN_PAGE_MODULE_BANK_TITLE": "Select participant banking providers",
849863
"__PLAN_PAGE_MODULE_BROWSER_ALL_LABEL": "All browsers",
850-
"__PLAN_PAGE_MODULE_BROWSER_ALL_LABEL_HINT": "Users equally divided by browser",
864+
"__PLAN_PAGE_MODULE_BROWSER_ALL_LABEL_HINT": "Participants equally divided by browser",
851865
"__PLAN_PAGE_MODULE_BROWSER_LABEL": "Browser selection",
852866
"__PLAN_PAGE_MODULE_BROWSER_REMOVE_TOOLTIP_BUTTON": "Delete",
853867
"__PLAN_PAGE_MODULE_BROWSER_TITLE": "Choose the browser you want to include in the activity",
@@ -964,6 +978,7 @@
964978
"__PLAN_PAGE_MODULE_SETUP_NOTE_DESCRIPTION_EDITOR_PLACEHOLDER": "In this section, you can set up the manual to guide testers during the activity.",
965979
"__PLAN_PAGE_MODULE_SETUP_NOTE_REMOVE_TOOLTIP_BUTTON": "Delete",
966980
"__PLAN_PAGE_MODULE_SETUP_NOTE_TITLE": "Before starting",
981+
"__PLAN_PAGE_MODULE_TARGET_ALERT": "Custom participant numbers require expert review and may increase pricing",
967982
"__PLAN_PAGE_MODULE_TARGET_LABEL": "Enter number of participants",
968983
"__PLAN_PAGE_MODULE_TARGET_NOTE_BLOCK_TITLE": "Before Starting",
969984
"__PLAN_PAGE_MODULE_TARGET_NOTE_DESCRIPTION_EDITOR_HEADER_TITLE": "Write here",
@@ -1367,6 +1382,9 @@
13671382
"_CAMPAIGN_WIDGET_UX_USER_ANALYSIS_DESCRIPTION_HEADER": "There are observations on",
13681383
"_CAMPAIGN_WIDGET_UX_USER_ANALYSIS_HEADER": "Analyzed User Contributions",
13691384
"_PAGE_PROFILE_HEADER_TEXT": "Manage your profile anytime: check and update your personal information whenever you need.",
1385+
"_PLAN_CARD_LABEL_CONFIRM": "Confirm & Launch",
1386+
"_PLAN_CARD_LABEL_FINALIZE": "Finalize Activity",
1387+
"_PLAN_CARD_LABEL_LOOK": "Take a look",
13701388
"_PLAN_PAGE_MODULE_LANGUAGE_DESCRIPTION": "You’ll receive feedback in the language you’re selecting",
13711389
"_PLAN_PAGE_MODULE_LANGUAGE_SUBTITLE": "Select participants' preferred language",
13721390
"_PROJECT_PAGE_PLANS_GROUP_SEE_ALL": "View more",
@@ -1426,6 +1444,7 @@
14261444
"SIGNUP_FORM_EMAIL_IS_REQUIRED": "This field is required",
14271445
"SIGNUP_FORM_EMAIL_LABEL": "Work Email",
14281446
"SIGNUP_FORM_EMAIL_MUST_BE_A_VALID_EMAIL": "Oops! Check your email format",
1447+
"SIGNUP_FORM_EMAIL_MUST_BE_A_WORK_EMAIL": "Oops! It looks like a personal email. Please use your work email.",
14291448
"SIGNUP_FORM_EMAIL_PLACEHOLDER": "Insert Email",
14301449
"SIGNUP_FORM_GO_TO_STEP_2": "Create my account",
14311450
"SIGNUP_FORM_GO_TO_STEP_3": "Next",

src/locales/it/translation.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,15 @@
11
{
2+
"___PLAN_STATUS_ACCEPTED": "",
3+
"___PLAN_STATUS_AWAITING_APPROVAL": "",
4+
"___PLAN_STATUS_AWAITING_PAYMENT": "",
5+
"___PLAN_STATUS_OPS_CHECK": "",
6+
"___PLAN_STATUS_PAYING": "",
7+
"___PLAN_STATUS_PREQUOTED_DRAFT": "",
8+
"___PLAN_STATUS_PURCHASABLE_DRAFT": "",
9+
"___PLAN_STATUS_PURCHASED_PLAN": "",
10+
"___PLAN_STATUS_RUNNING_PLAN": "",
11+
"___PLAN_STATUS_SUBMITTED": "",
12+
"___PLAN_STATUS_UNQUOTED_DRAFT": "",
213
"__404_PAGE_BUTTON": "Torna alla dashboard",
314
"__404_PAGE_DESCRIPTION": "La direzione giusta ora è solo una.",
415
"__404_PAGE_SUB_TITLE MAX:80": "L'abbiamo cercata ovunque ma non è disponibile.",
@@ -795,6 +806,7 @@
795806
"__PLAN_INSTRUCTION_NOTE_SIZE_ERROR_EMPTY": "",
796807
"__PLAN_MISSING_MODULES_ERROR": "",
797808
"__PLAN_OUT_OF_SCOPE_SIZE_ERROR_TOO_LONG": "",
809+
"__PLAN_PAGE_ADD_CUSTOM_FEATURE_BUTTON": "",
798810
"__PLAN_PAGE_ADD_MODULE_BLOCK_BUTTON": "",
799811
"__PLAN_PAGE_ADD_MODULE_BLOCK_MODAL_SUBTITLE": "",
800812
"__PLAN_PAGE_ADD_MODULE_BLOCK_MODAL_TITLE": "",
@@ -813,6 +825,8 @@
813825
"__PLAN_PAGE_DRAFT_ACTIVITY_INFO_STARTING_PRICE_INFO": "",
814826
"__PLAN_PAGE_DRAFT_ACTIVITY_INFO_TEMPLATE_TYPE": "",
815827
"__PLAN_PAGE_DRAFT_ACTIVITY_INFO_TITLE": "",
828+
"__PLAN_PAGE_EXPERT_REVIEW_TOOLTIP_CONTENT": "",
829+
"__PLAN_PAGE_EXPERT_REVIEW_WARNING": "",
816830
"__PLAN_PAGE_GROUP_TITLE_ACTIVITY_SCOPE": "",
817831
"__PLAN_PAGE_GROUP_TITLE_ADDITIONAL_DETAILS": "",
818832
"__PLAN_PAGE_GROUP_TITLE_ADVANCED_CRITERIA": "",
@@ -997,6 +1011,7 @@
9971011
"__PLAN_PAGE_MODULE_SETUP_NOTE_DESCRIPTION_EDITOR_PLACEHOLDER": "",
9981012
"__PLAN_PAGE_MODULE_SETUP_NOTE_REMOVE_TOOLTIP_BUTTON": "",
9991013
"__PLAN_PAGE_MODULE_SETUP_NOTE_TITLE": "",
1014+
"__PLAN_PAGE_MODULE_TARGET_ALERT": "",
10001015
"__PLAN_PAGE_MODULE_TARGET_LABEL": "",
10011016
"__PLAN_PAGE_MODULE_TARGET_NOTE_BLOCK_TITLE": "",
10021017
"__PLAN_PAGE_MODULE_TARGET_NOTE_DESCRIPTION_EDITOR_HEADER_TITLE": "",
@@ -1409,6 +1424,9 @@
14091424
"_CAMPAIGN_WIDGET_UX_USER_ANALYSIS_DESCRIPTION_HEADER": "Hai aggiunto osservazioni su",
14101425
"_CAMPAIGN_WIDGET_UX_USER_ANALYSIS_HEADER": "Contributi utente analizzati",
14111426
"_PAGE_PROFILE_HEADER_TEXT": "",
1427+
"_PLAN_CARD_LABEL_CONFIRM": "",
1428+
"_PLAN_CARD_LABEL_FINALIZE": "",
1429+
"_PLAN_CARD_LABEL_LOOK": "",
14121430
"_PLAN_PAGE_MODULE_LANGUAGE_DESCRIPTION": "",
14131431
"_PLAN_PAGE_MODULE_LANGUAGE_SUBTITLE": "",
14141432
"_PROJECT_PAGE_PLANS_GROUP_SEE_ALL": "Vedi tutti",
@@ -1470,6 +1488,7 @@
14701488
"SIGNUP_FORM_EMAIL_IS_REQUIRED": "",
14711489
"SIGNUP_FORM_EMAIL_LABEL": "",
14721490
"SIGNUP_FORM_EMAIL_MUST_BE_A_VALID_EMAIL": "",
1491+
"SIGNUP_FORM_EMAIL_MUST_BE_A_WORK_EMAIL": "",
14731492
"SIGNUP_FORM_EMAIL_PLACEHOLDER": "",
14741493
"SIGNUP_FORM_GO_TO_STEP_2": "",
14751494
"SIGNUP_FORM_GO_TO_STEP_3": "",

src/pages/Dashboard/PlanCard.tsx

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import { PlanCard as UGPlanCard } from '@appquality/unguess-design-system';
2+
import { get } from 'http';
3+
import { useTranslation } from 'react-i18next';
4+
import { useNavigate } from 'react-router-dom';
5+
import { GetWorkspacesByWidPlansApiResponse } from 'src/features/api';
6+
import { usePlan } from 'src/hooks/usePlan';
7+
import { usePlanStatusLabel } from 'src/hooks/usePlanStatusLabel';
8+
import { PlanComposedStatusType } from 'src/types';
9+
10+
export const PlanCard = ({
11+
plan,
12+
}: {
13+
plan: GetWorkspacesByWidPlansApiResponse[number];
14+
}) => {
15+
const { planComposedStatus } = usePlan(plan.id.toString());
16+
const { t } = useTranslation();
17+
const statusLabel = usePlanStatusLabel({ planStatus: planComposedStatus });
18+
const navigate = useNavigate();
19+
const navigateToPlan = () => {
20+
navigate(`/plans/${plan.id}`);
21+
};
22+
23+
const getPlanLabel = (planStatus?: PlanComposedStatusType) => {
24+
switch (planStatus) {
25+
case 'PurchasableDraft':
26+
case 'UnquotedDraft':
27+
case 'PrequotedDraft':
28+
return t('_PLAN_CARD_LABEL_FINALIZE');
29+
case 'Submitted':
30+
case 'OpsCheck':
31+
case 'Paying':
32+
return t('_PLAN_CARD_LABEL_LOOK');
33+
case 'AwaitingPayment':
34+
case 'AwaitingApproval':
35+
return t('_PLAN_CARD_LABEL_CONFIRM');
36+
default:
37+
return '';
38+
}
39+
};
40+
return (
41+
<UGPlanCard
42+
status={planComposedStatus}
43+
i18n={{ statusLabel, planLabel: getPlanLabel(planComposedStatus) }}
44+
onClick={navigateToPlan}
45+
>
46+
<UGPlanCard.ProjectLabel>{plan.project.title}</UGPlanCard.ProjectLabel>
47+
<UGPlanCard.Title>{plan.title}</UGPlanCard.Title>
48+
</UGPlanCard>
49+
);
50+
};

0 commit comments

Comments
 (0)