refactor: Personalization tweaks (#3813)

* update survey

* add usage modes

* update recommended

* update key

* update key

* fix text cut off issue

* delete dulicate

* update placeholder

* clean up keys

* fix label
This commit is contained in:
Mutasem Aldmour 2022-08-03 13:02:46 +02:00 committed by GitHub
parent d65a9ed118
commit 7240aa38a3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 187 additions and 110682 deletions

110470
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -523,12 +523,30 @@ export type IPersonalizationSurveyAnswersV2 = {
companyIndustryExtended?: string[] | null;
companySize?: string | null;
companyType?: string | null;
customerType?: string | null;
mspFocus?: string[] | null;
mspFocusOther?: string | null;
otherAutomationGoal?: string | null;
otherCompanyIndustryExtended?: string[] | null;
};
export type IPersonalizationSurveyAnswersV3 = {
version: 'v3';
automationGoal?: string | null;
otherAutomationGoal?: string | null;
companyIndustryExtended?: string[] | null;
otherCompanyIndustryExtended?: string[] | null;
companySize?: string | null;
companyType?: string | null;
automationGoalSm?: string[] | null;
automationGoalSmOther?: string | null;
usageModes?: string[] | null;
};
export type IPersonalizationLatestVersion = IPersonalizationSurveyAnswersV3;
export type IPersonalizationSurveyVersions = IPersonalizationSurveyAnswersV1 | IPersonalizationSurveyAnswersV2 | IPersonalizationSurveyAnswersV3;
export type IRole = 'default' | 'owner' | 'member';
export interface IUserResponse {
@ -541,7 +559,7 @@ export interface IUserResponse {
id: string;
createdAt: Date;
};
personalizationAnswers?: IPersonalizationSurveyAnswersV1 | IPersonalizationSurveyAnswersV2 | null;
personalizationAnswers?: IPersonalizationSurveyVersions | null;
isPending: boolean;
}

View file

@ -1,6 +1,6 @@
import { IInviteResponse, IOnboardingCallPromptResponse, IPersonalizationSurveyAnswersV2, IRestApiContext, IUserResponse } from '@/Interface';
import { IInviteResponse, IPersonalizationLatestVersion, IRestApiContext, IUserResponse } from '@/Interface';
import { IDataObject } from 'n8n-workflow';
import { get, makeRestApiRequest } from './helpers';
import { makeRestApiRequest } from './helpers';
export function loginCurrentUser(context: IRestApiContext): Promise<IUserResponse | null> {
return makeRestApiRequest(context, 'GET', '/login');
@ -71,6 +71,6 @@ export async function reinvite(context: IRestApiContext, {id}: {id: string}): Pr
await makeRestApiRequest(context, 'POST', `/users/${id}/reinvite`);
}
export async function submitPersonalizationSurvey(context: IRestApiContext, params: IPersonalizationSurveyAnswersV2): Promise<void> {
export async function submitPersonalizationSurvey(context: IRestApiContext, params: IPersonalizationLatestVersion): Promise<void> {
await makeRestApiRequest(context, 'POST', '/me/survey', params as unknown as IDataObject);
}

View file

@ -47,7 +47,7 @@
<script lang="ts">
import mixins from 'vue-typed-mixins';
const SURVEY_VERSION = 'v2';
const SURVEY_VERSION = 'v3';
import {
CODING_SKILL_KEY,
@ -64,7 +64,7 @@ import {
OTHER_INDUSTRY_OPTION,
PERSONALIZATION_MODAL_KEY,
SECURITY_INDUSTRY,
EDUCATION_INDUSTRY,
EDUCATION_TYPE,
FINANCE_INSURANCE_INDUSTRY,
IT_INDUSTRY,
MARKETING_INDUSTRY,
@ -76,6 +76,7 @@ import {
AUTOMATION_GOAL_KEY,
CUSTOMER_INTEGRATIONS_GOAL,
CUSTOMER_SUPPORT_GOAL,
ENGINEERING_GOAL,
FINANCE_ACCOUNTING_GOAL,
HR_GOAL,
OPERATIONS_GOAL,
@ -86,36 +87,36 @@ import {
NOT_SURE_YET_GOAL,
AUTOMATION_GOAL_OTHER_KEY,
COMPANY_TYPE_KEY,
CUSTOMER_TYPE_KEY,
MSP_FOCUS_KEY,
MSP_FOCUS_OTHER_KEY,
SAAS_COMPANY_TYPE,
ECOMMERCE_COMPANY_TYPE,
MSP_COMPANY_TYPE,
MSP_INDUSTRY,
DIGITAL_AGENCY_COMPANY_TYPE,
AUTOMATION_AGENCY_COMPANY_TYPE,
SYSTEMS_INTEGRATOR_COMPANY_TYPE,
OTHER_COMPANY_TYPE,
PERSONAL_COMPANY_TYPE,
INDIVIDUAL_CUSTOMER_TYPE,
SMALL_CUSTOMER_TYPE,
MEDIUM_CUSTOMER_TYPE,
LARGE_CUSTOMER_TYPE,
CLOUD_INFRA_FOCUS,
IT_SUPPORT_FOCUS,
NETWORKING_COMMUNICATION_FOCUS,
SECURITY_FOCUS,
OTHER_FOCUS,
COMPANY_INDUSTRY_EXTENDED_KEY,
OTHER_COMPANY_INDUSTRY_EXTENDED_KEY,
ONBOARDING_PROMPT_TIMEBOX,
FIRST_ONBOARDING_PROMPT_TIMEOUT,
ONBOARDING_CALL_SIGNUP_MODAL_KEY,
MARKETING_AUTOMATION_GOAL_KEY,
MARKETING_AUTOMATION_LEAD_GENERATION_GOAL,
MARKETING_AUTOMATION_CUSTOMER_COMMUNICATION,
MARKETING_AUTOMATION_ACTIONS,
MARKETING_AUTOMATION_AD_CAMPAIGN,
MARKETING_AUTOMATION_REPORTING,
MARKETING_AUTOMATION_DATA_SYNCHING,
MARKETING_AUTOMATION_OTHER,
OTHER_MARKETING_AUTOMATION_GOAL_KEY,
USAGE_MODE_KEY,
USAGE_MODE_MANIPULATE_FILES,
USAGE_MODE_BUILD_BE_SERVICES,
USAGE_MODE_CONNECT_TO_PRODUCT,
} from '../constants';
import { workflowHelpers } from '@/components/mixins/workflowHelpers';
import { showMessage } from '@/components/mixins/showMessage';
import Modal from './Modal.vue';
import { IFormInput, IFormInputs, IPersonalizationSurveyAnswersV2 } from '@/Interface';
import { IFormInputs, IPersonalizationLatestVersion } from '@/Interface';
import Vue from 'vue';
import { mapGetters } from 'vuex';
import { getAccountAge } from '@/modules/userHelpers';
@ -147,42 +148,6 @@ export default mixins(showMessage, workflowHelpers).extend({
]),
survey() {
const survey: IFormInputs = [
{
name: CODING_SKILL_KEY,
properties: {
label: this.$locale.baseText('personalizationModal.howAreYourCodingSkills'),
type: 'select',
placeholder: this.$locale.baseText('personalizationModal.select'),
options: [
{
label: this.$locale.baseText('personalizationModal.neverCoded'),
value: '0',
},
{
label: this.$locale.baseText(
'personalizationModal.iGetStuckTooQuicklyToAchieveMuch',
),
value: '1',
},
{
label: this.$locale.baseText('personalizationModal.iCanCodeSomeUsefulThingsBut'),
value: '2',
},
{
label: this.$locale.baseText('personalizationModal.iKnowEnoughToBeDangerousBut'),
value: '3',
},
{
label: this.$locale.baseText('personalizationModal.iCanFigureMostThingsOut'),
value: '4',
},
{
label: this.$locale.baseText('personalizationModal.iCanDoAlmostAnythingIWant'),
value: '5',
},
],
},
},
{
name: COMPANY_TYPE_KEY,
properties: {
@ -198,22 +163,19 @@ export default mixins(showMessage, workflowHelpers).extend({
label: this.$locale.baseText('personalizationModal.eCommerce'),
value: ECOMMERCE_COMPANY_TYPE,
},
{
label: this.$locale.baseText('personalizationModal.managedServiceProvider'),
value: MSP_COMPANY_TYPE,
},
{
label: this.$locale.baseText('personalizationModal.digitalAgencyOrConsultant'),
value: DIGITAL_AGENCY_COMPANY_TYPE,
},
{
label: this.$locale.baseText('personalizationModal.automationAgencyOrConsultant'),
value: AUTOMATION_AGENCY_COMPANY_TYPE,
},
{
label: this.$locale.baseText('personalizationModal.systemsIntegrator'),
value: SYSTEMS_INTEGRATOR_COMPANY_TYPE,
},
{
value: EDUCATION_TYPE,
label: this.$locale.baseText('personalizationModal.education'),
},
{
label: this.$locale.baseText('personalizationModal.other'),
value: OTHER_COMPANY_TYPE,
@ -225,85 +187,6 @@ export default mixins(showMessage, workflowHelpers).extend({
],
},
},
{
name: CUSTOMER_TYPE_KEY,
shouldDisplay(values): boolean {
const companyType = (values as IPersonalizationSurveyAnswersV2)[COMPANY_TYPE_KEY];
return (
!!companyType && ![ OTHER_COMPANY_TYPE, PERSONAL_COMPANY_TYPE, ECOMMERCE_COMPANY_TYPE, MSP_COMPANY_TYPE].includes(companyType)
);
},
properties: {
label: this.$locale.baseText('personalizationModal.whatKindOfCustomersDoYouServe'),
type: 'select',
placeholder: this.$locale.baseText('personalizationModal.select'),
options: [
{
label: this.$locale.baseText('personalizationModal.individualConsumers'),
value: INDIVIDUAL_CUSTOMER_TYPE,
},
{
label: this.$locale.baseText('personalizationModal.smallBusinesses'),
value: SMALL_CUSTOMER_TYPE,
},
{
label: this.$locale.baseText('personalizationModal.mediumBusinesses'),
value: MEDIUM_CUSTOMER_TYPE,
},
{
label: this.$locale.baseText('personalizationModal.largeBusinesses'),
value: LARGE_CUSTOMER_TYPE,
},
],
},
},
{
name: MSP_FOCUS_KEY,
shouldDisplay(values): boolean {
const companyType = (values as IPersonalizationSurveyAnswersV2)[COMPANY_TYPE_KEY];
return companyType === MSP_COMPANY_TYPE;
},
properties: {
label: this.$locale.baseText('personalizationModal.whatDoesYourCompanyFocusOn'),
type: 'multi-select',
placeholder: this.$locale.baseText('personalizationModal.select'),
options: [
{
label: this.$locale.baseText('personalizationModal.cloudInfrastructure'),
value: CLOUD_INFRA_FOCUS,
},
{
label: this.$locale.baseText('personalizationModal.itSupport'),
value: IT_SUPPORT_FOCUS,
},
{
label: this.$locale.baseText('personalizationModal.networkingOrCommunication'),
value: NETWORKING_COMMUNICATION_FOCUS,
},
{
label: this.$locale.baseText('personalizationModal.security'),
value: SECURITY_FOCUS,
},
{
label: this.$locale.baseText('personalizationModal.otherPleaseSpecify'),
value: OTHER_FOCUS,
},
],
},
},
{
name: MSP_FOCUS_OTHER_KEY,
properties: {
placeholder: this.$locale.baseText(
'personalizationModal.pleaseSpecifyYourCompanyFocus',
),
},
shouldDisplay(values): boolean {
const companyType = (values as IPersonalizationSurveyAnswersV2)[COMPANY_TYPE_KEY];
const mspFocus = (values as IPersonalizationSurveyAnswersV2)[MSP_FOCUS_KEY];
return companyType === MSP_COMPANY_TYPE && !!mspFocus && mspFocus.includes(OTHER_FOCUS);
},
},
{
name: COMPANY_INDUSTRY_EXTENDED_KEY,
properties: {
@ -311,10 +194,6 @@ export default mixins(showMessage, workflowHelpers).extend({
label: this.$locale.baseText('personalizationModal.whichIndustriesIsYourCompanyIn'),
placeholder: this.$locale.baseText('personalizationModal.select'),
options: [
{
value: EDUCATION_INDUSTRY,
label: this.$locale.baseText('personalizationModal.education'),
},
{
value: FINANCE_INSURANCE_INDUSTRY,
label: this.$locale.baseText('personalizationModal.financeOrInsurance'),
@ -335,6 +214,10 @@ export default mixins(showMessage, workflowHelpers).extend({
value: LEGAL_INDUSTRY,
label: this.$locale.baseText('personalizationModal.legal'),
},
{
value: MSP_INDUSTRY,
label: this.$locale.baseText('personalizationModal.managedServiceProvider'),
},
{
value: MARKETING_INDUSTRY,
label: this.$locale.baseText('personalizationModal.marketing'),
@ -370,7 +253,7 @@ export default mixins(showMessage, workflowHelpers).extend({
],
},
shouldDisplay(values): boolean {
const companyType = (values as IPersonalizationSurveyAnswersV2)[COMPANY_TYPE_KEY];
const companyType = (values as IPersonalizationLatestVersion)[COMPANY_TYPE_KEY];
return companyType === OTHER_COMPANY_TYPE;
},
},
@ -380,8 +263,8 @@ export default mixins(showMessage, workflowHelpers).extend({
placeholder: this.$locale.baseText('personalizationModal.specifyYourCompanysIndustry'),
},
shouldDisplay(values): boolean {
const companyType = (values as IPersonalizationSurveyAnswersV2)[COMPANY_TYPE_KEY];
const companyIndustry = (values as IPersonalizationSurveyAnswersV2)[COMPANY_INDUSTRY_EXTENDED_KEY];
const companyType = (values as IPersonalizationLatestVersion)[COMPANY_TYPE_KEY];
const companyIndustry = (values as IPersonalizationLatestVersion)[COMPANY_INDUSTRY_EXTENDED_KEY];
return companyType === OTHER_COMPANY_TYPE && !!companyIndustry && companyIndustry.includes(OTHER_INDUSTRY_OPTION);
},
},
@ -400,6 +283,10 @@ export default mixins(showMessage, workflowHelpers).extend({
value: CUSTOMER_SUPPORT_GOAL,
label: this.$locale.baseText('personalizationModal.customerSupport'),
},
{
value: ENGINEERING_GOAL,
label: this.$locale.baseText('personalizationModal.engineeringOrDevops'),
},
{
value: FINANCE_ACCOUNTING_GOAL,
label: this.$locale.baseText('personalizationModal.financeOrAccounting'),
@ -435,7 +322,7 @@ export default mixins(showMessage, workflowHelpers).extend({
],
},
shouldDisplay(values): boolean {
const companyType = (values as IPersonalizationSurveyAnswersV2)[COMPANY_TYPE_KEY];
const companyType = (values as IPersonalizationLatestVersion)[COMPANY_TYPE_KEY];
return companyType !== PERSONAL_COMPANY_TYPE;
},
},
@ -445,11 +332,85 @@ export default mixins(showMessage, workflowHelpers).extend({
placeholder: this.$locale.baseText('personalizationModal.specifyYourAutomationGoal'),
},
shouldDisplay(values): boolean {
const companyType = (values as IPersonalizationSurveyAnswersV2)[COMPANY_TYPE_KEY];
const automationGoal = (values as IPersonalizationSurveyAnswersV2)[AUTOMATION_GOAL_KEY];
const companyType = (values as IPersonalizationLatestVersion)[COMPANY_TYPE_KEY];
const automationGoal = (values as IPersonalizationLatestVersion)[AUTOMATION_GOAL_KEY];
return companyType !== PERSONAL_COMPANY_TYPE && automationGoal === OTHER_AUTOMATION_GOAL;
},
},
{
name: MARKETING_AUTOMATION_GOAL_KEY,
properties: {
type: 'multi-select',
label: this.$locale.baseText('personalizationModal.specifySalesMarketingGoal'),
placeholder: this.$locale.baseText('personalizationModal.select'),
options: [
{
label: this.$locale.baseText('personalizationModal.leadGeneration'),
value: MARKETING_AUTOMATION_LEAD_GENERATION_GOAL,
},
{
label: this.$locale.baseText('personalizationModal.customerCommunication'),
value: MARKETING_AUTOMATION_CUSTOMER_COMMUNICATION,
},
{
label: this.$locale.baseText('personalizationModal.customerActions'),
value: MARKETING_AUTOMATION_ACTIONS,
},
{
label: this.$locale.baseText('personalizationModal.adCampaign'),
value: MARKETING_AUTOMATION_AD_CAMPAIGN,
},
{
label: this.$locale.baseText('personalizationModal.reporting'),
value: MARKETING_AUTOMATION_REPORTING,
},
{
label: this.$locale.baseText('personalizationModal.dataSynching'),
value: MARKETING_AUTOMATION_DATA_SYNCHING,
},
{
label: this.$locale.baseText('personalizationModal.other'),
value: MARKETING_AUTOMATION_OTHER,
},
],
},
shouldDisplay(values): boolean {
const goal = (values as IPersonalizationLatestVersion)[AUTOMATION_GOAL_KEY];
return goal === SALES_MARKETING_GOAL;
},
},
{
name: OTHER_MARKETING_AUTOMATION_GOAL_KEY,
properties: {
placeholder: this.$locale.baseText('personalizationModal.specifyOtherSalesAndMarketingGoal'),
},
shouldDisplay(values): boolean {
const goals = (values as IPersonalizationLatestVersion)[MARKETING_AUTOMATION_GOAL_KEY];
return !!goals && goals.includes(MARKETING_AUTOMATION_OTHER);
},
},
{
name: USAGE_MODE_KEY,
properties: {
type: 'multi-select',
label: this.$locale.baseText('personalizationModal.specifyUsageMode'),
placeholder: this.$locale.baseText('personalizationModal.select'),
options: [
{
label: this.$locale.baseText('personalizationModal.connectToOwnProduct'),
value: USAGE_MODE_CONNECT_TO_PRODUCT,
},
{
label: this.$locale.baseText('personalizationModal.buildBackendServices'),
value: USAGE_MODE_BUILD_BE_SERVICES,
},
{
label: this.$locale.baseText('personalizationModal.manipulateFiles'),
value: USAGE_MODE_MANIPULATE_FILES,
},
],
},
},
{
name: COMPANY_SIZE_KEY,
properties: {
@ -484,7 +445,7 @@ export default mixins(showMessage, workflowHelpers).extend({
],
},
shouldDisplay(values): boolean {
const companyType = (values as IPersonalizationSurveyAnswersV2)[COMPANY_TYPE_KEY];
const companyType = (values as IPersonalizationLatestVersion)[COMPANY_TYPE_KEY];
return companyType !== PERSONAL_COMPANY_TYPE;
},
},
@ -500,7 +461,7 @@ export default mixins(showMessage, workflowHelpers).extend({
onSave() {
this.formBus.$emit('submit');
},
async onSubmit(values: IPersonalizationSurveyAnswersV2): Promise<void> {
async onSubmit(values: IPersonalizationLatestVersion): Promise<void> {
this.$data.isSaving = true;
try {

View file

@ -147,6 +147,7 @@ export const REQUEST_NODE_FORM_URL = 'https://n8n-community.typeform.com/to/K1fB
export const INSTANCE_ID_HEADER = 'n8n-instance-id';
export const WAIT_TIME_UNLIMITED = '3000-01-01T00:00:00.000Z';
/** PERSONALIZATION SURVEY */
export const WORK_AREA_KEY = 'workArea';
export const FINANCE_WORK_AREA = 'finance';
export const IT_ENGINEERING_WORK_AREA = 'IT-Engineering';
@ -157,30 +158,15 @@ export const SECURITY_WORK_AREA = 'security';
export const COMPANY_TYPE_KEY = 'companyType';
export const SAAS_COMPANY_TYPE = 'saas';
export const ECOMMERCE_COMPANY_TYPE = 'ecommerce';
export const EDUCATION_TYPE = 'education';
export const MSP_COMPANY_TYPE = 'msp';
export const DIGITAL_AGENCY_COMPANY_TYPE = 'digital-agency';
export const AUTOMATION_AGENCY_COMPANY_TYPE = 'automation-agency';
export const SYSTEMS_INTEGRATOR_COMPANY_TYPE = 'systems-integrator';
export const OTHER_COMPANY_TYPE = 'other';
export const PERSONAL_COMPANY_TYPE = 'personal';
export const CUSTOMER_TYPE_KEY = 'customerType';
export const INDIVIDUAL_CUSTOMER_TYPE = 'individual';
export const SMALL_CUSTOMER_TYPE = 'small';
export const MEDIUM_CUSTOMER_TYPE = 'medium';
export const LARGE_CUSTOMER_TYPE = 'large';
export const MSP_FOCUS_KEY = 'mspFocus';
export const MSP_FOCUS_OTHER_KEY = 'mspFocusOther';
export const CLOUD_INFRA_FOCUS = 'cloud-infra';
export const IT_SUPPORT_FOCUS = 'it-support';
export const NETWORKING_COMMUNICATION_FOCUS = 'networking-communication';
export const SECURITY_FOCUS = 'security';
export const OTHER_FOCUS = 'other';
export const COMPANY_INDUSTRY_EXTENDED_KEY = 'companyIndustryExtended';
export const OTHER_COMPANY_INDUSTRY_EXTENDED_KEY = 'otherCompanyIndustryExtended';
export const EDUCATION_INDUSTRY = 'education';
export const PHYSICAL_RETAIL_OR_SERVICES = 'physical-retail-or-services';
export const REAL_ESTATE_OR_CONSTRUCTION = 'real-estate-or-construction';
export const GOVERNMENT_INDUSTRY = 'government';
@ -188,6 +174,7 @@ export const LEGAL_INDUSTRY = 'legal-industry';
export const MARKETING_INDUSTRY = 'marketing-industry';
export const MEDIA_INDUSTRY = 'media-industry';
export const MANUFACTURING_INDUSTRY = 'manufacturing-industry';
export const MSP_INDUSTRY = 'msp';
export const HEALTHCARE_INDUSTRY= 'healthcare';
export const FINANCE_INSURANCE_INDUSTRY = 'finance-insurance-industry';
export const IT_INDUSTRY = 'it-industry';
@ -203,12 +190,29 @@ export const COMPANY_SIZE_500_999 = '500-999';
export const COMPANY_SIZE_1000_OR_MORE = '1000+';
export const COMPANY_SIZE_PERSONAL_USE = 'personalUser';
export const MARKETING_AUTOMATION_GOAL_KEY = 'automationGoalSm';
export const MARKETING_AUTOMATION_LEAD_GENERATION_GOAL = 'lead-generation';
export const MARKETING_AUTOMATION_CUSTOMER_COMMUNICATION = 'customer-communication';
export const MARKETING_AUTOMATION_ACTIONS = 'actions';
export const MARKETING_AUTOMATION_AD_CAMPAIGN = 'ad-campaign';
export const MARKETING_AUTOMATION_REPORTING = 'reporting';
export const MARKETING_AUTOMATION_DATA_SYNCHING = 'data-syncing';
export const MARKETING_AUTOMATION_OTHER = 'other';
export const OTHER_MARKETING_AUTOMATION_GOAL_KEY = 'automationGoalSmOther';
export const CODING_SKILL_KEY = 'codingSkill';
export const USAGE_MODE_KEY = 'usageModes';
export const USAGE_MODE_CONNECT_TO_PRODUCT = 'connect-to-Product';
export const USAGE_MODE_BUILD_BE_SERVICES = 'build-be-services';
export const USAGE_MODE_MANIPULATE_FILES = 'manipulate-files';
export const AUTOMATION_GOAL_KEY = 'automationGoal';
export const AUTOMATION_GOAL_OTHER_KEY = 'otherAutomationGoal';
export const CUSTOMER_INTEGRATIONS_GOAL = 'customer-integrations';
export const CUSTOMER_SUPPORT_GOAL = 'customer-support';
export const ENGINEERING_GOAL = 'engineering';
export const FINANCE_ACCOUNTING_GOAL = 'finance-accounting';
export const HR_GOAL = 'hr';
export const OPERATIONS_GOAL = 'operations';
@ -218,6 +222,8 @@ export const SECURITY_GOAL = 'security';
export const OTHER_AUTOMATION_GOAL = 'other';
export const NOT_SURE_YET_GOAL = 'not-sure-yet';
/** END OF PERSONALIZATION SURVEY */
export const MODAL_CANCEL = 'cancel';
export const MODAL_CLOSE = 'close';
export const MODAL_CONFIRMED = 'confirmed';

View file

@ -1,9 +1,13 @@
import { CALENDLY_TRIGGER_NODE_TYPE, CLEARBIT_NODE_TYPE, COMPANY_SIZE_1000_OR_MORE, COMPANY_SIZE_500_999, CRON_NODE_TYPE, ELASTIC_SECURITY_NODE_TYPE, EMAIL_SEND_NODE_TYPE, EXECUTE_COMMAND_NODE_TYPE, FINANCE_WORK_AREA, FUNCTION_NODE_TYPE, GITHUB_TRIGGER_NODE_TYPE, HTTP_REQUEST_NODE_TYPE, IF_NODE_TYPE, ITEM_LISTS_NODE_TYPE, IT_ENGINEERING_WORK_AREA, JIRA_TRIGGER_NODE_TYPE, MICROSOFT_EXCEL_NODE_TYPE, MICROSOFT_TEAMS_NODE_TYPE, PAGERDUTY_NODE_TYPE, PRODUCT_WORK_AREA, QUICKBOOKS_NODE_TYPE, SALESFORCE_NODE_TYPE, SALES_BUSINESSDEV_WORK_AREA, SECURITY_WORK_AREA, SEGMENT_NODE_TYPE, SET_NODE_TYPE, SLACK_NODE_TYPE, SPREADSHEET_FILE_NODE_TYPE, SWITCH_NODE_TYPE, WEBHOOK_NODE_TYPE, XERO_NODE_TYPE, COMPANY_SIZE_KEY, WORK_AREA_KEY, CODING_SKILL_KEY, COMPANY_TYPE_KEY, ECOMMERCE_COMPANY_TYPE, MSP_COMPANY_TYPE, PERSONAL_COMPANY_TYPE, AUTOMATION_GOAL_KEY, OTHER_AUTOMATION_GOAL, NOT_SURE_YET_GOAL, CUSTOMER_INTEGRATIONS_GOAL, CUSTOMER_SUPPORT_GOAL, FINANCE_ACCOUNTING_GOAL, ZENDESK_TRIGGER_NODE_TYPE, WOOCOMMERCE_TRIGGER_NODE_TYPE, SALES_MARKETING_GOAL, HUBSPOT_TRIGGER_NODE_TYPE, HR_GOAL, WORKABLE_TRIGGER_NODE_TYPE, OPERATIONS_GOAL, PRODUCT_GOAL, NOTION_TRIGGER_NODE_TYPE, SECURITY_GOAL, THE_HIVE_TRIGGER_NODE_TYPE, ZENDESK_NODE_TYPE, SERVICENOW_NODE_TYPE, JIRA_NODE_TYPE, BAMBOO_HR_NODE_TYPE, GOOGLE_SHEETS_NODE_TYPE } from '@/constants';
import { IPermissions, IPersonalizationSurveyAnswersV1, IPersonalizationSurveyAnswersV2, IRootState, IUser } from '@/Interface';
import { IPermissions, IPersonalizationSurveyAnswersV1, IPersonalizationSurveyAnswersV2, IPersonalizationSurveyAnswersV3, IPersonalizationSurveyVersions, IUser } from '@/Interface';
import { ILogInStatus, IRole, IUserPermissions } from "@/Interface";
function isPersonalizationV2OrV3(data: IPersonalizationSurveyVersions): data is IPersonalizationSurveyAnswersV2 | IPersonalizationSurveyAnswersV3 {
return "version" in data;
}
export const ROLE: {Owner: IRole, Member: IRole, Default: IRole} = {
Owner: 'owner',
Member: 'member',
@ -95,17 +99,16 @@ export const isAuthorized = (permissions: IPermissions, currentUser: IUser | nul
return false;
};
export function getPersonalizedNodeTypes(answers: IPersonalizationSurveyAnswersV1 | IPersonalizationSurveyAnswersV2 | null): string[] {
export function getPersonalizedNodeTypes(answers: IPersonalizationSurveyAnswersV1 | IPersonalizationSurveyAnswersV2 | IPersonalizationSurveyAnswersV3 | null): string[] {
if (!answers) {
return [];
}
// @ts-ignore
if (answers.version === 'v2') {
return getPersonalizationV2(answers as IPersonalizationSurveyAnswersV2);
if (isPersonalizationV2OrV3(answers)) {
return getPersonalizationV2(answers);
}
return getPersonalizationV1(answers as IPersonalizationSurveyAnswersV1);
return getPersonalizationV1(answers);
}
export function getAccountAge(currentUser: IUser): number {
@ -118,7 +121,7 @@ export function getAccountAge(currentUser: IUser): number {
return -1;
}
function getPersonalizationV2(answers: IPersonalizationSurveyAnswersV2) {
function getPersonalizationV2(answers: IPersonalizationSurveyAnswersV2 | IPersonalizationSurveyAnswersV3) {
let nodeTypes: string[] = [];
const {version, ...data} = answers;
@ -131,7 +134,7 @@ function getPersonalizationV2(answers: IPersonalizationSurveyAnswersV2) {
const automationGoal = answers[AUTOMATION_GOAL_KEY];
let codingSkill = null;
if (answers[CODING_SKILL_KEY]) {
if (CODING_SKILL_KEY in answers && answers[CODING_SKILL_KEY]) {
codingSkill = parseInt(answers[CODING_SKILL_KEY] as string, 10);
codingSkill = isNaN(codingSkill)? 0 : codingSkill;
}

View file

@ -22,9 +22,8 @@ import {
import Vue from 'vue';
import { ActionContext, Module } from 'vuex';
import {
IPermissions,
IInviteResponse,
IPersonalizationSurveyAnswersV2,
IPersonalizationLatestVersion,
IRootState,
IUser,
IUserResponse,
@ -70,7 +69,7 @@ const module: Module<IUsersState, IRootState> = {
deleteUser: (state: IUsersState, userId: string) => {
Vue.delete(state.users, userId);
},
setPersonalizationAnswers(state: IUsersState, answers: IPersonalizationSurveyAnswersV2) {
setPersonalizationAnswers(state: IUsersState, answers: IPersonalizationLatestVersion) {
if (!state.currentUserId) {
return;
}
@ -201,7 +200,7 @@ const module: Module<IUsersState, IRootState> = {
async reinviteUser(context: ActionContext<IUsersState, IRootState>, params: {id: string}) {
await reinvite(context.rootGetters.getRestApiContext, params);
},
async submitPersonalizationSurvey(context: ActionContext<IUsersState, IRootState>, results: IPersonalizationSurveyAnswersV2) {
async submitPersonalizationSurvey(context: ActionContext<IUsersState, IRootState>, results: IPersonalizationLatestVersion) {
await submitPersonalizationSurvey(context.rootGetters.getRestApiContext, results);
context.commit('setPersonalizationAnswers', results);

View file

@ -607,18 +607,15 @@
"parameterInputList.delete": "Delete",
"parameterInputList.deleteParameter": "Delete Parameter",
"parameterInputList.parameterOptions": "Parameter Options",
"personalizationModal.automationAgencyOrConsultant": "Automation agency/consultant",
"personalizationModal.automationConsulting": "Automation consulting",
"personalizationModal.cloudInfrastructure": "Cloud infrastructure",
"personalizationModal.continue": "Continue",
"personalizationModal.customerIntegrations": "Customer integrations",
"personalizationModal.customerSupport": "Customer support",
"personalizationModal.customizeN8n": "Customize n8n to you",
"personalizationModal.digitalAgencyOrConsultant": "Digital agency/consultant",
"personalizationModal.digitalAgencyOrConsultant": "Marketing agency / consultancy",
"personalizationModal.eCommerce": "eCommerce",
"personalizationModal.education": "Education",
"personalizationModal.engineeringOrDevops": "Engineering / Devops",
"personalizationModal.errorWhileSubmittingResults": "Error while submitting results",
"personalizationModal.executiveTeam": "Executive team",
"personalizationModal.financeOrAccounting": "Finance / Accounting",
"personalizationModal.financeOrInsurance": "Finance / Insurance",
"personalizationModal.getStarted": "Get started",
@ -627,17 +624,8 @@
"personalizationModal.howAreYourCodingSkills": "How are your coding skills?",
"personalizationModal.howBigIsYourCompany": "How big is your company?",
"personalizationModal.hr": "HR",
"personalizationModal.iCanCodeSomeUsefulThingsBut": "2. I can code some useful things, but I spend a lot of time stuck",
"personalizationModal.iCanDoAlmostAnythingIWant": "5. I can do almost anything I want, easily (pro coder)",
"personalizationModal.iCanFigureMostThingsOut": "4. I can figure most things out",
"personalizationModal.iGetStuckTooQuicklyToAchieveMuch": "1. I get stuck too quickly to achieve much",
"personalizationModal.iKnowEnoughToBeDangerousBut": "3. I know enough to be dangerous, but I'm no expert",
"personalizationModal.imNotUsingN8nForWork": "I'm not using n8n for work",
"personalizationModal.individualConsumers": "Customers are individual consumers",
"personalizationModal.it": "IT",
"personalizationModal.itEngineering": "IT / Engineering",
"personalizationModal.itSupport": "IT support",
"personalizationModal.largeBusinesses": "Customers are large businesses (500+ employees)",
"personalizationModal.legal": "Legal",
"personalizationModal.lessThan20People": "Less than 20 people",
"personalizationModal.lookOutForThingsMarked": "Look out for things marked with a ✨. They are personalized to make n8n more relevant to you.",
@ -645,40 +633,40 @@
"personalizationModal.manufacturing": "Manufacturing",
"personalizationModal.marketing": "Marketing",
"personalizationModal.media": "Media",
"personalizationModal.mediumBusinesses": "Customers are medium businesses (20-499 employees)",
"personalizationModal.networkingOrCommunication": "Networking / Communication",
"personalizationModal.neverCoded": "0. Never coded",
"personalizationModal.notSureYet": "Not sure yet",
"personalizationModal.operations": "Operations",
"personalizationModal.other": "Other",
"personalizationModal.otherPleaseSpecify": "Other (please specify)",
"personalizationModal.people": "people",
"personalizationModal.physicalRetailOrServices": "Physical retail or services",
"personalizationModal.pleaseSpecifyYourCompanyFocus": "Please specify your company focus",
"personalizationModal.proCoder": "Pro coder",
"personalizationModal.product": "Product (e.g. fast prototyping)",
"personalizationModal.realEstateOrConstruction": "Real estate / Construction",
"personalizationModal.saas": "SaaS",
"personalizationModal.saas": "Software as a service",
"personalizationModal.salesAndMarketing": "Sales and Marketing",
"personalizationModal.salesBizDev": "Sales / Bizdev",
"personalizationModal.salesBusinessDevelopment": "Sales / Business Development",
"personalizationModal.security": "Security",
"personalizationModal.select": "Select...",
"personalizationModal.smallBusinesses": "Customers are small businesses (under 20 employees)",
"personalizationModal.specifyYourAutomationGoal": "Please specify your automation goal",
"personalizationModal.specifyYourCompanysIndustry": "Specify your company's industry",
"personalizationModal.specifyYourWorkArea": "Specify your work area",
"personalizationModal.support": "Support",
"personalizationModal.systemsIntegration": "Systems Integration",
"personalizationModal.systemsIntegrator": "Systems Integrator",
"personalizationModal.systemsIntegrator": "Systems integrator / Automation agency",
"personalizationModal.telecoms": "Telecoms",
"personalizationModal.thanks": "Thanks!",
"personalizationModal.theseQuestionsHelpUs": "These questions help us tailor n8n to you",
"personalizationModal.whatAreYouLookingToAutomate": "What are you looking to automate?",
"personalizationModal.whatBestDescribesYourCompany": "What best describes your company?",
"personalizationModal.whatDoesYourCompanyFocusOn": "Which services does your company focus on?",
"personalizationModal.whatKindOfCustomersDoYouServe": "What kind of customers do you serve?",
"personalizationModal.whichIndustriesIsYourCompanyIn": "Which industries is your company in?",
"personalizationModal.specifySalesMarketingGoal": "Which parts of Sales and Marketing?",
"personalizationModal.leadGeneration": "Lead generation, enrichment, routing",
"personalizationModal.customerCommunication": "Customer communication",
"personalizationModal.customerActions": "Actions when lead changes status",
"personalizationModal.adCampaign": "Ad campaign management",
"personalizationModal.reporting": "Reporting",
"personalizationModal.dataSynching": "Data syncing",
"personalizationModal.specifyUsageMode": "Are you looking to do any of these?",
"personalizationModal.connectToOwnProduct": "Connect to own product (or core infrastructure)",
"personalizationModal.buildBackendServices": "Build backend services (endpoints)",
"personalizationModal.manipulateFiles": "Manipulate/transfer files",
"personalizationModal.specifyOtherSalesAndMarketingGoal": "Specify your other Sales and Marketing goals",
"pushConnection.nodeExecutedSuccessfully": "Node executed successfully",
"pushConnection.workflowExecutedSuccessfully": "Workflow executed successfully",
"pushConnectionTracker.cannotConnectToServer": "You have a connection issue or the server is down. <br />n8n should reconnect automatically once the issue is resolved.",