diff --git a/resources/assets/js/home/Draft.vue b/resources/assets/js/home/Draft.vue index 2d5108aaa..816da1484 100644 --- a/resources/assets/js/home/Draft.vue +++ b/resources/assets/js/home/Draft.vue @@ -49,6 +49,7 @@ import ModalNewRequest from "./ModalNewRequest.vue"; import CasesFilter from "../components/search/CasesFilter"; import TaskCell from "../components/vuetable/TaskCell.vue"; import api from "./../api/index"; +import utils from "./../utils/utils"; export default { name: "Draft", @@ -59,7 +60,7 @@ export default { TaskCell, CasesFilter, }, - props: {}, + props: ["defaultOption"], data() { return { newCase: { @@ -106,7 +107,9 @@ export default { singleClickTimer: null }; }, - mounted() {}, + mounted() { + this.openDefaultCase(); + }, watch: {}, computed: { /** @@ -119,6 +122,21 @@ export default { updated() {}, beforeCreate() {}, methods: { + /** + * Open a case when the component was mounted + */ + openDefaultCase() { + let params; + if(this.defaultOption) { + params = utils.getAllUrlParams(this.defaultOption); + if (params && params.app_uid && params.del_index) { + this.openCase({ + APP_UID: params.app_uid, + DEL_INDEX: params.del_index + }); + } + } + }, /** * On row click event handler * @param {object} event diff --git a/resources/assets/js/home/Home.vue b/resources/assets/js/home/Home.vue index a37de4491..6ef3c84fa 100644 --- a/resources/assets/js/home/Home.vue +++ b/resources/assets/js/home/Home.vue @@ -24,6 +24,7 @@ :id="pageId" :pageUri="pageUri" :name="pageName" + :defaultOption="defaultOption" @onSubmitFilter="onSubmitFilter" @onRemoveFilter="onRemoveFilter" @onUpdatePage="onUpdatePage" @@ -93,7 +94,8 @@ export default { CONSOLIDATED_CASES: "batch-routing", CASES_TO_REASSIGN: "task-reassignments", CASES_FOLDERS: "my-documents" - } + }, + defaultOption: window.config.defaultOption || '' }; }, mounted() { diff --git a/resources/assets/js/home/Todo.vue b/resources/assets/js/home/Todo.vue index 74cb2e1cf..edff12d94 100644 --- a/resources/assets/js/home/Todo.vue +++ b/resources/assets/js/home/Todo.vue @@ -70,6 +70,7 @@ export default { TaskCell, CasesFilter, }, + props: ["defaultOption"], data() { return { newCase: { @@ -135,6 +136,21 @@ export default { updated() {}, beforeCreate() {}, methods: { + /** + * Open a case when the component was mounted + */ + openDefaultCase() { + let params; + if(this.defaultOption) { + params = utils.getAllUrlParams(this.defaultOption); + if (params && params.app_uid && params.del_index) { + this.openCase({ + APP_UID: params.app_uid, + DEL_INDEX: params.del_index + }); + } + } + }, /** * On row click event handler * @param {object} event diff --git a/resources/assets/js/utils/utils.js b/resources/assets/js/utils/utils.js index ba57a83d6..3b42aad92 100644 --- a/resources/assets/js/utils/utils.js +++ b/resources/assets/js/utils/utils.js @@ -18,5 +18,74 @@ export default { aux = aux.replace('@firstName',defaultValues.firstName); aux = aux.replace('@lastName',defaultValues.lastName); return aux; - } + }, + /** + * Parse an url string and prepare an object of the parameters + * @param {string} url + * @returns {object} + */ + getAllUrlParams(url) { + + // get query string from url (optional) or window + var queryString = url ? url.split('?')[1] : window.location.search.slice(1); + + // we'll store the parameters here + var obj = {}; + + // if query string exists + if (queryString) { + + // stuff after # is not part of query string, so get rid of it + queryString = queryString.split('#')[0]; + + // split our query string into its component parts + var arr = queryString.split('&'); + + for (var i = 0; i < arr.length; i++) { + // separate the keys and the values + var a = arr[i].split('='); + + // set parameter name and value (use 'true' if empty) + var paramName = a[0]; + var paramValue = typeof (a[1]) === 'undefined' ? true : a[1]; + + // (optional) keep case consistent + paramName = paramName.toLowerCase(); + if (typeof paramValue === 'string') paramValue = paramValue.toLowerCase(); + + // if the paramName ends with square brackets, e.g. colors[] or colors[2] + if (paramName.match(/\[(\d+)?\]$/)) { + + // create key if it doesn't exist + var key = paramName.replace(/\[(\d+)?\]/, ''); + if (!obj[key]) obj[key] = []; + + // if it's an indexed array e.g. colors[2] + if (paramName.match(/\[\d+\]$/)) { + // get the index value and add the entry at the appropriate position + var index = /\[(\d+)\]/.exec(paramName)[1]; + obj[key][index] = paramValue; + } else { + // otherwise add the value to the end of the array + obj[key].push(paramValue); + } + } else { + // we're dealing with a string + if (!obj[paramName]) { + // if it doesn't exist, create property + obj[paramName] = paramValue; + } else if (obj[paramName] && typeof obj[paramName] === 'string'){ + // if property does exist and it's a string, convert it to an array + obj[paramName] = [obj[paramName]]; + obj[paramName].push(paramValue); + } else { + // otherwise add the property + obj[paramName].push(paramValue); + } + } + } + } + + return obj; + } } \ No newline at end of file