encapsulated api, widget parsing into component

This commit is contained in:
Mark Harris 2021-12-13 12:33:50 -05:00
parent 8b48ec6d11
commit 06dbf642c9
2 changed files with 17 additions and 11 deletions

View file

@ -4,7 +4,7 @@
<div class="select-car-form rounded text-center"> <div class="select-car-form rounded text-center">
<vehicleBanner :vehicleImageSrc="vehicleBannerWidget.GenericVehicleImage" /> <vehicleBanner :vehicleImageSrc="vehicleBannerWidget.GenericVehicleImage" />
<pageHeader :text="pageHeaderWidgets.HeaderText" class="Header" /> <pageHeader :text="pageHeaderWidgets.HeaderText" class="Header" />
<yearQuestion :questionText="radioQuestionWidgets.QuestionText" :years="vehicleYears" v-model="selectedYear" /> <yearQuestion v-model="selectedYear" ref="yearQuestion" />
</div> </div>
</div> </div>
</template> </template>
@ -18,15 +18,11 @@ import vehicleBanner from "@/common-components/vehicle-banner/vehicle-banner";
// Supporting files // Supporting files
import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; import { fetchCmsContentForPage } from "@/helpers/cms-content-helper";
import { settleAllPromises } from "@/helpers/layout-helper"; import { settleAllPromises } from "@/helpers/layout-helper";
import store from "@/store";
import { storeActions } from "@/constants/store-actions.js";
export default { export default {
name: "vehicle-year", name: "vehicle-year",
data() { data() {
return { return {
pageHeaderWidgets: {}, pageHeaderWidgets: {},
radioQuestionWidgets: {},
vehicleYears: [],
siteHeaderWidget: {}, siteHeaderWidget: {},
vehicleBannerWidget: {}, vehicleBannerWidget: {},
selectedYear: null selectedYear: null
@ -38,7 +34,7 @@ export default {
// Call APIs // Call APIs
const cmsContentPromise = fetchCmsContentForPage(to.query.fmgPage); const cmsContentPromise = fetchCmsContentForPage(to.query.fmgPage);
const yearQuestionInitialDataPromise = store.dispatch(storeActions.GET_VEHICLE_YEARS, {}); const yearQuestionInitialDataPromise = yearQuestion.methods.loadInitialData();
// Settle promises and get results // Settle promises and get results
const promiseResultMap = [ const promiseResultMap = [
@ -57,9 +53,8 @@ export default {
next((vm) => { next((vm) => {
vm.pageHeaderWidgets = resultMap.cmsContent.PageHeaderWidget[0]; vm.pageHeaderWidgets = resultMap.cmsContent.PageHeaderWidget[0];
vm.siteHeaderWidget = resultMap.cmsContent.SiteHeaderWidget[0]; vm.siteHeaderWidget = resultMap.cmsContent.SiteHeaderWidget[0];
vm.radioQuestionWidgets = resultMap.cmsContent.RadioQuestionWidget[0];
vm.vehicleBannerWidget = resultMap.cmsContent.VehicleBannerWidget[0]; vm.vehicleBannerWidget = resultMap.cmsContent.VehicleBannerWidget[0];
vm.vehicleYears = resultMap.yearQuestionInitialData; vm.$refs.yearQuestion.initializeComponent(resultMap.cmsContent.RadioQuestionWidget[0], resultMap.yearQuestionInitialData);
}); });
}); });
}, },

View file

@ -8,22 +8,33 @@
<script> <script>
import radioQuestion from "@/common-components/radio-question/radio-question"; import radioQuestion from "@/common-components/radio-question/radio-question";
import store from "@/store";
import { storeActions } from "@/constants/store-actions.js";
export default { export default {
name: "year-question", name: "year-question",
data(){ data(){
return { return {
selectedYear: null questionText: null,
selectedYear: null,
years: Array,
} }
}, },
props: { props: {
questionText: String,
years: Array,
modelValue: String modelValue: String
}, },
components: { components: {
radioQuestion, radioQuestion,
}, },
methods: {
loadInitialData() {
return store.dispatch(storeActions.GET_VEHICLE_YEARS, {});
},
initializeComponent(cmsContent, initialData) {
this.questionText = cmsContent.QuestionText;
this.years = initialData;
}
},
watch: { watch: {
selectedYear(val) { selectedYear(val) {
this.$emit('update:modelValue', val) this.$emit('update:modelValue', val)