Merge pull request #14 from Safelite/feature/Digital/SSR-37
Feature/digital/ssr 37
This commit is contained in:
commit
4cd32c8cff
4 changed files with 93 additions and 6 deletions
25
src/common-components/site-header/site-header.spec.js
Normal file
25
src/common-components/site-header/site-header.spec.js
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
import siteHeader from "@/common-components/site-header/site-header";
|
||||||
|
import { shallowMount } from "@vue/test-utils";
|
||||||
|
|
||||||
|
describe("site-header", () => {
|
||||||
|
|
||||||
|
test("renders the logo image", () => {
|
||||||
|
const wrapper = shallowMount(siteHeader, {
|
||||||
|
setProps: {
|
||||||
|
cmsWidgetName: "header",
|
||||||
|
},
|
||||||
|
mixins: [mockMixin]
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(wrapper.find("img")).toBeTruthy();
|
||||||
|
wrapper.unmount();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const mockMixin = {
|
||||||
|
methods: {
|
||||||
|
getCmsContent: jest.fn()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
34
src/common-components/site-header/site-header.vue
Normal file
34
src/common-components/site-header/site-header.vue
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
<template>
|
||||||
|
<div class="headerContainer">
|
||||||
|
<img id="siteHeaderImage" :src="imageSrc" :alt="altText" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default({
|
||||||
|
name: "siteHeader",
|
||||||
|
props: {
|
||||||
|
cmsWidgetName: String,
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
imageSrc()
|
||||||
|
{
|
||||||
|
return this.getCmsContent(this.cmsWidgetName, "LogoImageURL")
|
||||||
|
},
|
||||||
|
altText()
|
||||||
|
{
|
||||||
|
return this.getCmsContent(this.cmsWidgetName, "AltText")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
|
||||||
|
.headerContainer{
|
||||||
|
width: 100%;
|
||||||
|
margin: 16px auto;
|
||||||
|
text-align: center
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div class="fade-on-route-transition">
|
<div class="fade-on-route-transition">
|
||||||
|
<siteHeader cmsWidgetName="Header"/>
|
||||||
<navButton type="button" text="back" :scenario="this.navigationScenarios.CLICKED_BACK"></navButton>
|
<navButton type="button" text="back" :scenario="this.navigationScenarios.CLICKED_BACK"></navButton>
|
||||||
<p>Vehicle Year Placeholder</p>
|
<p>Vehicle Year Placeholder</p>
|
||||||
<input type="text" v-model="year"/>
|
<input type="text" v-model="year"/>
|
||||||
|
|
@ -15,7 +16,8 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import navButton from '@/common-components/nav-button/nav-button.vue';
|
import navButton from '@/common-components/nav-button/nav-button';
|
||||||
|
import siteHeader from '@/common-components/site-header/site-header';
|
||||||
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 textboxQuestion from "@/common-components/textbox-question/textbox-question";
|
import textboxQuestion from "@/common-components/textbox-question/textbox-question";
|
||||||
|
|
@ -73,7 +75,8 @@
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
navButton,
|
navButton,
|
||||||
textboxQuestion
|
textboxQuestion,
|
||||||
|
siteHeader
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div class="fade-on-route-transition">
|
<div class="fade-on-route-transition">
|
||||||
|
<siteHeader cmsWidgetName="Header"/>
|
||||||
<p>Welcome Page Placeholder</p>
|
<p>Welcome Page Placeholder</p>
|
||||||
<br />
|
<br />
|
||||||
<navButton type="button" text="Next" :scenario="this.navigationScenarios.CLICKED_FORWARD"></navButton>
|
<navButton type="button" text="Next" :scenario="this.navigationScenarios.CLICKED_FORWARD"></navButton>
|
||||||
|
|
@ -10,12 +11,36 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import navButton from "@/common-components/nav-button/nav-button.vue";
|
import navButton from "@/common-components/nav-button/nav-button";
|
||||||
|
import siteHeader from '@/common-components/site-header/site-header';
|
||||||
|
import { fetchCmsContentForPage } from "@/helpers/cms-content-helper";
|
||||||
|
import { settleAllPromises } from "@/helpers/layout-helper";
|
||||||
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "welcome-page",
|
name: "welcome-page",
|
||||||
components: { navButton },
|
components: { navButton, siteHeader },
|
||||||
}
|
async beforeRouteEnter(to, from, next)
|
||||||
|
{
|
||||||
|
// Call APIs
|
||||||
|
const cmsContentPromise = fetchCmsContentForPage(to.query.issPage);
|
||||||
|
|
||||||
|
// Settle promises and get results
|
||||||
|
const promiseResultMap = [
|
||||||
|
{
|
||||||
|
resultKey: "cmsContent",
|
||||||
|
promise: cmsContentPromise,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
//use resultMap to populate layout content.
|
||||||
|
let resultMap = await settleAllPromises(promiseResultMap);
|
||||||
|
|
||||||
|
next((vm) => {
|
||||||
|
vm.setCmsContent(resultMap.cmsContent);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue