@visitscotland/component-library
Version:
VisitScotland Component Library
1 lines • 14.2 kB
JavaScript
(self.webpackChunk_visitscotland_component_library=self.webpackChunk_visitscotland_component_library||[]).push([[9177],{1827:function(t,e,a){"use strict";a.d(e,{A:function(){return i.A}});var i=a(43967)},29134:function(t,e,a){"use strict";var i=a(85072),n=a.n(i),s=a(97825),r=a.n(s),o=a(77659),l=a.n(o),u=a(55056),c=a.n(u),f=a(10540),m=a.n(f),g=a(41113),d=a.n(g),h=a(45992),p=a.n(h),b={};b.styleTagTransform=d(),b.setAttributes=c(),b.insert=l().bind(null,"head"),b.domAPI=r(),b.insertStyleElement=m(),n()(p(),b),p()&&p().locals&&p().locals},31056:function(t,e,a){"use strict";a.d(e,{X:function(){return l}});var i=a(20641),n=a(90033),s=a(53751),r={class:"vs-carbon-calculator__wrapper"},o={key:1};function l(t,e,a,l,u,c){var f=(0,i.g2)("VsCarbonCalculatorIntro"),m=(0,i.g2)("VsProgressBar"),g=(0,i.g2)("VsHeading"),d=(0,i.g2)("VsCarbonCalculatorQuestion"),h=(0,i.g2)("VsButton"),p=(0,i.g2)("VsCarbonCalculatorTip"),b=(0,i.g2)("VsCol"),v=(0,i.g2)("VsCarbonCalculatorRunningTotal"),y=(0,i.g2)("VsCarbonCalculatorResults"),S=(0,i.g2)("VsRow"),k=(0,i.g2)("VsContainer"),D=(0,i.g2)("VsWarning");return(0,i.uX)(),(0,i.CE)("div",r,[(0,i.bF)(k,{class:"vs-carbon-calculator","data-test":"vs-carbon-calculator"},{default:(0,i.k6)((function(){return[t.formData&&t.formData.fields?((0,i.uX)(),(0,i.Wv)(S,{key:0,class:"vs-carbon-calculator__survey"},{default:(0,i.k6)((function(){return[(0,i.bF)(b,null,{default:(0,i.k6)((function(){return[t.activeStage?(0,i.Q3)("",!0):((0,i.uX)(),(0,i.Wv)(f,{key:0})),t.activeStage?((0,i.uX)(),(0,i.CE)("form",o,[(0,i.Lk)("fieldset",null,[(0,i.bF)(m,{max:t.formData.stages,"current-step":t.activeStage<=t.formData.stages?t.activeStage:t.formData.stages,"is-stepped":!0,"is-full":t.activeStage>t.formData.stages,"progress-label":a.labelsMap.progress,ref:"progress"},null,8,["max","current-step","is-full","progress-label"]),(0,i.bo)((0,i.Lk)("div",null,[c.currentCategory?((0,i.uX)(),(0,i.Wv)(g,{key:0,level:"2","heading-style":"heading-m",class:"vs-carbon-calculator__category-heading"},{default:(0,i.k6)((function(){return[(0,i.eW)((0,n.toDisplayString)(c.currentCategory),1)]})),_:1})):(0,i.Q3)("",!0),((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(t.formData.fields,(function(e,a){return(0,i.bo)(((0,i.uX)(),(0,i.Wv)(d,{ref_for:!0,ref:"questions",tabindex:"0",key:e.name,label:c.getQuestionLabel(e,a),"label-for":e.name,hint:c.getQuestionHint(e,a),"field-class":c.conditionalElementClass(e.name),"field-type":e.element,"field-name":e.name,options:c.getQuestionOptions(e,a),minimum:"number"===e.element?e.validation.min:0,maximum:"number"===e.element?e.validation.max:0,onUpdateFieldData:c.updateFieldData},null,8,["label","label-for","hint","field-class","field-type","field-name","options","minimum","maximum","onUpdateFieldData"])),[[s.vShow,e.stage===t.activeStage]])})),128))],512),[[s.vShow,t.activeStage<=t.formData.fields.length]])])])):(0,i.Q3)("",!0),c.isRepeatable(t.activeStage)?((0,i.uX)(),(0,i.Wv)(h,{key:2,class:"my-100",variant:"secondary",icon:"fa-regular fa-plus",onClick:e[0]||(e[0]=function(t){return c.duplicateCurrentStage()})},{default:(0,i.k6)((function(){return[(0,i.eW)((0,n.toDisplayString)(c.activeStageRepeatable),1)]})),_:1})):(0,i.Q3)("",!0),c.currentTip?((0,i.uX)(),(0,i.Wv)(p,{key:3,tip:c.currentTip},null,8,["tip"])):(0,i.Q3)("",!0)]})),_:1}),(0,i.bF)(b,{cols:"12"},{default:(0,i.k6)((function(){return[t.activeStage>0&&t.activeStage<=t.formData.stages?((0,i.uX)(),(0,i.Wv)(v,{key:0,"total-kilos":t.totalKilos,language:a.language},null,8,["total-kilos","language"])):(0,i.Q3)("",!0),t.activeStage>t.formData.stages?((0,i.uX)(),(0,i.Wv)(y,{key:1,"total-kilos":t.totalKilos,"transport-kilos":t.transportKilos,"food-kilos":t.foodKilos,"accommodation-kilos":t.accommodationKilos,"stay-duration":c.stayDuration,"comparison-replacements":t.formData.comparisonReplacements,language:a.language},null,8,["total-kilos","transport-kilos","food-kilos","accommodation-kilos","stay-duration","comparison-replacements","language"])):(0,i.Q3)("",!0)]})),_:1}),0===t.activeStage?((0,i.uX)(),(0,i.Wv)(b,{key:0,class:"text-center",cols:"12"},{default:(0,i.k6)((function(){return[(0,i.bF)(h,{variant:"primary",type:"submit",class:"vs-form__submit mt-300",onClick:e[1]||(e[1]=function(t){return c.forwardPage()})},{default:(0,i.k6)((function(){return[(0,i.eW)((0,n.toDisplayString)(a.labelsMap.begin),1)]})),_:1})]})),_:1})):(0,i.Q3)("",!0),t.activeStage>0?((0,i.uX)(),(0,i.Wv)(b,{key:1,cols:"12"},{default:(0,i.k6)((function(){return[t.activeStage>1?((0,i.uX)(),(0,i.Wv)(h,{key:0,variant:"secondary",type:"submit",class:"vs-form__submit mt-300 float-start",ref:"backPage",onClick:e[2]||(e[2]=function(t){return c.backwardPage()})},{default:(0,i.k6)((function(){return[(0,i.eW)((0,n.toDisplayString)(a.labelsMap.previous),1)]})),_:1},512)):(0,i.Q3)("",!0),t.activeStage<t.formData.stages?((0,i.uX)(),(0,i.Wv)(h,{key:1,variant:"primary",type:"submit",class:"vs-form__submit mt-300 float-end",ref:"forwardPage",disabled:t.activeStage>0&&!t.answerSet,onClick:e[3]||(e[3]=function(t){return c.forwardPage()})},{default:(0,i.k6)((function(){return[(0,i.eW)((0,n.toDisplayString)(a.labelsMap.next),1)]})),_:1},8,["disabled"])):(0,i.Q3)("",!0),t.activeStage===t.formData.stages?((0,i.uX)(),(0,i.Wv)(h,{key:2,variant:"primary",type:"submit",class:"vs-form__submit mt-300 float-end",disabled:!t.answerSet,onClick:e[4]||(e[4]=function(t){return c.forwardPage()})},{default:(0,i.k6)((function(){return[(0,i.eW)((0,n.toDisplayString)(a.labelsMap.results),1)]})),_:1},8,["disabled"])):(0,i.Q3)("",!0),t.activeStage>t.formData.stages?((0,i.uX)(),(0,i.Wv)(h,{key:3,variant:"primary",type:"submit",class:"vs-form__submit mt-300 float-end",onClick:e[5]||(e[5]=function(t){return c.restart()})},{default:(0,i.k6)((function(){return[(0,i.eW)((0,n.toDisplayString)(a.labelsMap.restart),1)]})),_:1})):(0,i.Q3)("",!0)]})),_:1})):(0,i.Q3)("",!0)]})),_:1})):(0,i.Q3)("",!0)]})),_:1}),(0,i.bF)(D,null,{default:(0,i.k6)((function(){return[(0,i.eW)((0,n.toDisplayString)(a.labelsMap.noJsMessage),1)]})),_:1})])}},43967:function(t,e,a){"use strict";var i=a(57536),n=a(11438),s=a(79122),r=a(48836),o=a(74433),l=a(13838),u=a(98745),c=a(44681),f=a(34828),m=a(30071),g=a(41120),d=a(12822);e.A={name:"VsCarbonCalculator",status:"prototype",release:"0.0.1",components:{VsButton:r.default,VsContainer:n.T$,VsCol:n.Il,VsRow:n.AQ,VsWarning:s.default,VsProgressBar:o.default,VsHeading:l.default,VsCarbonCalculatorResults:f.default,VsCarbonCalculatorTip:c.default,VsCarbonCalculatorRunningTotal:m.default,VsCarbonCalculatorIntro:g.default,VsCarbonCalculatorQuestion:d.default},mixins:[u.default],provide:function(){return{labelsMap:this.labelsMap}},props:{labelsMap:{type:Object,required:!0},language:{type:String,default:"en-gb"}},data:function(){return this.initialState()},computed:{currentQuestion:function(){return this.formData&&this.activeStage?this.formData.fields[this.activeStage-1]:null},currentTip:function(){return this.activeStage&&this.labelsMap["stage-".concat(this.activeStage,".tip")]?this.labelsMap["stage-".concat(this.activeStage,".tip")]:""},stayDuration:function(){return this.form.howLongStay?parseInt(this.form.howLongStay,10):0},currentCategory:function(){return this.labelsMap["stage-".concat(this.activeStage,".title")]?this.labelsMap["stage-".concat(this.activeStage,".title")]:""},activeStageRepeatable:function(){return this.labelsMap["stage-".concat(this.activeStage,".repeat")]?this.labelsMap["stage-".concat(this.activeStage,".repeat")]:""}},mounted:function(){this.getFormData()},methods:{initialState:function(){return{formData:{},messagingData:{},form:{},formIsInvalid:!1,showErrorMessage:!1,errorFields:[],triggerValidate:!1,conditionalFields:{},reAlertErrors:!1,totalKilos:0,transportKilos:0,accommodationKilos:0,foodKilos:0,transportTip:null,foodTip:null,accommodationTip:null,transportInternalTip:null,activeStage:0,answerSet:!1,repeatableStages:{}}},restart:function(){var t=this.formData,e=this.repeatableStages;Object.assign(this.$data,this.initialState()),this.$data.formData=t,this.$data.repeatableStages=e,this.cleanFields()},cleanFields:function(){for(var t=this.formData.fields.length-1;t>=0;t--)this.formData.fields[t].isClone&&this.formData.fields.splice(t,1);for(var e=0;e<Object.keys(this.repeatableStages).length;e++)this.repeatableStages[Object.keys(this.repeatableStages)[e]].generations=0},getFormData:function(){var t=this;i.A.get(this.labelsMap.formUrl).then((function(e){if(t.formData=e.data,e.data.fields.forEach((function(e){t.form[e.name]="",e.conditional&&(t.conditionalFields[e.name]=!1)})),t.repeatableStages={},e.data.repeatableStages)for(var a=0;a<e.data.repeatableStages.length;a++)t.repeatableStages[e.data.repeatableStages[a]]={generations:0}}))},getMessagingData:function(t,e){return Object.keys(this.messagingData).length>0?this.messagingData[e][t]:"validation"===t?{}:""},getQuestionLabel:function(t,e){if(t.isClone){if(this.labelsMap["question-".concat(t.originalNumber+1,".clone-question")])return this.labelsMap["question-".concat(t.originalNumber+1,".clone-question")];if(this.labelsMap["question-".concat(t.originalNumber+1,".question")])return this.labelsMap["question-".concat(t.originalNumber+1,".question")]}return this.labelsMap["question-".concat(e+1,".question")]?this.labelsMap["question-".concat(e+1,".question")]:""},getQuestionHint:function(t,e){if(t.isClone){if(this.labelsMap["question-".concat(t.originalNumber+1,".clone-hint")])return this.labelsMap["question-".concat(t.originalNumber+1,".clone-hint")];if(this.labelsMap["question-".concat(t.originalNumber+1,".hint")])return this.labelsMap["question-".concat(t.originalNumber+1,".hint")]}return this.labelsMap["question-".concat(e+1,".hint")]?this.labelsMap["question-".concat(e+1,".hint")]:""},getQuestionOptions:function(t,e){var a;if(a=t.isClone?t.originalNumber:e,"radio"===t.element){for(var i=t.options,n=0;n<i.length;n++)i[n].text=this.labelsMap["question-".concat(a+1,".option-").concat(n+1)];return i}return[]},updateFieldData:function(t){this.form[t.field]=t.value||"",t.value?this.answerSet=!0:this.answerSet=!1,this.manageErrorStatus(t.field,t.errors),this.checkConditionalFields(),this.calculateEmissions()},manageErrorStatus:function(t,e){var a=this.errorFields.indexOf(t);-1!==a?(!e||e.length<1)&&this.errorFields.splice(a,1):e&&e.length>0&&this.errorFields.push(t)},getRadioValue:function(t,e){if(!e)return 0;for(var a,i=0;i<this.formData.fields.length;i++)this.formData.fields[i].name===t&&(a=this.formData.fields[i]);var n=a.values[e];if(a.multiplyByNumber)return n*a.multiplyByNumber;if(a.multiplyByAnswer){var s=this.form[a.multiplyByAnswer.question]||0;return n*Math.max(s,a.multiplyByAnswer.minimum)}if(a.multiplyByValue&&t!==a.multiplyByValue){var r=this.getNumberValue(a.multiplyByValue.question,this.form[a.multiplyByValue.question])||0;return n*Math.max(r,a.multiplyByValue.minimum)}return n},getNumberValue:function(t,e){if(!e)return 0;for(var a,i=0;i<this.formData.fields.length;i++)this.formData.fields[i].name===t&&(a=this.formData.fields[i]);if(a.multiplyByNumber)return parseInt(e,10)*a.multiplyByNumber;if(a.multiplyByAnswer){var n=this.form[a.multiplyByAnswer.question]||0;return parseInt(e,10)*n}if(a.multiplyByValue&&t!==a.multiplyByValue){var s=this.getNumberValue(a.multiplyByValue.question,this.form[a.multiplyByValue.question]);return parseInt(e,10)*s}return 0},getFieldValue:function(t){return"radio"===t.element?this.getRadioValue(t.name,this.form[t.name]):"number"===t.element?this.getNumberValue(t.name,this.form[t.name]):0},calculateEmissions:function(){this.transportKilos=0,this.accommodationKilos=0,this.foodKilos=0;for(var t=0;t<this.formData.fields.length;t++){var e=this.formData.fields[t];switch(e.stage){case 1:case 3:this.transportKilos+=this.getFieldValue(e);break;case 2:this.accommodationKilos+=this.getFieldValue(e);break;case 4:this.foodKilos+=this.getFieldValue(e)}}this.totalKilos=this.transportKilos+this.accommodationKilos+this.foodKilos},checkConditionalFields:function(){var t=this;Object.keys(this.conditionalFields).forEach((function(e){var a=t.formData.fields.find((function(t){return t.name===e})),i=!0;Object.keys(a.conditional).forEach((function(n){var s=a.conditional[n];Array.isArray(s)?-1===s.indexOf(t.form[n])&&(i=!1):t.form[n]!==s&&(i=!1),i?t.conditionalFields[e]=!0:(t.conditionalFields[e]=!1,t.manageErrorStatus(e,[]))}))}))},forwardPage:function(t){t&&t.preventDefault(),this.activeStage&&this.createDataLayerObject("carbonQuestionEvent",{questionNumber:this.activeStage,answer:this.form[this.currentQuestion.name]}),this.activeStage+=1,this.checkNewAnswerSet(),this.resetFocus()},backwardPage:function(t){t&&t.preventDefault(),this.activeStage-=1,this.checkNewAnswerSet(),this.resetFocus()},checkNewAnswerSet:function(){if(this.activeStage>this.formData.stages)this.answerSet=!0;else{this.answerSet=!0;for(var t=0;t<this.formData.fields.length;t++)if(this.formData.fields[t].stage===this.activeStage){var e=this.formData.fields[t];"radio"!==e.element||this.form[e.name]?"number"!==e.element||this.form[e.name]||(this.form[e.name]=e.validation.min):this.answerSet=!1}}},isRepeatable:function(t){return!!(this.repeatableStages[t]&&this.repeatableStages[t].generations<3)},conditionalElementClass:function(t){return!0===this.conditionalFields[t]||void 0===this.conditionalFields[t]?"":"d-none"},resetFocus:function(){var t=this;this.$nextTick((function(){t.$nextTick((function(){try{t.$refs.questions[t.activeStage-1].$el.focus(),t.$refs.progress.$el.scrollIntoView()}catch(t){}}))}))},duplicateCurrentStage:function(t){t&&t.preventDefault();for(var e=this.repeatableStages[this.activeStage].generations+1,a=0;a<this.formData.fields.length;a++){var i=this.formData.fields[a];if(i.stage===this.activeStage&&!i.isClone){var n=JSON.parse(JSON.stringify(i));n.isClone=!0;var s="".concat(i.name).concat(e);n.name=s,n.originalNumber=a,this.form[s]="",this.formData.fields.push(n)}}this.repeatableStages[this.activeStage].generations=e}}}},45992:function(){},47458:function(t,e,a){"use strict";a(29134)},68224:function(t,e,a){"use strict";a.d(e,{X:function(){return i.X}});var i=a(31056)},69177:function(t,e,a){"use strict";a.r(e);var i=a(68224),n=a(1827);a(47458);const s=(0,a(66262).A)(n.A,[["render",i.X]]);e.default=s}}]);