├── .editorconfig ├── .gitignore ├── .vscode ├── launch.json └── settings.json ├── LICENSE ├── README.md ├── config ├── polyfills.js ├── polyfills.js.map ├── polyfills.ts ├── vendor.js ├── vendor.js.map ├── vendor.ts ├── webpack.common.js ├── webpack.development.js └── webpack.production.js ├── data ├── customers.json └── states.json ├── gulpfile.js ├── package.json ├── server.js ├── src ├── app │ ├── _common │ │ └── robots.txt │ ├── about │ │ ├── about-routing.module.js │ │ ├── about-routing.module.js.map │ │ ├── about-routing.module.ts │ │ ├── about.component.html │ │ ├── about.component.js │ │ ├── about.component.js.map │ │ ├── about.component.ts │ │ ├── about.module.js │ │ ├── about.module.js.map │ │ └── about.module.ts │ ├── admin │ │ └── robots.txt │ ├── app-routing.module.js │ ├── app-routing.module.js.map │ ├── app-routing.module.ts │ ├── app.component.html │ ├── app.component.js │ ├── app.component.js.map │ ├── app.component.ts │ ├── app.module.js │ ├── app.module.js.map │ ├── app.module.ts │ ├── auth │ │ └── robots.txt │ ├── core │ │ ├── core.module.js │ │ ├── core.module.js.map │ │ ├── core.module.ts │ │ ├── ensureModuleLoadedOnceGuard.js │ │ ├── ensureModuleLoadedOnceGuard.js.map │ │ ├── ensureModuleLoadedOnceGuard.ts │ │ ├── growler │ │ │ ├── growler.component.css │ │ │ ├── growler.component.js │ │ │ ├── growler.component.js.map │ │ │ ├── growler.component.ts │ │ │ ├── growler.module.js │ │ │ ├── growler.module.js.map │ │ │ ├── growler.module.ts │ │ │ ├── growler.service.js │ │ │ ├── growler.service.js.map │ │ │ └── growler.service.ts │ │ ├── modal │ │ │ ├── modal.component.css │ │ │ ├── modal.component.html │ │ │ ├── modal.component.js │ │ │ ├── modal.component.js.map │ │ │ ├── modal.component.ts │ │ │ ├── modal.module.js │ │ │ ├── modal.module.js.map │ │ │ ├── modal.module.ts │ │ │ ├── modal.service.js │ │ │ ├── modal.service.js.map │ │ │ └── modal.service.ts │ │ ├── navbar │ │ │ ├── navbar.component.html │ │ │ ├── navbar.component.js │ │ │ ├── navbar.component.js.map │ │ │ └── navbar.component.ts │ │ ├── services │ │ │ ├── auth.service.js │ │ │ ├── auth.service.js.map │ │ │ ├── auth.service.ts │ │ │ ├── data.service.js │ │ │ ├── data.service.js.map │ │ │ ├── data.service.ts │ │ │ ├── dialog.service.js │ │ │ ├── dialog.service.js.map │ │ │ ├── dialog.service.ts │ │ │ ├── filter.service.js │ │ │ ├── filter.service.js.map │ │ │ ├── filter.service.ts │ │ │ ├── property-resolver.js │ │ │ ├── property-resolver.js.map │ │ │ ├── property-resolver.ts │ │ │ ├── sorter.service.js │ │ │ ├── sorter.service.js.map │ │ │ ├── sorter.service.ts │ │ │ ├── trackby.service.js │ │ │ ├── trackby.service.js.map │ │ │ ├── trackby.service.ts │ │ │ ├── validation.service.js │ │ │ ├── validation.service.js.map │ │ │ └── validation.service.ts │ │ └── strategies │ │ │ ├── preload-modules.strategy.js │ │ │ ├── preload-modules.strategy.js.map │ │ │ └── preload-modules.strategy.ts │ ├── customer │ │ ├── can-activate.guard.js │ │ ├── can-activate.guard.js.map │ │ ├── can-activate.guard.ts │ │ ├── can-deactivate.guard.js │ │ ├── can-deactivate.guard.js.map │ │ ├── can-deactivate.guard.ts │ │ ├── customer-details.component.css │ │ ├── customer-details.component.html │ │ ├── customer-details.component.js │ │ ├── customer-details.component.js.map │ │ ├── customer-details.component.ts │ │ ├── customer-edit.component.css │ │ ├── customer-edit.component.html │ │ ├── customer-edit.component.js │ │ ├── customer-edit.component.js.map │ │ ├── customer-edit.component.ts │ │ ├── customer-orders.component.html │ │ ├── customer-orders.component.js │ │ ├── customer-orders.component.js.map │ │ ├── customer-orders.component.ts │ │ ├── customer-routing.module.js │ │ ├── customer-routing.module.js.map │ │ ├── customer-routing.module.ts │ │ ├── customer.component.html │ │ ├── customer.component.js │ │ ├── customer.component.js.map │ │ ├── customer.component.ts │ │ ├── customer.module.js │ │ ├── customer.module.js.map │ │ └── customer.module.ts │ ├── customers │ │ ├── customers-card.component.css │ │ ├── customers-card.component.html │ │ ├── customers-card.component.js │ │ ├── customers-card.component.js.map │ │ ├── customers-card.component.ts │ │ ├── customers-grid.component.css │ │ ├── customers-grid.component.html │ │ ├── customers-grid.component.js │ │ ├── customers-grid.component.js.map │ │ ├── customers-grid.component.ts │ │ ├── customers-routing.module.js │ │ ├── customers-routing.module.js.map │ │ ├── customers-routing.module.ts │ │ ├── customers.component.html │ │ ├── customers.component.js │ │ ├── customers.component.js.map │ │ ├── customers.component.ts │ │ ├── customers.module.js │ │ ├── customers.module.js.map │ │ └── customers.module.ts │ ├── login │ │ ├── login-routing.module.js │ │ ├── login-routing.module.js.map │ │ ├── login-routing.module.ts │ │ ├── login.component.css │ │ ├── login.component.html │ │ ├── login.component.js │ │ ├── login.component.js.map │ │ ├── login.component.ts │ │ ├── login.module.js │ │ ├── login.module.js.map │ │ └── login.module.ts │ ├── main.aot.ts │ ├── main.js │ ├── main.js.map │ ├── main.ts │ ├── orders │ │ ├── orders-routing.module.js │ │ ├── orders-routing.module.js.map │ │ ├── orders-routing.module.ts │ │ ├── orders.component.html │ │ ├── orders.component.js │ │ ├── orders.component.js.map │ │ ├── orders.component.ts │ │ ├── orders.module.js │ │ ├── orders.module.js.map │ │ └── orders.module.ts │ └── shared │ │ ├── directives │ │ ├── sortby.directive.js │ │ ├── sortby.directive.js.map │ │ └── sortby.directive.ts │ │ ├── filter-textbox │ │ ├── filter-textbox.component.css │ │ ├── filter-textbox.component.html │ │ ├── filter-textbox.component.js │ │ ├── filter-textbox.component.js.map │ │ ├── filter-textbox.component.ts │ │ ├── filter-textbox.module.js │ │ ├── filter-textbox.module.js.map │ │ └── filter-textbox.module.ts │ │ ├── interfaces.js │ │ ├── interfaces.js.map │ │ ├── interfaces.ts │ │ ├── map │ │ ├── map.component.html │ │ ├── map.component.js │ │ ├── map.component.js.map │ │ ├── map.component.ts │ │ ├── map.module.js │ │ ├── map.module.js.map │ │ ├── map.module.ts │ │ ├── mapPoint.component.js │ │ ├── mapPoint.component.js.map │ │ └── mapPoint.component.ts │ │ ├── pagination │ │ ├── pagination.component.css │ │ ├── pagination.component.html │ │ ├── pagination.component.js │ │ ├── pagination.component.js.map │ │ ├── pagination.component.ts │ │ ├── pagination.module.js │ │ ├── pagination.module.js.map │ │ └── pagination.module.ts │ │ ├── pipes │ │ ├── capitalize.pipe.js │ │ ├── capitalize.pipe.js.map │ │ ├── capitalize.pipe.ts │ │ ├── trim.pipe.js │ │ ├── trim.pipe.js.map │ │ └── trim.pipe.ts │ │ ├── router.animations.js │ │ ├── router.animations.js.map │ │ ├── router.animations.ts │ │ ├── shared.module.js │ │ ├── shared.module.js.map │ │ └── shared.module.ts ├── apple-touch-icon.png ├── assets │ ├── css │ │ ├── bootstrap-theme.css │ │ ├── bootstrap-theme.css.map │ │ ├── bootstrap-theme.min.css │ │ ├── bootstrap.css │ │ ├── bootstrap.css.map │ │ ├── bootstrap.min.css │ │ └── main.css │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ └── glyphicons-halflings-regular.woff │ └── js │ │ └── vendor │ │ ├── bootstrap.js │ │ ├── bootstrap.min.js │ │ ├── jquery-1.11.2.min.js │ │ ├── modernizr-2.8.3.min.js │ │ └── npm.js ├── browserconfig.xml ├── crossdomain.xml ├── environments │ ├── environment.js │ ├── environment.js.map │ ├── environment.prod.js │ ├── environment.prod.js.map │ ├── environment.prod.ts │ └── environment.ts ├── favicon.ico ├── humans.txt ├── images │ ├── female.png │ ├── male.png │ ├── people.png │ └── screenshots │ │ ├── cards.png │ │ ├── details.png │ │ ├── grid.png │ │ └── orders.png ├── index.html ├── index.webpack-template.html ├── robots.txt ├── styles │ └── styles.css ├── systemjs.config.js ├── tile-wide.png ├── tile.png └── vendors │ ├── vendor.js │ ├── vendor.js.map │ └── vendor.ts ├── tools ├── env │ ├── base.ts │ ├── dev.ts │ ├── env-config.interface.ts │ └── prod.ts └── tasks │ ├── build.js │ ├── clean.js │ ├── compile.js │ └── e2e.js ├── tsconfig.aot.json ├── tsconfig.json ├── tslint.json └── webpack.config.js /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | /dist 5 | /tmp 6 | /out-tsc 7 | 8 | # dependencies 9 | /node_modules 10 | 11 | # IDEs and editors 12 | /.idea 13 | .project 14 | .classpath 15 | .c9/ 16 | *.launch 17 | .settings/ 18 | *.sublime-workspace 19 | 20 | # IDE - VSCode 21 | .vscode/* 22 | !.vscode/settings.json 23 | !.vscode/tasks.json 24 | !.vscode/launch.json 25 | !.vscode/extensions.json 26 | 27 | # misc 28 | /.sass-cache 29 | /connect.lock 30 | /coverage 31 | /libpeerconnection.log 32 | npm-debug.log 33 | testem.log 34 | /typings 35 | 36 | # e2e 37 | /e2e/*.js 38 | /e2e/*.map 39 | 40 | # System Files 41 | .DS_Store 42 | Thumbs.db 43 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible Node.js debug attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | 8 | { 9 | "type": "node", 10 | "request": "launch", 11 | "name": "Launch Program", 12 | "program": "${workspaceRoot}\\server.js" 13 | }, 14 | { 15 | "type": "node", 16 | "request": "attach", 17 | "name": "Attach to Port", 18 | "address": "localhost", 19 | "port": 5858 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | "files.exclude": { 4 | "**/.git": true, 5 | "**/.DS_Store": true, 6 | // exclude .js and .js.map files, when in a TypeScript project 7 | "**/*.js": { 8 | "when": "$(basename).ts" 9 | }, 10 | "**/*.map": { 11 | "when": "$(basename).map" 12 | }, 13 | "**/node_modules": true, 14 | "**/dist": true 15 | } 16 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Md. Shohel Rana 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Angular5 ERP Application Architecture 2 | When building a large-scale application, one has to carefully design the code structure in the project. A poor structure can lead to maintainability issues and decrease the productivity of the development team. When the system grows, it will be hard to navigate through the structure and locate the class implementing a piece of functionality. 3 | In this project, I will describe the structure of an enterprise system built using Angular 2+. 4 | -------------------------------------------------------------------------------- /config/polyfills.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | require("core-js/es6"); 4 | require("core-js/es7/reflect"); 5 | require('zone.js/dist/zone'); 6 | if (process.env.ENV === 'production') { 7 | // production 8 | } 9 | else { 10 | // development 11 | Error.stackTraceLimit = Infinity; 12 | require('zone.js/dist/long-stack-trace-zone'); 13 | } 14 | //# sourceMappingURL=polyfills.js.map -------------------------------------------------------------------------------- /config/polyfills.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"polyfills.js","sourceRoot":"","sources":["polyfills.ts"],"names":[],"mappings":";;AAAA,uBAAqB;AACrB,+BAA6B;AAC7B,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAE7B,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC;IACrC,aAAa;AACf,CAAC;AAAC,IAAI,CAAC,CAAC;IACN,cAAc;IACd,KAAK,CAAC,eAAe,GAAG,QAAQ,CAAC;IACjC,OAAO,CAAC,oCAAoC,CAAC,CAAC;AAChD,CAAC"} -------------------------------------------------------------------------------- /config/polyfills.ts: -------------------------------------------------------------------------------- 1 | import 'core-js/es6'; 2 | import 'core-js/es7/reflect'; 3 | require('zone.js/dist/zone'); 4 | 5 | if (process.env.ENV === 'production') { 6 | // production 7 | } else { 8 | // development 9 | Error.stackTraceLimit = Infinity; 10 | require('zone.js/dist/long-stack-trace-zone'); 11 | } -------------------------------------------------------------------------------- /config/vendor.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | require("@angular/platform-browser"); 4 | require("@angular/platform-browser-dynamic"); 5 | require("@angular/core"); 6 | require("@angular/common"); 7 | require("@angular/http"); 8 | require("@angular/router"); 9 | // RxJS 10 | require("rxjs"); 11 | //# sourceMappingURL=vendor.js.map -------------------------------------------------------------------------------- /config/vendor.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"vendor.js","sourceRoot":"","sources":["vendor.ts"],"names":[],"mappings":";;AAAA,qCAAmC;AACnC,6CAA2C;AAC3C,yBAAuB;AACvB,2BAAyB;AACzB,yBAAuB;AACvB,2BAAyB;AAEzB,OAAO;AACP,gBAAc"} -------------------------------------------------------------------------------- /config/vendor.ts: -------------------------------------------------------------------------------- 1 | import '@angular/platform-browser'; 2 | import '@angular/platform-browser-dynamic'; 3 | import '@angular/core'; 4 | import '@angular/common'; 5 | import '@angular/http'; 6 | import '@angular/router'; 7 | 8 | // RxJS 9 | import 'rxjs'; -------------------------------------------------------------------------------- /config/webpack.common.js: -------------------------------------------------------------------------------- 1 | const webpack = require('webpack'), 2 | HtmlWebpackPlugin = require('html-webpack-plugin'), 3 | ExtractTextPlugin = require('extract-text-webpack-plugin'), 4 | path = require('path'), 5 | rootDir = path.resolve(__dirname, '..'); 6 | 7 | module.exports = { 8 | resolve: { 9 | extensions: ['.ts', '.js'], 10 | modules: [ path.resolve(rootDir, 'node_modules') ] 11 | }, 12 | entry: { 13 | app: './src/app/main.ts', 14 | vendor: './config/vendor.ts', 15 | polyfills: './config/polyfills.ts' 16 | }, 17 | module: { 18 | loaders: [ 19 | { test: /\.html$/, loader: 'raw-loader' }, 20 | { test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/, loader: 'file?name=assets/[name].[hash].[ext]' }, 21 | { test: /\.css$/, loaders: ['to-string-loader', 'css-loader'] } 22 | ] 23 | }, 24 | plugins: [ 25 | //List of plugins here: https://github.com/webpack/docs/wiki/list-of-plugins 26 | new ExtractTextPlugin('[name].css'), 27 | new webpack.optimize.CommonsChunkPlugin({ 28 | name: ['app', 'vendor', 'polyfills'] 29 | }), 30 | //Get settings here: https://github.com/jantimon/html-webpack-plugin 31 | new HtmlWebpackPlugin({ 32 | template: './src/index.webpack-template.html', 33 | filename: '../index.html' 34 | }) 35 | ] 36 | }; -------------------------------------------------------------------------------- /config/webpack.development.js: -------------------------------------------------------------------------------- 1 | const webpack = require('webpack'), 2 | webpackMerge = require('webpack-merge'), 3 | ExtractTextPlugin = require('extract-text-webpack-plugin'), 4 | commonConfig = require('./webpack.common.js'), 5 | path = require('path'), 6 | rootDir = path.resolve(__dirname, '..'); 7 | 8 | const env = process.env.NODE_ENV; 9 | 10 | module.exports = webpackMerge(commonConfig, { 11 | devtool: 'source-map', 12 | output: { 13 | path: path.resolve(rootDir, 'src/devDist'), 14 | sourceMapFilename: '[name].map', 15 | publicPath: '/devDist/', 16 | filename: '[name].js', 17 | chunkFilename: '[id].chunk.js' 18 | }, 19 | module: { 20 | loaders: [ 21 | { 22 | test: /\.ts$/, 23 | exclude: /node_modules/, 24 | loaders: ['awesome-typescript-loader', 'angular-router-loader', 'angular2-template-loader'] 25 | }] 26 | } 27 | //Example of a dev server. Not needed in this app since it uses Node/Express for the server. 28 | // devServer: { 29 | // contentBase: './src', 30 | // historyApiFallback: true, 31 | // watchOptions: { aggregateTimeout: 300, poll: 1000 }, 32 | // quiet: true, 33 | // stats: 'minimal' 34 | // } 35 | }); -------------------------------------------------------------------------------- /config/webpack.production.js: -------------------------------------------------------------------------------- 1 | const webpack = require('webpack'), 2 | webpackMerge = require('webpack-merge'), 3 | ExtractTextPlugin = require('extract-text-webpack-plugin'), 4 | commonConfig = require('./webpack.common.js'), 5 | ngToolsWebpack = require('@ngtools/webpack'), 6 | path = require('path'), 7 | rootDir = path.resolve(__dirname, '..'); 8 | 9 | var aotPlugin = new ngToolsWebpack.AotPlugin({ 10 | tsConfigPath: "./tsconfig.aot.json", 11 | entryModule: path.resolve(__dirname, "./src/app/app.module#AppModule"), 12 | }); 13 | //Temporary hack to fix issue with AOT on Windows 14 | //https://github.com/angular/angular-cli/issues/5329 15 | aotPlugin._compilerHost._resolve = function(path_to_resolve) { 16 | path_1 = require("path"); 17 | path_to_resolve = aotPlugin._compilerHost._normalizePath(path_to_resolve); 18 | if (path_to_resolve[0] == '.') { 19 | return aotPlugin._compilerHost._normalizePath(path_1.join(aotPlugin._compilerHost.getCurrentDirectory(), path_to_resolve)); 20 | } 21 | else if (path_to_resolve[0] == '/' || path_to_resolve.match(/^\w:\//)) { 22 | return path_to_resolve; 23 | } 24 | else { 25 | return aotPlugin._compilerHost._normalizePath(path_1.join(aotPlugin._compilerHost._basePath, path_to_resolve)); 26 | } 27 | }; 28 | 29 | const env = process.env.NODE_ENV; 30 | 31 | module.exports = webpackMerge(commonConfig, { 32 | entry: { 33 | app: './src/app/main.aot.ts' 34 | }, 35 | output: { 36 | path: path.resolve(rootDir, 'src/dist'), 37 | publicPath: '/dist/', 38 | filename: '[name].js', 39 | chunkFilename: '[id].chunk.js' 40 | }, 41 | module: { 42 | loaders: [{ 43 | test: /\.ts$/, 44 | loader: '@ngtools/webpack' 45 | }] 46 | }, 47 | plugins: [ 48 | //Angular AOT pluging 49 | // new ngToolsWebpack.AotPlugin({ 50 | // mainPath: "src/app/main.ts", 51 | // tsConfigPath: './tsconfig.aot.json' 52 | // }), 53 | aotPlugin, 54 | new webpack.LoaderOptionsPlugin({ 55 | minimize: true, 56 | debug: false 57 | }), 58 | new webpack.optimize.UglifyJsPlugin({ 59 | compress: { 60 | warnings: false 61 | }, 62 | output: { 63 | comments: false 64 | }, 65 | sourceMap: false 66 | }) 67 | ] 68 | }); -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | var args = require('yargs').argv; 2 | var config = require('./gulp.config')(); 3 | var gulp = require('gulp'); 4 | var $ = require('gulp-load-plugins')({lazy: true}); 5 | 6 | /** 7 | * List the available gulp tasks 8 | */ 9 | gulp.task('help', $.taskListing); 10 | gulp.task('default', ['help']); 11 | 12 | /** 13 | * Bump the version 14 | * --type=pre will bump the prerelease version *.*.*-x 15 | * --type=patch or no flag will bump the patch version *.*.x 16 | * --type=minor will bump the minor version *.x.* 17 | * --type=major will bump the major version x.*.* 18 | * --version=1.2.3 will bump to a specific version and ignore other flags 19 | */ 20 | gulp.task('bump', function() { 21 | var msg = 'Bumping versions'; 22 | var type = args.type; 23 | var version = args.ver; 24 | var options = {}; 25 | if (version) { 26 | options.version = version; 27 | msg += ' to ' + version; 28 | } else { 29 | options.type = type; 30 | msg += ' for a ' + type; 31 | } 32 | log(msg); 33 | return gulp 34 | .src(config.packages) 35 | .pipe($.bump(options)) 36 | .pipe(gulp.dest(config.root)); 37 | }); 38 | 39 | //////////////// 40 | 41 | /** 42 | * Log a message or series of messages using chalk's blue color. 43 | * Can pass in a string, object or array. 44 | */ 45 | function log(msg) { 46 | if (typeof(msg) === 'object') { 47 | for (var item in msg) { 48 | if (msg.hasOwnProperty(item)) { 49 | $.util.log($.util.colors.blue(msg[item])); 50 | } 51 | } 52 | } else { 53 | $.util.log($.util.colors.blue(msg)); 54 | } 55 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular2-erp-app-architecture", 3 | "author": "Shohel Rana", 4 | "version": "1.0.0", 5 | "keywords": [ 6 | "angular2", 7 | "webpack", 8 | "typescript" 9 | ], 10 | "repository": "https://github.com/mdshohelrana/angular2-erp-app-architecture", 11 | "scripts": { 12 | "clean": "del-cli \"src/app/**/*.js\" \"src/app/**/*.js.map\" \"src/devDist\" \"src/dist\"", 13 | "build": "npm run clean && webpack --progress --watch", 14 | "tsc": "tsc", 15 | "tsc:w": "tsc -w", 16 | "start:nodemon": "tsc && concurrently \"tsc -w\" \"nodemon server.js\" ", 17 | "start": "tsc && concurrently \"tsc -w\" \"node server.js\" " 18 | }, 19 | "license": "MIT", 20 | "dependencies": { 21 | "@angular/common": "4.0.0", 22 | "@angular/compiler": "4.0.0", 23 | "@angular/compiler-cli": "4.0.0", 24 | "@angular/core": "4.0.0", 25 | "@angular/forms": "4.0.0", 26 | "@angular/http": "4.0.0", 27 | "@angular/platform-browser": "4.0.0", 28 | "@angular/platform-browser-dynamic": "4.0.0", 29 | "@angular/router": "4.0.0", 30 | "@angular/upgrade": "4.0.0", 31 | "@angular/platform-server": "4.0.0", 32 | "@angular/tsc-wrapped": "4.0.0", 33 | "@angular/animations": "4.0.0", 34 | "systemjs": "0.19.47", 35 | "core-js": "2.4.1", 36 | "rxjs": "5.2.0", 37 | "zone.js": "0.8.5", 38 | "express": "4.15.2", 39 | "body-parser": "1.17.1" 40 | }, 41 | "devDependencies": { 42 | "@types/node": "7.0.11", 43 | "@types/google-maps": "3.2.0", 44 | "concurrently": "3.4.0", 45 | "lite-server": "2.3.0", 46 | "typescript": "2.2.1", 47 | "opn": "4.0.2", 48 | "del-cli": "0.2.1", 49 | "webpack": "2.3.2", 50 | "html-webpack-plugin": "2.28.0", 51 | "webpack-merge": "4.1.0", 52 | "extract-text-webpack-plugin": "2.1.0", 53 | "angular2-template-loader": "0.6.2", 54 | "angular-router-loader": "0.5.0", 55 | "awesome-typescript-loader": "3.1.2", 56 | "css-loader": "0.27.3", 57 | "to-string-loader": "1.1.5", 58 | "raw-loader": "0.5.1", 59 | "style-loader": "0.16.0", 60 | "@ngtools/webpack": "1.3.0" 61 | } 62 | } -------------------------------------------------------------------------------- /src/app/_common/robots.txt: -------------------------------------------------------------------------------- 1 | # www.robotstxt.org/ 2 | 3 | # Allow crawling of all content 4 | User-agent: * 5 | Disallow: 6 | -------------------------------------------------------------------------------- /src/app/about/about-routing.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var router_1 = require("@angular/router"); 11 | var about_component_1 = require("./about.component"); 12 | var routes = [ 13 | { path: '', component: about_component_1.AboutComponent } 14 | ]; 15 | var AboutRoutingModule = (function () { 16 | function AboutRoutingModule() { 17 | } 18 | return AboutRoutingModule; 19 | }()); 20 | AboutRoutingModule.components = [about_component_1.AboutComponent]; 21 | AboutRoutingModule = __decorate([ 22 | core_1.NgModule({ 23 | imports: [router_1.RouterModule.forChild(routes)], 24 | exports: [router_1.RouterModule] 25 | }) 26 | ], AboutRoutingModule); 27 | exports.AboutRoutingModule = AboutRoutingModule; 28 | //# sourceMappingURL=about-routing.module.js.map -------------------------------------------------------------------------------- /src/app/about/about-routing.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"about-routing.module.js","sourceRoot":"","sources":["about-routing.module.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAAyC;AACzC,0CAAuD;AAEvD,qDAAmD;AAEnD,IAAM,MAAM,GAAW;IACrB,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,gCAAc,EAAE;CACxC,CAAC;AAMF,IAAa,kBAAkB;IAA/B;IAEA,CAAC;IAAD,yBAAC;AAAD,CAAC,AAFD,IAEC;AADQ,6BAAU,GAAG,CAAE,gCAAc,CAAE,CAAC;AAD5B,kBAAkB;IAJ9B,eAAQ,CAAC;QACR,OAAO,EAAE,CAAE,qBAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAE;QAC1C,OAAO,EAAE,CAAE,qBAAY,CAAE;KAC1B,CAAC;GACW,kBAAkB,CAE9B;AAFY,gDAAkB"} -------------------------------------------------------------------------------- /src/app/about/about-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | 4 | import { AboutComponent } from './about.component'; 5 | 6 | const routes: Routes = [ 7 | { path: '', component: AboutComponent } 8 | ]; 9 | 10 | @NgModule({ 11 | imports: [ RouterModule.forChild(routes) ], 12 | exports: [ RouterModule ] 13 | }) 14 | export class AboutRoutingModule { 15 | static components = [ AboutComponent ]; 16 | } -------------------------------------------------------------------------------- /src/app/about/about.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

