webpackJsonp([1],[,,function(e,t,n){"use strict";var r=n(35),o=n.n(r),a=n(17),s=n.n(a),i={initialized:!1,baseURL:"api",defaultOptions:{xhrFields:{withCredentials:!0},statusCode:{401:function(){l.loggedIn=!1},404:function(){alert("The requested service is not available!")}},error:function(e){var t=e.statusText+" ("+e.status+")";e.responseText&&(t=t+": "+e.responseText),l.debug("Ajax error: "+t)}},setup:function(){s.a.ajaxSetup(i.defaultOptions),i.initialized=!0},call:function(e){return!0!==i.initialized&&(l.debug("AJAX not initialized. Initialing now..."),i.setup()),e.url=i.baseURL+e.url,s.a.ajax(e)},get:function(e){return i.call({type:"GET",url:e})},post:function(e,t){return i.call({type:"POST",url:e,data:t})},postJSON:function(e,t){return i.call({type:"POST",url:e,contentType:"application/json",data:o()(t)})}};i.setup();var l={loggedIn:!1,debug:function(e){console.log(e)},assertLoggedIn:function(e){this.loggedIn||e.$router.push("/login")},login:function(e,t){var n={username:e,password:t};return i.post("/auth/login",n)},logout:function(){return i.post("/auth/logout")},getEmployeeFilter:function(){return i.get("/employee/filter")},findEmployees:function(e){return i.postJSON("/employee/list",e)},createEmployeeRecord:function(){return i.get("/employee/add")},readEmployeeRecord:function(e){return i.get("/employee/get/"+e)},updateEmployee:function(e){return i.postJSON("/employee/update",e)},deleteEmployee:function(e){return i.get("/employee/delete/"+e)}};t.a=l},,,,,,,,,,,,,,,,function(e,t,n){var r=n(0)(n(27),null,null,null,null);e.exports=r.exports},function(e,t,n){var r=n(0)(n(28),n(83),null,null,null);e.exports=r.exports},function(e,t,n){var r=n(0)(n(29),n(84),null,null,null);e.exports=r.exports},function(e,t,n){var r=n(0)(n(30),null,null,null,null);e.exports=r.exports},function(e,t,n){var r=n(0)(n(31),null,null,null,null);e.exports=r.exports},function(e,t,n){"use strict";var r=n(36),o=n.n(r),a=n(37),s=n.n(a),i=n(7),l=n(86),u=n(79),c=n.n(u),d=n(78),p=n.n(d),m=n(77),f=n.n(m);i.a.use(l.a),t.a=new l.a({routes:[{path:"/login",component:c.a},{path:"/employeeList",component:p.a},{path:"/employeeDetail/:employeeId",component:f.a,props:function(e){var t=s()(e.params.employeeId);return o()(t)?0:{employeeId:t}}},{path:"*",redirect:"/login"}]})},function(e,t,n){function r(e){n(72)}var o=n(0)(n(26),n(82),r,null,null);e.exports=o.exports},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(7),o=n(24),a=n.n(o),s=n(23);r.a.config.productionTip=!1,new r.a({el:"#app",router:s.a,template:"<App/>",components:{App:a.a}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(7),o=n(2);t.default={name:"app",data:function(){return{employeeFilter:void 0,messages:void 0,redirectWithError:!1}},created:function(){this.startup()},watch:{$route:function(e,t){this.redirectWithError?this.redirectWithError=!1:this.clearMessages()}},methods:{startup:function(){o.a.debug("Application startup! Vue version is "+r.a.version)},clearData:function(){this.employeeFilter=void 0},clearMessages:function(){this.messages=void 0},addMessages:function(e){this.messages?this.messages=this.messages.concat(e):this.messages=e},redirect:function(e){this.clearMessages(),this.$router.push(e)},handleError:function(e,t){t&&(this.redirectWithError=!0,this.$router.push(t)),e.responseJSON?this.addMessages(e.responseJSON):this.addMessages([e.statusText])},isLoggedIn:function(){return void 0===o.a.loggedIn&&(o.a.debug("EMPAPI.loggedIn is undefined!"),o.a.loggedIn=!0),o.a.loggedIn},doLogout:function(){var e=this;confirm("Do you really want to logout?")&&o.a.logout().done(function(){return e.onLogoutComplete()})},onLoginComplete:function(){o.a.loggedIn=!0,this.clearData(),this.$router.push("/employeeList")},onLogoutComplete:function(){o.a.loggedIn=!1,this.clearData(),this.$router.push("/login")}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(11),o=n.n(r),a=n(20),s=n.n(a),i=n(19),l=n.n(i);t.default={functional:!0,name:"e-control",props:{column:{required:!0},record:{type:Object},data:{type:Object}},render:function(e,t){return[e("td",{class:"eCtlLabel"},[e(s.a,{props:o()({column:t.props.column,forInput:!0})})]),e("td",{class:"eCtlInput"},[e(l.a,{props:t.props})])]}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),o=n(22),a=n.n(o),s=n(17),i=n.n(s);t.default={name:"e-input",components:{eValue:a.a},props:{column:{required:!0},record:{type:Object},data:{type:Object}},computed:{_record:function(){var e=this.record;if(void 0===e)for(var t=this.$parent;t;){if(t.record){e=t.record;break}t=t.$parent}if(void 0===e)throw new TypeError("e-input: No data or record provided!");if(void 0===e.meta)throw new TypeError("e-input: Invalid record param: no meta property!");if(void 0===e.data)throw new TypeError("e-input: Invalid record param: no data property!");return e},_recordData:function(){return void 0===this.data?this._record.data:this.data},meta:function(){if("string"==typeof this.column||this.column instanceof String)return this._record.meta[this.column];if(void 0===this.column.dataType)throw new TypeError("e-input: Invalid column param!");return this.column},dataValue:{get:function(){var e=this.meta.property;return this._recordData[e]},set:function(e){var t=this.meta.property;this._recordData[t]=e}}},methods:{isValueEqualTo:function(e){var t=this.dataValue;return""===e&&(e=null),t===e},styleClass:function(e,t){var n="eInput "+e;return n+=" eType"+t.dataType,t.disabled&&(n+=" eInpDis"),t.required&&(n+=" eInpReq"),t.styleClass&&(n+=" "+t.styleClass),n},inputValue:function(e){return i()(e.currentTarget).val()},checkboxValue:function(e){return i()(e.currentTarget).prop("checked")},updateData:function(e){this.dataValue=e,r.a.debug('Value for: "'+this.meta.name+'" has been set to: '+e)}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"e-label",props:{column:{required:!0},record:{type:Object},forInput:{type:Boolean,default:!1}},computed:{meta:function(){if("string"==typeof this.column||this.column instanceof String){var e=this.record;if(void 0===e)for(var t=this.$parent;t;){if(t.record){e=t.record;break}t=t.$parent}if(void 0===e)throw new TypeError("e-label: No data or record provided!");if(void 0===e.meta)throw new TypeError("e-label: Invalid record param: no meta property!");return e.meta[this.column]}if(void 0===this.column.dataType)throw new TypeError("e-label: Invalid column param!");return this.column}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"e-record",props:{record:{type:Object},styleClass:{type:String,default:"eRecord"}},render:function(e){if(void 0!==this.record)return e("div",{class:this.styleClass},this.$slots.default)}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={functional:!0,name:"e-value",props:{column:{required:!0},record:{type:Object},data:{type:Object}},render:function(e,t){function n(e){var t=e.props.record;if(void 0===t)for(var n=e.parent;n;){if(n.record){t=n.record;break}n=n.$parent}if(void 0===t)throw new TypeError("e-input: No data or record provided!");if(void 0===t.meta)throw new TypeError("e-input: Invalid record param: no meta property!");if(void 0===t.data)throw new TypeError("e-input: Invalid record param: no data property!");return t}var r=function(e,t){if("string"==typeof e||e instanceof String)return n(t).meta[e];if(void 0===e.dataType)throw new TypeError("e-value: Invalid column param!");return e}(t.props.column,t),o=function(e,t){return void 0===t.props.data?n(t).data[e]:t.props.data[e]}(r.property,t);return r.options&&(o=r.options[o]),e("span",{class:"eVal"},o)}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),o=n(21),a=n.n(o),s=n(18),i=n.n(s);t.default={name:"employeeDetail",components:{eRecord:a.a,eControl:i.a},props:{employeeId:{required:!0}},data:function(){return{employeeRecord:void 0}},computed:{allowDelete:function(){return this.employeeRecord&&!this.employeeRecord.data._newRecord}},created:function(e){r.a.assertLoggedIn(this),0===this.employeeId?this.addNew():this.loadDetails()},methods:{addNew:function(){var e=this;r.a.debug("create employee record"),r.a.createEmployeeRecord(this.employeeId).done(function(t){return e.onLoadDone(t)}).fail(function(t){return e.$parent.handleError(t,"/employeeList")})},loadDetails:function(){var e=this;r.a.debug("load employee record"),r.a.readEmployeeRecord(this.employeeId).done(function(t){return e.onLoadDone(t)}).fail(function(t){return e.$parent.handleError(t,"/employeeList")})},doSave:function(e){var t=this;this.$parent.clearMessages(),r.a.debug("load employee record"),r.a.updateEmployee(this.employeeRecord.data).done(function(e){return t.onUpdateDone(e)}).fail(function(e){return t.$parent.handleError(e)})},doDelete:function(e){var t=this;confirm("Do you really want to delete this employee?")&&(this.$parent.clearMessages(),r.a.debug("load employee record"),r.a.deleteEmployee(this.employeeId).done(function(e){return t.onUpdateDone(e)}).fail(function(e){return t.$parent.handleError(e,"/employeeList")}))},doReturnToList:function(e){this.$router.push("/employeeList")},onLoadDone:function(e){this.employeeRecord=e},onUpdateDone:function(e){r.a.debug("employee record successfully updated"),this.$router.push("/employeeList")}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(11),o=n.n(r),a=n(2),s=n(21),i=n.n(s),l=n(18),u=n.n(l),c=n(19),d=n.n(c),p=n(20),m=n.n(p),f=n(22),v=n.n(f);t.default={name:"employeeList",components:{eRecord:i.a,eControl:u.a,eInput:d.a,eLabel:m.a,eValue:v.a},data:function(){return{filter:void 0,searchDone:!1,employeeList:void 0}},computed:{meta:function(){return this.employeeList.meta}},created:function(){var e=this;a.a.assertLoggedIn(this),this.$parent.employeeFilter?(this.filter=this.$parent.employeeFilter,this.doSearch()):a.a.getEmployeeFilter().done(function(t){return e.initSearch(t)})},methods:{initSearch:function(e){this.filter=e,this.searchDone=!1,this.employeeList=void 0},doReset:function(){var e=this;a.a.debug("resetting search filter"),a.a.getEmployeeFilter().done(function(t){return e.initSearch(t)}),this.$parent.employeeFilter=void 0},doSearch:function(){var e=this;a.a.debug("load employee list"),a.a.findEmployees(this.filter.data).done(function(t){return e.onSearchComplete(t)})},doAddNew:function(){this.$router.push("/employeeDetail/0")},onSearchComplete:function(e){this.employeeList=e,this.searchDone=!0,this.$parent.employeeFilter={meta:this.filter.meta,data:o()({},this.filter.data)}}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2);t.default={name:"userLogin",data:function(){return{username:"",password:""}},methods:{login:function(){var e=this;r.a.login(this.username,this.password).done(function(){return e.$parent.onLoginComplete()}).fail(function(t){return e.$parent.handleError(t)})}}}},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t){},function(e,t){},function(e,t){},,,,function(e,t,n){var r=n(0)(n(32),n(81),null,null,null);e.exports=r.exports},function(e,t,n){function r(e){n(71)}var o=n(0)(n(33),n(80),r,"data-v-007c8fce",null);e.exports=o.exports},function(e,t,n){function r(e){n(73)}var o=n(0)(n(34),n(85),r,"data-v-7b324c0c",null);e.exports=o.exports},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"page-content"},[n("h1",[e._v("Employee-List")]),e._v(" "),n("e-record",{attrs:{styleClass:"formPanel",record:e.filter}},[n("table",{staticClass:"inputForm"},[n("tr",[n("e-control",{attrs:{column:"firstName"}}),e._v(" "),n("e-control",{attrs:{column:"lastName"}})],1),e._v(" "),n("tr",[n("e-control",{attrs:{column:"departmentId"}}),e._v(" "),n("e-control",{attrs:{column:"gender"}})],1),e._v(" "),n("tr",{staticClass:"formButtonRow"},[n("td"),e._v(" "),n("td",{staticClass:"buttonBar",attrs:{colspan:"3"}},[n("button",{attrs:{disabled:!e.searchDone},on:{click:function(t){return e.doReset()}}},[e._v("Search reset")]),e._v(" "),n("button",{on:{click:function(t){return e.doSearch()}}},[e._v("Search")])])])])]),e._v(" "),e.searchDone?n("div",{staticClass:"searchResult"},[n("h1",[e._v("Search found "+e._s(e.employeeList.data.length)+" Employees")]),e._v(" "),n("table",{staticClass:"employeeList"},[e._m(0),e._v(" "),n("thead",[n("tr",[n("th",[e._v("ID")]),e._v(" "),n("th",[n("e-label",{attrs:{column:e.meta.name}})],1),e._v(" "),n("th",[n("e-label",{attrs:{column:e.meta.department}})],1),e._v(" "),n("th",[n("e-label",{attrs:{column:e.meta.gender}})],1),e._v(" "),n("th",[n("e-label",{attrs:{column:e.meta.dateOfBirth}})],1),e._v(" "),n("th",[e._v("Retired")])])]),e._v(" "),n("tbody",[e._l(e.employeeList.data,function(t,r){return[n("tr",{key:r,class:[r%2==0?"row-even":"row-odd"]},[n("td",[e._v(e._s(t.employeeId))]),e._v(" "),n("td",[n("router-link",{staticClass:"eLink",attrs:{to:{path:"/employeeDetail/"+t.employeeId}}},[n("e-value",{attrs:{column:e.meta.name,data:t}})],1)],1),e._v(" "),n("td",[n("e-value",{attrs:{data:t,column:e.meta.department}})],1),e._v(" "),n("td",[n("e-value",{attrs:{data:t,column:e.meta.gender}})],1),e._v(" "),n("td",[n("e-value",{attrs:{data:t,column:e.meta.dateOfBirth}})],1),e._v(" "),n("td",[n("e-value",{attrs:{data:t,column:e.meta.retired}})],1)])]})],2)])]):e._e(),e._v(" "),n("div",{staticClass:"buttonBar"},[n("button",{on:{click:function(t){return e.$parent.doLogout()}}},[e._v("Logout")]),e._v(" "),n("button",{on:{click:function(t){return e.doAddNew()}}},[e._v("Add new employee")])])],1)},staticRenderFns:[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("colgroup",[n("col",{staticClass:"col-id"}),e._v(" "),n("col",{staticClass:"col-name"}),e._v(" "),n("col",{staticClass:"col-department"}),e._v(" "),n("col",{staticClass:"col-gender"}),e._v(" "),n("col",{staticClass:"col-dateOfBirth"}),e._v(" "),n("col",{staticClass:"col-Retired"})])}]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"page-content"},[n("h1",[e._v("Employee-Details ("+e._s(e.employeeId)+")")]),e._v(" "),n("e-record",{attrs:{styleClass:"formPanel",record:e.employeeRecord}},[n("table",{staticClass:"inputForm",staticStyle:{width:"400px"}},[n("colgroup",[n("col",{attrs:{width:"120px"}}),e._v(" "),n("col")]),e._v(" "),n("tr",[n("e-control",{attrs:{column:"salutation"}})],1),e._v(" "),n("tr",[n("e-control",{attrs:{column:"firstName"}})],1),e._v(" "),n("tr",[n("e-control",{attrs:{column:"lastName"}})],1),e._v(" "),n("tr",[n("e-control",{attrs:{column:"dateOfBirth",format:"[yyyy-MM-dd]"}})],1),e._v(" "),n("tr",[n("e-control",{attrs:{column:"departmentId"}})],1),e._v(" "),n("tr",[n("e-control",{attrs:{column:"gender"}})],1),e._v(" "),n("tr",[n("e-control",{attrs:{column:"phoneNumber"}})],1),e._v(" "),n("tr",[n("e-control",{attrs:{column:"email"}})],1),e._v(" "),n("tr",[n("e-control",{attrs:{column:"salary"}})],1),e._v(" "),n("tr",[n("e-control",{attrs:{column:"retired"}})],1)])]),e._v(" "),n("div",{staticClass:"buttonBar"},[n("button",{on:{click:function(t){return e.doReturnToList(t)}}},[e._v("Back")]),e._v(" "),e.allowDelete?n("button",{on:{click:function(t){return e.doDelete(t)}}},[e._v("Delete")]):e._e(),e._v(" "),n("button",{on:{click:function(t){return e.doSave(t)}}},[e._v("Save")])])],1)},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{attrs:{id:"app"}},[n("div",{staticClass:"titleDiv"},[n("span",[e._v("Employee Management Application")]),e._v(" "),this.isLoggedIn()?n("button",{on:{click:e.doLogout}},[e._v("Logout")]):e._e()]),e._v(" "),e.messages?n("div",{attrs:{id:"messages"}},[n("ul",[e._l(e.messages,function(t){return[n("li",[e._v(e._s(t))])]})],2)]):e._e(),e._v(" "),n("router-view")],1)},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"eInpWrap"},[e.meta.readOnly?[n("e-value",{attrs:{column:e.meta,data:e._recordData}})]:"select"===e.meta.controlType?[n("select",{class:e.styleClass("eSelect",e.meta),attrs:{id:"CTL_"+e.meta.name,name:e.meta.name,disabled:e.meta.disabled},on:{change:function(t){e.updateData(e.inputValue(t))}}},[!1!==e.meta.required&&!e.isValueEqualTo(null)||void 0!==e.meta.options[""]?e._e():[n("option",{attrs:{value:""},domProps:{selected:e.isValueEqualTo(null)}})],e._v(" "),e._l(e.meta.options,function(t,r){return[n("option",{domProps:{value:r,selected:e.isValueEqualTo(r)}},[e._v(e._s(t))])]})],2)]:"checkbox"===e.meta.controlType?[n("input",{class:e.styleClass("eCheckbox",e.meta),attrs:{id:"CTL_"+e.meta.name,name:e.meta.name,lang:"en",type:"checkbox",readonly:e.meta.disabled},domProps:{checked:e.dataValue},on:{input:function(t){e.updateData(e.checkboxValue(t))}}})]:[n("input",{class:e.styleClass("eInpText",e.meta),attrs:{id:"CTL_"+e.meta.name,name:e.meta.name,lang:"en",type:"text",readonly:e.meta.disabled,maxlength:e.meta.maxLength},domProps:{value:e.dataValue},on:{input:function(t){e.updateData(e.inputValue(t))}}})]],2)},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.forInput?n("label",{staticClass:"eLabel",attrs:{for:"CTL_"+e.meta.name}},[e._v(e._s(e.meta.title)+":"),e.meta.required?n("span",{staticClass:"required"},[e._v("*")]):e._e()]):n("span",{staticClass:"eLabel"},[e._v(e._s(e.meta.title))])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"page-content"},[n("form",{attrs:{id:"loginForm",name:"loginForm",enctype:"application/x-www-form-urlencoded"},on:{submit:function(t){return t.preventDefault(),e.login.apply(null,arguments)}}},[n("p",[e._v("Hint: enter any non null username and password.")]),e._v(" "),n("div",{staticClass:"formPanel"},[n("table",{staticClass:"inputForm"},[n("tr",{staticClass:"formButtonRow"},[e._m(0),e._v(" "),n("td",{staticClass:"eCtlInput"},[n("input",{directives:[{name:"model",rawName:"v-model",value:e.username,expression:"username"}],attrs:{id:"inputUsername",name:"username",type:"text",tabindex:"1"},domProps:{value:e.username},on:{input:function(t){t.target.composing||(e.username=t.target.value)}}})])]),e._v(" "),n("tr",{staticClass:"formButtonRow"},[e._m(1),e._v(" "),n("td",{staticClass:"eCtlInput"},[n("input",{directives:[{name:"model",rawName:"v-model",value:e.password,expression:"password"}],attrs:{id:"inputPassword",type:"password",placeholder:"Password",tabindex:"2"},domProps:{value:e.password},on:{input:function(t){t.target.composing||(e.password=t.target.value)}}})])]),e._v(" "),e._m(2)])])])])},staticRenderFns:[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("td",{staticClass:"eCtlLabel"},[n("label",{attrs:{for:"inputUsername"}},[e._v("User name")]),e._v(":")])},function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("td",{staticClass:"eCtlLabel"},[n("label",{attrs:{for:"inputPassword"}},[e._v("Password")]),e._v(":")])},function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",{staticClass:"formButtonRow"},[n("td"),e._v(" "),n("td",{staticClass:"buttonBar",attrs:{colspan:"3"}},[n("button",{attrs:{type:"submit"}},[e._v("Login")])])])}]}}],[25]);
//# sourceMappingURL=app.5a998470448b25588615.js.map