diff --git a/.vscode/settings.json b/.vscode/settings.json
index 5d20645cc..8be439493 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,3 +1,4 @@
{
- "javascript.implicitProjectConfig.experimentalDecorators": true
+ "javascript.implicitProjectConfig.experimentalDecorators": true,
+ "git.ignoreLimitWarning": true
}
\ No newline at end of file
diff --git a/ng6-seed/package-lock.json b/ng6-seed/package-lock.json
index 91fb0fa6a..18695116f 100755
--- a/ng6-seed/package-lock.json
+++ b/ng6-seed/package-lock.json
@@ -1551,7 +1551,6 @@
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
"integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
- "dev": true,
"requires": {
"mime-types": "~2.1.24",
"negotiator": "0.6.2"
@@ -1590,8 +1589,7 @@
"after": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
- "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
- "dev": true
+ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
},
"agent-base": {
"version": "4.3.0",
@@ -1938,6 +1936,11 @@
"resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
"integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI="
},
+ "async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
+ },
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -2151,8 +2154,7 @@
"backo2": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
- "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
- "dev": true
+ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
},
"balanced-match": {
"version": "1.0.0",
@@ -2217,8 +2219,7 @@
"base64-arraybuffer": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
- "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
- "dev": true
+ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
},
"base64-js": {
"version": "1.3.1",
@@ -2249,7 +2250,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
"integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
- "dev": true,
"requires": {
"callsite": "1.0.0"
}
@@ -2642,8 +2642,7 @@
"callsite": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
- "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
- "dev": true
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA="
},
"callsites": {
"version": "2.0.0",
@@ -2975,8 +2974,7 @@
"component-bind": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
- "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
- "dev": true
+ "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
},
"component-emitter": {
"version": "1.3.0",
@@ -2987,8 +2985,7 @@
"component-inherit": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
- "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
- "dev": true
+ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
},
"compressible": {
"version": "2.0.18",
@@ -6342,11 +6339,25 @@
}
}
},
+ "has-binary2": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
+ "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
+ "requires": {
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
+ }
+ }
+ },
"has-cors": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
- "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
- "dev": true
+ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
},
"has-flag": {
"version": "3.0.0",
@@ -6758,8 +6769,7 @@
"indexof": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
- "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
- "dev": true
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
},
"inflight": {
"version": "1.0.6",
@@ -8197,6 +8207,14 @@
"tslib": "^1.9.0"
}
},
+ "mat-video": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/mat-video/-/mat-video-2.7.2.tgz",
+ "integrity": "sha512-rwZt9+gxhyQeUYkWq+7JPwYdMEDMI4iT9mIdhO00TDnihbdv20WHiMZ4yYLudzFnuJIeXzgDrA9yltGWjG3vMw==",
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
"math-random": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
@@ -8552,8 +8570,7 @@
"negotiator": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
- "dev": true
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
},
"neo-async": {
"version": "2.6.1",
@@ -8651,6 +8668,213 @@
}
}
},
+ "ngx-socket-io": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ngx-socket-io/-/ngx-socket-io-3.0.1.tgz",
+ "integrity": "sha512-6+99AULDEcdrsFSd9FVo5mUSpQMa2KL6twPbteoEv3qWO0Hh2kdrzTjvPdsC2jeTuEuqa8R9l5/3eGYdiLZyWQ==",
+ "requires": {
+ "core-js": "^3.0.0",
+ "reflect-metadata": "^0.1.10",
+ "socket.io": "^2.2.0",
+ "socket.io-client": "^2.2.0",
+ "tslib": "^1.9.0",
+ "zone.js": "^0.10.1"
+ },
+ "dependencies": {
+ "arraybuffer.slice": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+ "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="
+ },
+ "base64id": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
+ },
+ "blob": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
+ "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig=="
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
+ },
+ "core-js": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz",
+ "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA=="
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "engine.io": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.1.tgz",
+ "integrity": "sha512-8MfIfF1/IIfxuc2gv5K+XlFZczw/BpTvqBdl0E2fBLkYQp4miv4LuDTVtYt4yMyaIFLEr4vtaSgV4mjvll8Crw==",
+ "requires": {
+ "accepts": "~1.3.4",
+ "base64id": "2.0.0",
+ "cookie": "0.3.1",
+ "debug": "~4.1.0",
+ "engine.io-parser": "~2.2.0",
+ "ws": "^7.1.2"
+ }
+ },
+ "engine.io-client": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.1.tgz",
+ "integrity": "sha512-RJNmA+A9Js+8Aoq815xpGAsgWH1VoSYM//2VgIiu9lNOaHFfLpTjH4tOzktBpjIs5lvOfiNY1dwf+NuU6D38Mw==",
+ "requires": {
+ "component-emitter": "1.2.1",
+ "component-inherit": "0.0.3",
+ "debug": "~4.1.0",
+ "engine.io-parser": "~2.2.0",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "ws": "~6.1.0",
+ "xmlhttprequest-ssl": "~1.5.4",
+ "yeast": "0.1.2"
+ },
+ "dependencies": {
+ "ws": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz",
+ "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==",
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ }
+ }
+ },
+ "engine.io-parser": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz",
+ "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==",
+ "requires": {
+ "after": "0.8.2",
+ "arraybuffer.slice": "~0.0.7",
+ "base64-arraybuffer": "0.1.5",
+ "blob": "0.0.5",
+ "has-binary2": "~1.0.2"
+ }
+ },
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "socket.io": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz",
+ "integrity": "sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==",
+ "requires": {
+ "debug": "~4.1.0",
+ "engine.io": "~3.4.0",
+ "has-binary2": "~1.0.2",
+ "socket.io-adapter": "~1.1.0",
+ "socket.io-client": "2.3.0",
+ "socket.io-parser": "~3.4.0"
+ }
+ },
+ "socket.io-adapter": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz",
+ "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g=="
+ },
+ "socket.io-client": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz",
+ "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==",
+ "requires": {
+ "backo2": "1.0.2",
+ "base64-arraybuffer": "0.1.5",
+ "component-bind": "1.0.0",
+ "component-emitter": "1.2.1",
+ "debug": "~4.1.0",
+ "engine.io-client": "~3.4.0",
+ "has-binary2": "~1.0.2",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "object-component": "0.0.3",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "socket.io-parser": "~3.3.0",
+ "to-array": "0.1.4"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "socket.io-parser": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz",
+ "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==",
+ "requires": {
+ "component-emitter": "1.2.1",
+ "debug": "~3.1.0",
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "socket.io-parser": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.0.tgz",
+ "integrity": "sha512-/G/VOI+3DBp0+DJKW4KesGnQkQPFmUCbA/oO2QGT6CWxU7hLGWqU3tyuzeSK/dqcyeHsQg1vTe9jiZI8GU9SCQ==",
+ "requires": {
+ "component-emitter": "1.2.1",
+ "debug": "~4.1.0",
+ "isarray": "2.0.1"
+ }
+ },
+ "ws": {
+ "version": "7.2.5",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz",
+ "integrity": "sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA=="
+ },
+ "xmlhttprequest-ssl": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
+ "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4="
+ },
+ "zone.js": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz",
+ "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg=="
+ }
+ }
+ },
"ngx-viewer": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/ngx-viewer/-/ngx-viewer-1.0.5.tgz",
@@ -9011,8 +9235,7 @@
"object-component": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
- "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
- "dev": true
+ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
},
"object-copy": {
"version": "0.1.0",
@@ -9522,7 +9745,6 @@
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
"integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
- "dev": true,
"requires": {
"better-assert": "~1.0.0"
}
@@ -9531,7 +9753,6 @@
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
"integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
- "dev": true,
"requires": {
"better-assert": "~1.0.0"
}
@@ -10253,6 +10474,11 @@
"readable-stream": "^2.0.2"
}
},
+ "recordrtc": {
+ "version": "5.5.9",
+ "resolved": "https://registry.npmjs.org/recordrtc/-/recordrtc-5.5.9.tgz",
+ "integrity": "sha512-6T1tn80nRfsXrAoYWINwz+hBKk+pB5Im4I0BS52Og1ruQvrEdV3IUcm+AKwLMHNyBAhJ2DaVa+9pukTRxMF/uA=="
+ },
"redent": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
@@ -10265,8 +10491,7 @@
"reflect-metadata": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
- "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==",
- "dev": true
+ "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg=="
},
"regenerate": {
"version": "1.4.0",
@@ -12071,8 +12296,7 @@
"to-array": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
- "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
- "dev": true
+ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
},
"to-arraybuffer": {
"version": "1.0.1",
@@ -13311,8 +13535,7 @@
"yeast": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
- "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
- "dev": true
+ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
},
"yn": {
"version": "2.0.0",
diff --git a/ng6-seed/package.json b/ng6-seed/package.json
index 2713e1e27..ae9e66556 100755
--- a/ng6-seed/package.json
+++ b/ng6-seed/package.json
@@ -54,6 +54,7 @@
"karma-jasmine": "^1.1.1",
"leaflet": "^1.6.0",
"mat-table-exporter": "^1.2.5",
+ "mat-video": "^2.7.2",
"moment": "^2.24.0",
"ng-pick-datetime": "^6.0.16",
"ng2-charts": "1.6.0",
@@ -67,10 +68,12 @@
"ngx-mat-daterange-picker": "^1.1.4",
"ngx-mat-select-search": "^1.8.0",
"ngx-perfect-scrollbar": "5.0.0-7",
+ "ngx-socket-io": "^3.0.1",
"ngx-viewer": "^1.0.5",
"node-sass": "^4.13.0",
"perfect-scrollbar": "^1.3.0",
"quill": "^1.3.7",
+ "recordrtc": "^5.5.9",
"rxjs": "^6.5.4",
"rxjs-compat": "^6.5.4",
"screenfull": "^3.2.2",
diff --git a/ng6-seed/proxy.conf.json b/ng6-seed/proxy.conf.json
new file mode 100644
index 000000000..b9cd9b394
--- /dev/null
+++ b/ng6-seed/proxy.conf.json
@@ -0,0 +1,7 @@
+{
+ "/api/": {
+ "target": "http://localhost/",
+ "secure": false,
+ "changeOrigin": true
+ }
+}
\ No newline at end of file
diff --git a/ng6-seed/src/app/app.module.ts b/ng6-seed/src/app/app.module.ts
index ff95f18ec..02f149121 100755
--- a/ng6-seed/src/app/app.module.ts
+++ b/ng6-seed/src/app/app.module.ts
@@ -34,7 +34,7 @@ import {MatSelectModule} from '@angular/material/select';
import {MatCardModule} from '@angular/material/card';
import {MatBadgeModule} from '@angular/material/badge';
import {ChangePasswordDialog} from './settings/users/user-profile/user-profile.component';
-import { MatFormFieldModule,MatProgressSpinnerModule } from '@angular/material';
+import { MatFormFieldModule,MatProgressSpinnerModule, MatDialogModule, MatTooltipModule, MatButtonModule } from '@angular/material';
import { AppRoutes } from './app.routing';
import { AppComponent } from './app.component';
import { AdminLayoutComponent } from './layouts/admin/admin-layout.component';
@@ -58,7 +58,12 @@ import { AsyncPipe } from '../../node_modules/@angular/common';
import { PdTrigerService } from './personal-discussion/pd-service/pd-triger.service';
import { HttpLoaderComponent } from './layouts/http-loader/http-loader.component';
import { LoaderService } from './shared/loaderService/loader.service';
-
+import {SocketIoConfig, SocketIoModule} from 'ngx-socket-io';
+import { IncomingCallComponent } from './video-chat/incoming-call/incoming-call.component';
+import { VideoChatComponent } from './video-chat/video-chat.component'
+import { PushNotifyService } from './shared/push-notify.service';
+import { MatVideoModule } from 'mat-video';
+import { VideoPlayerComponent } from './video-chat/video-player/video-player.component';
export function HttpLoaderFactory(http: HttpClient) {
return new TranslateHttpLoader(http);
@@ -72,14 +77,17 @@ const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {
suppressScrollX: true
};
+const socketConfig: SocketIoConfig = { url: environment.socketServerUrl, options: {} };
+
@NgModule({
declarations: [
AppComponent,
AdminLayoutComponent,
AuthLayoutComponent,
- NewPasswordDialog,ForgotPass,ChangePasswordDialog, RoleMenuItemsPipe, HttpLoaderComponent
+ NewPasswordDialog,ForgotPass,ChangePasswordDialog, RoleMenuItemsPipe, HttpLoaderComponent, IncomingCallComponent, VideoChatComponent, VideoPlayerComponent
],
imports: [
+ MatDialogModule,
BrowserModule,
BrowserAnimationsModule,
SharedModule,
@@ -89,12 +97,15 @@ const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {
MatSidenavModule,
MatInputModule,
MatIconModule,
+ MatButtonModule,
MatListModule,
MatMenuModule,
MatToolbarModule,
MatTabsModule,
MatCheckboxModule,
MatProgressBarModule,MatProgressSpinnerModule,
+ MatTooltipModule,
+
MatSelectModule,
MatCardModule,
MatBadgeModule,
@@ -114,6 +125,8 @@ const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {
AngularFireAuthModule,
AngularFireMessagingModule,
AngularFireModule.initializeApp(environment.firebase),
+ SocketIoModule.forRoot(socketConfig),
+ MatVideoModule
],
providers: [
{
@@ -123,6 +136,7 @@ const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {
AwsService,AuthGuard,
TranslateService,
PdTrigerService,
+ PushNotifyService,
// {
// provide: PERFECT_SCROLLBAR_CONFIG,
// useValue: DEFAULT_PERFECT_SCROLLBAR_CONFIG
@@ -134,7 +148,7 @@ const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {
},
MessagingService, AsyncPipe,LoaderService
],
- entryComponents: [NewPasswordDialog,ForgotPass,ChangePasswordDialog],
+ entryComponents: [NewPasswordDialog,ForgotPass,ChangePasswordDialog,IncomingCallComponent,VideoChatComponent,VideoPlayerComponent],
bootstrap: [AppComponent]
})
export class AppModule { }
diff --git a/ng6-seed/src/app/dashboard/dashboard.component.html b/ng6-seed/src/app/dashboard/dashboard.component.html
index af0cc1fe0..35cfbad9a 100755
--- a/ng6-seed/src/app/dashboard/dashboard.component.html
+++ b/ng6-seed/src/app/dashboard/dashboard.component.html
@@ -1,3 +1,4 @@
+
diff --git a/ng6-seed/src/app/dashboard/dashboard.component.ts b/ng6-seed/src/app/dashboard/dashboard.component.ts
index 65ea7a4b2..654e22656 100755
--- a/ng6-seed/src/app/dashboard/dashboard.component.ts
+++ b/ng6-seed/src/app/dashboard/dashboard.component.ts
@@ -6,7 +6,8 @@ import { MastersService } from '../settings/service/masters/masters.service';
import { DashboardService } from './dashboard.service';
import { NgxDrpOptions, PresetItem, Range } from 'ngx-mat-daterange-picker';
import { BaseChartDirective } from 'ng2-charts/ng2-charts';
-
+import { VideoPlayerComponent } from 'app/video-chat/video-player/video-player.component';
+import { MatDialog } from '@angular/material';
@Component({
selector: 'app-dashboard',
templateUrl: './dashboard.component.html',
@@ -40,7 +41,7 @@ export class DashboardComponent {
// }];
- constructor(private _dashboardService: DashboardService) {}
+ constructor(private _dashboardService: DashboardService,private dialog:MatDialog) {}
ngOnInit(){
@@ -360,5 +361,4 @@ getDoughnutChartData(){
})
}
-
}
\ No newline at end of file
diff --git a/ng6-seed/src/app/layouts/admin/admin-layout.component.ts b/ng6-seed/src/app/layouts/admin/admin-layout.component.ts
index 6c06c0086..77b75f14e 100755
--- a/ng6-seed/src/app/layouts/admin/admin-layout.component.ts
+++ b/ng6-seed/src/app/layouts/admin/admin-layout.component.ts
@@ -15,6 +15,11 @@ import { AwsService } from '../../AwsService/aws.service';
import { RoleMenuItemsPipe } from './../role-menu-items.pipe';
import 'rxjs/add/observable/interval';
import { MessagingService } from 'app/shared/messaging.service';
+import { IncomingCallComponent } from '../../video-chat/incoming-call/incoming-call.component';
+import { Socket } from 'ngx-socket-io';
+import { MatDialog } from '@angular/material';
+import { VideoChatComponent } from 'app/video-chat/video-chat.component';
+import { PushNotifyService } from 'app/shared/push-notify.service';
@@ -59,8 +64,9 @@ export class AdminLayoutComponent implements OnInit, OnDestroy {
permissionDeined : boolean = true;
alertTAT: any;
countTAT: number;
-
- constructor(private router: Router, public menuItems: MenuItems, public horizontalMenuItems : HorizontalMenuItems, public translate: TranslateService,public aws:AwsService,public users:UserService,private _dashboardService: DashboardService,private messagingService:MessagingService) {
+ incomingDialogOpened:boolean = false
+ constructor(private router: Router, public menuItems: MenuItems, public horizontalMenuItems : HorizontalMenuItems, public translate: TranslateService,public aws:AwsService,public users:UserService,private _dashboardService: DashboardService,private messagingService:MessagingService,private socket:Socket,private matDialog:MatDialog,
+ private _notificationService:PushNotifyService) {
const browserLang: string = translate.getBrowserLang();
translate.use(browserLang.match(/en|fr/) ? browserLang : 'en');
@@ -112,6 +118,8 @@ export class AdminLayoutComponent implements OnInit, OnDestroy {
});
// this.alertForTAT();
+ this._notificationService.requestPermission();
+ console.log("constructor called")
}
ngOnInit(): void {
@@ -138,7 +146,14 @@ export class AdminLayoutComponent implements OnInit, OnDestroy {
// Ps.update(elemContent);
}
});
-
+ setTimeout(()=>{
+ this.listenForCalls()
+ },5000)
+ // this.openIncomingDialog();
+ console.log("Ng On Init")
+ }
+ ngAfterViewInit() {
+ console.log("Ng After view init")
}
@HostListener('click', ['$event'])
@@ -293,6 +308,7 @@ export class AdminLayoutComponent implements OnInit, OnDestroy {
this.aws.logout().subscribe(res=>{
//alert("res");
localStorage.removeItem('user_role');
+ localStorage.removeItem('pd_short_info');
this.messagingService.unsubscribeNotification()
setTimeout(()=>{
this.router.navigate(['/authentication/login']);
@@ -311,4 +327,75 @@ export class AdminLayoutComponent implements OnInit, OnDestroy {
break;
}
}
+ // FOR LISTENING TO RECIEVE CALLS FROM CALLER
+ listenForCalls() {
+ // this.socket.on('BackOffer', this.connectPeer)
+ let userrole = localStorage.getItem('user_role')
+ if(userrole == '5') {
+ this.socket.fromEvent('BackOffer').subscribe((res:any)=>{
+ let pd_short_info:any = localStorage.getItem('pd_short_info')
+ pd_short_info = JSON.parse(pd_short_info);
+ console.log(res)
+ if(res && res.hasOwnProperty('random_string') && res.random_string && res.hasOwnProperty('user_type') && res.user_type != 'officer'){
+ if(pd_short_info.filter(val=>val.random_string == res.random_string).length > 0){
+ let curr_pd_info= pd_short_info.filter(val=>val.random_string == res.random_string)[0]
+ if(curr_pd_info && curr_pd_info.pd_type == '3') {
+ this.connectPeer(res,curr_pd_info);
+ }
+ }
+ }
+ })
+ }
+ }
+ connectPeer(offer,curr_pd_info) {
+ console.log(offer)
+ // alert("Offer is listened");
+ this.notify('Incoming Call','Calling from ' + curr_pd_info.applicant_name + ' (' +curr_pd_info.pd_sno+ ')')
+ this.openIncomingDialog(offer,curr_pd_info);
+ }
+ openIncomingDialog(offer?,curr_pd_info?) {
+ offer.pd_id = curr_pd_info.pd_id
+ if(this.incomingDialogOpened == true) {
+ return;
+ }
+ this.incomingDialogOpened = true
+ const dialogRef = this.matDialog.open(IncomingCallComponent,{
+ // minWidth:'25%',
+ // maxWidth:'30%',
+ data:curr_pd_info,
+ disableClose: true,
+ backdropClass: 'incoming-call-background' ,
+ panelClass:'incoming-call-background'
+ })
+ dialogRef.afterClosed().subscribe(data=>{
+ console.log(data)
+ if(data == 'decline'){
+ this.incomingDialogOpened = false
+ this.socket.emit('callStatus',{random_string:curr_pd_info.random_string,status:'declined',status_code:3})
+ }
+ else {
+ this.incomingDialogOpened = false
+ this.openVideoChatDialog(offer)
+ }
+ })
+ }
+ openVideoChatDialog(offer) {
+ let dialogRef = this.matDialog.open(VideoChatComponent,{
+ data:offer,
+ maxWidth: '100vw',
+ maxHeight: '100vh',
+ height: '100%',
+ width: '100%',
+ disableClose: true,
+ panelClass:'video-chat'
+ })
+ }
+ notify(title,approval) {
+ let data: Array < any >= [];
+ data.push({
+ 'title': title,
+ 'body': approval
+ });
+ this._notificationService.generateNotificationWithTitle(data);
+}
}
diff --git a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/pd-status-change-dialogue/pd-status-change-dialogue.component.html b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/pd-status-change-dialogue/pd-status-change-dialogue.component.html
index b458693ba..47a54f55b 100644
--- a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/pd-status-change-dialogue/pd-status-change-dialogue.component.html
+++ b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/pd-status-change-dialogue/pd-status-change-dialogue.component.html
@@ -26,5 +26,7 @@
+
\ No newline at end of file
diff --git a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/pd-status-change-dialogue/pd-status-change-dialogue.component.ts b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/pd-status-change-dialogue/pd-status-change-dialogue.component.ts
index fd872a492..f4f9bdb63 100644
--- a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/pd-status-change-dialogue/pd-status-change-dialogue.component.ts
+++ b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/pd-status-change-dialogue/pd-status-change-dialogue.component.ts
@@ -21,6 +21,8 @@ export class PdStatusChangeDialogueComponent implements OnInit {
addonStatus: string ="ADD_ON_PENDING";
public Loading: boolean;
public masterRandomString : string;
+ fk_pd_type: any;
+ pd_completeness_override: String = '0';
constructor(notifier: NotifierService , private pd: PdTrigerService,private dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data: any)
{
@@ -31,6 +33,8 @@ export class PdStatusChangeDialogueComponent implements OnInit {
this.CompletenessCheck = this.data.pd_status=='INPROGRESS' ? true : this.data.pd_status=='COMPLETED' ? false : true;
this.Loading = this.data.pd_status=='INPROGRESS' ? false : this.data.pd_status=='COMPLETED' ? true : false;
this.masterRandomString = this.data.random_string;
+ this.fk_pd_type = this.data.pd_type
+ console.log("sdf@@@@@@@@@@2",this.fk_pd_type)
}
ngOnInit() {
@@ -60,9 +64,10 @@ export class PdStatusChangeDialogueComponent implements OnInit {
}
changePDStatus(status: string): void {
- let update_status = {
+ let update_status:any = {
"pd_id":this.data.pdid,
};
+ update_status.pd_completeness_override = this.pd_completeness_override
this.pd.editPdMasterDetails(update_status, status,this.masterRandomString).subscribe(result => {
if (result.status == 200) {
this.dialogRef.close({update_status:true});
@@ -77,5 +82,17 @@ export class PdStatusChangeDialogueComponent implements OnInit {
this.notifier.notify('error', 'Something Went Wrong Try Again.! \t\"' + (error.error_type == 2 ? error.error_status + ' ( ' + error.error_text + ' ) ' : ' ( ' + error.error_text + ' ) ') +'\" Error Occur.!');
});
}
-
+ overwritten_pd() {
+ // this.changePDStatus(this.data.pd_status,'1');
+ let params: any={};
+ params.pd_id = this.data.pdid;
+ this.CompletenessCheck = true;
+ this.pd_completeness_override = '1'
+ // this.Loading = false;
+ this.pd.getPDCompleteDetails(params).subscribe(result => {
+ if (result.dataStatus === true) {
+ this.enableAddonPD = result.records.address_count>0 ? true: false;
+ }
+ });
+ }
}
diff --git a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/business-assets-info/business-assets-info.component.ts b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/business-assets-info/business-assets-info.component.ts
index 34241ac0c..458c8c366 100755
--- a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/business-assets-info/business-assets-info.component.ts
+++ b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/business-assets-info/business-assets-info.component.ts
@@ -1210,8 +1210,10 @@ export class BusinessAssetsInfoComponent implements OnInit {
if (flag == 1) {
if (value == 'yes') {
item.controls.business_years.setValidators([Validators.required]);
+ if(this.fk_pd_type != '3') {
item.controls.business_is_pd_visited.setValidators([Validators.required]);
item.controls.business_pd_visited_remark.setValidators([Validators.required]);
+ }
item.controls.business_ownership_type.setValidators([Validators.required]);
}
else {
diff --git a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/final-remarks/final-remarks.component.html b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/final-remarks/final-remarks.component.html
index 6cd7b0cb3..4e1608952 100755
--- a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/final-remarks/final-remarks.component.html
+++ b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/final-remarks/final-remarks.component.html
@@ -41,7 +41,7 @@
Service Provided Required
-
+
@@ -156,7 +156,7 @@
Specify the Mode of Transport Used to Visit the PD address Required
-
+
CLIX
MWISE
diff --git a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/final-remarks/final-remarks.component.ts b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/final-remarks/final-remarks.component.ts
index 70e310680..15bb49fa4 100755
--- a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/final-remarks/final-remarks.component.ts
+++ b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/final-remarks/final-remarks.component.ts
@@ -256,7 +256,7 @@ export class FinalRemarksComponent implements OnInit {
this._finalRemarkForm.controls.market_intelligence.setValue(data.records.market_intelligence || '');
- if(this.lender_short_name == 'CLIX' || this.lender_short_name == 'MWISE' || this.prod_catagory == 'LAEP'){
+ if(this.fk_pd_type != '3' && (this.lender_short_name == 'CLIX' || this.lender_short_name == 'MWISE' || this.prod_catagory == 'LAEP')){
if(this.prod_catagory == 'LAEP') {this._finalRemarkForm.controls.outlet_location.setValue(this.prod_catagory == 'LAEP' ? data.records.outlet_location : ''); }
this._finalRemarkForm.controls.is_competition.setValue(data.records.is_competition);
diff --git a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/financial-info/financial-info.component.html b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/financial-info/financial-info.component.html
index b1f6d4669..6b2f3cfd6 100755
--- a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/financial-info/financial-info.component.html
+++ b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/financial-info/financial-info.component.html
@@ -500,7 +500,7 @@
Photograph of Kuchha bills allowed
-
Photographs of kuccha bills uploded
+
Photographs of kuccha bills uploaded
Yes
diff --git a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/general-info/general-info.component.html b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/general-info/general-info.component.html
index 0d5fb42a5..e738c9cb1 100755
--- a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/general-info/general-info.component.html
+++ b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/general-info/general-info.component.html
@@ -37,14 +37,16 @@
- Is Person Met
+ Person Contacted
+ Is Person Met
- Is Applicant
+ Is Loan applicant
+ Is Applicant
diff --git a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/general-info/general-info.component.scss b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/general-info/general-info.component.scss
index 420e13e5e..4d5f3892e 100755
--- a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/general-info/general-info.component.scss
+++ b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/general-info/general-info.component.scss
@@ -44,7 +44,10 @@
display:flex;
justify-content:flex-end;
}
-
+ mat-cell:nth-child(1),
+ mat-header-cell:nth-child(1) {
+ flex: 0 0 20%;
+ }
mat-cell:nth-child(5),
mat-header-cell:nth-child(5) {
flex: 0 0 17%;
@@ -52,12 +55,21 @@
mat-cell:nth-child(6),
mat-header-cell:nth-child(6) {
- flex: 0 0 20%;
+ flex: 0 0 15%;
+ }
+
+ mat-cell:nth-child(3),
+ mat-header-cell:nth-child(3),
+ mat-cell:nth-child(2),
+ mat-header-cell:nth-child(2) {
+ margin-left: 1%;
+ margin-right: 1%;
}
mat-cell:nth-child(7),
mat-header-cell:nth-child(7) {
justify-content: end;
+ flex: 0 0 19%;
}
.capitalize{
@@ -172,4 +184,7 @@ $product-bg-color-hover: rgba(103, 58, 183, 0.7);
// }
}
}
+ // .mat-column-is_applicant {
+ // width: 12%;
+ // }
\ No newline at end of file
diff --git a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/stock/stock.component.ts b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/stock/stock.component.ts
index d0585f518..de4ae1354 100755
--- a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/stock/stock.component.ts
+++ b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/forms/stock/stock.component.ts
@@ -9,8 +9,8 @@ import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
/** Service */
import { PdTrigerService } from '../../../../../pd-service/pd-triger.service';
import { ActivatedRoute, Router } from '@angular/router';
-import { analyzeAndValidateNgModules } from '@angular/compiler';
-import { ImageCropComponent } from '../dialogue/image-crop/image-crop.component';
+// import { analyzeAndValidateNgModules } from '@angular/compiler';
+// import { ImageCropComponent } from '../dialogue/image-crop/image-crop.component';
@Component({
// changeDetection: ChangeDetectionStrategy.OnPush,
@@ -90,6 +90,8 @@ export class StockComponent implements OnInit {
this.fk_pd_type = this.pd_all_details.pdmaster_details.fk_pd_type;
if(this.fk_pd_type == '3'){
this.SPsufficientList.push({value:"not able to assess",isdisplayvalue:"Not able to assess",isdisabled:false})
+ this.TGsufficientList.push({value:"not able to assess",isdisplayvalue:"Not able to assess",isdisabled:false})
+ this.RMsufficientList.push({value:"not able to assess",isdisplayvalue:"Not able to assess",isdisabled:false})
}
this.image_doc_params={pdid:this.pdid,form_id:this.form_id,company_id:this.company_id}
}
diff --git a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/start-pd.component.ts b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/start-pd.component.ts
index 1b2771c14..4cde14ecb 100755
--- a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/start-pd.component.ts
+++ b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/start-pd/start-pd.component.ts
@@ -140,7 +140,7 @@ export class StartPdComponent implements OnInit, OnDestroy {
// load pd status change dialogue
pdStatusDialogue(status: string, checkType: number): void {
const dialogRef = this.dialog.open(PdStatusChangeDialogueComponent, {
- data: { pdid: this.startPD, pd_status: status ,random_string:this.randomString },
+ data: { pdid: this.startPD, pd_status: status ,random_string:this.randomString,pd_type:this.pdMasterList.fk_pd_type },
disableClose: true,
minWidth:'30%',
maxWidth:'40%',
diff --git a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/speed-dial-fab/speed-dial-fab.animations.ts b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/speed-dial-fab/speed-dial-fab.animations.ts
new file mode 100644
index 000000000..6c84239e9
--- /dev/null
+++ b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/speed-dial-fab/speed-dial-fab.animations.ts
@@ -0,0 +1,52 @@
+import {
+ animate,
+ keyframes,
+ query,
+ stagger,
+ state,
+ style,
+ transition,
+ trigger
+ } from '@angular/animations';
+
+ export const speedDialFabAnimations = [
+ trigger('fabToggler', [
+ state('inactive', style({
+ transform: 'rotate(0deg)'
+ })),
+ state('active', style({
+ transform: 'rotate(225deg)'
+ })),
+ transition('* <=> *', animate('200ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
+ ]),
+ trigger('speedDialStagger', [
+ transition('* => *', [
+
+ query(':enter', style({ opacity: 0 }), {optional: true}),
+
+ query(':enter', stagger('40ms',
+ [
+ animate('200ms cubic-bezier(0.4, 0.0, 0.2, 1)',
+ keyframes(
+ [
+ style({opacity: 0, transform: 'translateY(10px)'}),
+ style({opacity: 1, transform: 'translateY(0)'}),
+ ]
+ )
+ )
+ ]
+ ), {optional: true}),
+
+ query(':leave',
+ animate('200ms cubic-bezier(0.4, 0.0, 0.2, 1)',
+ keyframes([
+ style({opacity: 1}),
+ style({opacity: 0}),
+ ])
+ ), {optional: true}
+ )
+
+ ])
+ ])
+ ];
+
\ No newline at end of file
diff --git a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/speed-dial-fab/speed-dial-fab.component.html b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/speed-dial-fab/speed-dial-fab.component.html
new file mode 100644
index 000000000..13faaab76
--- /dev/null
+++ b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/speed-dial-fab/speed-dial-fab.component.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/speed-dial-fab/speed-dial-fab.component.scss b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/speed-dial-fab/speed-dial-fab.component.scss
new file mode 100644
index 000000000..729e995bb
--- /dev/null
+++ b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/speed-dial-fab/speed-dial-fab.component.scss
@@ -0,0 +1,50 @@
+.fab-container {
+ position: absolute;
+ // top: 1%;
+ // right: 35%;
+ z-index: 100;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+
+ > div {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ // margin-top: 5px;
+ // margin-top: 5px;
+ position: absolute;
+ right: 67px;
+ // top: -13px;
+
+ button {
+ // margin-top: 17px;
+ background: #cfdd49;
+ margin-left:10px;
+ }
+ }
+ }
+ @media(max-width:580px) {
+ .fab-container {
+ > div {
+ flex-direction: column !important;
+ right: 0px;
+ top: 53px;
+ }
+ }
+ }
+
+ .fab-toggler {
+ float: right;
+ z-index: 100;
+ }
+
+ #fab-dismiss {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 99;
+ }
+
\ No newline at end of file
diff --git a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/speed-dial-fab/speed-dial-fab.component.spec.ts b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/speed-dial-fab/speed-dial-fab.component.spec.ts
new file mode 100644
index 000000000..323c57739
--- /dev/null
+++ b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/speed-dial-fab/speed-dial-fab.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { SpeedDialFabComponent } from './speed-dial-fab.component';
+
+describe('SpeedDialFabComponent', () => {
+ let component: SpeedDialFabComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ SpeedDialFabComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(SpeedDialFabComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/speed-dial-fab/speed-dial-fab.component.ts b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/speed-dial-fab/speed-dial-fab.component.ts
new file mode 100644
index 000000000..b478e8ab0
--- /dev/null
+++ b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/speed-dial-fab/speed-dial-fab.component.ts
@@ -0,0 +1,42 @@
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
+import { speedDialFabAnimations } from './speed-dial-fab.animations';
+
+@Component({
+ selector: 'app-speed-dial-fab',
+ templateUrl: './speed-dial-fab.component.html',
+ styleUrls: ['./speed-dial-fab.component.scss'],
+ animations: speedDialFabAnimations
+})
+export class SpeedDialFabComponent implements OnInit {
+
+ @Input() options;
+ @Output() fabClick = new EventEmitter()
+ buttons = [];
+ fabTogglerState = 'inactive';
+
+ constructor() { }
+
+ ngOnInit() {
+ const maxButtons = 6;
+ if (this.options.buttons.length > maxButtons) {
+ this.options.buttons.splice(5, this.options.buttons.length - maxButtons);
+ }
+ }
+
+ showItems() {
+ this.fabTogglerState = 'active';
+ this.buttons = this.options.buttons;
+ }
+
+ hideItems() {
+ this.fabTogglerState = 'inactive';
+ this.buttons = [];
+ }
+
+ onToggleFab() {
+ this.buttons.length ? this.hideItems() : this.showItems();
+ }
+ onBtnClick(btnValue) {
+ this.fabClick.emit(btnValue)
+ }
+}
diff --git a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/view-pd.component.html b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/view-pd.component.html
index 64c1ed28c..5fbe85637 100755
--- a/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/view-pd.component.html
+++ b/ng6-seed/src/app/personal-discussion/manage-pd/list-pd/view-pd/view-pd.component.html
@@ -125,22 +125,38 @@
-
-
-