About

5 |
6 |
7 |
8 |
9 |
Created by:
10 | 11 |
12 |
13 |
14 |
Blog:
15 | 16 |
17 |
18 | 22 |
23 | 27 |
28 |
29 |
-------------------------------------------------------------------------------- /src/app/about/about.component.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | var core_1 = require("@angular/core"); 13 | var AboutComponent = (function () { 14 | function AboutComponent() { 15 | } 16 | AboutComponent.prototype.ngOnInit = function () { 17 | }; 18 | return AboutComponent; 19 | }()); 20 | AboutComponent = __decorate([ 21 | core_1.Component({ 22 | moduleId: module.id, 23 | selector: 'cm-about', 24 | templateUrl: 'about.component.html' 25 | }), 26 | __metadata("design:paramtypes", []) 27 | ], AboutComponent); 28 | exports.AboutComponent = AboutComponent; 29 | //# sourceMappingURL=about.component.js.map -------------------------------------------------------------------------------- /src/app/about/about.component.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"about.component.js","sourceRoot":"","sources":["about.component.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAkD;AAOlD,IAAa,cAAc;IAEvB;IAAgB,CAAC;IAEjB,iCAAQ,GAAR;IAEA,CAAC;IAEL,qBAAC;AAAD,CAAC,AARD,IAQC;AARY,cAAc;IAL1B,gBAAS,CAAC;QACP,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,sBAAsB;KACtC,CAAC;;GACW,cAAc,CAQ1B;AARY,wCAAc"} -------------------------------------------------------------------------------- /src/app/about/about.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | moduleId: module.id, 5 | selector: 'cm-about', 6 | templateUrl: 'about.component.html' 7 | }) 8 | export class AboutComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | 14 | } 15 | 16 | } -------------------------------------------------------------------------------- /src/app/about/about.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var about_routing_module_1 = require("./about-routing.module"); 11 | var AboutModule = (function () { 12 | function AboutModule() { 13 | } 14 | return AboutModule; 15 | }()); 16 | AboutModule = __decorate([ 17 | core_1.NgModule({ 18 | imports: [about_routing_module_1.AboutRoutingModule], 19 | declarations: [about_routing_module_1.AboutRoutingModule.components] 20 | }) 21 | ], AboutModule); 22 | exports.AboutModule = AboutModule; 23 | //# sourceMappingURL=about.module.js.map -------------------------------------------------------------------------------- /src/app/about/about.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"about.module.js","sourceRoot":"","sources":["about.module.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAAyC;AAEzC,+DAA4D;AAM5D,IAAa,WAAW;IAAxB;IAA2B,CAAC;IAAD,kBAAC;AAAD,CAAC,AAA5B,IAA4B;AAAf,WAAW;IAJvB,eAAQ,CAAC;QACR,OAAO,EAAO,CAAE,yCAAkB,CAAE;QACpC,YAAY,EAAE,CAAE,yCAAkB,CAAC,UAAU,CAAE;KAChD,CAAC;GACW,WAAW,CAAI;AAAf,kCAAW"} -------------------------------------------------------------------------------- /src/app/about/about.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | 3 | import { AboutRoutingModule } from './about-routing.module'; 4 | 5 | @NgModule({ 6 | imports: [ AboutRoutingModule ], 7 | declarations: [ AboutRoutingModule.components ] 8 | }) 9 | export class AboutModule { } -------------------------------------------------------------------------------- /src/app/admin/robots.txt: -------------------------------------------------------------------------------- 1 | # www.robotstxt.org/ 2 | 3 | # Allow crawling of all content 4 | User-agent: * 5 | Disallow: 6 | -------------------------------------------------------------------------------- /src/app/app-routing.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var router_1 = require("@angular/router"); 11 | var app_routes = [ 12 | { path: '', pathMatch: 'full', redirectTo: '/customers' }, 13 | { path: 'customers', loadChildren: 'app/customers/customers.module#CustomersModule' }, 14 | { path: 'customers/:id', loadChildren: 'app/customer/customer.module#CustomerModule' }, 15 | { path: 'orders', loadChildren: 'app/orders/orders.module#OrdersModule' }, 16 | { path: 'about', loadChildren: 'app/about/about.module#AboutModule' }, 17 | { path: '**', pathMatch: 'full', redirectTo: '/customers' } //catch any unfound routes and redirect to home page 18 | ]; 19 | var AppRoutingModule = (function () { 20 | function AppRoutingModule() { 21 | } 22 | return AppRoutingModule; 23 | }()); 24 | AppRoutingModule = __decorate([ 25 | core_1.NgModule({ 26 | imports: [router_1.RouterModule.forRoot(app_routes, { preloadingStrategy: router_1.PreloadAllModules })], 27 | exports: [router_1.RouterModule] 28 | }) 29 | ], AppRoutingModule); 30 | exports.AppRoutingModule = AppRoutingModule; 31 | //# sourceMappingURL=app-routing.module.js.map -------------------------------------------------------------------------------- /src/app/app-routing.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"app-routing.module.js","sourceRoot":"","sources":["app-routing.module.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAAyC;AACzC,0CAAwF;AAIxF,IAAM,UAAU,GAAW;IACzB,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE;IACxD,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,gDAAgD,EAAC;IACpF,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,6CAA6C,EAAC;IACrF,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,uCAAuC,EAAC;IACxE,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,oCAAoC,EAAC;IACpE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,oDAAoD;CAChH,CAAC;AAMF,IAAa,gBAAgB;IAA7B;IAAgC,CAAC;IAAD,uBAAC;AAAD,CAAC,AAAjC,IAAiC;AAApB,gBAAgB;IAJ5B,eAAQ,CAAC;QACR,OAAO,EAAE,CAAE,qBAAY,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,kBAAkB,EAAE,0BAAiB,EAAE,CAAC,CAAE;QACxF,OAAO,EAAE,CAAE,qBAAY,CAAE;KAC1B,CAAC;GACW,gBAAgB,CAAI;AAApB,4CAAgB"} -------------------------------------------------------------------------------- /src/app/app-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes, PreloadAllModules, NoPreloading } from '@angular/router'; 3 | 4 | import { PreloadModulesStrategy } from './core/strategies/preload-modules.strategy'; 5 | 6 | const app_routes: Routes = [ 7 | { path: '', pathMatch:'full', redirectTo: '/customers' }, 8 | { path: 'customers', loadChildren: 'app/customers/customers.module#CustomersModule'}, 9 | { path: 'customers/:id', loadChildren: 'app/customer/customer.module#CustomerModule'}, 10 | { path: 'orders', loadChildren: 'app/orders/orders.module#OrdersModule'}, 11 | { path: 'about', loadChildren: 'app/about/about.module#AboutModule'}, 12 | { path: '**', pathMatch:'full', redirectTo: '/customers' } //catch any unfound routes and redirect to home page 13 | ]; 14 | 15 | @NgModule({ 16 | imports: [ RouterModule.forRoot(app_routes, { preloadingStrategy: PreloadAllModules }) ], 17 | exports: [ RouterModule ] 18 | }) 19 | export class AppRoutingModule { } 20 | -------------------------------------------------------------------------------- /src/app/app.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 |
7 |

