diff --git a/jest.config.js b/jest.config.js
index b01ebaadf..c12380928 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -4,7 +4,7 @@ module.exports = {
preset: "@vue/cli-plugin-unit-jest",
transform: { "^.+\\.vue$": "vue-jest", },
moduleFileExtensions: ['js', 'vue'],
- collectCoverageFrom: ["src/**/*.{js,vue}", "!src/main.js", "!src/constants/*.js", "!src/router/*.js", "!src/helpers/*.js"], //! means exclude from coverage.
+ collectCoverageFrom: ["src/**/*.{js,vue}", "!src/main.js", "!src/constants/*.js", "!src/router/**/*.js", "!src/helpers/*.js"], //! means exclude from coverage.
testMatch: ["**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)"],
coverageThreshold: {
global: {
diff --git a/src/constants/endpoints.js b/src/constants/endpoints.js
index a390db3ec..468e4f3b0 100644
--- a/src/constants/endpoints.js
+++ b/src/constants/endpoints.js
@@ -11,15 +11,16 @@ const endpoints = {
url: '/vehicle/api/v1/vehicle/Makes',
method: 'POST'
},
- GetModels: {
+ GetVehicleModels: {
url: '/vehicle/api/v1/vehicle/Models',
- method: 'POST'
+ method: 'GET'
},
GetStyles: {
url: '/vehicle/api/v1/vehicle/Styles',
method: 'POST'
},
GetPageData: {
+ url: '/content/api/v1/content/{pageName}',
method: 'GET'
}
}
diff --git a/src/constants/storeActions.js b/src/constants/storeActions.js
index 5ef5a3157..e576e8ed2 100644
--- a/src/constants/storeActions.js
+++ b/src/constants/storeActions.js
@@ -1,7 +1,8 @@
const storeActions = {
GET_ROUTE_INFO_ACTION: "getRouteInfo",
GET_YEARS: 'getYears',
- GET_PAGE_DATA: 'getMockPageData',
+ GET_VEHICLE_MODELS: 'getVehicleModels',
+ GET_PAGE_DATA: 'getPageData',
}
export { storeActions }
\ No newline at end of file
diff --git a/src/constants/widgetNames.js b/src/constants/widgetNames.js
index 013083bcf..e15d2d7f8 100644
--- a/src/constants/widgetNames.js
+++ b/src/constants/widgetNames.js
@@ -1,6 +1,7 @@
const widgetNames = {
- PAGE_HEADING_WIDGET: "PageHeadingWidget",
+ HEADER_TEXT_WIDGET: "HeaderTextWidget",
RADIO_QUESTION_WIDGET: "RadioQuestionWidget"
}
+
export { widgetNames }
\ No newline at end of file
diff --git a/src/global-methods.js b/src/global-methods.js
index 0b33cf613..1b120b662 100644
--- a/src/global-methods.js
+++ b/src/global-methods.js
@@ -16,7 +16,6 @@ export default {
crossDomain: true,
responseType: {},
}).then((response) => {
-
if (response.status == httpStatusCodes.OK) {
resolve(response);
} else {
diff --git a/src/layouts/selectMake/selectMake.spec.js b/src/layouts/selectMake/selectMake.spec.js
deleted file mode 100644
index 882a68129..000000000
--- a/src/layouts/selectMake/selectMake.spec.js
+++ /dev/null
@@ -1 +0,0 @@
-test.todo('some test to be written in the future');
\ No newline at end of file
diff --git a/src/layouts/selectMake/selectMake.vue b/src/layouts/selectMake/selectMake.vue
deleted file mode 100644
index 8821286a3..000000000
--- a/src/layouts/selectMake/selectMake.vue
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
-
-
diff --git a/src/layouts/selectModel/selectModel.spec.js b/src/layouts/selectModel/selectModel.spec.js
deleted file mode 100644
index 882a68129..000000000
--- a/src/layouts/selectModel/selectModel.spec.js
+++ /dev/null
@@ -1 +0,0 @@
-test.todo('some test to be written in the future');
\ No newline at end of file
diff --git a/src/layouts/selectModel/selectModel.vue b/src/layouts/selectModel/selectModel.vue
deleted file mode 100644
index 4c0bd9b0d..000000000
--- a/src/layouts/selectModel/selectModel.vue
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
diff --git a/src/layouts/selectStyle/selectStyle.spec.js b/src/layouts/selectStyle/selectStyle.spec.js
deleted file mode 100644
index 882a68129..000000000
--- a/src/layouts/selectStyle/selectStyle.spec.js
+++ /dev/null
@@ -1 +0,0 @@
-test.todo('some test to be written in the future');
\ No newline at end of file
diff --git a/src/layouts/selectStyle/selectStyle.vue b/src/layouts/selectStyle/selectStyle.vue
deleted file mode 100644
index 731b0d8d9..000000000
--- a/src/layouts/selectStyle/selectStyle.vue
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
-
diff --git a/src/layouts/selectYear/selectYear.vue b/src/layouts/selectYear/selectYear.vue
deleted file mode 100644
index 3b633b005..000000000
--- a/src/layouts/selectYear/selectYear.vue
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
diff --git a/src/layouts/selectYear/selectYear.spec.js b/src/layouts/vehicle-year/vehicle-year.spec.js
similarity index 100%
rename from src/layouts/selectYear/selectYear.spec.js
rename to src/layouts/vehicle-year/vehicle-year.spec.js
diff --git a/src/layouts/vehicle-year/vehicle-year.vue b/src/layouts/vehicle-year/vehicle-year.vue
new file mode 100644
index 000000000..24df9fe74
--- /dev/null
+++ b/src/layouts/vehicle-year/vehicle-year.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
diff --git a/src/layouts/vehicle-year/year-question/year-question.spec.js b/src/layouts/vehicle-year/year-question/year-question.spec.js
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/layouts/vehicle-year/year-question/year-question.vue b/src/layouts/vehicle-year/year-question/year-question.vue
new file mode 100644
index 000000000..4dbad4e38
--- /dev/null
+++ b/src/layouts/vehicle-year/year-question/year-question.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
diff --git a/src/mixins/baseMixin.js b/src/mixins/baseMixin.js
index 414d8bb47..600e489d1 100644
--- a/src/mixins/baseMixin.js
+++ b/src/mixins/baseMixin.js
@@ -11,16 +11,53 @@ export default {
// globalMethods.showWaitingModal(false);
});;
},
- dispatchNonBlockingStoreAction(type, payload) {
+ dispatchNonBlockingStoreAction(type, payload, encodePayload = false) {
+
+ // Encode the payload if required
+ if (encodePayload) {
+ encodeUriData(payload);
+ }
+
return this.$store.dispatch(type, payload);
},
+
+ GetContentFromCms() {
+ return this.dispatchNonBlockingStoreAction(this.storeActions.GET_PAGE_DATA, { pageName: this.$route.query.fmgPage })
+ .then((response) => {
+
+ const pageDataFromCms = {};
+
+ response.data.Result.forEach((widget) => {
+ if (Object.values(this.widgetNames).includes(widget.Type)) {
+ // If we already have this widget, push it on the collection
+ if (widget.Type in pageDataFromCms) {
+ pageDataFromCms[widget.Type].push(widget.Model);
+ return;
+ }
+
+ pageDataFromCms[widget.Type] = [widget.Model];
+ }
+ });
+
+ return pageDataFromCms;
+ });
+ }
},
computed: {
storeActions() {
return storeActions;
},
- widgetNames(){
+ widgetNames() {
return widgetNames;
}
},
+}
+
+function encodeUriData(payload) {
+ if (payload && Object.keys(payload).length > 0) {
+ // Loop through the payload and encode the values
+ Object.keys(payload).forEach(key => {
+ payload[key] = encodeURIComponent(payload[key]);
+ });
+ }
}
\ No newline at end of file
diff --git a/src/router/index.js b/src/router/index.js
index 836a6256e..415fb0292 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -38,7 +38,7 @@ const routes = [
// Add our dynamic route.
router.addRoute({
- path: '/', // Always the same path, because we control it with query strings.
+ path: routeData[0].path, // Always the same path, because we control it with query strings.
name: routeData[0].name,
component: routeData[0].component,
});
@@ -81,7 +81,7 @@ function GetRouteInfoFromPageName(pageName) {
Object.keys(jsonFromResponse).forEach((key) => {
routeData.push({
- path: `${jsonFromResponse[key].RelativeUrl}`,
+ path: '/',
name: `${key}`,
component: lazyLoadComponent(jsonFromResponse[key].LayoutName),
});
diff --git a/src/store/index.js b/src/store/index.js
index e861a5ff0..1e7ab1024 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -10,103 +10,33 @@ export default createStore({
}),
],
state: {
- makes: [],
- models: [],
- styles: [],
- year: "",
- make: "",
- model: "",
- style: "",
- slideTransition: "none",
- carImg:
- "https://s3.amazonaws.com/safelite-lab-vehicle-images/Evox/8963_cc0320_032_UG_white_2014_Ford_Focus_18029225538399034889.jpg",
- blurImg: true,
},
mutations: {
- updateYear(state, data) {
- state.year = data.year;
- state.makes = data.makes.data;
- state.slideTransition = "slide";
- },
- updateMake(state, data) {
- state.make = data.make;
- state.models = data.models.data;
- state.slideTransition = "slide";
- },
- updateModel(state, data) {
- state.model = data.model;
- state.styles = data.styles.data;
- state.slideTransition = "slide";
- },
- updateStyle(state, data) {
- state.style = data.style;
- state.carImg =
- "https://s3.amazonaws.com/safelite-lab-vehicle-images/Evox/8963_cc0320_032_UG_white_2014_Ford_Focus_18029225538399034889.jpg";
- state.blurImg = false;
- state.slideTransition = "slide";
- },
- removeStyle(state) {
- state.style = "";
- state.blurImg = true;
- state.carImg =
- "https://s3.amazonaws.com/safelite-lab-vehicle-images/Evox/8963_cc0320_032_UG_white_2014_Ford_Focus_18029225538399034889.jpg";
- },
},
actions: {
- getYears(){
- return globalMethods.callHttpClient({
- method: endpoints.GetYears.method,
- endpoint: endpoints.GetYears.url,
- payload:{}
- });
- },
- selectYear(context, { year }) {
- return globalMethods.callHttpClient({
- method: endpoints.GetMakes.method,
- endpoint: endpoints.GetMakes.url,
- payload:{
- "Year": year
- }
- });
- },
- selectMake({ commit, state }, { make }) {
- return globalMethods.callHttpClient({
- method: endpoints.GetModels.method,
- endpoint: endpoints.GetModels.url,
- payload:{
- "Year": state.year,
- "Make": make
- }
- });
- },
- selectModel({ commit, state }, { model }) {
- return globalMethods.callHttpClient({
- method: endpoints.GetStyles.method,
- endpoint: endpoints.GetStyles.url,
- payload:{
- "Year": state.year,
- "Make": state.make,
- "Model": model
- }
- });
- },
- getRouteInfo(context, { relativeUrl }) {
- return globalMethods.callHttpClient({
- method: endpoints.GetRouteInfoEndpoint.method,
- endpoint: endpoints.GetRouteInfoEndpoint.url,
- payload: {
- relativeUrl: relativeUrl,
- },
- });
- },
- // For mock data purposes only
- getMockPageData(context, { relativeUrl }) {
- return globalMethods.callMockHttpClient({
- method: endpoints.GetPageData.method,
- endpoint: relativeUrl,
- payload: {
- },
- });
- },
+ getVehicleModels({ commit, state }, { year, make }) {
+ console.log(arguments);
+ return globalMethods.callHttpClient({
+ method: endpoints.GetVehicleModels.method,
+ endpoint: `${endpoints.GetVehicleModels.url}/${year}/${encodeURI(make)}`,
+ payload: {}
+ });
+ },
+ getRouteInfo(context, { pageName }) {
+ return globalMethods.callHttpClient({
+ method: endpoints.GetRouteInfoEndpoint.method,
+ endpoint: endpoints.GetRouteInfoEndpoint.url,
+ payload: {
+ pageName: pageName,
+ },
+ });
+ },
+ getPageData(context, { pageName }) {
+ return globalMethods.callHttpClient({
+ method: endpoints.GetPageData.method,
+ endpoint: endpoints.GetPageData.url.replace("{pageName}", pageName),
+ payload: {},
+ });
+ },
},
});
diff --git a/vue.config.js b/vue.config.js
index bda41b2dd..02f606a6c 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -3,16 +3,6 @@ process.env.VUE_APP_CONSUMER_API_GATEWAY = "https://consumerapidev.safelite.com"
module.exports = {
outputDir: "dist/fmg",
publicPath: "/fmg",
- devServer: {
- port: 8080,
- proxy: {
- "api/v1/content*": {
- target: "https://localhost:44360/",
- ws: false,
- changeOrigin: true,
- },
- },
- },
css: {
loaderOptions: {
sass: { // Load Order Matters!!!