Closes: #18047 Changes: - Added three steps to the /start questionnaire - Updated the contact page to prefill information for logged-in users by default - Updated the layout of the f/leetctl-preview page for users navigating to it from the /start page. - Updated the quote for vulnerability management on the /start and /contact pages to have a logo (There will be a separate PR, to add it to testimonials.yml) --------- Co-authored-by: Mike Thomas <78363703+mike-j-thomas@users.noreply.github.com>
80 lines
2.8 KiB
JavaScript
Vendored
80 lines
2.8 KiB
JavaScript
Vendored
module.exports = {
|
|
|
|
|
|
friendlyName: 'Save questionnaire progress and continue',
|
|
|
|
|
|
description: 'Saves the user\'s current progress in the get started questionnaire',
|
|
|
|
|
|
inputs: {
|
|
currentStep: {
|
|
type: 'string',
|
|
description: 'The step of the get started questionnaire that is being saved.',
|
|
isIn: [
|
|
'start',
|
|
'what-are-you-using-fleet-for',
|
|
'have-you-ever-used-fleet',
|
|
'how-many-hosts',
|
|
'will-you-be-self-hosting',
|
|
'what-are-you-working-on-eo-security',
|
|
'what-does-your-team-manage-eo-it',
|
|
'what-does-your-team-manage-vm',
|
|
'what-do-you-manage-mdm',
|
|
'is-it-any-good',
|
|
'what-did-you-think',
|
|
'deploy-fleet-in-your-environment',
|
|
'managed-cloud-for-growing-deployments',
|
|
'self-hosted-deploy',
|
|
]
|
|
},
|
|
formData: {
|
|
type: {},
|
|
description: 'The formdata that will be saved for this step of the get started questionnaire'
|
|
},
|
|
},
|
|
|
|
|
|
exits: {
|
|
success: {
|
|
outputDescription: 'All get started questionnaire answers accumulated so far by this user.',
|
|
outputType: {}
|
|
},
|
|
},
|
|
|
|
|
|
fn: async function ({currentStep, formData}) {
|
|
// find this user's DB record.
|
|
let userRecord = this.req.me;
|
|
let questionnaireProgress;
|
|
// If this user doesn't have a lastSubmittedGetStartedQuestionnaireStep or getStartedQuestionnaireAnswers, create an empty dictionary to store their answers.
|
|
if(!userRecord.lastSubmittedGetStartedQuestionnaireStep || _.isEmpty(userRecord.getStartedQuestionnaireAnswers)) {
|
|
questionnaireProgress = {};
|
|
} else {// other wise clone it from the user record.
|
|
questionnaireProgress = _.clone(userRecord.getStartedQuestionnaireAnswers);
|
|
}
|
|
// When the 'what-are-you-using-fleet-for' is completed, update this user's DB record and session to include their answer.
|
|
if(currentStep === 'what-are-you-using-fleet-for') {
|
|
let primaryBuyingSituation = formData.primaryBuyingSituation;
|
|
await User.updateOne({id: this.req.me.id}).set({
|
|
primaryBuyingSituation
|
|
});
|
|
// Set the primary buying situation in the user's session.
|
|
this.req.session.primaryBuyingSituation = primaryBuyingSituation;
|
|
}
|
|
// Set the user's answer to the current step.
|
|
questionnaireProgress[currentStep] = formData;
|
|
// Clone the questionnaireProgress to prevent any mutations from sending it through the updateOne Waterline method.
|
|
let getStartedProgress = _.clone(questionnaireProgress);
|
|
// Update the user's database model.
|
|
await User.updateOne({id: userRecord.id}).set({
|
|
getStartedQuestionnaireAnswers: questionnaireProgress,
|
|
lastSubmittedGetStartedQuestionnaireStep: currentStep
|
|
});
|
|
// Return the JSON dictionary of form data submitted by this user.
|
|
return getStartedProgress;
|
|
}
|
|
|
|
|
|
};
|