-------------------------------------------------------------------------------- /src/app/app.component.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var AppComponent = (function () { 11 | function AppComponent() { 12 | } 13 | return AppComponent; 14 | }()); 15 | AppComponent = __decorate([ 16 | core_1.Component({ 17 | moduleId: module.id, 18 | selector: 'app-root', 19 | templateUrl: 'app.component.html' 20 | }) 21 | ], AppComponent); 22 | exports.AppComponent = AppComponent; 23 | //# sourceMappingURL=app.component.js.map -------------------------------------------------------------------------------- /src/app/app.component.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"app.component.js","sourceRoot":"","sources":["app.component.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAA0C;AAO1C,IAAa,YAAY;IAAzB;IAEA,CAAC;IAAD,mBAAC;AAAD,CAAC,AAFD,IAEC;AAFY,YAAY;IALxB,gBAAS,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,oBAAoB;KAClC,CAAC;GACW,YAAY,CAExB;AAFY,oCAAY"} -------------------------------------------------------------------------------- /src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | moduleId: module.id, 5 | selector: 'app-root', 6 | templateUrl: 'app.component.html' 7 | }) 8 | export class AppComponent { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/app/app.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var platform_browser_1 = require("@angular/platform-browser"); 11 | var app_component_1 = require("./app.component"); 12 | var app_routing_module_1 = require("./app-routing.module"); 13 | var login_module_1 = require("./login/login.module"); 14 | var core_module_1 = require("./core/core.module"); 15 | var shared_module_1 = require("./shared/shared.module"); 16 | var AppModule = (function () { 17 | function AppModule() { 18 | } 19 | return AppModule; 20 | }()); 21 | AppModule = __decorate([ 22 | core_1.NgModule({ 23 | imports: [ 24 | platform_browser_1.BrowserModule, 25 | login_module_1.LoginModule, 26 | app_routing_module_1.AppRoutingModule, 27 | core_module_1.CoreModule, 28 | shared_module_1.SharedModule //Shared (multi-instance) objects 29 | ], 30 | declarations: [app_component_1.AppComponent], 31 | bootstrap: [app_component_1.AppComponent] 32 | }) 33 | ], AppModule); 34 | exports.AppModule = AppModule; 35 | //# sourceMappingURL=app.module.js.map -------------------------------------------------------------------------------- /src/app/app.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"app.module.js","sourceRoot":"","sources":["app.module.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAA8C;AAC9C,8DAA0D;AAE1D,iDAAgD;AAChD,2DAAwD;AAExD,qDAAmD;AACnD,kDAAkD;AAClD,wDAAwD;AAaxD,IAAa,SAAS;IAAtB;IAAyB,CAAC;IAAD,gBAAC;AAAD,CAAC,AAA1B,IAA0B;AAAb,SAAS;IAXrB,eAAQ,CAAC;QACR,OAAO,EAAE;YACP,gCAAa;YACb,0BAAW;YACX,qCAAgB;YAChB,wBAAU;YACV,4BAAY,CAAU,iCAAiC;SACxD;QACD,YAAY,EAAE,CAAE,4BAAY,CAAE;QAC9B,SAAS,EAAK,CAAE,4BAAY,CAAE;KAC/B,CAAC;GACW,SAAS,CAAI;AAAb,8BAAS"} -------------------------------------------------------------------------------- /src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { BrowserModule } from '@angular/platform-browser'; 3 | 4 | import { AppComponent } from './app.component'; 5 | import { AppRoutingModule } from './app-routing.module'; 6 | 7 | import { LoginModule } from './login/login.module'; 8 | import { CoreModule } from './core/core.module'; 9 | import { SharedModule } from './shared/shared.module'; 10 | 11 | @NgModule({ 12 | imports: [ 13 | BrowserModule, 14 | LoginModule, //Eager loaded since we may need to go here right away as browser loads based on route user enters 15 | AppRoutingModule, //Main routes for application 16 | CoreModule, //Singleton objects (services, components that are loaded only once, etc.) 17 | SharedModule //Shared (multi-instance) objects 18 | ], 19 | declarations: [ AppComponent ], 20 | bootstrap: [ AppComponent ] 21 | }) 22 | export class AppModule { } -------------------------------------------------------------------------------- /src/app/auth/robots.txt: -------------------------------------------------------------------------------- 1 | # www.robotstxt.org/ 2 | 3 | # Allow crawling of all content 4 | User-agent: * 5 | Disallow: 6 | -------------------------------------------------------------------------------- /src/app/core/core.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"core.module.js","sourceRoot":"","sources":["core.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAA6D;AAC7D,0CAA+C;AAC/C,0CAA+C;AAC/C,sCAA2C;AAE3C,2DAAyD;AACzD,qDAAmD;AAEnD,8DAA4D;AAC5D,wDAAsD;AACtD,4DAA0D;AAC1D,4DAA0D;AAC1D,8DAA4D;AAC5D,4DAA0D;AAC1D,6EAA4E;AAC5E,oEAAkE;AAClE,wDAAqD;AASrD,IAAa,UAAU;IAAS,8BAA2B;IAEzD,2GAA2G;IAC3G,oBAAqC,YAAwB;eAC3D,kBAAM,YAAY,CAAC;IACrB,CAAC;IAEH,iBAAC;AAAD,CAAC,AAPD,CAAgC,yDAA2B,GAO1D;AAPY,UAAU;IAPtB,eAAQ,CAAC;QACR,OAAO,EAAE,CAAE,qBAAY,EAAE,qBAAY,EAAE,iBAAU,EAAE,8BAAa,EAAE,0BAAW,CAAE;QAC/E,OAAO,EAAE,CAAE,8BAAa,EAAE,qBAAY,EAAE,iBAAU,EAAE,0BAAW,EAAE,kCAAe,CAAE;QAClF,YAAY,EAAE,CAAE,kCAAe,CAAE;QACjC,SAAS,EAAE,CAAE,8BAAa,EAAE,8BAAa,EAAE,0BAAW,EAAE,gCAAc;YACzD,8BAAa,EAAE,sCAAiB,EAAE,0BAAW,CAAE,CAAC,4BAA4B;KAC1F,CAAC;IAIc,WAAA,eAAQ,EAAE,CAAA,EAAE,WAAA,eAAQ,EAAE,CAAA;qCAAe,UAAU;GAHlD,UAAU,CAOtB;AAPY,gCAAU"} -------------------------------------------------------------------------------- /src/app/core/core.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, Optional, SkipSelf } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { RouterModule } from '@angular/router'; 4 | import { HttpModule } from '@angular/http'; 5 | 6 | import { GrowlerModule } from './growler/growler.module'; 7 | import { ModalModule } from './modal/modal.module'; 8 | 9 | import { NavbarComponent } from './navbar/navbar.component'; 10 | import { DataService } from './services/data.service'; 11 | import { FilterService } from './services/filter.service'; 12 | import { SorterService } from './services/sorter.service'; 13 | import { TrackByService } from './services/trackby.service'; 14 | import { DialogService } from './services/dialog.service'; 15 | import { EnsureModuleLoadedOnceGuard } from './ensureModuleLoadedOnceGuard'; 16 | import { ValidationService } from './services/validation.service'; 17 | import { AuthService } from'./services/auth.service'; 18 | 19 | @NgModule({ 20 | imports: [ CommonModule, RouterModule, HttpModule, GrowlerModule, ModalModule ], 21 | exports: [ GrowlerModule, RouterModule, HttpModule, ModalModule, NavbarComponent ], 22 | declarations: [ NavbarComponent ], 23 | providers: [ SorterService, FilterService, DataService, TrackByService, 24 | DialogService, ValidationService, AuthService ] // these should be singleton 25 | }) 26 | export class CoreModule extends EnsureModuleLoadedOnceGuard { //Ensure that CoreModule is only loaded into AppModule 27 | 28 | //Looks for the module in the parent injector to see if it's already been loaded (only want it loaded once) 29 | constructor( @Optional() @SkipSelf() parentModule: CoreModule) { 30 | super(parentModule); 31 | } 32 | 33 | } 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/app/core/ensureModuleLoadedOnceGuard.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | var EnsureModuleLoadedOnceGuard = (function () { 4 | function EnsureModuleLoadedOnceGuard(targetModule) { 5 | if (targetModule) { 6 | throw new Error(targetModule.constructor.name + " has already been loaded. Import this module in the AppModule only."); 7 | } 8 | } 9 | return EnsureModuleLoadedOnceGuard; 10 | }()); 11 | exports.EnsureModuleLoadedOnceGuard = EnsureModuleLoadedOnceGuard; 12 | //# sourceMappingURL=ensureModuleLoadedOnceGuard.js.map -------------------------------------------------------------------------------- /src/app/core/ensureModuleLoadedOnceGuard.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"ensureModuleLoadedOnceGuard.js","sourceRoot":"","sources":["ensureModuleLoadedOnceGuard.ts"],"names":[],"mappings":";;AAAA;IAEE,qCAAY,YAAiB;QAC3B,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;YACjB,MAAM,IAAI,KAAK,CAAI,YAAY,CAAC,WAAW,CAAC,IAAI,wEAAqE,CAAC,CAAC;QACzH,CAAC;IACH,CAAC;IAEH,kCAAC;AAAD,CAAC,AARD,IAQC;AARY,kEAA2B"} -------------------------------------------------------------------------------- /src/app/core/ensureModuleLoadedOnceGuard.ts: -------------------------------------------------------------------------------- 1 | export class EnsureModuleLoadedOnceGuard { 2 | 3 | constructor(targetModule: any) { 4 | if (targetModule) { 5 | throw new Error(`${targetModule.constructor.name} has already been loaded. Import this module in the AppModule only.`); 6 | } 7 | } 8 | 9 | } -------------------------------------------------------------------------------- /src/app/core/growler/growler.component.css: -------------------------------------------------------------------------------- 1 | .growler { 2 | position: fixed; 3 | z-index: 999999; 4 | } 5 | 6 | .growler.close-button:focus { 7 | outline: 0; 8 | } 9 | 10 | .growler.top-left { 11 | top: 12px; 12 | left: 12px; 13 | } 14 | 15 | .growler.top-right { 16 | top: 12px; 17 | right: 12px; 18 | } 19 | 20 | .growler.bottom-right { 21 | bottom: 12px; 22 | right: 12px; 23 | } 24 | 25 | .growler.bottom-left { 26 | bottom: 12px; 27 | left: 12px; 28 | } 29 | 30 | .growler.top-center { 31 | top: 12px; 32 | left: 50%; 33 | -webkit-transform: translate(-50%, 0%); 34 | transform: translate(-50%, 0%); 35 | } 36 | 37 | .growler.bottom-center { 38 | bottom: 12px; 39 | left: 50%; 40 | -webkit-transform: translate(-50%, 0%); 41 | transform: translate(-50%, 0%); 42 | } 43 | 44 | .growl { 45 | cursor: pointer; 46 | padding: 5; 47 | width: 285px; 48 | height: 65px; 49 | opacity: 0; 50 | display: flex; 51 | align-items: center; 52 | justify-content: center; 53 | 54 | -webkit-transition: opacity 1s; 55 | -moz-transition: opacity 1s; 56 | -o-transition: opacity 1s; 57 | transition: opacity 1s; 58 | } 59 | 60 | .growl.active { 61 | opacity: 1; 62 | } 63 | 64 | .growl-message { 65 | 66 | } -------------------------------------------------------------------------------- /src/app/core/growler/growler.component.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"growler.component.js","sourceRoot":"","sources":["growler.component.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAA+E;AAE/E,qDAAuE;AAevE,IAAa,gBAAgB;IAQ3B,0BAAoB,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;QAN1C,eAAU,GAAW,CAAC,CAAC;QAC/B,WAAM,GAAY,EAAE,CAAC;QAEZ,aAAQ,GAAW,cAAc,CAAC;QAClC,YAAO,GAAW,IAAI,CAAC;QAG9B,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,mCAAQ,GAAR,cAAa,CAAC;IAEd;;;;;;MAME;IACF,gCAAK,GAAL,UAAM,OAAe,EAAE,SAA6B;QACjD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAM,kBAAkB,GAAG,oCAAkB,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACvE,IAAM,WAAW,GAAG,WAAU,kBAAqB,CAAC;QAEpD,IAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,sCAAW,GAAX,UAAY,EAAU;QAAtB,iBAQC;QAPC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,KAAY,EAAE,KAAa;YAC9C,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;gBACpB,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC7B,KAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACH,uBAAC;AAAD,CAAC,AAxCD,IAwCC;AAnCU;IAAR,YAAK,EAAE;;kDAAmC;AAClC;IAAR,YAAK,EAAE;;iDAAwB;AANrB,gBAAgB;IAb5B,gBAAS,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,QAAQ,EAAE,YAAY;QACtB,QAAQ,EAAE,oSAOT;QACD,SAAS,EAAE,CAAC,uBAAuB,CAAC;KACrC,CAAC;qCASoC,gCAAc;GARvC,gBAAgB,CAwC5B;AAxCY,4CAAgB;AA0C7B;IAKE,eAAmB,EAAU,EACV,OAAe,EACf,WAAmB,EAClB,OAAe,EACf,gBAAkC;QAJnC,OAAE,GAAF,EAAE,CAAQ;QACV,YAAO,GAAP,OAAO,CAAQ;QACf,gBAAW,GAAX,WAAW,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAQ;QACf,qBAAgB,GAAhB,gBAAgB,CAAkB;QACpD,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,oBAAI,GAAJ;QAAA,iBAKC;QAJC,MAAM,CAAC,UAAU,CAAC;YAChB,KAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,KAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC,EAAE,CAAC,CAAC,CAAC;IACR,CAAC;IAED,0BAAU,GAAV;QAAA,iBAIC;QAHC,MAAM,CAAC,UAAU,CAAC;YAChB,KAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;IAED,oBAAI,GAAJ;QAAA,iBAKC;QAJC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,MAAM,CAAC,UAAU,CAAC;YAChB,KAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAI,CAAC,EAAE,CAAC,CAAC;QAC7C,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;IAEH,YAAC;AAAD,CAAC,AAjCD,IAiCC"} -------------------------------------------------------------------------------- /src/app/core/growler/growler.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"growler.module.js","sourceRoot":"","sources":["growler.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAkE;AAClE,0CAA+C;AAE/C,8EAA6E;AAC7E,yDAAwD;AACxD,qDAAmD;AAQnD,IAAa,aAAa;IAAS,iCAA2B;IAE5D,2GAA2G;IAC3G,uBAAqC,YAA2B;eAC9D,kBAAM,YAAY,CAAC;IACrB,CAAC;IACH,oBAAC;AAAD,CAAC,AAND,CAAmC,yDAA2B,GAM7D;AANY,aAAa;IANzB,eAAQ,CAAC;QACR,OAAO,EAAE,CAAE,qBAAY,CAAE;QACzB,OAAO,EAAE,CAAE,oCAAgB,CAAE;QAC7B,SAAS,EAAE,CAAE,gCAAc,CAAE;QAC7B,YAAY,EAAE,CAAE,oCAAgB,CAAE;KACnC,CAAC;IAIc,WAAA,eAAQ,EAAE,CAAA,EAAE,WAAA,eAAQ,EAAE,CAAA;qCAAe,aAAa;GAHrD,aAAa,CAMzB;AANY,sCAAa"} -------------------------------------------------------------------------------- /src/app/core/growler/growler.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, Optional, SkipSelf } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { EnsureModuleLoadedOnceGuard } from '../ensureModuleLoadedOnceGuard'; 5 | import { GrowlerComponent } from './growler.component'; 6 | import { GrowlerService } from './growler.service'; 7 | 8 | @NgModule({ 9 | imports: [ CommonModule ], 10 | exports: [ GrowlerComponent ], 11 | providers: [ GrowlerService ], 12 | declarations: [ GrowlerComponent ] 13 | }) 14 | export class GrowlerModule extends EnsureModuleLoadedOnceGuard { //Ensure that GrowlerModule is only loaded into AppModule 15 | 16 | //Looks for the module in the parent injector to see if it's already been loaded (only want it loaded once) 17 | constructor( @Optional() @SkipSelf() parentModule: GrowlerModule) { 18 | super(parentModule); 19 | } 20 | } -------------------------------------------------------------------------------- /src/app/core/growler/growler.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | var core_1 = require("@angular/core"); 13 | var GrowlerService = (function () { 14 | function GrowlerService() { 15 | } 16 | return GrowlerService; 17 | }()); 18 | GrowlerService = __decorate([ 19 | core_1.Injectable(), 20 | __metadata("design:paramtypes", []) 21 | ], GrowlerService); 22 | exports.GrowlerService = GrowlerService; 23 | var GrowlerMessageType; 24 | (function (GrowlerMessageType) { 25 | GrowlerMessageType[GrowlerMessageType["Success"] = 0] = "Success"; 26 | GrowlerMessageType[GrowlerMessageType["Danger"] = 1] = "Danger"; 27 | GrowlerMessageType[GrowlerMessageType["Warning"] = 2] = "Warning"; 28 | GrowlerMessageType[GrowlerMessageType["Info"] = 3] = "Info"; 29 | })(GrowlerMessageType = exports.GrowlerMessageType || (exports.GrowlerMessageType = {})); 30 | //# sourceMappingURL=growler.service.js.map -------------------------------------------------------------------------------- /src/app/core/growler/growler.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"growler.service.js","sourceRoot":"","sources":["growler.service.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAA2C;AAG3C,IAAa,cAAc;IAEvB;IAAgB,CAAC;IAIrB,qBAAC;AAAD,CAAC,AAND,IAMC;AANY,cAAc;IAD1B,iBAAU,EAAE;;GACA,cAAc,CAM1B;AANY,wCAAc;AAQ3B,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,iEAAO,CAAA;IACP,+DAAM,CAAA;IACN,iEAAO,CAAA;IACP,2DAAI,CAAA;AACN,CAAC,EALW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAK7B"} -------------------------------------------------------------------------------- /src/app/core/growler/growler.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | 3 | @Injectable() 4 | export class GrowlerService { 5 | 6 | constructor() { } 7 | 8 | growl: (message: string, growlType: GrowlerMessageType) => number; 9 | 10 | } 11 | 12 | export enum GrowlerMessageType { 13 | Success, 14 | Danger, 15 | Warning, 16 | Info 17 | } -------------------------------------------------------------------------------- /src/app/core/modal/modal.component.css: -------------------------------------------------------------------------------- 1 | .modal { 2 | background: rgba(0,0,0,0.6); 3 | } -------------------------------------------------------------------------------- /src/app/core/modal/modal.component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/core/modal/modal.component.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"modal.component.js","sourceRoot":"","sources":["modal.component.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAgE;AAEhE,iDAA8D;AAQ9D,IAAa,cAAc;IAezB,wBAAoB,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;QAb9C,iBAAY,GAAG,KAAK,CAAC;QACrB,wBAAmB,GAAG,KAAK,CAAC;QAC5B,iBAAY,GAAkB,EAAE,CAAC;QAGjC,wBAAmB,GAAkB;YACnC,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAC,oCAAoC;YACzC,gBAAgB,EAAE,QAAQ;YAC1B,YAAY,EAAE,IAAI;YAClB,mBAAmB,EAAE,IAAI;SAC1B,CAAC;QAGA,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,iCAAQ,GAAR;IAEA,CAAC;IAED,6BAAI,GAAJ,UAAK,YAA2B;QAAhC,iBAgBC;QAfC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;QAC1E,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,UAAU,CAAC,cAAM,OAAA,KAAI,CAAC,mBAAmB,GAAG,IAAI,EAA/B,CAA+B,CAAC,CAAC;QAElD,IAAM,OAAO,GAAG,IAAI,OAAO,CAAU,UAAC,OAAO,EAAE,MAAM;YACnD,KAAI,CAAC,MAAM,GAAG;gBACZ,KAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAA;YACD,KAAI,CAAC,EAAE,GAAG;gBACR,KAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAA;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC;IACjB,CAAC;IAED,6BAAI,GAAJ;QAAA,iBAGC;QAFC,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,UAAU,CAAC,cAAM,OAAA,KAAI,CAAC,YAAY,GAAG,KAAK,EAAzB,CAAyB,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC;IAEH,qBAAC;AAAD,CAAC,AA/CD,IA+CC;AA/CY,cAAc;IAN1B,gBAAS,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,sBAAsB;QACnC,SAAS,EAAE,CAAE,qBAAqB,CAAE;KACrC,CAAC;qCAgBkC,4BAAY;GAfnC,cAAc,CA+C1B;AA/CY,wCAAc"} -------------------------------------------------------------------------------- /src/app/core/modal/modal.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, EventEmitter } from '@angular/core'; 2 | 3 | import { ModalService, IModalContent } from './modal.service'; 4 | 5 | @Component({ 6 | moduleId: module.id, 7 | selector: 'cm-modal', 8 | templateUrl: 'modal.component.html', 9 | styleUrls: [ 'modal.component.css' ] 10 | }) 11 | export class ModalComponent implements OnInit { 12 | 13 | modalVisible = false; 14 | modalVisibleAnimate = false; 15 | modalContent: IModalContent = {}; 16 | cancel: () => void; 17 | ok: () => void; 18 | defaultModalContent: IModalContent = { 19 | header: 'Please Confirm', 20 | body:'Are you sure you want to continue?', 21 | cancelButtonText: 'Cancel', 22 | OKButtonText: 'OK', 23 | cancelButtonVisible: true 24 | }; 25 | 26 | constructor(private modalService: ModalService) { 27 | modalService.show = this.show.bind(this); 28 | modalService.hide = this.hide.bind(this); 29 | } 30 | 31 | ngOnInit() { 32 | 33 | } 34 | 35 | show(modalContent: IModalContent) { 36 | this.modalContent = Object.assign(this.defaultModalContent, modalContent); 37 | this.modalVisible = true; 38 | setTimeout(() => this.modalVisibleAnimate = true); 39 | 40 | const promise = new Promise((resolve, reject) => { 41 | this.cancel = () => { 42 | this.hide(); 43 | resolve(false); 44 | } 45 | this.ok = () => { 46 | this.hide(); 47 | resolve(true); 48 | } 49 | }); 50 | return promise; 51 | } 52 | 53 | hide() { 54 | this.modalVisibleAnimate = false; 55 | setTimeout(() => this.modalVisible = false, 300); 56 | } 57 | 58 | } -------------------------------------------------------------------------------- /src/app/core/modal/modal.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"modal.module.js","sourceRoot":"","sources":["modal.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAkE;AAClE,0CAA+C;AAE/C,8EAA6E;AAC7E,qDAAoD;AACpD,iDAA+C;AAQ/C,IAAa,WAAW;IAAS,+BAA2B;IAE1D,2GAA2G;IAC3G,qBAAqC,YAAyB;eAC5D,kBAAM,YAAY,CAAC;IACrB,CAAC;IAEH,kBAAC;AAAD,CAAC,AAPD,CAAiC,yDAA2B,GAO3D;AAPY,WAAW;IANvB,eAAQ,CAAC;QACR,OAAO,EAAE,CAAE,qBAAY,CAAE;QACzB,OAAO,EAAE,CAAE,gCAAc,CAAE;QAC3B,YAAY,EAAE,CAAE,gCAAc,CAAE;QAChC,SAAS,EAAE,CAAE,4BAAY,CAAE;KAC5B,CAAC;IAIc,WAAA,eAAQ,EAAE,CAAA,EAAE,WAAA,eAAQ,EAAE,CAAA;qCAAe,WAAW;GAHnD,WAAW,CAOvB;AAPY,kCAAW"} -------------------------------------------------------------------------------- /src/app/core/modal/modal.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, Optional, SkipSelf } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { EnsureModuleLoadedOnceGuard } from '../ensureModuleLoadedOnceGuard'; 5 | import { ModalComponent } from './modal.component'; 6 | import { ModalService } from './modal.service'; 7 | 8 | @NgModule({ 9 | imports: [ CommonModule ], 10 | exports: [ ModalComponent ], 11 | declarations: [ ModalComponent ], 12 | providers: [ ModalService ] 13 | }) 14 | export class ModalModule extends EnsureModuleLoadedOnceGuard { //Ensure that ModalModule is only loaded into AppModule 15 | 16 | //Looks for the module in the parent injector to see if it's already been loaded (only want it loaded once) 17 | constructor( @Optional() @SkipSelf() parentModule: ModalModule) { 18 | super(parentModule); 19 | } 20 | 21 | } -------------------------------------------------------------------------------- /src/app/core/modal/modal.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | var core_1 = require("@angular/core"); 13 | var ModalService = (function () { 14 | function ModalService() { 15 | } 16 | return ModalService; 17 | }()); 18 | ModalService = __decorate([ 19 | core_1.Injectable(), 20 | __metadata("design:paramtypes", []) 21 | ], ModalService); 22 | exports.ModalService = ModalService; 23 | //# sourceMappingURL=modal.service.js.map -------------------------------------------------------------------------------- /src/app/core/modal/modal.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"modal.service.js","sourceRoot":"","sources":["modal.service.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAA2C;AAW3C,IAAa,YAAY;IAErB;IAAgB,CAAC;IAKrB,mBAAC;AAAD,CAAC,AAPD,IAOC;AAPY,YAAY;IADxB,iBAAU,EAAE;;GACA,YAAY,CAOxB;AAPY,oCAAY"} -------------------------------------------------------------------------------- /src/app/core/modal/modal.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | 3 | export interface IModalContent { 4 | header?: string; 5 | body?: string; 6 | cancelButtonText?: string; 7 | OKButtonText?: string; 8 | cancelButtonVisible?: boolean; 9 | } 10 | 11 | @Injectable() 12 | export class ModalService { 13 | 14 | constructor() { } 15 | 16 | show: (modalContent: IModalContent) => Promise; 17 | hide: () => void; 18 | 19 | } -------------------------------------------------------------------------------- /src/app/core/navbar/navbar.component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/core/navbar/navbar.component.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"navbar.component.js","sourceRoot":"","sources":["navbar.component.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAA6D;AAC7D,0CAAyC;AAIzC,yDAAuD;AACvD,8DAAgF;AAOhF,IAAa,eAAe;IAMxB,yBAAoB,MAAc,EAAU,WAAwB,EAAU,OAAuB;QAAjF,WAAM,GAAN,MAAM,CAAQ;QAAU,gBAAW,GAAX,WAAW,CAAa;QAAU,YAAO,GAAP,OAAO,CAAgB;QAHrG,oBAAe,GAAW,OAAO,CAAC;IAGuE,CAAC;IAE1G,kCAAQ,GAAR;QAAA,iBAMC;QALG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW;aAClC,SAAS,CAAC,UAAC,QAAiB;YACzB,KAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9B,CAAC,EACD,UAAC,GAAQ,IAAK,OAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAhB,CAAgB,CAAC,CAAC;IACxC,CAAC;IAED,qCAAW,GAAX;QACI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC;IAED,oCAAU,GAAV;QAAA,iBAaC;QAZG,IAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;QACzD,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;iBACpB,SAAS,CAAC,UAAC,MAAe;gBACvB,KAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,oCAAkB,CAAC,IAAI,CAAC,CAAC;gBAC1D,KAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;gBACrC,MAAM,CAAC;YACX,CAAC,EACD,UAAC,GAAQ,IAAK,OAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAhB,CAAgB,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IAC3B,CAAC;IAED,yCAAe,GAAf;QACI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,4CAAkB,GAAlB;QACI,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnF,CAAC;IAEL,sBAAC;AAAD,CAAC,AA3CD,IA2CC;AA3CY,eAAe;IAL3B,gBAAS,CAAC;QACP,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,QAAQ,EAAE,WAAW;QACrB,WAAW,EAAE,uBAAuB;KACvC,CAAC;qCAO8B,eAAM,EAAuB,0BAAW,EAAmB,gCAAc;GAN5F,eAAe,CA2C3B;AA3CY,0CAAe"} -------------------------------------------------------------------------------- /src/app/core/navbar/navbar.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, OnDestroy } from '@angular/core'; 2 | import { Router } from '@angular/router'; 3 | 4 | import { Subscription } from 'rxjs/Subscription'; 5 | 6 | import { AuthService } from '../services/auth.service'; 7 | import { GrowlerService, GrowlerMessageType } from '../growler/growler.service'; 8 | 9 | @Component({ 10 | moduleId: module.id, 11 | selector: 'cm-navbar', 12 | templateUrl: 'navbar.component.html' 13 | }) 14 | export class NavbarComponent implements OnInit, OnDestroy { 15 | 16 | isCollapsed: boolean; 17 | loginLogoutText: string = 'Login'; 18 | sub: Subscription; 19 | 20 | constructor(private router: Router, private authservice: AuthService, private growler: GrowlerService) { } 21 | 22 | ngOnInit() { 23 | this.sub = this.authservice.authChanged 24 | .subscribe((loggedIn: boolean) => { 25 | this.setLoginLogoutText(); 26 | }, 27 | (err: any) => console.log(err)); 28 | } 29 | 30 | ngOnDestroy() { 31 | this.sub.unsubscribe(); 32 | } 33 | 34 | loginOrOut() { 35 | const isAuthenticated = this.authservice.isAuthenticated; 36 | if (isAuthenticated) { 37 | this.authservice.logout() 38 | .subscribe((status: boolean) => { 39 | this.setLoginLogoutText(); 40 | this.growler.growl('Logged Out', GrowlerMessageType.Info); 41 | this.router.navigate(['/customers']); 42 | return; 43 | }, 44 | (err: any) => console.log(err)); 45 | } 46 | this.redirectToLogin(); 47 | } 48 | 49 | redirectToLogin() { 50 | this.router.navigate(['/login']); 51 | } 52 | 53 | setLoginLogoutText() { 54 | this.loginLogoutText = (this.authservice.isAuthenticated) ? 'Logout' : 'Login'; 55 | } 56 | 57 | } -------------------------------------------------------------------------------- /src/app/core/services/auth.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"auth.service.js","sourceRoot":"","sources":["auth.service.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAiE;AACjE,sCAA+C;AAE/C,8CAA6C;AAC7C,iCAA+B;AAC/B,mCAAiC;AAKjC,IAAa,WAAW;IAOpB,qBAAoB,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;QAL9B,YAAO,GAAW,WAAW,CAAC;QAC9B,oBAAe,GAAY,KAAK,CAAC;QAEvB,gBAAW,GAA0B,IAAI,mBAAY,EAAW,CAAC;IAEzC,CAAC;IAE3B,qCAAe,GAAvB,UAAwB,MAAe;QACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB;IACvD,CAAC;IAED,2BAAK,GAAL,UAAM,SAAqB;QAA3B,iBASC;QARG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,SAAS,CAAC;aAC7C,GAAG,CAAC,UAAC,QAAkB;YACpB,IAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YACjC,KAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;YAChC,KAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,CAAC,QAAQ,CAAC;QACpB,CAAC,CAAC;aACD,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC;IAED,4BAAM,GAAN;QAAA,iBASC;QARG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,SAAS,EAAE,IAAI,CAAC;aACzC,GAAG,CAAC,UAAC,QAAkB;YACpB,IAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClC,KAAI,CAAC,eAAe,GAAG,CAAC,SAAS,CAAC;YAClC,KAAI,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB;YAC1D,MAAM,CAAC,MAAM,CAAC;QAClB,CAAC,CAAC;aACD,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC;IAED,iCAAW,GAAX,UAAY,KAAU;QAClB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACtC,EAAE,CAAC,CAAC,KAAK,YAAY,eAAQ,CAAC,CAAC,CAAC;YAC9B,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAClC,CAAC;YAAC,KAAK,CAAA,CAAC,GAAG,CAAC,CAAC,CAAC;gBACZ,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YAChC,CAAC;YACD,MAAM,CAAC,uBAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,CAAC,uBAAU,CAAC,KAAK,CAAC,KAAK,IAAI,sBAAsB,CAAC,CAAC;IAC7D,CAAC;IAEL,kBAAC;AAAD,CAAC,AAjDD,IAiDC;AA5Ca;IAAT,aAAM,EAAE;8BAAc,mBAAY;gDAAwC;AALlE,WAAW;IADvB,iBAAU,EAAE;qCAQiB,WAAI;GAPrB,WAAW,CAiDvB;AAjDY,kCAAW"} -------------------------------------------------------------------------------- /src/app/core/services/auth.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable, Output, EventEmitter } from '@angular/core'; 2 | import { Http, Response } from '@angular/http'; 3 | 4 | import { Observable } from 'rxjs/Observable'; 5 | import 'rxjs/add/operator/map'; 6 | import 'rxjs/add/operator/catch'; 7 | 8 | import { IUserLogin } from '../../shared/interfaces'; 9 | 10 | @Injectable() 11 | export class AuthService { 12 | 13 | authUrl: string = '/api/auth'; 14 | isAuthenticated: boolean = false; 15 | redirectUrl: string; 16 | @Output() authChanged: EventEmitter = new EventEmitter(); 17 | 18 | constructor(private http: Http) { } 19 | 20 | private userAuthChanged(status: boolean) { 21 | this.authChanged.emit(status); //Raise changed event 22 | } 23 | 24 | login(userLogin: IUserLogin) : Observable { 25 | return this.http.post(this.authUrl + '/login', userLogin) 26 | .map((response: Response) => { 27 | const loggedIn = response.json(); 28 | this.isAuthenticated = loggedIn; 29 | this.userAuthChanged(loggedIn); 30 | return loggedIn; 31 | }) 32 | .catch(this.handleError); 33 | } 34 | 35 | logout() : Observable { 36 | return this.http.post(this.authUrl + '/logout', null) 37 | .map((response: Response) => { 38 | const loggedOut = response.json(); 39 | this.isAuthenticated = !loggedOut; 40 | this.userAuthChanged(!loggedOut); //Return loggedIn status 41 | return status; 42 | }) 43 | .catch(this.handleError); 44 | } 45 | 46 | handleError(error: any) { 47 | console.error('server error:', error); 48 | if (error instanceof Response) { 49 | let errMessage = ''; 50 | try { 51 | errMessage = error.json().error; 52 | } catch(err) { 53 | errMessage = error.statusText; 54 | } 55 | return Observable.throw(errMessage); 56 | } 57 | return Observable.throw(error || 'Node.js server error'); 58 | } 59 | 60 | } -------------------------------------------------------------------------------- /src/app/core/services/dialog.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var DialogService = (function () { 11 | function DialogService() { 12 | this.message = 'Is it OK?'; 13 | } 14 | DialogService.prototype.confirm = function (message) { 15 | if (message) { 16 | this.message = message; 17 | } 18 | ; 19 | this.promise = new Promise(this.resolver); 20 | return this.promise; 21 | }; 22 | ; 23 | DialogService.prototype.resolver = function (resolve) { 24 | return resolve(window.confirm('Is it OK?')); 25 | }; 26 | return DialogService; 27 | }()); 28 | DialogService = __decorate([ 29 | core_1.Injectable() 30 | ], DialogService); 31 | exports.DialogService = DialogService; 32 | //# sourceMappingURL=dialog.service.js.map -------------------------------------------------------------------------------- /src/app/core/services/dialog.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"dialog.service.js","sourceRoot":"","sources":["dialog.service.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAA2C;AAG3C,IAAa,aAAa;IAD1B;QAIE,YAAO,GAAW,WAAW,CAAC;IAYhC,CAAC;IAVC,+BAAO,GAAP,UAAQ,OAAgB;QACtB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QAAC,CAAC;QAAA,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAU,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAAA,CAAC;IAEF,gCAAQ,GAAR,UAAS,OAAY;QACjB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAChD,CAAC;IAEH,oBAAC;AAAD,CAAC,AAfD,IAeC;AAfY,aAAa;IADzB,iBAAU,EAAE;GACA,aAAa,CAezB;AAfY,sCAAa"} -------------------------------------------------------------------------------- /src/app/core/services/dialog.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | 3 | @Injectable() 4 | export class DialogService { 5 | 6 | promise: Promise; 7 | message: string = 'Is it OK?'; 8 | 9 | confirm(message?: string) { 10 | if (message) { this.message = message }; 11 | this.promise = new Promise(this.resolver); 12 | return this.promise; 13 | }; 14 | 15 | resolver(resolve: any) { 16 | return resolve(window.confirm('Is it OK?')); 17 | } 18 | 19 | } -------------------------------------------------------------------------------- /src/app/core/services/filter.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | var core_1 = require("@angular/core"); 13 | var property_resolver_1 = require("../../core/services/property-resolver"); 14 | var FilterService = (function () { 15 | function FilterService() { 16 | } 17 | FilterService.prototype.filter = function (items, data, props) { 18 | return items.filter(function (item) { 19 | var match = false; 20 | for (var _i = 0, props_1 = props; _i < props_1.length; _i++) { 21 | var prop = props_1[_i]; 22 | if (prop.indexOf('.') > -1) { 23 | var value = property_resolver_1.propertyResolver.resolve(prop, item); 24 | if (value && value.toUpperCase().indexOf(data) > -1) { 25 | match = true; 26 | break; 27 | } 28 | continue; 29 | } 30 | if (item[prop].toString().toUpperCase().indexOf(data) > -1) { 31 | match = true; 32 | break; 33 | } 34 | } 35 | ; 36 | return match; 37 | }); 38 | }; 39 | return FilterService; 40 | }()); 41 | FilterService = __decorate([ 42 | core_1.Injectable(), 43 | __metadata("design:paramtypes", []) 44 | ], FilterService); 45 | exports.FilterService = FilterService; 46 | //# sourceMappingURL=filter.service.js.map -------------------------------------------------------------------------------- /src/app/core/services/filter.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"filter.service.js","sourceRoot":"","sources":["filter.service.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAA2C;AAE3C,2EAAyE;AAGzE,IAAa,aAAa;IAEtB;IAAgB,CAAC;IAEjB,8BAAM,GAAN,UAAU,KAAU,EAAE,IAAY,EAAE,KAAe;QAC/C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAC,IAAO;YACxB,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,GAAG,CAAC,CAAa,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK;gBAAjB,IAAI,IAAI,cAAA;gBACT,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1B,IAAI,KAAK,GAAG,oCAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACjD,EAAE,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACnD,KAAK,GAAG,IAAI,CAAC;wBACb,KAAK,CAAC;oBACT,CAAC;oBACD,QAAQ,CAAC;gBACZ,CAAC;gBAED,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3D,KAAK,GAAG,IAAI,CAAC;oBACb,KAAK,CAAC;gBACR,CAAC;aACJ;YAAA,CAAC;YACF,MAAM,CAAC,KAAK,CAAC;QACjB,CAAC,CAAC,CAAC;IACP,CAAC;IAEL,oBAAC;AAAD,CAAC,AA1BD,IA0BC;AA1BY,aAAa;IADzB,iBAAU,EAAE;;GACA,aAAa,CA0BzB;AA1BY,sCAAa"} -------------------------------------------------------------------------------- /src/app/core/services/filter.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | 3 | import { propertyResolver } from '../../core/services/property-resolver'; 4 | 5 | @Injectable() 6 | export class FilterService { 7 | 8 | constructor() { } 9 | 10 | filter(items: T[], data: string, props: string[]) { 11 | return items.filter((item: T) => { 12 | let match = false; 13 | for (let prop of props) { 14 | if (prop.indexOf('.') > -1) { 15 | var value = propertyResolver.resolve(prop, item); 16 | if (value && value.toUpperCase().indexOf(data) > -1) { 17 | match = true; 18 | break; 19 | } 20 | continue; 21 | } 22 | 23 | if (item[prop].toString().toUpperCase().indexOf(data) > -1) { 24 | match = true; 25 | break; 26 | } 27 | }; 28 | return match; 29 | }); 30 | } 31 | 32 | } -------------------------------------------------------------------------------- /src/app/core/services/property-resolver.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | var propertyResolver = (function () { 4 | function propertyResolver() { 5 | } 6 | propertyResolver.resolve = function (path, obj) { 7 | return path.split('.').reduce(function (prev, curr) { 8 | return (prev ? prev[curr] : undefined); 9 | }, obj || self); 10 | }; 11 | return propertyResolver; 12 | }()); 13 | exports.propertyResolver = propertyResolver; 14 | //# sourceMappingURL=property-resolver.js.map -------------------------------------------------------------------------------- /src/app/core/services/property-resolver.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"property-resolver.js","sourceRoot":"","sources":["property-resolver.ts"],"names":[],"mappings":";;AAAA;IAAA;IAMA,CAAC;IALW,wBAAO,GAAd,UAAe,IAAY,EAAE,GAAQ;QACpC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,IAAI;YACrC,MAAM,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAA;QAC1C,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,CAAA;IACjB,CAAC;IACL,uBAAC;AAAD,CAAC,AAND,IAMC;AANY,4CAAgB"} -------------------------------------------------------------------------------- /src/app/core/services/property-resolver.ts: -------------------------------------------------------------------------------- 1 | export class propertyResolver { 2 | static resolve(path: string, obj: any) { 3 | return path.split('.').reduce((prev, curr) => { 4 | return (prev ? prev[curr] : undefined) 5 | }, obj || self) 6 | } 7 | } -------------------------------------------------------------------------------- /src/app/core/services/sorter.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"sorter.service.js","sourceRoot":"","sources":["sorter.service.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAA2C;AAE3C,2EAAyE;AAGzE,IAAa,aAAa;IAD1B;QAGC,aAAQ,GAAW,IAAI,CAAC;QACxB,cAAS,GAAW,CAAC,CAAC;IAwCvB,CAAC;IAtCG,4BAAI,GAAJ,UAAK,UAAiB,EAAE,IAAS;QAAjC,iBAgCC;QA/BG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAEpE,UAAU,CAAC,IAAI,CAAC,UAAC,CAAM,EAAC,CAAM;YAC1B,IAAI,IAAS,CAAC;YACd,IAAI,IAAS,CAAC;YAEd,yEAAyE;YACzE,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,GAAG,oCAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACzC,IAAI,GAAG,oCAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,CAAC,CAAC;gBACJ,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;gBACf,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;YAED,qFAAqF;YACrF,EAAE,CAAC,CAAC,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC1D,EAAE,CAAC,CAAC,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAE1D,EAAE,CAAA,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA,CAAC;gBACd,MAAM,CAAC,CAAC,CAAC;YACb,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA,CAAC;gBAClB,MAAM,CAAC,KAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YAC/B,CAAC;YACD,IAAI,CAAC,CAAC;gBACF,MAAM,CAAC,KAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YAC9B,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED,gCAAQ,GAAR,UAAS,GAAQ;QACf,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,YAAY,MAAM,CAAC,CAAC,CAAC;IACrE,CAAC;IAEL,oBAAC;AAAD,CAAC,AA3CD,IA2CC;AA3CY,aAAa;IADzB,iBAAU,EAAE;GACA,aAAa,CA2CzB;AA3CY,sCAAa"} -------------------------------------------------------------------------------- /src/app/core/services/sorter.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | 3 | import { propertyResolver } from '../../core/services/property-resolver'; 4 | 5 | @Injectable() 6 | export class SorterService { 7 | 8 | property: string = null; 9 | direction: number = 1; 10 | 11 | sort(collection: any[], prop: any) { 12 | this.property = prop; 13 | this.direction = (this.property === prop) ? this.direction * -1 : 1; 14 | 15 | collection.sort((a: any,b: any) => { 16 | let aVal: any; 17 | let bVal: any; 18 | 19 | //Handle resolving complex properties such as 'state.name' for prop value 20 | if (prop && prop.indexOf('.') > -1) { 21 | aVal = propertyResolver.resolve(prop, a); 22 | bVal = propertyResolver.resolve(prop, b); 23 | } 24 | else { 25 | aVal = a[prop]; 26 | bVal = b[prop]; 27 | } 28 | 29 | //Fix issues that spaces before/after string value can cause such as ' San Francisco' 30 | if (this.isString(aVal)) aVal = aVal.trim().toUpperCase(); 31 | if (this.isString(bVal)) bVal = bVal.trim().toUpperCase(); 32 | 33 | if(aVal === bVal){ 34 | return 0; 35 | } 36 | else if (aVal > bVal){ 37 | return this.direction * -1; 38 | } 39 | else { 40 | return this.direction * 1; 41 | } 42 | }); 43 | } 44 | 45 | isString(val: any) : boolean { 46 | return (val && (typeof val === 'string' || val instanceof String)); 47 | } 48 | 49 | } -------------------------------------------------------------------------------- /src/app/core/services/trackby.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var TrackByService = (function () { 11 | function TrackByService() { 12 | } 13 | TrackByService.prototype.customer = function (index, customer) { 14 | return customer.id; 15 | }; 16 | TrackByService.prototype.order = function (index, order) { 17 | return index; 18 | }; 19 | return TrackByService; 20 | }()); 21 | TrackByService = __decorate([ 22 | core_1.Injectable() 23 | ], TrackByService); 24 | exports.TrackByService = TrackByService; 25 | //# sourceMappingURL=trackby.service.js.map -------------------------------------------------------------------------------- /src/app/core/services/trackby.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"trackby.service.js","sourceRoot":"","sources":["trackby.service.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAA2C;AAK3C,IAAa,cAAc;IAA3B;IAYA,CAAC;IAVC,iCAAQ,GAAR,UAAS,KAAY,EAAE,QAAmB;QACxC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAED,8BAAK,GAAL,UAAM,KAAY,EAAE,KAAa;QAC/B,MAAM,CAAC,KAAK,CAAC;IACf,CAAC;IAIH,qBAAC;AAAD,CAAC,AAZD,IAYC;AAZY,cAAc;IAD1B,iBAAU,EAAE;GACA,cAAc,CAY1B;AAZY,wCAAc"} -------------------------------------------------------------------------------- /src/app/core/services/trackby.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | 3 | import { ICustomer, IOrder } from '../../shared/interfaces'; 4 | 5 | @Injectable() 6 | export class TrackByService { 7 | 8 | customer(index:number, customer: ICustomer) { 9 | return customer.id; 10 | } 11 | 12 | order(index:number, order: IOrder) { 13 | return index; 14 | } 15 | 16 | 17 | 18 | } -------------------------------------------------------------------------------- /src/app/core/services/validation.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"validation.service.js","sourceRoot":"","sources":["validation.service.ts"],"names":[],"mappings":";;;;;;;;AAEA,sCAA2C;AAG3C,IAAa,iBAAiB;IAA9B;IAwCA,CAAC;IAtCU,0CAAwB,GAA/B,UAAgC,IAAY;QACxC,IAAI,MAAM,GAAG;YACT,UAAU,EAAE,UAAU;YACtB,mBAAmB,EAAE,+BAA+B;YACpD,qBAAqB,EAAE,uBAAuB;YAC9C,iBAAiB,EAAE,sFAAsF;SAC5G,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAEM,qCAAmB,GAA1B,UAA2B,OAAwB;QAC/C,iEAAiE;QACjE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,uJAAuJ,CAAC,CAAC,CAAC,CAAC;YAC/K,MAAM,CAAC,IAAI,CAAC;QAChB,CAAC;QAAC,IAAI,CAAC,CAAC;YACJ,MAAM,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;QACzC,CAAC;IACL,CAAC;IAEM,gCAAc,GAArB,UAAsB,OAAwB;QAC1C,2BAA2B;QAC3B,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,uIAAuI,CAAC,CAAC,CAAC,CAAC;YAC/J,MAAM,CAAC,IAAI,CAAC;QAChB,CAAC;QAAC,IAAI,CAAC,CAAC;YACJ,MAAM,CAAC,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC;QAC3C,CAAC;IACL,CAAC;IAEM,mCAAiB,GAAxB,UAAyB,OAAwB;QAC7C,sEAAsE;QACtE,8DAA8D;QAC9D,6CAA6C;QAC7C,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC,CAAC;YAC1E,MAAM,CAAC,IAAI,CAAC;QAChB,CAAC;QAAC,IAAI,CAAC,CAAC;YACJ,MAAM,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;QACvC,CAAC;IACL,CAAC;IACL,wBAAC;AAAD,CAAC,AAxCD,IAwCC;AAxCY,iBAAiB;IAD7B,iBAAU,EAAE;GACA,iBAAiB,CAwC7B;AAxCY,8CAAiB"} -------------------------------------------------------------------------------- /src/app/core/services/validation.service.ts: -------------------------------------------------------------------------------- 1 | //Original version created by Cory Rylan: https://coryrylan.com/blog/angular-2-form-builder-and-validation-management 2 | import { AbstractControl } from '@angular/forms'; 3 | import { Injectable } from '@angular/core'; 4 | 5 | @Injectable() 6 | export class ValidationService { 7 | 8 | static getValidatorErrorMessage(code: string) { 9 | let config = { 10 | 'required': 'Required', 11 | 'invalidCreditCard': 'Is invalid credit card number', 12 | 'invalidEmailAddress': 'Invalid email address', 13 | 'invalidPassword': 'Invalid password. Password must be at least 6 characters long, and contain a number.' 14 | }; 15 | return config[code]; 16 | } 17 | 18 | static creditCardValidator(control: AbstractControl) { 19 | // Visa, MasterCard, American Express, Diners Club, Discover, JCB 20 | if (control.value.match(/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/)) { 21 | return null; 22 | } else { 23 | return { 'invalidCreditCard': true }; 24 | } 25 | } 26 | 27 | static emailValidator(control: AbstractControl) { 28 | // RFC 2822 compliant regex 29 | if (control.value.match(/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/)) { 30 | return null; 31 | } else { 32 | return { 'invalidEmailAddress': true }; 33 | } 34 | } 35 | 36 | static passwordValidator(control: AbstractControl) { 37 | // {6,100} - Assert password is between 6 and 100 characters 38 | // (?=.*[0-9]) - Assert a string has at least one number 39 | // (?!.*\s) - Spaces are not allowed 40 | if (control.value.match(/^(?=.*\d)(?=.*[a-zA-Z!@#$%^&*])(?!.*\s).{6,100}$/)) { 41 | return null; 42 | } else { 43 | return { 'invalidPassword': true }; 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /src/app/core/strategies/preload-modules.strategy.js: -------------------------------------------------------------------------------- 1 | //Preloading example from https://angular.io/docs/ts/latest/guide/router.html#!#custom-preloading 2 | "use strict"; 3 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 4 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 5 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 6 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 7 | return c > 3 && r && Object.defineProperty(target, key, r), r; 8 | }; 9 | Object.defineProperty(exports, "__esModule", { value: true }); 10 | require("rxjs/add/observable/of"); 11 | var core_1 = require("@angular/core"); 12 | var Observable_1 = require("rxjs/Observable"); 13 | var PreloadModulesStrategy = (function () { 14 | function PreloadModulesStrategy() { 15 | } 16 | PreloadModulesStrategy.prototype.preload = function (route, load) { 17 | if (route.data && route.data['preload']) { 18 | console.log('Preloaded: ' + route.path); 19 | return load(); 20 | } 21 | else { 22 | return Observable_1.Observable.of(null); 23 | } 24 | }; 25 | return PreloadModulesStrategy; 26 | }()); 27 | PreloadModulesStrategy = __decorate([ 28 | core_1.Injectable() 29 | ], PreloadModulesStrategy); 30 | exports.PreloadModulesStrategy = PreloadModulesStrategy; 31 | //# sourceMappingURL=preload-modules.strategy.js.map -------------------------------------------------------------------------------- /src/app/core/strategies/preload-modules.strategy.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"preload-modules.strategy.js","sourceRoot":"","sources":["preload-modules.strategy.ts"],"names":[],"mappings":"AAAA,iGAAiG;;;;;;;;;AAEjG,kCAAgC;AAChC,sCAA2C;AAE3C,8CAA6C;AAG7C,IAAa,sBAAsB;IAAnC;IAWA,CAAC;IATC,wCAAO,GAAP,UAAQ,KAAY,EAAE,IAA2B;QAC/C,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,CAAC;QAAC,IAAI,CAAC,CAAC;YACN,MAAM,CAAC,uBAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAEH,6BAAC;AAAD,CAAC,AAXD,IAWC;AAXY,sBAAsB;IADlC,iBAAU,EAAE;GACA,sBAAsB,CAWlC;AAXY,wDAAsB"} -------------------------------------------------------------------------------- /src/app/core/strategies/preload-modules.strategy.ts: -------------------------------------------------------------------------------- 1 | //Preloading example from https://angular.io/docs/ts/latest/guide/router.html#!#custom-preloading 2 | 3 | import 'rxjs/add/observable/of'; 4 | import { Injectable } from '@angular/core'; 5 | import { PreloadingStrategy, Route } from '@angular/router'; 6 | import { Observable } from 'rxjs/Observable'; 7 | 8 | @Injectable() 9 | export class PreloadModulesStrategy implements PreloadingStrategy { 10 | 11 | preload(route: Route, load: () => Observable): Observable { 12 | if (route.data && route.data['preload']) { 13 | console.log('Preloaded: ' + route.path); 14 | return load(); 15 | } else { 16 | return Observable.of(null); 17 | } 18 | } 19 | 20 | } -------------------------------------------------------------------------------- /src/app/customer/can-activate.guard.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | var core_1 = require("@angular/core"); 13 | var router_1 = require("@angular/router"); 14 | var auth_service_1 = require("../core/services/auth.service"); 15 | var CanActivateGuard = (function () { 16 | function CanActivateGuard(authService, router) { 17 | this.authService = authService; 18 | this.router = router; 19 | } 20 | CanActivateGuard.prototype.canActivate = function (route, state) { 21 | if (this.authService.isAuthenticated) { 22 | return true; 23 | } 24 | //Track URL user is trying to go to so we can send them there after logging in 25 | this.authService.redirectUrl = state.url; 26 | this.router.navigate(['/login']); 27 | return false; 28 | }; 29 | return CanActivateGuard; 30 | }()); 31 | CanActivateGuard = __decorate([ 32 | core_1.Injectable(), 33 | __metadata("design:paramtypes", [auth_service_1.AuthService, router_1.Router]) 34 | ], CanActivateGuard); 35 | exports.CanActivateGuard = CanActivateGuard; 36 | //# sourceMappingURL=can-activate.guard.js.map -------------------------------------------------------------------------------- /src/app/customer/can-activate.guard.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"can-activate.guard.js","sourceRoot":"","sources":["can-activate.guard.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAA2C;AAC3C,0CAAmG;AAGnG,8DAA4D;AAG5D,IAAa,gBAAgB;IAE3B,0BAAoB,WAAwB,EAAU,MAAc;QAAhD,gBAAW,GAAX,WAAW,CAAa;QAAU,WAAM,GAAN,MAAM,CAAQ;IAAI,CAAC;IAEzE,sCAAW,GAAX,UAAY,KAA6B,EAAE,KAA0B;QACnE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC;QAChB,CAAC;QAED,8EAA8E;QAC9E,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC;IACf,CAAC;IAEH,uBAAC;AAAD,CAAC,AAfD,IAeC;AAfY,gBAAgB;IAD5B,iBAAU,EAAE;qCAGsB,0BAAW,EAAkB,eAAM;GAFzD,gBAAgB,CAe5B;AAfY,4CAAgB"} -------------------------------------------------------------------------------- /src/app/customer/can-activate.guard.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; 3 | import { Observable } from 'rxjs/Observable'; 4 | 5 | import { AuthService } from '../core/services/auth.service'; 6 | 7 | @Injectable() 8 | export class CanActivateGuard implements CanActivate { 9 | 10 | constructor(private authService: AuthService, private router: Router) { } 11 | 12 | canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | Promise | boolean { 13 | if (this.authService.isAuthenticated) { 14 | return true; 15 | } 16 | 17 | //Track URL user is trying to go to so we can send them there after logging in 18 | this.authService.redirectUrl = state.url; 19 | this.router.navigate(['/login']); 20 | return false; 21 | } 22 | 23 | } -------------------------------------------------------------------------------- /src/app/customer/can-deactivate.guard.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var CanDeactivateGuard = (function () { 11 | function CanDeactivateGuard() { 12 | } 13 | CanDeactivateGuard.prototype.canDeactivate = function (component, route, state) { 14 | console.log("CustomerId: " + route.parent.params['id'] + " URL: " + state.url); 15 | //Check with component to see if we're able to deactivate 16 | return component.canDeactivate(); 17 | }; 18 | return CanDeactivateGuard; 19 | }()); 20 | CanDeactivateGuard = __decorate([ 21 | core_1.Injectable() 22 | ], CanDeactivateGuard); 23 | exports.CanDeactivateGuard = CanDeactivateGuard; 24 | //# sourceMappingURL=can-deactivate.guard.js.map -------------------------------------------------------------------------------- /src/app/customer/can-deactivate.guard.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"can-deactivate.guard.js","sourceRoot":"","sources":["can-deactivate.guard.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAA2C;AAO3C,IAAa,kBAAkB;IAA/B;IAaA,CAAC;IAXC,0CAAa,GAAb,UACE,SAAgC,EAChC,KAA6B,EAC7B,KAA0B;QAG1B,OAAO,CAAC,GAAG,CAAC,iBAAe,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAS,KAAK,CAAC,GAAK,CAAC,CAAC;QAE1E,yDAAyD;QACzD,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;IACnC,CAAC;IACH,yBAAC;AAAD,CAAC,AAbD,IAaC;AAbY,kBAAkB;IAD9B,iBAAU,EAAE;GACA,kBAAkB,CAa9B;AAbY,gDAAkB"} -------------------------------------------------------------------------------- /src/app/customer/can-deactivate.guard.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; 3 | import { Observable } from 'rxjs/Observable'; 4 | 5 | import { CustomerEditComponent } from './customer-edit.component'; 6 | 7 | @Injectable() 8 | export class CanDeactivateGuard implements CanDeactivate { 9 | 10 | canDeactivate( 11 | component: CustomerEditComponent, 12 | route: ActivatedRouteSnapshot, 13 | state: RouterStateSnapshot 14 | ): Observable | Promise | boolean { 15 | 16 | console.log(`CustomerId: ${route.parent.params['id']} URL: ${state.url}`); 17 | 18 | //Check with component to see if we're able to deactivate 19 | return component.canDeactivate(); 20 | } 21 | } -------------------------------------------------------------------------------- /src/app/customer/customer-details.component.css: -------------------------------------------------------------------------------- 1 | .details-image { 2 | height:100px;width:100px;margin-top:10px; 3 | } -------------------------------------------------------------------------------- /src/app/customer/customer-details.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 |
7 |

