From 8e0f9bf81649a29f4d79c0afc6db6d0cc2fb5a8b Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 17 Nov 2021 14:54:00 -0500 Subject: [PATCH] Multiple refactor / improving changes --- jest.config.js | 2 +- src/constants/endpoints.js | 5 +- src/constants/storeActions.js | 3 +- src/constants/widgetNames.js | 3 +- src/global-methods.js | 1 - src/layouts/selectMake/selectMake.spec.js | 1 - src/layouts/selectMake/selectMake.vue | 48 ------- src/layouts/selectModel/selectModel.spec.js | 1 - src/layouts/selectModel/selectModel.vue | 46 ------- src/layouts/selectStyle/selectStyle.spec.js | 1 - src/layouts/selectStyle/selectStyle.vue | 47 ------- src/layouts/selectYear/selectYear.vue | 78 ------------ .../vehicle-year.spec.js} | 0 src/layouts/vehicle-year/vehicle-year.vue | 42 +++++++ .../year-question/year-question.spec.js | 0 .../year-question/year-question.vue | 44 +++++++ src/mixins/baseMixin.js | 41 +++++- src/router/index.js | 4 +- src/store/index.js | 118 ++++-------------- vue.config.js | 10 -- 20 files changed, 159 insertions(+), 336 deletions(-) delete mode 100644 src/layouts/selectMake/selectMake.spec.js delete mode 100644 src/layouts/selectMake/selectMake.vue delete mode 100644 src/layouts/selectModel/selectModel.spec.js delete mode 100644 src/layouts/selectModel/selectModel.vue delete mode 100644 src/layouts/selectStyle/selectStyle.spec.js delete mode 100644 src/layouts/selectStyle/selectStyle.vue delete mode 100644 src/layouts/selectYear/selectYear.vue rename src/layouts/{selectYear/selectYear.spec.js => vehicle-year/vehicle-year.spec.js} (100%) create mode 100644 src/layouts/vehicle-year/vehicle-year.vue create mode 100644 src/layouts/vehicle-year/year-question/year-question.spec.js create mode 100644 src/layouts/vehicle-year/year-question/year-question.vue 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!!!