├── .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 |
6 |
7 |
8 |
9 |
Created by:
10 |
11 |
12 |
13 |
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 |
3 |
4 |
5 |
9 |
10 | {{ modalContent.body }}
11 |
12 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/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 | ' + customer.firstName + ' ' + customer.lastName + '' + customer.city + ', ' + customer.state.name">
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 | {{ order.productName }} |
8 | {{ order.itemCost | currency:'USD':true }} |
9 |
10 |
11 | |
12 | {{ customer.orderTotal | currency:'USD':true }} |
13 |
14 |
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 |
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 | First Name |
10 | Last Name |
11 | Address |
12 | City |
13 | State |
14 |
15 | Order Total |
16 | |
17 |
18 |
19 |
20 |
21 |  |
23 | {{ customer.firstName | capitalize }} |
24 | {{ customer.lastName | capitalize }} |
25 | {{ customer.address }} |
26 | {{ customer.city | trim }} |
27 | {{ customer.state.name }} |
28 | {{ customer.orderTotal | currency:'USD':true }} |
29 | View Orders |
30 |
31 |
32 | |
33 | No Records Found |
34 |
35 |
36 |
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 |
--------------------------------------------------------------------------------
/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 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
{{ customer.firstName | capitalize }} {{ customer.lastName | capitalize }}
15 |
16 |
17 |
18 | {{order.productName}} |
19 | {{ order.itemCost | currency:'USD':true }} |
20 |
21 |
22 | |
23 | {{ customer.orderTotal | currency:'USD':true }}
24 | |
25 |
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 |
--------------------------------------------------------------------------------
/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 |
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 | }
--------------------------------------------------------------------------------