8 | {{ customer.firstName | capitalize }} {{ customer.lastName | capitalize }}  9 |

10 |
11 | {{ customer.address }} 12 |
13 | {{ customer.city }}, {{ customer.state.name }} 14 |
15 |
16 |

17 |
18 |
19 | 24 |
25 |
26 |
27 |
28 | No customer found 29 |
-------------------------------------------------------------------------------- /src/app/customer/customer-details.component.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | var core_1 = require("@angular/core"); 13 | var router_1 = require("@angular/router"); 14 | var data_service_1 = require("../core/services/data.service"); 15 | var CustomerDetailsComponent = (function () { 16 | function CustomerDetailsComponent(route, dataService) { 17 | this.route = route; 18 | this.dataService = dataService; 19 | } 20 | CustomerDetailsComponent.prototype.ngOnInit = function () { 21 | var _this = this; 22 | //Subscribe to params so if it changes we pick it up. Could use this.route.parent.snapshot.params["id"] to simplify it. 23 | this.route.parent.params.subscribe(function (params) { 24 | var id = +params['id']; 25 | _this.dataService.getCustomer(id) 26 | .subscribe(function (customer) { 27 | _this.customer = customer; 28 | _this.mapEnabled = true; 29 | }); 30 | }); 31 | }; 32 | return CustomerDetailsComponent; 33 | }()); 34 | CustomerDetailsComponent = __decorate([ 35 | core_1.Component({ 36 | moduleId: module.id, 37 | selector: 'cm-customer-details', 38 | templateUrl: 'customer-details.component.html', 39 | styleUrls: ['customer-details.component.css'] 40 | }), 41 | __metadata("design:paramtypes", [router_1.ActivatedRoute, data_service_1.DataService]) 42 | ], CustomerDetailsComponent); 43 | exports.CustomerDetailsComponent = CustomerDetailsComponent; 44 | //# sourceMappingURL=customer-details.component.js.map -------------------------------------------------------------------------------- /src/app/customer/customer-details.component.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"customer-details.component.js","sourceRoot":"","sources":["customer-details.component.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAkD;AAClD,0CAAyD;AAGzD,8DAA4D;AAQ5D,IAAa,wBAAwB;IAKnC,kCAAoB,KAAqB,EAAU,WAAwB;QAAvD,UAAK,GAAL,KAAK,CAAgB;QAAU,gBAAW,GAAX,WAAW,CAAa;IAAI,CAAC;IAEhF,2CAAQ,GAAR;QAAA,iBAUC;QATG,uHAAuH;QACvH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,UAAC,MAAc;YAChD,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,KAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;iBAC3B,SAAS,CAAC,UAAC,QAAmB;gBAC7B,KAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACzB,KAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACzB,CAAC,CAAC,CAAC;QACT,CAAC,CAAC,CAAC;IACP,CAAC;IAGH,+BAAC;AAAD,CAAC,AApBD,IAoBC;AApBY,wBAAwB;IANpC,gBAAS,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,QAAQ,EAAE,qBAAqB;QAC/B,WAAW,EAAE,iCAAiC;QAC9C,SAAS,EAAE,CAAE,gCAAgC,CAAE;KAChD,CAAC;qCAM2B,uBAAc,EAAuB,0BAAW;GALhE,wBAAwB,CAoBpC;AApBY,4DAAwB"} -------------------------------------------------------------------------------- /src/app/customer/customer-details.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ActivatedRoute, Params } from '@angular/router'; 3 | 4 | import { ICustomer } from '../shared/interfaces'; 5 | import { DataService } from '../core/services/data.service'; 6 | 7 | @Component({ 8 | moduleId: module.id, 9 | selector: 'cm-customer-details', 10 | templateUrl: 'customer-details.component.html', 11 | styleUrls: [ 'customer-details.component.css' ] 12 | }) 13 | export class CustomerDetailsComponent implements OnInit { 14 | 15 | customer: ICustomer; 16 | mapEnabled: boolean; 17 | 18 | constructor(private route: ActivatedRoute, private dataService: DataService) { } 19 | 20 | ngOnInit() { 21 | //Subscribe to params so if it changes we pick it up. Could use this.route.parent.snapshot.params["id"] to simplify it. 22 | this.route.parent.params.subscribe((params: Params) => { 23 | let id = +params['id']; 24 | this.dataService.getCustomer(id) 25 | .subscribe((customer: ICustomer) => { 26 | this.customer = customer; 27 | this.mapEnabled = true; 28 | }); 29 | }); 30 | } 31 | 32 | 33 | } -------------------------------------------------------------------------------- /src/app/customer/customer-edit.component.css: -------------------------------------------------------------------------------- 1 | .customer-form input[type='text'], 2 | .customer-form input[type='number'], 3 | .customer-form input[type='email'], 4 | .customer-form select { 5 | width:100%; 6 | } 7 | 8 | .customer-form .ng-invalid { 9 | border-left: 5px solid #a94442; 10 | } 11 | 12 | .customer-form .ng-valid { 13 | border-left: 5px solid #42A948; 14 | } -------------------------------------------------------------------------------- /src/app/customer/customer-orders.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

Orders for {{ customer.firstName | capitalize }} {{ customer.lastName | capitalize }}

4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
{{ order.productName }}{{ order.itemCost | currency:'USD':true }}
 {{ customer.orderTotal | currency:'USD':true }}
15 |
16 | No orders found 17 |
18 |
19 |
20 | No customer found 21 |
22 |
-------------------------------------------------------------------------------- /src/app/customer/customer-orders.component.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | var core_1 = require("@angular/core"); 13 | var router_1 = require("@angular/router"); 14 | var data_service_1 = require("../core/services/data.service"); 15 | var CustomerOrdersComponent = (function () { 16 | function CustomerOrdersComponent(route, dataService) { 17 | this.route = route; 18 | this.dataService = dataService; 19 | this.orders = []; 20 | } 21 | CustomerOrdersComponent.prototype.ngOnInit = function () { 22 | var _this = this; 23 | //Subscribe to params so if it changes we pick it up. Could use this.route.parent.snapshot.params["id"] to simplify it. 24 | this.route.parent.params.subscribe(function (params) { 25 | var id = +params['id']; 26 | _this.dataService.getCustomer(id).subscribe(function (customer) { 27 | _this.customer = customer; 28 | }); 29 | }); 30 | }; 31 | CustomerOrdersComponent.prototype.ordersTrackBy = function (index, orderItem) { 32 | return index; 33 | }; 34 | return CustomerOrdersComponent; 35 | }()); 36 | CustomerOrdersComponent = __decorate([ 37 | core_1.Component({ 38 | moduleId: module.id, 39 | selector: 'cm-customer-orders', 40 | templateUrl: 'customer-orders.component.html' 41 | }), 42 | __metadata("design:paramtypes", [router_1.ActivatedRoute, data_service_1.DataService]) 43 | ], CustomerOrdersComponent); 44 | exports.CustomerOrdersComponent = CustomerOrdersComponent; 45 | //# sourceMappingURL=customer-orders.component.js.map -------------------------------------------------------------------------------- /src/app/customer/customer-orders.component.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"customer-orders.component.js","sourceRoot":"","sources":["customer-orders.component.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAkD;AAClD,0CAAyD;AAEzD,8DAA4D;AAQ5D,IAAa,uBAAuB;IAKlC,iCAAoB,KAAqB,EAAU,WAAwB;QAAvD,UAAK,GAAL,KAAK,CAAgB;QAAU,gBAAW,GAAX,WAAW,CAAa;QAH3E,WAAM,GAAa,EAAE,CAAC;IAGyD,CAAC;IAEhF,0CAAQ,GAAR;QAAA,iBAQC;QAPG,wHAAwH;QACxH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,UAAC,MAAc;YAChD,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,KAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,UAAC,QAAmB;gBAC7D,KAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC3B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED,+CAAa,GAAb,UAAc,KAAa,EAAE,SAAc;QACzC,MAAM,CAAC,KAAK,CAAC;IACf,CAAC;IAEH,8BAAC;AAAD,CAAC,AArBD,IAqBC;AArBY,uBAAuB;IALnC,gBAAS,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,QAAQ,EAAE,oBAAoB;QAC9B,WAAW,EAAE,gCAAgC;KAC9C,CAAC;qCAM2B,uBAAc,EAAuB,0BAAW;GALhE,uBAAuB,CAqBnC;AArBY,0DAAuB"} -------------------------------------------------------------------------------- /src/app/customer/customer-orders.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ActivatedRoute, Params } from '@angular/router'; 3 | 4 | import { DataService } from '../core/services/data.service'; 5 | import { ICustomer, IOrder, IOrderItem } from '../shared/interfaces'; 6 | 7 | @Component({ 8 | moduleId: module.id, 9 | selector: 'cm-customer-orders', 10 | templateUrl: 'customer-orders.component.html' 11 | }) 12 | export class CustomerOrdersComponent implements OnInit { 13 | 14 | orders: IOrder[] = []; 15 | customer: ICustomer; 16 | 17 | constructor(private route: ActivatedRoute, private dataService: DataService) { } 18 | 19 | ngOnInit() { 20 | //Subscribe to params so if it changes we pick it up. Could use this.route.parent.snapshot.params["id"] to simplify it. 21 | this.route.parent.params.subscribe((params: Params) => { 22 | let id = +params['id']; 23 | this.dataService.getCustomer(id).subscribe((customer: ICustomer) => { 24 | this.customer = customer; 25 | }); 26 | }); 27 | } 28 | 29 | ordersTrackBy(index: number, orderItem: any) { 30 | return index; 31 | } 32 | 33 | } -------------------------------------------------------------------------------- /src/app/customer/customer-routing.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"customer-routing.module.js","sourceRoot":"","sources":["customer-routing.module.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAAyC;AACzC,0CAAuD;AAEvD,2DAA2D;AAC3D,yEAAsE;AACtE,2EAAwE;AACxE,qEAAkE;AAClE,2DAAwD;AACxD,+DAA4D;AAE5D,IAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,sCAAiB;QAC5B,QAAQ,EAAE;YACR,EAAE,IAAI,EAAC,QAAQ,EAAG,SAAS,EAAE,mDAAuB,EAAE;YACtD,EAAE,IAAI,EAAC,SAAS,EAAE,SAAS,EAAE,qDAAwB,EAAE;YACvD,EAAE,IAAI,EAAC,MAAM;gBACX,SAAS,EAAE,+CAAqB;gBAChC,WAAW,EAAE,CAAE,qCAAgB,CAAE;gBACjC,aAAa,EAAE,CAAE,yCAAkB,CAAE;aACtC;SACF;KACF;CACF,CAAC;AAOF,IAAa,qBAAqB;IAAlC;IAEA,CAAC;IAAD,4BAAC;AAAD,CAAC,AAFD,IAEC;AADQ,gCAAU,GAAG,CAAE,sCAAiB,EAAE,mDAAuB,EAAE,qDAAwB,EAAE,+CAAqB,CAAE,CAAC;AADzG,qBAAqB;IALjC,eAAQ,CAAC;QACR,OAAO,EAAE,CAAE,qBAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAE;QAC1C,OAAO,EAAE,CAAE,qBAAY,CAAE;QACzB,SAAS,EAAK,CAAE,qCAAgB,EAAE,yCAAkB,CAAE;KACvD,CAAC;GACW,qBAAqB,CAEjC;AAFY,sDAAqB"} -------------------------------------------------------------------------------- /src/app/customer/customer-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | 4 | import { CustomerComponent } from './customer.component'; 5 | import { CustomerOrdersComponent } from './customer-orders.component'; 6 | import { CustomerDetailsComponent } from './customer-details.component'; 7 | import { CustomerEditComponent } from './customer-edit.component'; 8 | import { CanActivateGuard } from './can-activate.guard'; 9 | import { CanDeactivateGuard } from './can-deactivate.guard'; 10 | 11 | const routes: Routes = [ 12 | { 13 | path: '', 14 | component: CustomerComponent, 15 | children: [ 16 | { path:'orders', component: CustomerOrdersComponent }, 17 | { path:'details', component: CustomerDetailsComponent }, 18 | { path:'edit', 19 | component: CustomerEditComponent, 20 | canActivate: [ CanActivateGuard ], 21 | canDeactivate: [ CanDeactivateGuard ] 22 | } 23 | ] 24 | } 25 | ]; 26 | 27 | @NgModule({ 28 | imports: [ RouterModule.forChild(routes) ], 29 | exports: [ RouterModule ], 30 | providers: [ CanActivateGuard, CanDeactivateGuard ] 31 | }) 32 | export class CustomerRoutingModule { 33 | static components = [ CustomerComponent, CustomerOrdersComponent, CustomerDetailsComponent, CustomerEditComponent ]; 34 | } 35 | 36 | -------------------------------------------------------------------------------- /src/app/customer/customer.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

  Customer Information

5 |
6 |
7 | 26 |
27 | 28 |
29 |
30 | View all Customers 31 |
32 |
33 |
34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /src/app/customer/customer.component.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | var core_1 = require("@angular/core"); 13 | var router_1 = require("@angular/router"); 14 | var CustomerComponent = (function () { 15 | //displayMode: CustomerDisplayModeEnum; 16 | //displayModeEnum = CustomerDisplayModeEnum; 17 | function CustomerComponent(router) { 18 | this.router = router; 19 | } 20 | CustomerComponent.prototype.ngOnInit = function () { 21 | //No longer needed due to routerLinkActive feature in Angular 22 | // const path = this.router.url.split('/')[3]; 23 | // switch (path) { 24 | // case 'details': 25 | // this.displayMode = CustomerDisplayModeEnum.Details; 26 | // break; 27 | // case 'orders': 28 | // this.displayMode = CustomerDisplayModeEnum.Orders; 29 | // break; 30 | // case 'edit': 31 | // this.displayMode = CustomerDisplayModeEnum.Edit; 32 | // break; 33 | // } 34 | }; 35 | return CustomerComponent; 36 | }()); 37 | CustomerComponent = __decorate([ 38 | core_1.Component({ 39 | moduleId: module.id, 40 | selector: 'cm-orders', 41 | templateUrl: 'customer.component.html' 42 | }), 43 | __metadata("design:paramtypes", [router_1.Router]) 44 | ], CustomerComponent); 45 | exports.CustomerComponent = CustomerComponent; 46 | // enum CustomerDisplayModeEnum { 47 | // Details=0, 48 | // Orders=1, 49 | // Edit=2 50 | // } 51 | //# sourceMappingURL=customer.component.js.map -------------------------------------------------------------------------------- /src/app/customer/customer.component.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"customer.component.js","sourceRoot":"","sources":["customer.component.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAkD;AAClD,0CAAyC;AAOzC,IAAa,iBAAiB;IAE1B,uCAAuC;IACvC,4CAA4C;IAE5C,2BAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAI,CAAC;IAEvC,oCAAQ,GAAR;QAEE,6DAA6D;QAC7D,8CAA8C;QAC9C,kBAAkB;QAClB,oBAAoB;QACpB,0DAA0D;QAC1D,aAAa;QACb,mBAAmB;QACnB,yDAAyD;QACzD,aAAa;QACb,iBAAiB;QACjB,uDAAuD;QACvD,aAAa;QACb,IAAI;IACN,CAAC;IAEL,wBAAC;AAAD,CAAC,AAxBD,IAwBC;AAxBY,iBAAiB;IAL7B,gBAAS,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,QAAQ,EAAE,WAAW;QACrB,WAAW,EAAE,yBAAyB;KACvC,CAAC;qCAM8B,eAAM;GALzB,iBAAiB,CAwB7B;AAxBY,8CAAiB;AA0B9B,iCAAiC;AACjC,eAAe;AACf,cAAc;AACd,WAAW;AACX,IAAI"} -------------------------------------------------------------------------------- /src/app/customer/customer.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Router } from '@angular/router'; 3 | 4 | @Component({ 5 | moduleId: module.id, 6 | selector: 'cm-orders', 7 | templateUrl: 'customer.component.html' 8 | }) 9 | export class CustomerComponent implements OnInit { 10 | 11 | //displayMode: CustomerDisplayModeEnum; 12 | //displayModeEnum = CustomerDisplayModeEnum; 13 | 14 | constructor(private router: Router) { } 15 | 16 | ngOnInit() { 17 | 18 | //No longer needed due to routerLinkActive feature in Angular 19 | // const path = this.router.url.split('/')[3]; 20 | // switch (path) { 21 | // case 'details': 22 | // this.displayMode = CustomerDisplayModeEnum.Details; 23 | // break; 24 | // case 'orders': 25 | // this.displayMode = CustomerDisplayModeEnum.Orders; 26 | // break; 27 | // case 'edit': 28 | // this.displayMode = CustomerDisplayModeEnum.Edit; 29 | // break; 30 | // } 31 | } 32 | 33 | } 34 | 35 | // enum CustomerDisplayModeEnum { 36 | // Details=0, 37 | // Orders=1, 38 | // Edit=2 39 | // } 40 | -------------------------------------------------------------------------------- /src/app/customer/customer.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var shared_module_1 = require("../shared/shared.module"); 11 | var customer_routing_module_1 = require("./customer-routing.module"); 12 | var CustomerModule = (function () { 13 | function CustomerModule() { 14 | } 15 | return CustomerModule; 16 | }()); 17 | CustomerModule = __decorate([ 18 | core_1.NgModule({ 19 | imports: [customer_routing_module_1.CustomerRoutingModule, shared_module_1.SharedModule], 20 | declarations: [customer_routing_module_1.CustomerRoutingModule.components] 21 | }) 22 | ], CustomerModule); 23 | exports.CustomerModule = CustomerModule; 24 | //# sourceMappingURL=customer.module.js.map -------------------------------------------------------------------------------- /src/app/customer/customer.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"customer.module.js","sourceRoot":"","sources":["customer.module.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAA8C;AAE9C,yDAAyD;AACzD,qEAAkE;AAMlE,IAAa,cAAc;IAA3B;IAA8B,CAAC;IAAD,qBAAC;AAAD,CAAC,AAA/B,IAA+B;AAAlB,cAAc;IAJ1B,eAAQ,CAAC;QACR,OAAO,EAAO,CAAE,+CAAqB,EAAE,4BAAY,CAAE;QACrD,YAAY,EAAE,CAAE,+CAAqB,CAAC,UAAU,CAAE;KACnD,CAAC;GACW,cAAc,CAAI;AAAlB,wCAAc"} -------------------------------------------------------------------------------- /src/app/customer/customer.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | 3 | import { SharedModule } from '../shared/shared.module'; 4 | import { CustomerRoutingModule } from './customer-routing.module'; 5 | 6 | @NgModule({ 7 | imports: [ CustomerRoutingModule, SharedModule ], 8 | declarations: [ CustomerRoutingModule.components ] 9 | }) 10 | export class CustomerModule { } -------------------------------------------------------------------------------- /src/app/customers/customers-card.component.css: -------------------------------------------------------------------------------- 1 | .card-container { 2 | width:85%; 3 | } 4 | 5 | .card { 6 | background-color:#fff; 7 | border: 1px solid #d4d4d4; 8 | height:120px; 9 | margin-bottom: 20px; 10 | position: relative; 11 | } 12 | 13 | .card-header { 14 | background-color:#027FF4; 15 | font-size:14pt; 16 | color:white; 17 | padding:5px; 18 | width:100%; 19 | } 20 | 21 | .card-close { 22 | color: white; 23 | font-weight:bold; 24 | margin-right:5px; 25 | } 26 | 27 | .card-body { 28 | padding-left: 5px; 29 | } 30 | 31 | .card-body-left { 32 | margin-top: -5px; 33 | } 34 | 35 | .card-body-right { 36 | margin-left: 20px; 37 | margin-top: 2px; 38 | } 39 | 40 | .card-body-content { 41 | width: 100px; 42 | } 43 | 44 | .card-image { 45 | height:50px;width:50px;margin-top:10px; 46 | } 47 | 48 | .white { 49 | color: white; 50 | } 51 | 52 | .white:hover { 53 | color: white; 54 | } -------------------------------------------------------------------------------- /src/app/customers/customers-card.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 14 |
15 |
16 |
17 | 18 | 19 | 20 |
21 |
22 |
{{customer.city | trim }}, {{customer.state.name}}
23 | View Orders 24 |
25 |
26 |
27 |
28 |
29 |
30 | No Records Found 31 |
32 |
33 |
-------------------------------------------------------------------------------- /src/app/customers/customers-card.component.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"customers-card.component.js","sourceRoot":"","sources":["customers-card.component.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAC2E;AAG3E,oEAAkE;AAyBlE,IAAa,sBAAsB;IAIjC,gCAAmB,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;QAFxC,cAAS,GAAgB,EAAE,CAAC;IAEgB,CAAC;IAEtD,yCAAQ,GAAR;IAEA,CAAC;IAEH,6BAAC;AAAD,CAAC,AAVD,IAUC;AARU;IAAR,YAAK,EAAE;;yDAA6B;AAF1B,sBAAsB;IAvBlC,gBAAS,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,QAAQ,EAAE,mBAAmB;QAC7B,WAAW,EAAE,+BAA+B;QAC5C,SAAS,EAAE,CAAE,8BAA8B,CAAE;QAC7C,8CAA8C;QAC9C,gBAAgB;QAChB,0BAA0B;QAC1B,oEAAoE;QACpE,gCAAgC;QAChC,2DAA2D;QAC3D,qBAAqB;QACrB,UAAU;QACV,gCAAgC;QAChC,yEAAyE;QACzE,SAAS;QACT,OAAO;QACP,KAAK;QACL,uEAAuE;QACvE,oEAAoE;QACpE,+EAA+E;QAC/E,eAAe,EAAE,8BAAuB,CAAC,MAAM;KAChD,CAAC;qCAKmC,gCAAc;GAJtC,sBAAsB,CAUlC;AAVY,wDAAsB"} -------------------------------------------------------------------------------- /src/app/customers/customers-card.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input, OnInit, ChangeDetectionStrategy, 2 | trigger, state, style, transition, animate } from '@angular/core'; 3 | 4 | import { ICustomer } from '../shared/interfaces'; 5 | import { TrackByService } from '../core/services/trackby.service'; 6 | 7 | @Component({ 8 | moduleId: module.id, 9 | selector: 'cm-customers-card', 10 | templateUrl: 'customers-card.component.html', 11 | styleUrls: [ 'customers-card.component.css' ], 12 | //Add [@flyInOut]="'in'" into template on card 13 | // animations: [ 14 | // trigger('flyInOut', [ 15 | // state('in', style({transform: 'translateX(0)', opacity: 1})), 16 | // transition('void => *', [ 17 | // style({transform: 'translateX(25%)', opacity: 0}), 18 | // animate(300) 19 | // ]), 20 | // transition('* => void', [ 21 | // animate(300, style({transform: 'translateX(-25%)', opacity: 1})) 22 | // ]) 23 | // ]) 24 | // ], 25 | //When using OnPush detectors, then the framework will check an OnPush 26 | //component when any of its input properties changes, when it fires 27 | //an event, or when an observable fires an event ~ Victor Savkin (Angular Team) 28 | changeDetection: ChangeDetectionStrategy.OnPush 29 | }) 30 | export class CustomersCardComponent implements OnInit { 31 | 32 | @Input() customers: ICustomer[] = []; 33 | 34 | constructor(public trackbyService: TrackByService) { } 35 | 36 | ngOnInit() { 37 | 38 | } 39 | 40 | } 41 | 42 | -------------------------------------------------------------------------------- /src/app/customers/customers-grid.component.css: -------------------------------------------------------------------------------- 1 | .grid-container div { 2 | padding-left: 0px; 3 | } 4 | 5 | .grid-container td { 6 | vertical-align: middle; 7 | } 8 | 9 | .grid-image { 10 | height:50px;width:50px;margin-top:10px; 11 | } -------------------------------------------------------------------------------- /src/app/customers/customers-grid.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |
 First NameLast NameAddressCityStateOrder Total 
Customer Image{{ customer.firstName | capitalize }}{{ customer.lastName | capitalize }}{{ customer.address }}{{ customer.city | trim }}{{ customer.state.name }}{{ customer.orderTotal | currency:'USD':true }}View Orders
 No Records Found
37 |
38 |
39 |
40 |
41 | -------------------------------------------------------------------------------- /src/app/customers/customers-grid.component.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | var core_1 = require("@angular/core"); 13 | var sorter_service_1 = require("../core/services/sorter.service"); 14 | var trackby_service_1 = require("../core/services/trackby.service"); 15 | var CustomersGridComponent = (function () { 16 | function CustomersGridComponent(sorterService, trackbyService) { 17 | this.sorterService = sorterService; 18 | this.trackbyService = trackbyService; 19 | this.customers = []; 20 | } 21 | CustomersGridComponent.prototype.ngOnInit = function () { 22 | }; 23 | CustomersGridComponent.prototype.sort = function (prop) { 24 | this.sorterService.sort(this.customers, prop); 25 | }; 26 | return CustomersGridComponent; 27 | }()); 28 | __decorate([ 29 | core_1.Input(), 30 | __metadata("design:type", Array) 31 | ], CustomersGridComponent.prototype, "customers", void 0); 32 | CustomersGridComponent = __decorate([ 33 | core_1.Component({ 34 | moduleId: module.id, 35 | selector: 'cm-customers-grid', 36 | templateUrl: 'customers-grid.component.html', 37 | styleUrls: ['customers-grid.component.css'], 38 | //When using OnPush detectors, then the framework will check an OnPush 39 | //component when any of its input properties changes, when it fires 40 | //an event, or when an observable fires an event ~ Victor Savkin (Angular Team) 41 | changeDetection: core_1.ChangeDetectionStrategy.OnPush 42 | }), 43 | __metadata("design:paramtypes", [sorter_service_1.SorterService, trackby_service_1.TrackByService]) 44 | ], CustomersGridComponent); 45 | exports.CustomersGridComponent = CustomersGridComponent; 46 | //# sourceMappingURL=customers-grid.component.js.map -------------------------------------------------------------------------------- /src/app/customers/customers-grid.component.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"customers-grid.component.js","sourceRoot":"","sources":["customers-grid.component.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAkF;AAElF,kEAAgE;AAChE,oEAAkE;AAYlE,IAAa,sBAAsB;IAIjC,gCAAoB,aAA4B,EAAS,cAA8B;QAAnE,kBAAa,GAAb,aAAa,CAAe;QAAS,mBAAc,GAAd,cAAc,CAAgB;QAF9E,cAAS,GAAU,EAAE,CAAC;IAE4D,CAAC;IAE5F,yCAAQ,GAAR;IAEA,CAAC;IAED,qCAAI,GAAJ,UAAK,IAAY;QACb,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAEH,6BAAC;AAAD,CAAC,AAdD,IAcC;AAZU;IAAR,YAAK,EAAE;;yDAAuB;AAFpB,sBAAsB;IAVlC,gBAAS,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,QAAQ,EAAE,mBAAmB;QAC7B,WAAW,EAAE,+BAA+B;QAC5C,SAAS,EAAE,CAAE,8BAA8B,CAAE;QAC7C,uEAAuE;QACvE,oEAAoE;QACpE,+EAA+E;QAC/E,eAAe,EAAE,8BAAuB,CAAC,MAAM;KAChD,CAAC;qCAKmC,8BAAa,EAAyB,gCAAc;GAJ5E,sBAAsB,CAclC;AAdY,wDAAsB"} -------------------------------------------------------------------------------- /src/app/customers/customers-grid.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core'; 2 | 3 | import { SorterService } from '../core/services/sorter.service'; 4 | import { TrackByService } from '../core/services/trackby.service'; 5 | 6 | @Component({ 7 | moduleId: module.id, 8 | selector: 'cm-customers-grid', 9 | templateUrl: 'customers-grid.component.html', 10 | styleUrls: [ 'customers-grid.component.css' ], 11 | //When using OnPush detectors, then the framework will check an OnPush 12 | //component when any of its input properties changes, when it fires 13 | //an event, or when an observable fires an event ~ Victor Savkin (Angular Team) 14 | changeDetection: ChangeDetectionStrategy.OnPush 15 | }) 16 | export class CustomersGridComponent implements OnInit { 17 | 18 | @Input() customers: any[] = []; 19 | 20 | constructor(private sorterService: SorterService, public trackbyService: TrackByService) { } 21 | 22 | ngOnInit() { 23 | 24 | } 25 | 26 | sort(prop: string) { 27 | this.sorterService.sort(this.customers, prop); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/app/customers/customers-routing.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var router_1 = require("@angular/router"); 11 | var customers_component_1 = require("./customers.component"); 12 | var customers_card_component_1 = require("./customers-card.component"); 13 | var customers_grid_component_1 = require("./customers-grid.component"); 14 | var routes = [ 15 | { path: '', component: customers_component_1.CustomersComponent } 16 | ]; 17 | var CustomersRoutingModule = (function () { 18 | function CustomersRoutingModule() { 19 | } 20 | return CustomersRoutingModule; 21 | }()); 22 | CustomersRoutingModule.components = [customers_component_1.CustomersComponent, customers_card_component_1.CustomersCardComponent, customers_grid_component_1.CustomersGridComponent]; 23 | CustomersRoutingModule = __decorate([ 24 | core_1.NgModule({ 25 | imports: [router_1.RouterModule.forChild(routes)], 26 | exports: [router_1.RouterModule] 27 | }) 28 | ], CustomersRoutingModule); 29 | exports.CustomersRoutingModule = CustomersRoutingModule; 30 | //# sourceMappingURL=customers-routing.module.js.map -------------------------------------------------------------------------------- /src/app/customers/customers-routing.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"customers-routing.module.js","sourceRoot":"","sources":["customers-routing.module.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAAyC;AACzC,0CAAuD;AAEvD,6DAA2D;AAC3D,uEAAoE;AACpE,uEAAoE;AAEpE,IAAM,MAAM,GAAW;IACrB,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,wCAAkB,EAAE;CAC5C,CAAC;AAMF,IAAa,sBAAsB;IAAnC;IAEA,CAAC;IAAD,6BAAC;AAAD,CAAC,AAFD,IAEC;AADQ,iCAAU,GAAG,CAAE,wCAAkB,EAAE,iDAAsB,EAAE,iDAAsB,CAAE,CAAC;AADhF,sBAAsB;IAJlC,eAAQ,CAAC;QACR,OAAO,EAAE,CAAE,qBAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAE;QAC1C,OAAO,EAAE,CAAE,qBAAY,CAAE;KAC1B,CAAC;GACW,sBAAsB,CAElC;AAFY,wDAAsB"} -------------------------------------------------------------------------------- /src/app/customers/customers-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | 4 | import { CustomersComponent } from './customers.component'; 5 | import { CustomersCardComponent } from './customers-card.component'; 6 | import { CustomersGridComponent } from './customers-grid.component'; 7 | 8 | const routes: Routes = [ 9 | { path: '', component: CustomersComponent } 10 | ]; 11 | 12 | @NgModule({ 13 | imports: [ RouterModule.forChild(routes) ], 14 | exports: [ RouterModule ] 15 | }) 16 | export class CustomersRoutingModule { 17 | static components = [ CustomersComponent, CustomersCardComponent, CustomersGridComponent ]; 18 | } -------------------------------------------------------------------------------- /src/app/customers/customers.component.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"customers.component.js","sourceRoot":"","sources":["customers.component.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAkD;AAElD,8DAA4D;AAE5D,kEAAgE;AAOhE,IAAa,kBAAkB;IAW7B,4BAAoB,WAAwB,EAAU,aAA4B;QAA9D,gBAAW,GAAX,WAAW,CAAa;QAAU,kBAAa,GAAb,aAAa,CAAe;QAPlF,cAAS,GAAgB,EAAE,CAAC;QAC5B,sBAAiB,GAAgB,EAAE,CAAC;QAEpC,oBAAe,GAAG,eAAe,CAAC;QAClC,iBAAY,GAAW,CAAC,CAAC;QACzB,aAAQ,GAAW,EAAE,CAAC;IAEgE,CAAC;IAEvF,qCAAQ,GAAR;QACE,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC;QAExC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,8CAAiB,GAAjB,UAAkB,IAAqB;QACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,wCAAW,GAAX,UAAY,IAAY;QACtB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,6CAAgB,GAAhB,UAAiB,IAAY;QAA7B,iBAQC;QAPC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;aACvE,SAAS,CAAC,UAAC,QAAoC;YAC9C,KAAI,CAAC,SAAS,GAAG,KAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC;YAC3D,KAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;QAC5C,CAAC,EACD,UAAC,GAAQ,IAAK,OAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAhB,CAAgB,EAC9B,cAAM,OAAA,OAAO,CAAC,GAAG,CAAC,mDAAmD,GAAG,IAAI,CAAC,EAAvE,CAAuE,CAAC,CAAC;IACrF,CAAC;IAED,0CAAa,GAAb,UAAc,IAAY;QACxB,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACzB,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1B,IAAM,KAAK,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YAC9D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAY,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,CAAC,CAAC;YACJ,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1C,CAAC;IACH,CAAC;IACH,yBAAC;AAAD,CAAC,AAjDD,IAiDC;AAjDY,kBAAkB;IAL9B,gBAAS,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,QAAQ,EAAE,cAAc;QACxB,WAAW,EAAE,0BAA0B;KACxC,CAAC;qCAYiC,0BAAW,EAAyB,8BAAa;GAXvE,kBAAkB,CAiD9B;AAjDY,gDAAkB;AAmD/B,IAAK,eAIJ;AAJD,WAAK,eAAe;IAClB,qDAAQ,CAAA;IACR,qDAAQ,CAAA;IACR,mDAAO,CAAA;AACT,CAAC,EAJI,eAAe,KAAf,eAAe,QAInB"} -------------------------------------------------------------------------------- /src/app/customers/customers.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | import { DataService } from '../core/services/data.service'; 4 | import { ICustomer, IPagedResults } from '../shared/interfaces'; 5 | import { FilterService } from '../core/services/filter.service'; 6 | 7 | @Component({ 8 | moduleId: module.id, 9 | selector: 'cm-customers', 10 | templateUrl: 'customers.component.html' 11 | }) 12 | export class CustomersComponent implements OnInit { 13 | 14 | title: string; 15 | filterText: string; 16 | customers: ICustomer[] = []; 17 | filteredCustomers: ICustomer[] = []; 18 | displayMode: DisplayModeEnum; 19 | displayModeEnum = DisplayModeEnum; 20 | totalRecords: number = 0; 21 | pageSize: number = 10; 22 | 23 | constructor(private dataService: DataService, private filterService: FilterService) { } 24 | 25 | ngOnInit() { 26 | this.title = 'Customers'; 27 | this.filterText = 'Filter Customers:'; 28 | this.displayMode = DisplayModeEnum.Card; 29 | 30 | this.getCustomersPage(1); 31 | } 32 | 33 | changeDisplayMode(mode: DisplayModeEnum) { 34 | this.displayMode = mode; 35 | } 36 | 37 | pageChanged(page: number) { 38 | this.getCustomersPage(page); 39 | } 40 | 41 | getCustomersPage(page: number) { 42 | this.dataService.getCustomersPage((page - 1) * this.pageSize, this.pageSize) 43 | .subscribe((response: IPagedResults) => { 44 | this.customers = this.filteredCustomers = response.results; 45 | this.totalRecords = response.totalRecords; 46 | }, 47 | (err: any) => console.log(err), 48 | () => console.log('getCustomersPage() retrieved customers for page: ' + page)); 49 | } 50 | 51 | filterChanged(data: string) { 52 | if (data && this.customers) { 53 | data = data.toUpperCase(); 54 | const props = ['firstName', 'lastName', 'city', 'state.name']; 55 | this.filteredCustomers = this.filterService.filter(this.customers, data, props); 56 | } 57 | else { 58 | this.filteredCustomers = this.customers; 59 | } 60 | } 61 | } 62 | 63 | enum DisplayModeEnum { 64 | Card = 0, 65 | Grid = 1, 66 | Map = 2 67 | } 68 | -------------------------------------------------------------------------------- /src/app/customers/customers.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var shared_module_1 = require("../shared/shared.module"); 11 | var customers_routing_module_1 = require("./customers-routing.module"); 12 | var CustomersModule = (function () { 13 | function CustomersModule() { 14 | } 15 | return CustomersModule; 16 | }()); 17 | CustomersModule = __decorate([ 18 | core_1.NgModule({ 19 | imports: [customers_routing_module_1.CustomersRoutingModule, shared_module_1.SharedModule], 20 | declarations: [customers_routing_module_1.CustomersRoutingModule.components] 21 | }) 22 | ], CustomersModule); 23 | exports.CustomersModule = CustomersModule; 24 | //# sourceMappingURL=customers.module.js.map -------------------------------------------------------------------------------- /src/app/customers/customers.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"customers.module.js","sourceRoot":"","sources":["customers.module.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAA8C;AAE9C,yDAAyD;AACzD,uEAAoE;AAMpE,IAAa,eAAe;IAA5B;IAA+B,CAAC;IAAD,sBAAC;AAAD,CAAC,AAAhC,IAAgC;AAAnB,eAAe;IAJ3B,eAAQ,CAAC;QACR,OAAO,EAAO,CAAE,iDAAsB,EAAE,4BAAY,CAAE;QACtD,YAAY,EAAE,CAAE,iDAAsB,CAAC,UAAU,CAAE;KACpD,CAAC;GACW,eAAe,CAAI;AAAnB,0CAAe"} -------------------------------------------------------------------------------- /src/app/customers/customers.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | 3 | import { SharedModule } from '../shared/shared.module'; 4 | import { CustomersRoutingModule } from './customers-routing.module'; 5 | 6 | @NgModule({ 7 | imports: [ CustomersRoutingModule, SharedModule ], 8 | declarations: [ CustomersRoutingModule.components ] 9 | }) 10 | export class CustomersModule { } -------------------------------------------------------------------------------- /src/app/login/login-routing.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var router_1 = require("@angular/router"); 11 | var login_component_1 = require("./login.component"); 12 | var routes = [ 13 | { path: 'login', component: login_component_1.LoginComponent } 14 | ]; 15 | var LoginRoutingModule = (function () { 16 | function LoginRoutingModule() { 17 | } 18 | return LoginRoutingModule; 19 | }()); 20 | LoginRoutingModule.components = [login_component_1.LoginComponent]; 21 | LoginRoutingModule = __decorate([ 22 | core_1.NgModule({ 23 | imports: [router_1.RouterModule.forChild(routes)], 24 | exports: [router_1.RouterModule] 25 | }) 26 | ], LoginRoutingModule); 27 | exports.LoginRoutingModule = LoginRoutingModule; 28 | //# sourceMappingURL=login-routing.module.js.map -------------------------------------------------------------------------------- /src/app/login/login-routing.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"login-routing.module.js","sourceRoot":"","sources":["login-routing.module.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAAyC;AACzC,0CAAuD;AAEvD,qDAAmD;AAEnD,IAAM,MAAM,GAAW;IACrB,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,gCAAc,EAAE;CAC7C,CAAC;AAMF,IAAa,kBAAkB;IAA/B;IAEA,CAAC;IAAD,yBAAC;AAAD,CAAC,AAFD,IAEC;AADQ,6BAAU,GAAG,CAAE,gCAAc,CAAE,CAAC;AAD5B,kBAAkB;IAJ9B,eAAQ,CAAC;QACR,OAAO,EAAE,CAAE,qBAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAE;QAC1C,OAAO,EAAE,CAAE,qBAAY,CAAE;KAC1B,CAAC;GACW,kBAAkB,CAE9B;AAFY,gDAAkB"} -------------------------------------------------------------------------------- /src/app/login/login-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | 4 | import { LoginComponent } from './login.component'; 5 | 6 | const routes: Routes = [ 7 | { path: 'login', component: LoginComponent } 8 | ]; 9 | 10 | @NgModule({ 11 | imports: [ RouterModule.forChild(routes) ], 12 | exports: [ RouterModule ] 13 | }) 14 | export class LoginRoutingModule { 15 | static components = [ LoginComponent ]; 16 | } 17 | -------------------------------------------------------------------------------- /src/app/login/login.component.css: -------------------------------------------------------------------------------- 1 | .login-form input[type='text'], 2 | .login-form input[type='email'], 3 | .login-form input[type='password'] { 4 | width:75%; 5 | } 6 | 7 | .login-form .ng-invalid { 8 | border-left: 5px solid #a94442; 9 | } 10 | 11 | .login-form .ng-valid { 12 | border-left: 5px solid #42A948; 13 | } 14 | -------------------------------------------------------------------------------- /src/app/login/login.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

Login

5 |
6 |
7 | 47 | 48 |
49 |
-------------------------------------------------------------------------------- /src/app/login/login.component.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"login.component.js","sourceRoot":"","sources":["login.component.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAkD;AAClD,0CAAyC;AACzC,wCAAoE;AAEpE,8DAA4D;AAC5D,0EAAwE;AAExE,mEAAqF;AAQrF,IAAa,cAAc;IAIvB,wBAAoB,WAAwB,EACxB,MAAc,EACd,WAAwB,EACxB,OAAuB;QAHvB,gBAAW,GAAX,WAAW,CAAa;QACxB,WAAM,GAAN,MAAM,CAAQ;QACd,gBAAW,GAAX,WAAW,CAAa;QACxB,YAAO,GAAP,OAAO,CAAgB;IAAI,CAAC;IAEhD,iCAAQ,GAAR;QACI,IAAI,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;IAED,kCAAS,GAAT;QACI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACpC,KAAK,EAAO,CAAC,EAAE,EAAE,CAAE,kBAAU,CAAC,QAAQ,EAAE,sCAAiB,CAAC,cAAc,CAAE,CAAC;YAC3E,QAAQ,EAAI,CAAC,EAAE,EAAE,CAAE,kBAAU,CAAC,QAAQ,EAAE,sCAAiB,CAAC,iBAAiB,CAAE,CAAC;SACjF,CAAC,CAAC;IACP,CAAC;IAED,+BAAM,GAAN,UAAO,EAAuD;QAA9D,iBAmBC;YAnBQ,gBAAK,EAAE,gBAAK;QACjB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;aACxB,SAAS,CAAC,UAAC,MAAe;YACvB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBACT,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,oCAAkB,CAAC,IAAI,CAAC,CAAC;gBACzD,EAAE,CAAC,CAAC,KAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;oBAC/B,IAAM,WAAW,GAAG,KAAI,CAAC,WAAW,CAAC,WAAW,CAAC;oBACjD,KAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC;oBAClC,KAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;gBACxC,CAAC;gBAAC,IAAI,CAAC,CAAC;oBACJ,KAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;gBACzC,CAAC;YACL,CAAC;YAAC,IAAI,CAAC,CAAC;gBACJ,IAAM,UAAU,GAAG,iBAAiB,CAAC;gBACrC,KAAI,CAAC,YAAY,GAAG,UAAU,CAAC;gBAC/B,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,oCAAkB,CAAC,MAAM,CAAC,CAAC;YAC9D,CAAC;QACL,CAAC,EACD,UAAC,GAAQ,IAAK,OAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAhB,CAAgB,CAAC,CAAC;IACxC,CAAC;IAEL,qBAAC;AAAD,CAAC,AAzCD,IAyCC;AAzCY,cAAc;IAN1B,gBAAS,CAAC;QACP,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,sBAAsB;QACnC,SAAS,EAAE,CAAE,qBAAqB,CAAE;KACvC,CAAC;qCAKmC,mBAAW;QAChB,eAAM;QACD,0BAAW;QACf,gCAAc;GAPlC,cAAc,CAyC1B;AAzCY,wCAAc"} -------------------------------------------------------------------------------- /src/app/login/login.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Router } from '@angular/router'; 3 | import { FormBuilder, FormGroup, Validators } from '@angular/forms'; 4 | 5 | import { AuthService } from '../core/services/auth.service'; 6 | import { ValidationService } from '../core/services/validation.service'; 7 | import { IUserLogin } from '../shared/interfaces'; 8 | import { GrowlerService, GrowlerMessageType } from '../core/growler/growler.service'; 9 | 10 | @Component({ 11 | moduleId: module.id, 12 | selector: 'cm-login', 13 | templateUrl: 'login.component.html', 14 | styleUrls: [ 'login.component.css' ] 15 | }) 16 | export class LoginComponent implements OnInit { 17 | loginForm: FormGroup; 18 | errorMessage: string; 19 | 20 | constructor(private formBuilder: FormBuilder, 21 | private router: Router, 22 | private authService: AuthService, 23 | private growler: GrowlerService) { } 24 | 25 | ngOnInit() { 26 | this.buildForm(); 27 | } 28 | 29 | buildForm() { 30 | this.loginForm = this.formBuilder.group({ 31 | email: ['', [ Validators.required, ValidationService.emailValidator ]], 32 | password: ['', [ Validators.required, ValidationService.passwordValidator ]] 33 | }); 34 | } 35 | 36 | submit({ value, valid }: { value: IUserLogin, valid: boolean }) { 37 | this.authService.login(value) 38 | .subscribe((status: boolean) => { 39 | if (status) { 40 | this.growler.growl('Logged in', GrowlerMessageType.Info); 41 | if (this.authService.redirectUrl) { 42 | const redirectUrl = this.authService.redirectUrl; 43 | this.authService.redirectUrl = ''; 44 | this.router.navigate([redirectUrl]); 45 | } else { 46 | this.router.navigate(['/customers']); 47 | } 48 | } else { 49 | const loginError = 'Unable to login'; 50 | this.errorMessage = loginError; 51 | this.growler.growl(loginError, GrowlerMessageType.Danger); 52 | } 53 | }, 54 | (err: any) => console.log(err)); 55 | } 56 | 57 | } -------------------------------------------------------------------------------- /src/app/login/login.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var forms_1 = require("@angular/forms"); 11 | var shared_module_1 = require("../shared/shared.module"); 12 | var login_routing_module_1 = require("./login-routing.module"); 13 | var LoginModule = (function () { 14 | function LoginModule() { 15 | } 16 | return LoginModule; 17 | }()); 18 | LoginModule = __decorate([ 19 | core_1.NgModule({ 20 | imports: [forms_1.ReactiveFormsModule, shared_module_1.SharedModule, login_routing_module_1.LoginRoutingModule], 21 | declarations: [login_routing_module_1.LoginRoutingModule.components] 22 | }) 23 | ], LoginModule); 24 | exports.LoginModule = LoginModule; 25 | //# sourceMappingURL=login.module.js.map -------------------------------------------------------------------------------- /src/app/login/login.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"login.module.js","sourceRoot":"","sources":["login.module.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAAyC;AACzC,wCAAqD;AAErD,yDAAuD;AACvD,+DAA4D;AAM5D,IAAa,WAAW;IAAxB;IAA2B,CAAC;IAAD,kBAAC;AAAD,CAAC,AAA5B,IAA4B;AAAf,WAAW;IAJvB,eAAQ,CAAC;QACR,OAAO,EAAE,CAAE,2BAAmB,EAAE,4BAAY,EAAE,yCAAkB,CAAE;QAClE,YAAY,EAAE,CAAE,yCAAkB,CAAC,UAAU,CAAE;KAChD,CAAC;GACW,WAAW,CAAI;AAAf,kCAAW"} -------------------------------------------------------------------------------- /src/app/login/login.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { ReactiveFormsModule } from '@angular/forms'; 3 | 4 | import { SharedModule } from '../shared/shared.module'; 5 | import { LoginRoutingModule } from './login-routing.module'; 6 | 7 | @NgModule({ 8 | imports: [ ReactiveFormsModule, SharedModule, LoginRoutingModule ], 9 | declarations: [ LoginRoutingModule.components ] 10 | }) 11 | export class LoginModule { } -------------------------------------------------------------------------------- /src/app/main.aot.ts: -------------------------------------------------------------------------------- 1 | import {platformBrowser} from '@angular/platform-browser'; 2 | import {AppModuleNgFactory} from '../aot/src/app/app.module.ngfactory'; 3 | 4 | platformBrowser().bootstrapModuleFactory(AppModuleNgFactory); -------------------------------------------------------------------------------- /src/app/main.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | var platform_browser_dynamic_1 = require("@angular/platform-browser-dynamic"); 4 | var app_module_1 = require("./app.module"); 5 | //enableProdMode(); //Uncomment for production 6 | platform_browser_dynamic_1.platformBrowserDynamic().bootstrapModule(app_module_1.AppModule) 7 | .then(function (success) { return console.log('App bootstrapped'); }) 8 | .catch(function (err) { return console.error(err); }); 9 | //# sourceMappingURL=main.js.map -------------------------------------------------------------------------------- /src/app/main.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"main.js","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":";;AAAA,8EAA2E;AAG3E,2CAAyC;AAEzC,8CAA8C;AAC9C,iDAAsB,EAAE,CAAC,eAAe,CAAC,sBAAS,CAAC;KAChD,IAAI,CAAC,UAAC,OAAY,IAAK,OAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAA/B,CAA+B,CAAC;KACvD,KAAK,CAAC,UAAC,GAAQ,IAAK,OAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAlB,CAAkB,CAAC,CAAC"} -------------------------------------------------------------------------------- /src/app/main.ts: -------------------------------------------------------------------------------- 1 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 2 | import { enableProdMode } from '@angular/core'; 3 | 4 | import { AppModule } from './app.module'; 5 | 6 | // if (String('<%= BUILD_TYPE %>') === 'prod') { enableProdMode(); } 7 | 8 | platformBrowserDynamic().bootstrapModule(AppModule) 9 | .then((success: any) => console.log('App bootstrapped')) 10 | .catch((err: any) => console.error(err)); 11 | -------------------------------------------------------------------------------- /src/app/orders/orders-routing.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var router_1 = require("@angular/router"); 11 | var orders_component_1 = require("./orders.component"); 12 | var routes = [ 13 | { path: '', component: orders_component_1.OrdersComponent } 14 | ]; 15 | var OrdersRoutingModule = (function () { 16 | function OrdersRoutingModule() { 17 | } 18 | return OrdersRoutingModule; 19 | }()); 20 | OrdersRoutingModule.components = [orders_component_1.OrdersComponent]; 21 | OrdersRoutingModule = __decorate([ 22 | core_1.NgModule({ 23 | imports: [router_1.RouterModule.forChild(routes)], 24 | exports: [router_1.RouterModule] 25 | }) 26 | ], OrdersRoutingModule); 27 | exports.OrdersRoutingModule = OrdersRoutingModule; 28 | //# sourceMappingURL=orders-routing.module.js.map -------------------------------------------------------------------------------- /src/app/orders/orders-routing.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"orders-routing.module.js","sourceRoot":"","sources":["orders-routing.module.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAAyC;AACzC,0CAAuD;AAEvD,uDAAqD;AAErD,IAAM,MAAM,GAAW;IACrB,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,kCAAe,EAAE;CACzC,CAAC;AAMF,IAAa,mBAAmB;IAAhC;IAEA,CAAC;IAAD,0BAAC;AAAD,CAAC,AAFD,IAEC;AADQ,8BAAU,GAAG,CAAE,kCAAe,CAAE,CAAC;AAD7B,mBAAmB;IAJ/B,eAAQ,CAAC;QACR,OAAO,EAAE,CAAE,qBAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAE;QAC1C,OAAO,EAAE,CAAE,qBAAY,CAAE;KAC1B,CAAC;GACW,mBAAmB,CAE/B;AAFY,kDAAmB"} -------------------------------------------------------------------------------- /src/app/orders/orders-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | 4 | import { OrdersComponent } from './orders.component'; 5 | 6 | const routes: Routes = [ 7 | { path: '', component: OrdersComponent } 8 | ]; 9 | 10 | @NgModule({ 11 | imports: [ RouterModule.forChild(routes) ], 12 | exports: [ RouterModule ] 13 | }) 14 | export class OrdersRoutingModule { 15 | static components = [ OrdersComponent ]; 16 | } -------------------------------------------------------------------------------- /src/app/orders/orders.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

5 |   Orders 6 |

7 |
8 |
9 | 10 |
11 |
12 | 13 |
14 |

{{ customer.firstName | capitalize }} {{ customer.lastName | capitalize }}

15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 |
{{order.productName}}{{ order.itemCost | currency:'USD':true }}
 {{ customer.orderTotal | currency:'USD':true }} 24 |
26 |
27 | No orders found 28 |
29 |
30 | 31 | 35 | 36 |
37 |
38 | No customers found 39 |
40 |
41 | 42 |
43 |
44 | -------------------------------------------------------------------------------- /src/app/orders/orders.component.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | var core_1 = require("@angular/core"); 13 | var data_service_1 = require("../core/services/data.service"); 14 | var trackby_service_1 = require("../core/services/trackby.service"); 15 | var OrdersComponent = (function () { 16 | function OrdersComponent(dataService, trackbyService) { 17 | this.dataService = dataService; 18 | this.trackbyService = trackbyService; 19 | this.totalRecords = 0; 20 | this.pageSize = 5; 21 | } 22 | OrdersComponent.prototype.ngOnInit = function () { 23 | this.getCustomersPage(1); 24 | }; 25 | OrdersComponent.prototype.pageChanged = function (page) { 26 | this.getCustomersPage(page); 27 | }; 28 | OrdersComponent.prototype.getCustomersPage = function (page) { 29 | var _this = this; 30 | this.dataService.getCustomersPage((page - 1) * this.pageSize, this.pageSize) 31 | .subscribe(function (response) { 32 | _this.totalRecords = response.totalRecords; 33 | _this.customers = response.results; 34 | }); 35 | }; 36 | return OrdersComponent; 37 | }()); 38 | OrdersComponent = __decorate([ 39 | core_1.Component({ 40 | moduleId: module.id, 41 | selector: 'cm-customers-orders', 42 | templateUrl: 'orders.component.html' 43 | }), 44 | __metadata("design:paramtypes", [data_service_1.DataService, trackby_service_1.TrackByService]) 45 | ], OrdersComponent); 46 | exports.OrdersComponent = OrdersComponent; 47 | //# sourceMappingURL=orders.component.js.map -------------------------------------------------------------------------------- /src/app/orders/orders.component.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"orders.component.js","sourceRoot":"","sources":["orders.component.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAkD;AAElD,8DAA4D;AAE5D,oEAAkE;AAOlE,IAAa,eAAe;IAMxB,yBAAoB,WAAwB,EAAU,cAA8B;QAAhE,gBAAW,GAAX,WAAW,CAAa;QAAU,mBAAc,GAAd,cAAc,CAAgB;QAHpF,iBAAY,GAAW,CAAC,CAAC;QACzB,aAAQ,GAAW,CAAC,CAAC;IAEmE,CAAC;IAEzF,kCAAQ,GAAR;QACI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,qCAAW,GAAX,UAAY,IAAY;QACpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,0CAAgB,GAAhB,UAAiB,IAAY;QAA7B,iBAMC;QALG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;aACvE,SAAS,CAAC,UAAC,QAAoC;YAC5C,KAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;YAC1C,KAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC;QACtC,CAAC,CAAC,CAAC;IACX,CAAC;IAEL,sBAAC;AAAD,CAAC,AAxBD,IAwBC;AAxBY,eAAe;IAL3B,gBAAS,CAAC;QACP,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,QAAQ,EAAE,qBAAqB;QAC/B,WAAW,EAAE,uBAAuB;KACvC,CAAC;qCAOmC,0BAAW,EAA0B,gCAAc;GAN3E,eAAe,CAwB3B;AAxBY,0CAAe"} -------------------------------------------------------------------------------- /src/app/orders/orders.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | import { DataService } from '../core/services/data.service'; 4 | import { ICustomer, IPagedResults } from '../shared/interfaces'; 5 | import { TrackByService } from '../core/services/trackby.service'; 6 | 7 | @Component({ 8 | moduleId: module.id, 9 | selector: 'cm-customers-orders', 10 | templateUrl: 'orders.component.html' 11 | }) 12 | export class OrdersComponent implements OnInit { 13 | 14 | customers: ICustomer[]; 15 | totalRecords: number = 0; 16 | pageSize: number = 5; 17 | 18 | constructor(private dataService: DataService, private trackbyService: TrackByService) { } 19 | 20 | ngOnInit() { 21 | this.getCustomersPage(1); 22 | } 23 | 24 | pageChanged(page: number) { 25 | this.getCustomersPage(page); 26 | } 27 | 28 | getCustomersPage(page: number) { 29 | this.dataService.getCustomersPage((page - 1) * this.pageSize, this.pageSize) 30 | .subscribe((response: IPagedResults) => { 31 | this.totalRecords = response.totalRecords; 32 | this.customers = response.results; 33 | }); 34 | } 35 | 36 | } -------------------------------------------------------------------------------- /src/app/orders/orders.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var shared_module_1 = require("../shared/shared.module"); 11 | var orders_routing_module_1 = require("./orders-routing.module"); 12 | var OrdersModule = (function () { 13 | function OrdersModule() { 14 | } 15 | return OrdersModule; 16 | }()); 17 | OrdersModule = __decorate([ 18 | core_1.NgModule({ 19 | imports: [shared_module_1.SharedModule, orders_routing_module_1.OrdersRoutingModule], 20 | declarations: [orders_routing_module_1.OrdersRoutingModule.components] 21 | }) 22 | ], OrdersModule); 23 | exports.OrdersModule = OrdersModule; 24 | //# sourceMappingURL=orders.module.js.map -------------------------------------------------------------------------------- /src/app/orders/orders.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"orders.module.js","sourceRoot":"","sources":["orders.module.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAA8C;AAE9C,yDAAyD;AACzD,iEAA8D;AAM9D,IAAa,YAAY;IAAzB;IAA4B,CAAC;IAAD,mBAAC;AAAD,CAAC,AAA7B,IAA6B;AAAhB,YAAY;IAJxB,eAAQ,CAAC;QACR,OAAO,EAAO,CAAE,4BAAY,EAAE,2CAAmB,CAAE;QACnD,YAAY,EAAE,CAAE,2CAAmB,CAAC,UAAU,CAAE;KACjD,CAAC;GACW,YAAY,CAAI;AAAhB,oCAAY"} -------------------------------------------------------------------------------- /src/app/orders/orders.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | 3 | import { SharedModule } from '../shared/shared.module'; 4 | import { OrdersRoutingModule } from './orders-routing.module'; 5 | 6 | @NgModule({ 7 | imports: [ SharedModule, OrdersRoutingModule ], 8 | declarations: [ OrdersRoutingModule.components ] 9 | }) 10 | export class OrdersModule { } -------------------------------------------------------------------------------- /src/app/shared/directives/sortby.directive.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | var core_1 = require("@angular/core"); 13 | var SortByDirective = (function () { 14 | function SortByDirective() { 15 | this.sorted = new core_1.EventEmitter(); 16 | } 17 | Object.defineProperty(SortByDirective.prototype, "sortBy", { 18 | set: function (value) { 19 | this.sortProperty = value; 20 | }, 21 | enumerable: true, 22 | configurable: true 23 | }); 24 | SortByDirective.prototype.onClick = function (event) { 25 | event.preventDefault(); 26 | this.sorted.next(this.sortProperty); //Raise clicked event 27 | }; 28 | return SortByDirective; 29 | }()); 30 | __decorate([ 31 | core_1.Output(), 32 | __metadata("design:type", core_1.EventEmitter) 33 | ], SortByDirective.prototype, "sorted", void 0); 34 | __decorate([ 35 | core_1.Input('cm-sort-by'), 36 | __metadata("design:type", String), 37 | __metadata("design:paramtypes", [String]) 38 | ], SortByDirective.prototype, "sortBy", null); 39 | SortByDirective = __decorate([ 40 | core_1.Directive({ 41 | selector: '[cm-sort-by]', 42 | host: { 43 | '(click)': 'onClick($event)' 44 | } 45 | }), 46 | __metadata("design:paramtypes", []) 47 | ], SortByDirective); 48 | exports.SortByDirective = SortByDirective; 49 | //# sourceMappingURL=sortby.directive.js.map -------------------------------------------------------------------------------- /src/app/shared/directives/sortby.directive.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"sortby.directive.js","sourceRoot":"","sources":["sortby.directive.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAuE;AAQvE,IAAa,eAAe;IAO1B;QAFD,WAAM,GAAyB,IAAI,mBAAY,EAAU,CAAC;IAEzC,CAAC;IAGjB,sBAAI,mCAAM;aAAV,UAAW,KAAa;YACtB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5B,CAAC;;;OAAA;IAED,iCAAO,GAAP,UAAQ,KAAU;QAChB,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAqB;IAC5D,CAAC;IAEH,sBAAC;AAAD,CAAC,AAnBD,IAmBC;AAdA;IADE,aAAM,EAAE;8BACF,mBAAY;+CAAsC;AAKzD;IADC,YAAK,CAAC,YAAY,CAAC;;;6CAGnB;AAZU,eAAe;IAN3B,gBAAS,CAAC;QACT,QAAQ,EAAE,cAAc;QACxB,IAAI,EAAE;YACJ,SAAS,EAAE,iBAAiB;SAC7B;KACF,CAAC;;GACW,eAAe,CAmB3B;AAnBY,0CAAe"} -------------------------------------------------------------------------------- /src/app/shared/directives/sortby.directive.ts: -------------------------------------------------------------------------------- 1 | import { Directive, Input, Output, EventEmitter } from '@angular/core'; 2 | 3 | @Directive({ 4 | selector: '[cm-sort-by]', 5 | host: { 6 | '(click)': 'onClick($event)' 7 | } 8 | }) 9 | export class SortByDirective { 10 | 11 | private sortProperty: string; 12 | 13 | @Output() 14 | sorted: EventEmitter = new EventEmitter(); 15 | 16 | constructor() { } 17 | 18 | @Input('cm-sort-by') 19 | set sortBy(value: string) { 20 | this.sortProperty = value; 21 | } 22 | 23 | onClick(event: any) { 24 | event.preventDefault(); 25 | this.sorted.next(this.sortProperty); //Raise clicked event 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /src/app/shared/filter-textbox/filter-textbox.component.css: -------------------------------------------------------------------------------- 1 | cm-filter-textbox { 2 | margin-top: 5px; 3 | } 4 | -------------------------------------------------------------------------------- /src/app/shared/filter-textbox/filter-textbox.component.html: -------------------------------------------------------------------------------- 1 |
2 | Filter: 3 | 6 |
-------------------------------------------------------------------------------- /src/app/shared/filter-textbox/filter-textbox.component.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | var core_1 = require("@angular/core"); 13 | var FilterTextboxComponent = (function () { 14 | function FilterTextboxComponent() { 15 | this.model = { filter: null }; 16 | this.changed = new core_1.EventEmitter(); 17 | } 18 | FilterTextboxComponent.prototype.filterChanged = function (event) { 19 | event.preventDefault(); 20 | this.changed.emit(this.model.filter); //Raise changed event 21 | }; 22 | return FilterTextboxComponent; 23 | }()); 24 | __decorate([ 25 | core_1.Output(), 26 | __metadata("design:type", core_1.EventEmitter) 27 | ], FilterTextboxComponent.prototype, "changed", void 0); 28 | FilterTextboxComponent = __decorate([ 29 | core_1.Component({ 30 | moduleId: module.id, 31 | selector: 'cm-filter-textbox', 32 | templateUrl: 'filter-textbox.component.html', 33 | styleUrls: ['filter-textbox.component.css'] 34 | }) 35 | ], FilterTextboxComponent); 36 | exports.FilterTextboxComponent = FilterTextboxComponent; 37 | //# sourceMappingURL=filter-textbox.component.js.map -------------------------------------------------------------------------------- /src/app/shared/filter-textbox/filter-textbox.component.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"filter-textbox.component.js","sourceRoot":"","sources":["filter-textbox.component.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAgE;AAQhE,IAAa,sBAAsB;IANnC;QAQI,UAAK,GAAuB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAG7C,YAAO,GAAyB,IAAI,mBAAY,EAAU,CAAC;IAM/D,CAAC;IAJG,8CAAa,GAAb,UAAc,KAAU;QACtB,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB;IAC7D,CAAC;IACL,6BAAC;AAAD,CAAC,AAXD,IAWC;AANG;IADC,aAAM,EAAE;8BACA,mBAAY;uDAAsC;AALlD,sBAAsB;IANlC,gBAAS,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,QAAQ,EAAE,mBAAmB;QAC7B,WAAW,EAAE,+BAA+B;QAC5C,SAAS,EAAE,CAAE,8BAA8B,CAAE;KAC9C,CAAC;GACW,sBAAsB,CAWlC;AAXY,wDAAsB"} -------------------------------------------------------------------------------- /src/app/shared/filter-textbox/filter-textbox.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Output, EventEmitter } from '@angular/core'; 2 | 3 | @Component({ 4 | moduleId: module.id, 5 | selector: 'cm-filter-textbox', 6 | templateUrl: 'filter-textbox.component.html', 7 | styleUrls: [ 'filter-textbox.component.css' ] 8 | }) 9 | export class FilterTextboxComponent { 10 | 11 | model: { filter: string } = { filter: null }; 12 | 13 | @Output() 14 | changed: EventEmitter = new EventEmitter(); 15 | 16 | filterChanged(event: any) { 17 | event.preventDefault(); 18 | this.changed.emit(this.model.filter); //Raise changed event 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/app/shared/filter-textbox/filter-textbox.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var common_1 = require("@angular/common"); 11 | var forms_1 = require("@angular/forms"); 12 | var filter_textbox_component_1 = require("./filter-textbox.component"); 13 | var FilterTextboxModule = (function () { 14 | function FilterTextboxModule() { 15 | } 16 | return FilterTextboxModule; 17 | }()); 18 | FilterTextboxModule = __decorate([ 19 | core_1.NgModule({ 20 | imports: [common_1.CommonModule, forms_1.FormsModule], 21 | exports: [filter_textbox_component_1.FilterTextboxComponent], 22 | declarations: [filter_textbox_component_1.FilterTextboxComponent] 23 | }) 24 | ], FilterTextboxModule); 25 | exports.FilterTextboxModule = FilterTextboxModule; 26 | //# sourceMappingURL=filter-textbox.module.js.map -------------------------------------------------------------------------------- /src/app/shared/filter-textbox/filter-textbox.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"filter-textbox.module.js","sourceRoot":"","sources":["filter-textbox.module.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAA8C;AAC9C,0CAA+C;AAC/C,wCAA6C;AAE7C,uEAAqE;AAOrE,IAAa,mBAAmB;IAAhC;IAAmC,CAAC;IAAD,0BAAC;AAAD,CAAC,AAApC,IAAoC;AAAvB,mBAAmB;IAL/B,eAAQ,CAAC;QACR,OAAO,EAAE,CAAE,qBAAY,EAAE,mBAAW,CAAE;QACtC,OAAO,EAAE,CAAE,iDAAsB,CAAE;QACnC,YAAY,EAAE,CAAE,iDAAsB,CAAE;KACzC,CAAC;GACW,mBAAmB,CAAI;AAAvB,kDAAmB"} -------------------------------------------------------------------------------- /src/app/shared/filter-textbox/filter-textbox.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { FormsModule } from '@angular/forms'; 4 | 5 | import { FilterTextboxComponent } from './filter-textbox.component'; 6 | 7 | @NgModule({ 8 | imports: [ CommonModule, FormsModule ], 9 | exports: [ FilterTextboxComponent ], 10 | declarations: [ FilterTextboxComponent ] 11 | }) 12 | export class FilterTextboxModule { } -------------------------------------------------------------------------------- /src/app/shared/interfaces.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | //# sourceMappingURL=interfaces.js.map -------------------------------------------------------------------------------- /src/app/shared/interfaces.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["interfaces.ts"],"names":[],"mappings":""} -------------------------------------------------------------------------------- /src/app/shared/interfaces.ts: -------------------------------------------------------------------------------- 1 | import { ModuleWithProviders } from '@angular/core'; 2 | import { Routes } from '@angular/router'; 3 | 4 | export interface ICustomer { 5 | id: number; 6 | firstName: string; 7 | lastName: string; 8 | gender: string; 9 | address: string; 10 | city: string; 11 | state: IState; 12 | orders?: IOrder[]; 13 | orderTotal?: number; 14 | latitude?: number, 15 | longitude?: number 16 | } 17 | 18 | export interface IState { 19 | abbreviation: string; 20 | name: string; 21 | } 22 | 23 | export interface IOrder { 24 | productName: string; 25 | itemCost: number; 26 | } 27 | 28 | export interface IOrderItem { 29 | id: number; 30 | productName: string; 31 | itemCost: number; 32 | } 33 | 34 | export interface IPagedResults { 35 | totalRecords: number; 36 | results: T; 37 | } 38 | 39 | export interface IUserLogin { 40 | email: string; 41 | password: string; 42 | } -------------------------------------------------------------------------------- /src/app/shared/map/map.component.html: -------------------------------------------------------------------------------- 1 |
Map Loading....
-------------------------------------------------------------------------------- /src/app/shared/map/map.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var common_1 = require("@angular/common"); 11 | var map_component_1 = require("./map.component"); 12 | var mapPoint_component_1 = require("./mapPoint.component"); 13 | var MapModule = (function () { 14 | function MapModule() { 15 | } 16 | return MapModule; 17 | }()); 18 | MapModule = __decorate([ 19 | core_1.NgModule({ 20 | imports: [common_1.CommonModule], 21 | exports: [map_component_1.MapComponent, mapPoint_component_1.MapPointComponent], 22 | declarations: [map_component_1.MapComponent, mapPoint_component_1.MapPointComponent] 23 | }) 24 | ], MapModule); 25 | exports.MapModule = MapModule; 26 | //# sourceMappingURL=map.module.js.map -------------------------------------------------------------------------------- /src/app/shared/map/map.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"map.module.js","sourceRoot":"","sources":["map.module.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAA8C;AAC9C,0CAA+C;AAE/C,iDAAgD;AAChD,2DAAyD;AAOzD,IAAa,SAAS;IAAtB;IAAyB,CAAC;IAAD,gBAAC;AAAD,CAAC,AAA1B,IAA0B;AAAb,SAAS;IALrB,eAAQ,CAAC;QACR,OAAO,EAAE,CAAE,qBAAY,CAAE;QACzB,OAAO,EAAE,CAAE,4BAAY,EAAE,sCAAiB,CAAE;QAC5C,YAAY,EAAE,CAAE,4BAAY,EAAE,sCAAiB,CAAE;KAClD,CAAC;GACW,SAAS,CAAI;AAAb,8BAAS"} -------------------------------------------------------------------------------- /src/app/shared/map/map.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { MapComponent } from './map.component'; 5 | import { MapPointComponent } from './mapPoint.component'; 6 | 7 | @NgModule({ 8 | imports: [ CommonModule ], 9 | exports: [ MapComponent, MapPointComponent ], 10 | declarations: [ MapComponent, MapPointComponent ] 11 | }) 12 | export class MapModule { } -------------------------------------------------------------------------------- /src/app/shared/map/mapPoint.component.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | var core_1 = require("@angular/core"); 13 | var MapPointComponent = (function () { 14 | function MapPointComponent() { 15 | } 16 | MapPointComponent.prototype.ngOnInit = function () { 17 | }; 18 | return MapPointComponent; 19 | }()); 20 | __decorate([ 21 | core_1.Input(), 22 | __metadata("design:type", Number) 23 | ], MapPointComponent.prototype, "longitude", void 0); 24 | __decorate([ 25 | core_1.Input(), 26 | __metadata("design:type", Number) 27 | ], MapPointComponent.prototype, "latitude", void 0); 28 | __decorate([ 29 | core_1.Input(), 30 | __metadata("design:type", String) 31 | ], MapPointComponent.prototype, "markerText", void 0); 32 | MapPointComponent = __decorate([ 33 | core_1.Component({ 34 | selector: 'cm-map-point', 35 | template: "" 36 | }), 37 | __metadata("design:paramtypes", []) 38 | ], MapPointComponent); 39 | exports.MapPointComponent = MapPointComponent; 40 | //# sourceMappingURL=mapPoint.component.js.map -------------------------------------------------------------------------------- /src/app/shared/map/mapPoint.component.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"mapPoint.component.js","sourceRoot":"","sources":["mapPoint.component.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAyD;AAMzD,IAAa,iBAAiB;IAM5B;IAAgB,CAAC;IAEjB,oCAAQ,GAAR;IAEA,CAAC;IAEH,wBAAC;AAAD,CAAC,AAZD,IAYC;AAVU;IAAR,YAAK,EAAE;;oDAAmB;AAClB;IAAR,YAAK,EAAE;;mDAAkB;AACjB;IAAR,YAAK,EAAE;;qDAAoB;AAJjB,iBAAiB;IAJ7B,gBAAS,CAAC;QACT,QAAQ,EAAE,cAAc;QACxB,QAAQ,EAAE,EAAE;KACb,CAAC;;GACW,iBAAiB,CAY7B;AAZY,8CAAiB"} -------------------------------------------------------------------------------- /src/app/shared/map/mapPoint.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, Input } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'cm-map-point', 5 | template: `` 6 | }) 7 | export class MapPointComponent implements OnInit { 8 | 9 | @Input() longitude: number; 10 | @Input() latitude: number; 11 | @Input() markerText: string; 12 | 13 | constructor() { } 14 | 15 | ngOnInit() { 16 | 17 | } 18 | 19 | } -------------------------------------------------------------------------------- /src/app/shared/pagination/pagination.component.css: -------------------------------------------------------------------------------- 1 | .pagination>.active>a, 2 | .pagination>.active>a:focus, 3 | .pagination>.active>a:hover, 4 | .pagination>.active>span, 5 | .pagination>.active>span:focus, 6 | .pagination>.active>span:hover { 7 | background-color: #027FF4; 8 | border-color: #027FF4; 9 | } 10 | 11 | .pagination a { 12 | cursor: pointer; 13 | } -------------------------------------------------------------------------------- /src/app/shared/pagination/pagination.component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/shared/pagination/pagination.component.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"pagination.component.js","sourceRoot":"","sources":["pagination.component.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAA+E;AAS/E,IAAa,mBAAmB;IAgC9B;QA1BA,UAAK,GAAa,EAAE,CAAC;QACrB,gBAAW,GAAW,CAAC,CAAC;QACxB,cAAS,GAAY,KAAK,CAAC;QAC3B,oBAAe,GAAY,KAAK,CAAC;QACjC,gBAAW,GAAY,IAAI,CAAC;QAoBlB,gBAAW,GAAyB,IAAI,mBAAY,EAAE,CAAC;IAEjD,CAAC;IApBR,sBAAI,yCAAQ;aAAZ;YACP,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;QAC5B,CAAC;aAED,UAAa,IAAW;YACtB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;;;OALA;IAOQ,sBAAI,2CAAU;aAAd;YACP,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;QAC9B,CAAC;aAED,UAAe,SAAgB;YAC7B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YACjC,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;;;OALA;IAWD,sCAAQ,GAAR;IAEA,CAAC;IAED,oCAAM,GAAN;QACE,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,GAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACrC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAC,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,EAAC,CAAC,EAAE,EAAE,CAAC;oBAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;YACD,MAAM,CAAC;QACT,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,0CAAY,GAAZ,UAAa,SAAiB,EAAE,KAAkB;QAChD,IAAI,IAAI,GAAW,IAAI,CAAC,WAAW,CAAC;QACpC,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAClB,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;gBAAC,IAAI,EAAE,CAAC;QACzB,CAAC;QAAC,IAAI,CAAC,CAAC;YACJ,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;gBAAC,IAAI,EAAE,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,wCAAU,GAAV,UAAW,IAAY,EAAE,KAAkB;QACzC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACV,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,CAAC;QACD,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC;YAAC,MAAM,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;QACtD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAEH,0BAAC;AAAD,CAAC,AA1ED,IA0EC;AA9DU;IAAR,YAAK,EAAE;;;mDAEP;AAOQ;IAAR,YAAK,EAAE;;;qDAEP;AAOS;IAAT,aAAM,EAAE;8BAAc,mBAAY;wDAA8B;AA9BtD,mBAAmB;IAP/B,gBAAS,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,QAAQ,EAAE,eAAe;QACzB,WAAW,EAAE,2BAA2B;QACxC,SAAS,EAAE,CAAE,0BAA0B,CAAE;KAC1C,CAAC;;GAEW,mBAAmB,CA0E/B;AA1EY,kDAAmB"} -------------------------------------------------------------------------------- /src/app/shared/pagination/pagination.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; 2 | 3 | @Component({ 4 | moduleId: module.id, 5 | selector: 'cm-pagination', 6 | templateUrl: 'pagination.component.html', 7 | styleUrls: [ 'pagination.component.css' ] 8 | }) 9 | 10 | export class PaginationComponent implements OnInit { 11 | 12 | private pagerTotalItems: number; 13 | private pagerPageSize: number; 14 | 15 | totalPages: number; 16 | pages: number[] = []; 17 | currentPage: number = 1; 18 | isVisible: boolean = false; 19 | previousEnabled: boolean = false; 20 | nextEnabled: boolean = true; 21 | 22 | @Input() get pageSize():number { 23 | return this.pagerPageSize; 24 | } 25 | 26 | set pageSize(size:number) { 27 | this.pagerPageSize = size; 28 | this.update(); 29 | } 30 | 31 | @Input() get totalItems():number { 32 | return this.pagerTotalItems; 33 | } 34 | 35 | set totalItems(itemCount:number) { 36 | this.pagerTotalItems = itemCount; 37 | this.update(); 38 | } 39 | 40 | @Output() pageChanged: EventEmitter = new EventEmitter(); 41 | 42 | constructor() { } 43 | 44 | ngOnInit() { 45 | 46 | } 47 | 48 | update() { 49 | if (this.pagerTotalItems && this.pagerPageSize) { 50 | this.totalPages = Math.ceil(this.pagerTotalItems/this.pageSize); 51 | this.isVisible = true; 52 | if (this.totalItems >= this.pageSize) { 53 | for (let i = 1;i < this.totalPages + 1;i++) { 54 | this.pages.push(i); 55 | } 56 | } 57 | return; 58 | } 59 | 60 | this.isVisible = false; 61 | } 62 | 63 | previousNext(direction: number, event?: MouseEvent) { 64 | let page: number = this.currentPage; 65 | if (direction == -1) { 66 | if (page > 1) page--; 67 | } else { 68 | if (page < this.totalPages) page++; 69 | } 70 | this.changePage(page, event); 71 | } 72 | 73 | changePage(page: number, event?: MouseEvent) { 74 | if (event) { 75 | event.preventDefault(); 76 | } 77 | if (this.currentPage === page) return; 78 | this.currentPage = page; 79 | this.previousEnabled = this.currentPage > 1; 80 | this.nextEnabled = this.currentPage < this.totalPages; 81 | this.pageChanged.emit(page); 82 | } 83 | 84 | } -------------------------------------------------------------------------------- /src/app/shared/pagination/pagination.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var common_1 = require("@angular/common"); 11 | var pagination_component_1 = require("./pagination.component"); 12 | var PaginationModule = (function () { 13 | function PaginationModule() { 14 | } 15 | return PaginationModule; 16 | }()); 17 | PaginationModule = __decorate([ 18 | core_1.NgModule({ 19 | imports: [common_1.CommonModule], 20 | exports: [pagination_component_1.PaginationComponent], 21 | declarations: [pagination_component_1.PaginationComponent] 22 | }) 23 | ], PaginationModule); 24 | exports.PaginationModule = PaginationModule; 25 | //# sourceMappingURL=pagination.module.js.map -------------------------------------------------------------------------------- /src/app/shared/pagination/pagination.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"pagination.module.js","sourceRoot":"","sources":["pagination.module.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAA8C;AAC9C,0CAA+C;AAE/C,+DAA8D;AAO9D,IAAa,gBAAgB;IAA7B;IAAgC,CAAC;IAAD,uBAAC;AAAD,CAAC,AAAjC,IAAiC;AAApB,gBAAgB;IAL5B,eAAQ,CAAC;QACR,OAAO,EAAE,CAAE,qBAAY,CAAE;QACzB,OAAO,EAAE,CAAE,0CAAmB,CAAE;QAChC,YAAY,EAAE,CAAE,0CAAmB,CAAE;KACtC,CAAC;GACW,gBAAgB,CAAI;AAApB,4CAAgB"} -------------------------------------------------------------------------------- /src/app/shared/pagination/pagination.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { PaginationComponent } from './pagination.component'; 5 | 6 | @NgModule({ 7 | imports: [ CommonModule ], 8 | exports: [ PaginationComponent ], 9 | declarations: [ PaginationComponent ] 10 | }) 11 | export class PaginationModule { } -------------------------------------------------------------------------------- /src/app/shared/pipes/capitalize.pipe.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var CapitalizePipe = (function () { 11 | function CapitalizePipe() { 12 | } 13 | CapitalizePipe.prototype.transform = function (value) { 14 | if (value) { 15 | return value.charAt(0).toUpperCase() + value.slice(1); 16 | } 17 | return value; 18 | }; 19 | return CapitalizePipe; 20 | }()); 21 | CapitalizePipe = __decorate([ 22 | core_1.Pipe({ name: 'capitalize' }) 23 | ], CapitalizePipe); 24 | exports.CapitalizePipe = CapitalizePipe; 25 | //# sourceMappingURL=capitalize.pipe.js.map -------------------------------------------------------------------------------- /src/app/shared/pipes/capitalize.pipe.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"capitalize.pipe.js","sourceRoot":"","sources":["capitalize.pipe.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAAoD;AAGpD,IAAa,cAAc;IAA3B;IASA,CAAC;IAPC,kCAAS,GAAT,UAAU,KAAU;QACnB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACR,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,CAAC,KAAK,CAAC;IACd,CAAC;IAEH,qBAAC;AAAD,CAAC,AATD,IASC;AATY,cAAc;IAD1B,WAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;GAChB,cAAc,CAS1B;AATY,wCAAc"} -------------------------------------------------------------------------------- /src/app/shared/pipes/capitalize.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from '@angular/core'; 2 | 3 | @Pipe({ name: 'capitalize' }) 4 | export class CapitalizePipe implements PipeTransform { 5 | 6 | transform(value: any) { 7 | if (value) { 8 | return value.charAt(0).toUpperCase() + value.slice(1); 9 | } 10 | return value; 11 | } 12 | 13 | } -------------------------------------------------------------------------------- /src/app/shared/pipes/trim.pipe.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var TrimPipe = (function () { 11 | function TrimPipe() { 12 | } 13 | TrimPipe.prototype.transform = function (value) { 14 | if (!value) { 15 | return ''; 16 | } 17 | return value.trim(); 18 | }; 19 | return TrimPipe; 20 | }()); 21 | TrimPipe = __decorate([ 22 | core_1.Pipe({ name: 'trim' }) 23 | ], TrimPipe); 24 | exports.TrimPipe = TrimPipe; 25 | //# sourceMappingURL=trim.pipe.js.map -------------------------------------------------------------------------------- /src/app/shared/pipes/trim.pipe.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"trim.pipe.js","sourceRoot":"","sources":["trim.pipe.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAAkD;AAGlD,IAAa,QAAQ;IAArB;IAOA,CAAC;IANC,4BAAS,GAAT,UAAU,KAAU;QAClB,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,CAAC,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IACH,eAAC;AAAD,CAAC,AAPD,IAOC;AAPY,QAAQ;IADpB,WAAI,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;GACR,QAAQ,CAOpB;AAPY,4BAAQ"} -------------------------------------------------------------------------------- /src/app/shared/pipes/trim.pipe.ts: -------------------------------------------------------------------------------- 1 | import {Pipe, PipeTransform} from '@angular/core'; 2 | 3 | @Pipe({name: 'trim'}) 4 | export class TrimPipe implements PipeTransform { 5 | transform(value: any) { 6 | if (!value) { 7 | return ''; 8 | } 9 | return value.trim(); 10 | } 11 | } -------------------------------------------------------------------------------- /src/app/shared/shared.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | var core_1 = require("@angular/core"); 10 | var common_1 = require("@angular/common"); 11 | var forms_1 = require("@angular/forms"); 12 | var filter_textbox_module_1 = require("./filter-textbox/filter-textbox.module"); 13 | var map_module_1 = require("./map/map.module"); 14 | var pagination_module_1 = require("./pagination/pagination.module"); 15 | var capitalize_pipe_1 = require("./pipes/capitalize.pipe"); 16 | var trim_pipe_1 = require("./pipes/trim.pipe"); 17 | var sortby_directive_1 = require("./directives/sortby.directive"); 18 | var SharedModule = (function () { 19 | function SharedModule() { 20 | } 21 | return SharedModule; 22 | }()); 23 | SharedModule = __decorate([ 24 | core_1.NgModule({ 25 | imports: [common_1.CommonModule, map_module_1.MapModule, filter_textbox_module_1.FilterTextboxModule, pagination_module_1.PaginationModule], 26 | exports: [common_1.CommonModule, forms_1.FormsModule, capitalize_pipe_1.CapitalizePipe, trim_pipe_1.TrimPipe, sortby_directive_1.SortByDirective, 27 | map_module_1.MapModule, filter_textbox_module_1.FilterTextboxModule, pagination_module_1.PaginationModule], 28 | declarations: [capitalize_pipe_1.CapitalizePipe, trim_pipe_1.TrimPipe, sortby_directive_1.SortByDirective] 29 | }) 30 | ], SharedModule); 31 | exports.SharedModule = SharedModule; 32 | //# sourceMappingURL=shared.module.js.map -------------------------------------------------------------------------------- /src/app/shared/shared.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"shared.module.js","sourceRoot":"","sources":["shared.module.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAAyC;AACzC,0CAA+C;AAC/C,wCAA6C;AAE7C,gFAA6E;AAC7E,+CAA6C;AAC7C,oEAAkE;AAElE,2DAAyD;AACzD,+CAA6C;AAC7C,kEAAgE;AAQhE,IAAa,YAAY;IAAzB;IAA4B,CAAC;IAAD,mBAAC;AAAD,CAAC,AAA7B,IAA6B;AAAhB,YAAY;IANxB,eAAQ,CAAC;QACR,OAAO,EAAE,CAAC,qBAAY,EAAE,sBAAS,EAAE,2CAAmB,EAAE,oCAAgB,CAAE;QAC1E,OAAO,EAAE,CAAE,qBAAY,EAAE,mBAAW,EAAE,gCAAc,EAAE,oBAAQ,EAAE,kCAAe;YACpE,sBAAS,EAAE,2CAAmB,EAAE,oCAAgB,CAAE;QAC7D,YAAY,EAAE,CAAE,gCAAc,EAAE,oBAAQ,EAAE,kCAAe,CAAE;KAC5D,CAAC;GACW,YAAY,CAAI;AAAhB,oCAAY"} -------------------------------------------------------------------------------- /src/app/shared/shared.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { FormsModule } from '@angular/forms'; 4 | 5 | import { FilterTextboxModule } from './filter-textbox/filter-textbox.module'; 6 | import { MapModule } from './map/map.module'; 7 | import { PaginationModule } from './pagination/pagination.module'; 8 | 9 | import { CapitalizePipe } from './pipes/capitalize.pipe'; 10 | import { TrimPipe } from './pipes/trim.pipe'; 11 | import { SortByDirective } from './directives/sortby.directive'; 12 | 13 | @NgModule({ 14 | imports: [CommonModule, MapModule, FilterTextboxModule, PaginationModule ], 15 | exports: [ CommonModule, FormsModule, CapitalizePipe, TrimPipe, SortByDirective, 16 | MapModule, FilterTextboxModule, PaginationModule ], 17 | declarations: [ CapitalizePipe, TrimPipe, SortByDirective ] 18 | }) 19 | export class SharedModule { } 20 | -------------------------------------------------------------------------------- /src/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdshohelrana/angular-erp-architecture/e73bdf4c36e8810282aa6cbf9e0d8592db25af15/src/apple-touch-icon.png -------------------------------------------------------------------------------- /src/assets/css/main.css: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Author's custom styles 3 | ========================================================================== */ 4 | 5 | body { 6 | padding-top: 50px; 7 | padding-bottom: 20px; 8 | } -------------------------------------------------------------------------------- /src/assets/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdshohelrana/angular-erp-architecture/e73bdf4c36e8810282aa6cbf9e0d8592db25af15/src/assets/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/assets/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdshohelrana/angular-erp-architecture/e73bdf4c36e8810282aa6cbf9e0d8592db25af15/src/assets/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/assets/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdshohelrana/angular-erp-architecture/e73bdf4c36e8810282aa6cbf9e0d8592db25af15/src/assets/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/assets/js/vendor/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /src/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/crossdomain.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 15 | 16 | -------------------------------------------------------------------------------- /src/environments/environment.js: -------------------------------------------------------------------------------- 1 | // The file contents for the current environment will overwrite these during build. 2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do 3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead. 4 | // The list of which env maps to which file can be found in `angular-cli.json`. 5 | "use strict"; 6 | Object.defineProperty(exports, "__esModule", { value: true }); 7 | exports.environment = { 8 | production: false 9 | }; 10 | //# sourceMappingURL=environment.js.map -------------------------------------------------------------------------------- /src/environments/environment.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"environment.js","sourceRoot":"","sources":["environment.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,8FAA8F;AAC9F,yEAAyE;AACzE,+EAA+E;;;AAElE,QAAA,WAAW,GAAG;IACzB,UAAU,EAAE,KAAK;CAClB,CAAC"} -------------------------------------------------------------------------------- /src/environments/environment.prod.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.environment = { 4 | production: true 5 | }; 6 | //# sourceMappingURL=environment.prod.js.map -------------------------------------------------------------------------------- /src/environments/environment.prod.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"environment.prod.js","sourceRoot":"","sources":["environment.prod.ts"],"names":[],"mappings":";;AAAa,QAAA,WAAW,GAAG;IACzB,UAAU,EAAE,IAAI;CACjB,CAAC"} -------------------------------------------------------------------------------- /src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // The file contents for the current environment will overwrite these during build. 2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do 3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead. 4 | // The list of which env maps to which file can be found in `angular-cli.json`. 5 | 6 | export const environment = { 7 | production: false 8 | }; 9 | -------------------------------------------------------------------------------- /src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdshohelrana/angular-erp-architecture/e73bdf4c36e8810282aa6cbf9e0d8592db25af15/src/favicon.ico -------------------------------------------------------------------------------- /src/humans.txt: -------------------------------------------------------------------------------- 1 | # humanstxt.org/ 2 | # The humans responsible & technology colophon 3 | 4 | # TEAM 5 | 6 | -- -- 7 | 8 | # THANKS 9 | 10 | 11 | 12 | # TECHNOLOGY COLOPHON 13 | 14 | HTML5, CSS3 15 | jQuery, Modernizr 16 | -------------------------------------------------------------------------------- /src/images/female.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdshohelrana/angular-erp-architecture/e73bdf4c36e8810282aa6cbf9e0d8592db25af15/src/images/female.png -------------------------------------------------------------------------------- /src/images/male.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdshohelrana/angular-erp-architecture/e73bdf4c36e8810282aa6cbf9e0d8592db25af15/src/images/male.png -------------------------------------------------------------------------------- /src/images/people.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdshohelrana/angular-erp-architecture/e73bdf4c36e8810282aa6cbf9e0d8592db25af15/src/images/people.png -------------------------------------------------------------------------------- /src/images/screenshots/cards.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdshohelrana/angular-erp-architecture/e73bdf4c36e8810282aa6cbf9e0d8592db25af15/src/images/screenshots/cards.png -------------------------------------------------------------------------------- /src/images/screenshots/details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdshohelrana/angular-erp-architecture/e73bdf4c36e8810282aa6cbf9e0d8592db25af15/src/images/screenshots/details.png -------------------------------------------------------------------------------- /src/images/screenshots/grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdshohelrana/angular-erp-architecture/e73bdf4c36e8810282aa6cbf9e0d8592db25af15/src/images/screenshots/grid.png -------------------------------------------------------------------------------- /src/images/screenshots/orders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdshohelrana/angular-erp-architecture/e73bdf4c36e8810282aa6cbf9e0d8592db25af15/src/images/screenshots/orders.png -------------------------------------------------------------------------------- /src/index.webpack-template.html: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | Angular TypeScript JumpStart App 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | Loading... 26 | 27 | 28 |
29 | 42 |
43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/robots.txt: -------------------------------------------------------------------------------- 1 | # www.robotstxt.org/ 2 | 3 | # Allow crawling of all content 4 | User-agent: * 5 | Disallow: 6 | -------------------------------------------------------------------------------- /src/systemjs.config.js: -------------------------------------------------------------------------------- 1 | (function(global) { 2 | 3 | // map tells the System loader where to look for things 4 | var map = { 5 | 'app': 'app', // 'dist', 6 | '@angular': 'node_modules/@angular', 7 | 'rxjs': 'node_modules/rxjs' 8 | }; 9 | 10 | // packages tells the System loader how to load when no filename and/or no extension 11 | var packages = { 12 | 'app': { main: 'main.js', defaultExtension: 'js' }, 13 | 'rxjs': { defaultExtension: 'js' } 14 | }; 15 | 16 | var ngPackageNames = [ 17 | 'common', 18 | 'compiler', 19 | 'core', 20 | 'forms', 21 | 'http', 22 | 'platform-browser', 23 | 'platform-browser-dynamic', 24 | 'router', 25 | 'upgrade', 26 | ]; 27 | 28 | // Individual files (~300 requests): 29 | function packIndex(pkgName) { 30 | packages['@angular/'+pkgName] = { main: 'index.js', defaultExtension: 'js' }; 31 | } 32 | 33 | // Bundled (~40 requests): 34 | function packUmd(pkgName) { 35 | packages['@angular/'+pkgName] = { main: '/bundles/' + pkgName + '.umd.js', defaultExtension: 'js' }; 36 | } 37 | 38 | // Most environments should use UMD; some (Karma) need the individual index files 39 | var setPackageConfig = System.packageWithIndex ? packIndex : packUmd; 40 | 41 | // Add package entries for angular packages 42 | ngPackageNames.forEach(setPackageConfig); 43 | 44 | var config = { 45 | map: map, 46 | packages: packages 47 | }; 48 | 49 | System.config(config); 50 | 51 | })(this); -------------------------------------------------------------------------------- /src/tile-wide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdshohelrana/angular-erp-architecture/e73bdf4c36e8810282aa6cbf9e0d8592db25af15/src/tile-wide.png -------------------------------------------------------------------------------- /src/tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdshohelrana/angular-erp-architecture/e73bdf4c36e8810282aa6cbf9e0d8592db25af15/src/tile.png -------------------------------------------------------------------------------- /src/vendors/vendor.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | // RxJS 4 | require("rxjs/add/operator/map"); 5 | require("rxjs/add/operator/mergeMap"); 6 | // Smartadmin Dependencies 7 | window['jQuery'] = require('jquery'); 8 | window['$'] = window['jQuery']; 9 | require("jquery-ui-npm/jquery-ui.min.js"); 10 | require('bootstrap/js/tooltip.js'); // required for X-editable 11 | require('bootstrap/js/popover.js'); // required for X-editable 12 | require('bootstrap/js/dropdown.js'); // required for bootstrap-colorpicker 13 | require('bootstrap/js/tab.js'); // 14 | require('bootstrap/js/modal.js'); // 15 | window['moment'] = require('moment'); 16 | require("imports-loader?jQuery=jquery!jquery-color/jquery.color.js"); 17 | require('smartadmin-plugins/notification/SmartNotification.min.js'); 18 | //# sourceMappingURL=vendor.js.map -------------------------------------------------------------------------------- /src/vendors/vendor.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"vendor.js","sourceRoot":"","sources":["vendor.ts"],"names":[],"mappings":";;AAGA,OAAO;AACP,iCAA+B;AAC/B,sCAAoC;AAGpC,0BAA0B;AAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AACrC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/B,0CAAuC;AAEvC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC,0BAA0B;AAC9D,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC,0BAA0B;AAC9D,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,qCAAqC;AAC1E,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE;AAClC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE;AAEpC,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAErC,qEAAkE;AAElE,OAAO,CAAC,0DAA0D,CAAC,CAAC"} -------------------------------------------------------------------------------- /src/vendors/vendor.ts: -------------------------------------------------------------------------------- 1 | // jQuery 2 | declare var jQuery: any; 3 | 4 | // RxJS 5 | import 'rxjs/add/operator/map'; 6 | import 'rxjs/add/operator/mergeMap'; 7 | 8 | 9 | // Smartadmin Dependencies 10 | window['jQuery'] = require('jquery'); 11 | window['$'] = window['jQuery']; 12 | import 'jquery-ui-npm/jquery-ui.min.js' 13 | 14 | require('bootstrap/js/tooltip.js'); // required for X-editable 15 | require('bootstrap/js/popover.js'); // required for X-editable 16 | require('bootstrap/js/dropdown.js'); // required for bootstrap-colorpicker 17 | require('bootstrap/js/tab.js'); // 18 | require('bootstrap/js/modal.js'); // 19 | 20 | window['moment'] = require('moment'); 21 | 22 | import 'imports-loader?jQuery=jquery!jquery-color/jquery.color.js' 23 | 24 | require('smartadmin-plugins/notification/SmartNotification.min.js'); 25 | 26 | -------------------------------------------------------------------------------- /tools/env/base.ts: -------------------------------------------------------------------------------- 1 | import { EnvConfig } from './env-config.interface'; 2 | 3 | const BaseConfig: EnvConfig = { 4 | // Sample API url 5 | API: 'https://localhost:3000' 6 | }; 7 | 8 | export = BaseConfig; -------------------------------------------------------------------------------- /tools/env/dev.ts: -------------------------------------------------------------------------------- 1 | import { EnvConfig } from './env-config.interface'; 2 | 3 | const DevConfig: EnvConfig = { 4 | ENV: 'DEV' 5 | }; 6 | 7 | export = DevConfig; 8 | 9 | -------------------------------------------------------------------------------- /tools/env/env-config.interface.ts: -------------------------------------------------------------------------------- 1 | // Feel free to extend this interface 2 | // depending on your app specific config. 3 | export interface EnvConfig { 4 | API?: string; 5 | ENV?: string; 6 | } 7 | -------------------------------------------------------------------------------- /tools/env/prod.ts: -------------------------------------------------------------------------------- 1 | import { EnvConfig } from './env-config.interface'; 2 | 3 | const ProdConfig: EnvConfig = { 4 | ENV: 'PROD' 5 | }; 6 | 7 | export = ProdConfig; 8 | 9 | -------------------------------------------------------------------------------- /tools/tasks/clean.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp'); 2 | var config = require('../gulp.config')(); 3 | var del = require('del'); 4 | 5 | /* Run all clean tasks */ 6 | gulp.task('clean', ['clean-build']); 7 | 8 | /* delete dist folder */ 9 | gulp.task('clean-build', function () { 10 | return del([config.build.path]); 11 | }); -------------------------------------------------------------------------------- /tools/tasks/compile.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp'); 2 | var config = require('../gulp.config')(); 3 | var ts = require('gulp-typescript'); 4 | var tslint = require('gulp-tslint'); 5 | var sourcemaps = require('gulp-sourcemaps'); 6 | var path = require('path'); 7 | var preprocess = require('gulp-preprocess'); 8 | var wait = require('gulp-wait'); 9 | 10 | /* Initialize TS Project */ 11 | var tsProject = ts.createProject(config.root + 'tsconfig.json'); 12 | var typingFiles = [ 13 | 'typings/browser.d.ts' 14 | ]; 15 | var tsFiles = [].concat(config.tsFiles); 16 | 17 | gulp.task('compile', [], function () { 18 | return compileTs(config.tsFiles); 19 | }); 20 | 21 | function compileTs(files, watchMode) { 22 | watchMode = watchMode || false; 23 | var allFiles = [].concat(files, typingFiles); 24 | var res = gulp.src(allFiles, { 25 | base: '.' 26 | }) 27 | .pipe(tslint()) 28 | .pipe(tslint.report('prose', { 29 | summarizeFailureOutput: true, 30 | emitError: !watchMode 31 | })) 32 | .pipe(preprocess()) 33 | .pipe(sourcemaps.init()) 34 | .pipe(ts(tsProject)) 35 | .on('error', function () { 36 | process.exit(1); 37 | }); 38 | return res.js 39 | .pipe(sourcemaps.write('.', { 40 | // Return relative source map root directories per file. 41 | includeContent: false, 42 | sourceRoot: function (file) { 43 | var sourceFile = path.join(file.cwd, file.sourceMap.file); 44 | return path.relative(path.dirname(sourceFile), file.cwd); 45 | } 46 | })) 47 | .pipe(gulp.dest(config.root)); 48 | } -------------------------------------------------------------------------------- /tools/tasks/e2e.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp'); 2 | var protractor = require("gulp-protractor").protractor; 3 | var e2eConfig = require("../protractor.config"); 4 | var browserSync=require("browser-sync"); 5 | gulp.task('e2e', function (done) { 6 | // var browserSyncInstance = browserSync.create(); 7 | // browserSyncInstance.init({ 8 | // server:{ 9 | // baseDir:e2eConfig.config.baseDir, 10 | // open: false 11 | // } 12 | // }); 13 | gulp.src(e2eConfig.config.specs) 14 | .pipe(protractor({ 15 | configFile:"protractor.config.js", 16 | args:["--baseUrl",e2eConfig.config.server] 17 | })).on( 18 | "error",function(e){console.log(e);} 19 | ); 20 | }); -------------------------------------------------------------------------------- /tsconfig.aot.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "es2015", 5 | "moduleResolution": "node", 6 | "sourceMap": true, 7 | "emitDecoratorMetadata": true, 8 | "experimentalDecorators": true, 9 | "lib": [ "es2015", "dom" ], 10 | "removeComments": false, 11 | "noImplicitAny": true, 12 | "suppressImplicitAnyIndexErrors": true 13 | }, 14 | 15 | "files": [ 16 | "src/app/app.module.ts", 17 | "src/app/main.aot.ts" 18 | ], 19 | 20 | "angularCompilerOptions": { 21 | "genDir": "./src/aot" 22 | } 23 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "commonjs", 5 | "moduleResolution": "node", 6 | "sourceMap": true, 7 | "emitDecoratorMetadata": true, 8 | "experimentalDecorators": true, 9 | "lib": [ "es2015", "dom" ], 10 | "removeComments": false, 11 | "noImplicitAny": true, 12 | "suppressImplicitAnyIndexErrors": true, 13 | "pretty": true 14 | }, 15 | "exclude": [ 16 | "node_modules", 17 | "src/app/main.aot.ts" 18 | ], 19 | "compileOnSave": false, 20 | "buildOnSave": false 21 | } -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const env = process.env.NODE_ENV || 'development'; 2 | 3 | console.log('Running Webpack in ' + env + ' mode.'); 4 | 5 | if (env === 'development') { 6 | module.exports = require('./config/webpack.development'); 7 | } else { 8 | module.exports = require('./config/webpack.production'); 9 | } --------------------------------------------------------------------------------