Merge pull request #200 from Safelite/CSR-266-add-prop

CSR-266 update props.
This commit is contained in:
bmauger 2022-02-08 09:05:40 -05:00 committed by GitHub
commit 5f9917e16a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 78 additions and 115 deletions

View file

@ -14,18 +14,17 @@ describe("funnel-footer.vue", () => {
remove: jest.fn() remove: jest.fn()
}, },
}; };
global.document.getElementById = jest.fn().mockImplementation(()=> { global.document.getElementById = jest.fn().mockImplementation(()=> {
return r; return r;
}); });
const wrapper = mount(funnelFooter, { const wrapper = mount(funnelFooter, {
propsData: {
footer: true
},
}); });
// Assert // Assert
const link = wrapper.find("a"); const link = wrapper.find("a");
console.log(wrapper.html());
// Expect // Expect
expect(link.attributes('class')).toContain("footer-link"); expect(link.attributes('class')).toContain("footer-link");

View file

@ -1,104 +1,82 @@
<template> <template>
<div class="container-fluid g-2 footer"> <div class="container-fluid g-2 footer">
<div class="row"> <div class="row">
<div class="col-12 d-flex justify-content-center pb-2 fs-7"> <div class="col-12 d-flex justify-content-center pb-2 fs-7">
&copy;&nbsp;<span id="years"></span>&nbsp;Safelite Group &copy;&nbsp;<span id="years"></span>&nbsp;Safelite Group
</div> </div>
</div> </div>
<div class="row" :style="`padding-bottom: ${paddingHeight}px`"> <div class="row" :style="`padding-bottom: ${paddingHeight}px`">
<div class="col d-flex justify-content-center justify-content-around text-center"> <div class="col d-flex justify-content-center justify-content-around text-center">
<textLink <textLink linkType="footer" text="Terms of use" href="https://www.safelite.com/terms-of-use" />
footer=true <textLink linkType="footer" text="Privacy policy" href="https://www.safelite.com/safelite-group-privacy-policy" />
text="Terms of use" <textLink linkType="footer" text="Do not sell my information" href="https://privacyportal-cdn.onetrust.com/dsarwebform/d3b95a93-e22e-4d4d-a806-482052406557/9e371601-eae3-4338-9430-b90b9036022b.html" />
href="https://www.safelite.com/terms-of-use" </div>
/>
<textLink
footer=true
text="Privacy policy"
href="https://www.safelite.com/safelite-group-privacy-policy"
/>
<textLink
footer=true
text="Do not sell my information"
href="https://privacyportal-cdn.onetrust.com/dsarwebform/d3b95a93-e22e-4d4d-a806-482052406557/9e371601-eae3-4338-9430-b90b9036022b.html"
/>
</div>
</div> </div>
</div> </div>
<div class="container-fluid fixed-bottom g-4 bg-light py-4" id="infoBox"> <div class="container-fluid fixed-bottom g-4 bg-light py-4" id="infoBox">
<div class="row d-flex flex-row-reverse align-items-center"> <div class="row d-flex flex-row-reverse align-items-center">
<div class="col d-flex justify-content-end" id="stacked"> <div class="col d-flex justify-content-end" id="stacked">
<buttonMain <buttonMain isPrimary buttonText="Button test" loaderColor="white" sizeInRem="1" />
isPrimary </div>
buttonText="Button test" <div class="col">
loaderColor="white" <textLink linkType="navigation" text="back" />
sizeInRem="1" </div>
/>
</div>
<div class="col">
<textLink
navigation=true
text="back"
/>
</div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import textLink from "@/ux-components/text-link/text-link"; import textLink from "@/ux-components/text-link/text-link";
import buttonMain from "@/ux-components/button-main/button-main"; import buttonMain from "@/ux-components/button-main/button-main";
export default { export default {
name: "funnelFooter", name: "funnelFooter",
components: { components: {
textLink, textLink,
buttonMain buttonMain
},
data() {
return {
paddingHeight: 0
}
},
mounted() {
this.paddingHeight = document.getElementById("infoBox").offsetHeight;
this.$nextTick(() => {
window.addEventListener('resize', this.onResize);
})
setTimeout(function(){ // Give it a moment to set the date
document.getElementById('years').innerHTML += new Date().getFullYear();
}, 100);
this.checkHeight();
},
beforeUnmount() {
window.removeEventListener('resize', this.onResize);
},
methods: {
onResize() {
this.paddingHeight = document.getElementById("infoBox").offsetHeight;
this.checkHeight();
}, },
checkHeight() { data() {
const parentHeight = document.getElementById('infoBox').clientHeight; return {
const wrapper2 = document.getElementById('stacked'); paddingHeight: 0
console.log(parentHeight); }
console.log(wrapper2); },
if (parentHeight > 80) { mounted() {
wrapper2.classList.add("justify-content-start"); this.paddingHeight = document.getElementById("infoBox").offsetHeight;
wrapper2.classList.remove("justify-content-end"); this.$nextTick(() => {
} else { window.addEventListener('resize', this.onResize);
wrapper2.classList.add("justify-content-end"); })
wrapper2.classList.remove("justify-content-start"); setTimeout(function () { // Give it a moment to set the date
} document.getElementById('years').innerHTML += new Date().getFullYear();
}, 100);
this.checkHeight();
},
beforeUnmount() {
window.removeEventListener('resize', this.onResize);
},
methods: {
onResize() {
this.paddingHeight = document.getElementById("infoBox").offsetHeight;
this.checkHeight();
},
checkHeight() {
const parentHeight = document.getElementById('infoBox').clientHeight;
const wrapper2 = document.getElementById('stacked');
if (parentHeight > 80) {
wrapper2.classList.add("justify-content-start");
wrapper2.classList.remove("justify-content-end");
} else {
wrapper2.classList.add("justify-content-end");
wrapper2.classList.remove("justify-content-start");
}
}
} }
}
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
button { button {
min-width: 200px; min-width: 200px;
width: 100%; width: 100%;
} }
</style> </style>

View file

@ -48,18 +48,19 @@
<div class="row"> <div class="row">
<div class="col my-3"> <div class="col my-3">
<textLink <textLink
navigation=true linkType=navigation
text="Navigation Link" text="Navigation Link"
/><br><br> /><br><br>
<textLink <textLink
linkType="text"
text="Default Link" text="Default Link"
/><br><br> /><br><br>
<textLink <textLink
textSmall=true linkType=textSmall
text="Small Link" text="Small Link"
/><br><br> /><br><br>
<textLink <textLink
footer=true linkType=footer
text="Footer Link" text="Footer Link"
href="https://google.com" href="https://google.com"
/> />

View file

@ -3,11 +3,12 @@ import textLink from "./text-link";
import { nextTick } from "vue"; import { nextTick } from "vue";
describe("text-link.vue", () => { describe("text-link.vue", () => {
it("Should return text-link type is navigation if prop navigation is true", async () => {
it("Should return class navigation-link", async () => {
// Act // Act
const wrapper = shallowMount(textLink, { const wrapper = shallowMount(textLink, {
propsData: { propsData: {
navigation: true, linkType: "navigation",
}, },
}); });
@ -18,11 +19,11 @@ describe("text-link.vue", () => {
expect(paragraph.attributes("class")).toContain("navigation-link"); expect(paragraph.attributes("class")).toContain("navigation-link");
}); });
it("Should return text-link type is footer if prop footer is true", async () => { it("Should return class footer", async () => {
// Act // Act
const wrapper = shallowMount(textLink, { const wrapper = shallowMount(textLink, {
propsData: { propsData: {
footer: true, linkType: "footer",
}, },
}); });
@ -30,14 +31,14 @@ describe("text-link.vue", () => {
const paragraph = wrapper.find("a"); const paragraph = wrapper.find("a");
// Expect // Expect
expect(paragraph.attributes("class")).toContain("footer-link"); expect(paragraph.attributes("class")).toContain("footer");
}); });
it("Should return text-link type is textSmall if prop textSmall is true", async () => { it("Should return class text-small", async () => {
// Act // Act
const wrapper = shallowMount(textLink, { const wrapper = shallowMount(textLink, {
propsData: { propsData: {
textSmall: true, linkType: "textSmall",
}, },
}); });
@ -48,18 +49,4 @@ describe("text-link.vue", () => {
expect(paragraph.attributes("class")).toContain("small"); expect(paragraph.attributes("class")).toContain("small");
}); });
it("Should return text for href", async () => {
// Act
const wrapper = shallowMount(textLink, {
propsData: {
text: "This is link text",
},
});
// Assert
const paragraph = wrapper.find("a");
// Expect
expect(paragraph.text()).toEqual("This is link text");
});
}); });

View file

@ -1,17 +1,15 @@
<template> <template>
<a v-if="navigation" @click="handleClick" class="navigation-link" :href="href">{{text}}</a> <a v-if="linkType === 'navigation'" @click="handleClick" class="navigation-link" :href="href">{{text}}</a>
<a v-else-if="footer" @click="handleClick" class="footer-link" :href="href" target="_blank">{{text}}</a> <a v-else-if="linkType === 'footer'" @click="handleClick" class="footer-link" :href="href" target="_blank">{{text}}</a>
<a v-else-if="textSmall" @click="handleClick" class="small" :href="href">{{text}}</a> <a v-else-if="linkType === 'textSmall'" @click="handleClick" class="small" :href="href">{{text}}</a>
<a v-else @click="handleClick" :href="href">{{text}}</a> <a v-else-if="linkType === 'text'" @click="handleClick" :href="href">{{text}}</a>
</template> </template>
<script> <script>
export default { export default {
name: "textLink", name: "textLink",
props: { props: {
navigation: Boolean, linkType: String,
footer: Boolean,
textSmall: Boolean,
text: String, text: String,
href: { href: {
type: String, type: String,