From 8b8d825ec640d56f780ff96aebc531a660bbf4a2 Mon Sep 17 00:00:00 2001 From: Patrick Sun Date: Mon, 8 Mar 2021 15:20:46 +1100 Subject: [PATCH] loan-edit 3 form group template skeleton --- package-lock.json | 315 ++++++++++++++++++ package.json | 20 +- src/app/app-routing.module.ts | 2 + src/app/app.module.ts | 17 +- .../list-all-loans.component.html | 119 ++++++- .../list-all-loans.component.scss | 1 + .../list-all-loans.component.ts | 29 +- .../loan-add-new/loan-add-new.component.html | 57 ++++ .../loan-add-new/loan-add-new.component.scss | 5 + .../loan-add-new.component.spec.ts | 25 ++ .../loan-add-new/loan-add-new.component.ts | 82 +++++ src/app/loan-edit/dist/loan-edit.component.js | 4 +- .../hint-card/hint-card.component.html | 44 +++ .../hint-card/hint-card.component.scss | 0 .../hint-card/hint-card.component.spec.ts | 25 ++ .../hint-card/hint-card.component.ts | 28 ++ src/app/loan-edit/loan-edit.component.scss | 4 +- src/app/main-menu-items.ts | 1 + src/app/service/auth.service.ts | 8 +- src/app/service/loan_summary.service.ts | 21 +- 20 files changed, 761 insertions(+), 46 deletions(-) create mode 100644 src/app/loan-add-new/loan-add-new.component.html create mode 100644 src/app/loan-add-new/loan-add-new.component.scss create mode 100644 src/app/loan-add-new/loan-add-new.component.spec.ts create mode 100644 src/app/loan-add-new/loan-add-new.component.ts create mode 100644 src/app/loan-edit/hint-card/hint-card.component.html create mode 100644 src/app/loan-edit/hint-card/hint-card.component.scss create mode 100644 src/app/loan-edit/hint-card/hint-card.component.spec.ts create mode 100644 src/app/loan-edit/hint-card/hint-card.component.ts diff --git a/package-lock.json b/package-lock.json index f61d581..d167d96 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2009,6 +2009,23 @@ } } }, + "@progress/kendo-angular-editor": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@progress/kendo-angular-editor/-/kendo-angular-editor-1.2.5.tgz", + "integrity": "sha512-FDRdqssuKYCxNnzi6pSxjQzxDqlh2fMuUm3asqfbz4QziMoxXf5qCNMQba9Fb5SmJe0i0mdY4wrOIa4FnIcaiQ==", + "requires": { + "@progress/kendo-editor-common": "^0.6.1", + "@progress/kendo-schematics": "^1.1.0", + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, "@progress/kendo-angular-excel-export": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/@progress/kendo-angular-excel-export/-/kendo-angular-excel-export-3.1.5.tgz", @@ -2265,6 +2282,22 @@ } } }, + "@progress/kendo-angular-toolbar": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@progress/kendo-angular-toolbar/-/kendo-angular-toolbar-3.2.1.tgz", + "integrity": "sha512-rEvmaZcFteodoN/l27mUWTnalbQdiVzcAFto9GjOvr7LjFGf/mPKEXSKNGUz7jwS9mg/2Ln56odXQq5YomOP8g==", + "requires": { + "@progress/kendo-schematics": "^1.0.0", + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, "@progress/kendo-charts": { "version": "1.16.0", "resolved": "https://registry.npmjs.org/@progress/kendo-charts/-/kendo-charts-1.16.0.tgz", @@ -2323,6 +2356,45 @@ "@progress/pako-esm": "^1.0.1" } }, + "@progress/kendo-editor-common": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@progress/kendo-editor-common/-/kendo-editor-common-0.6.1.tgz", + "integrity": "sha512-fXT2egx/Pj0BFtGI++p6rRsdPc7uboYDJ5Jt3l6BkANYCDY0kNfSLYF2DXYm1h374+37JnvuzoP0d3CvDHJ2fw==", + "requires": { + "@types/prosemirror-commands": "1.0.3", + "@types/prosemirror-dropcursor": "1.0.0", + "@types/prosemirror-gapcursor": "1.0.1", + "@types/prosemirror-history": "1.0.1", + "@types/prosemirror-inputrules": "1.0.2", + "@types/prosemirror-keymap": "1.0.2", + "@types/prosemirror-model": "1.7.2", + "@types/prosemirror-schema-list": "1.0.1", + "@types/prosemirror-state": "1.2.4", + "@types/prosemirror-tables": "0.9.1", + "@types/prosemirror-transform": "1.1.1", + "@types/prosemirror-view": "1.11.4", + "prosemirror-commands": "1.1.4", + "prosemirror-dropcursor": "1.3.2", + "prosemirror-gapcursor": "1.1.5", + "prosemirror-history": "1.1.3", + "prosemirror-inputrules": "1.1.2", + "prosemirror-keymap": "1.1.4", + "prosemirror-model": "1.11.0", + "prosemirror-schema-list": "1.1.2", + "prosemirror-state": "1.3.3", + "prosemirror-tables": "1.1.0", + "prosemirror-transform": "1.2.7", + "prosemirror-view": "1.15.2", + "tslib": "^1.7.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, "@progress/kendo-file-saver": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@progress/kendo-file-saver/-/kendo-file-saver-1.1.0.tgz", @@ -2442,6 +2514,119 @@ "integrity": "sha512-8Jduo8wvvwDzEVJCOvS/G6sgilOLvvhn1eMmK3TW8/T217O7u1jdrK6ImKLv80tVryaPSVeKu6sjDEiFjd4/eg==", "dev": true }, + "@types/orderedmap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/orderedmap/-/orderedmap-1.0.0.tgz", + "integrity": "sha512-dxKo80TqYx3YtBipHwA/SdFmMMyLCnP+5mkEqN0eMjcTBzHkiiX0ES118DsjDBjvD+zeSsSU9jULTZ+frog+Gw==" + }, + "@types/prosemirror-commands": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-commands/-/prosemirror-commands-1.0.3.tgz", + "integrity": "sha512-AjFCJqBvAhQ4gOzXPgUcnEZwu4jd7se7ani3dYAv8p4L+cWEPD6Pshrpp5uJDI5/pzvNXLWQ/4c2Qk4h9IML1w==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-dropcursor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/prosemirror-dropcursor/-/prosemirror-dropcursor-1.0.0.tgz", + "integrity": "sha512-S2ndHt94M64avSqjBcgIblaF3YeC3RfcmpY9/WIdfqU7aoJxuOh4RJk5emdmQPHZT1wbczMHFmFSsRqgErK0EQ==", + "requires": { + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-gapcursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/prosemirror-gapcursor/-/prosemirror-gapcursor-1.0.1.tgz", + "integrity": "sha512-ruA7FK9NJv+bn5s55SZYFf9SwaN3wk/MkBvqRmhIqIHvowTTa7nzIGWbUdWZMga1DDTk+GrwdcQaEHunAFjFsQ==", + "requires": { + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-history": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/prosemirror-history/-/prosemirror-history-1.0.1.tgz", + "integrity": "sha512-BYyPJlWDo3VEnWS5X2DCHXrrAKEjdbCe1DUjGL6R/8hmwMFe3iMJGYdBkOXU1FfkTpw7Z+PlwY/pMyeelVydmg==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-inputrules": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/prosemirror-inputrules/-/prosemirror-inputrules-1.0.2.tgz", + "integrity": "sha512-bKFneQUPnkZmzCJ1uoitpKH6PFW0hc4q55NsC7mFUCvX0eZl0GRKxyfV47jkJbsbyUQoO/QFv0WwLDz2bo15sA==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-keymap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/prosemirror-keymap/-/prosemirror-keymap-1.0.2.tgz", + "integrity": "sha512-94aDnpdrdI5S2UM7MQIjauFeo0MI5S7uU+SMT01m5NXT5CZ/NLHhzN0d1V5zKxe7Nh7fVxuZ7l9DTu5nSMN9sw==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-model": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@types/prosemirror-model/-/prosemirror-model-1.7.2.tgz", + "integrity": "sha512-2l+yXvidg3AUHN07mO4Jd8Q84fo6ksFsy7LHUurLYrZ74uTahBp2fzcO49AKZMzww2EulXJ40Kl/OFaQ/7A1fw==", + "requires": { + "@types/orderedmap": "*" + } + }, + "@types/prosemirror-schema-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/prosemirror-schema-list/-/prosemirror-schema-list-1.0.1.tgz", + "integrity": "sha512-+iUYq+pj2wVHSThj0MjNDzkkGwq8aDQ6j0UJK8a0cNCL8v44Ftcx1noGPtBIEUJgitH960VnfBNoTWfQoQZfRA==", + "requires": { + "@types/orderedmap": "*", + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-state": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-state/-/prosemirror-state-1.2.4.tgz", + "integrity": "sha512-Gch4THfZ9QNsRQ7myibU8cG99F3b8/3Gto083ZuutNG72E0VmS8yfQzA5ahbndr5GUIbmKyOD5LqKTBvx/M0qw==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-transform": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-tables": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@types/prosemirror-tables/-/prosemirror-tables-0.9.1.tgz", + "integrity": "sha512-zoY1qcAC6kG4UjnaQQXuoyYQdDJMQmY9uzRKdyUppP8rWRR5/kXBHOd84CD9ZvrYUBo3uDmS20qQnc3knr2j9A==", + "requires": { + "prosemirror-tables": "*" + } + }, + "@types/prosemirror-transform": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/prosemirror-transform/-/prosemirror-transform-1.1.1.tgz", + "integrity": "sha512-yYCYSoiRH+Wcbl8GJc0PFCzeyMzNQ1vL2xrHHSXZuNcIlH75VoiKrZFeZ6BS9cl8mYXjZrlmdBe8YOxYvyKM6A==", + "requires": { + "@types/prosemirror-model": "*" + } + }, + "@types/prosemirror-view": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-view/-/prosemirror-view-1.11.4.tgz", + "integrity": "sha512-Hh8v2tpCEMaIesQuw7Y7Pz6imoC1T/bR5OlNGVtp944PZvctXiBvFRkQIb0YvZpt7vVkFzeq2kmR+7mnUfvWiw==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-transform": "*" + } + }, "@types/q": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", @@ -9052,6 +9237,11 @@ } } }, + "orderedmap": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-1.1.1.tgz", + "integrity": "sha512-3Ux8um0zXbVacKUkcytc0u3HgC0b0bBLT+I60r2J/En72cI0nZffqrA7Xtf2Hqs27j1g82llR5Mhbd0Z1XW4AQ==" + }, "original": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", @@ -10211,6 +10401,121 @@ } } }, + "prosemirror-commands": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.1.4.tgz", + "integrity": "sha512-kj4Qi+8h3EpJtZuuEDwZ9h2/QNGWDsIX/CzjmClxi9GhxWyBUMVUvIFk0mgdqHyX20lLeGmOpc0TLA5aPzgpWg==", + "requires": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-dropcursor": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.3.2.tgz", + "integrity": "sha512-4c94OUGyobGnwcQI70OXyMhE/9T4aTgjU+CHxkd5c7D+jH/J0mKM/lk+jneFVKt7+E4/M0D9HzRPifu8U28Thw==", + "requires": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "prosemirror-gapcursor": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.1.5.tgz", + "integrity": "sha512-SjbUZq5pgsBDuV3hu8GqgIpZR5eZvGLM+gPQTqjVVYSMUCfKW3EGXTEYaLHEl1bGduwqNC95O3bZflgtAb4L6w==", + "requires": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "prosemirror-history": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.1.3.tgz", + "integrity": "sha512-zGDotijea+vnfnyyUGyiy1wfOQhf0B/b6zYcCouBV8yo6JmrE9X23M5q7Nf/nATywEZbgRLG70R4DmfSTC+gfg==", + "requires": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "rope-sequence": "^1.3.0" + } + }, + "prosemirror-inputrules": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.1.2.tgz", + "integrity": "sha512-Ja5Z3BWestlHYGvtSGqyvxMeB8QEuBjlHM8YnKtLGUXMDp965qdDV4goV8lJb17kIWHk7e7JNj6Catuoa3302g==", + "requires": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-keymap": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.1.4.tgz", + "integrity": "sha512-Al8cVUOnDFL4gcI5IDlG6xbZ0aOD/i3B17VT+1JbHWDguCgt/lBHVTHUBcKvvbSg6+q/W4Nj1Fu6bwZSca3xjg==", + "requires": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "prosemirror-model": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.11.0.tgz", + "integrity": "sha512-GqoAz/mIYjdv8gVYJ8mWFKpHoTxn/lXq4tXJ6bTVxs+rem2LzMYXrNVXfucGtfsgqsJlRIgng/ByG9j7Q8XDrg==", + "requires": { + "orderedmap": "^1.1.0" + } + }, + "prosemirror-schema-list": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.1.2.tgz", + "integrity": "sha512-dgM9PwtM4twa5WsgSYMB+J8bwjnR43DAD3L9MsR9rKm/nZR5Y85xcjB7gusVMSsbQ2NomMZF03RE6No6mTnclQ==", + "requires": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-state": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.3.3.tgz", + "integrity": "sha512-PLXh2VJsIgvlgSTH6I2Yg6vk1CzPDp21DFreVpQtDMY2S6WaMmrQgDTLRcsrD8X38v8Yc873H7+ogdGzyIPn+w==", + "requires": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-tables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.1.0.tgz", + "integrity": "sha512-E00+KSbDw65966GdiLBpqTNxIextw0RavlGmvdv/dyYbN9OTD0gzaoCU1S8MAbz4GLKmY9Y/g4nSiC1IL1ThQg==", + "requires": { + "prosemirror-keymap": "^1.1.2", + "prosemirror-model": "^1.8.1", + "prosemirror-state": "^1.3.1", + "prosemirror-transform": "^1.2.1", + "prosemirror-view": "^1.13.3" + } + }, + "prosemirror-transform": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.2.7.tgz", + "integrity": "sha512-/107Lo2zeDgXuJBxb8s/clNu0Z2W8Gv3MKmkuSS/68Mcr7LBaUnN/Hj2g+GUxEJ7MpExCzFs65GrsNo2K9rxUQ==", + "requires": { + "prosemirror-model": "^1.0.0" + } + }, + "prosemirror-view": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.15.2.tgz", + "integrity": "sha512-0wftmMDVD8VXj2HZgv6Rg//+tgJC0lpV9LkYlCiAkDLKsf4yW3Ozs5td1ZXqsyoqvX0ga/k5g2EyLbqOMmC1+w==", + "requires": { + "prosemirror-model": "^1.1.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, "protoduck": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", @@ -11220,6 +11525,11 @@ "fsevents": "~2.1.2" } }, + "rope-sequence": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.2.tgz", + "integrity": "sha512-ku6MFrwEVSVmXLvy3dYph3LAMNS0890K7fabn+0YIRQ2T96T9F4gkFf0vf0WW0JUraNWwGRtInEpH7yO4tbQZg==" + }, "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -13229,6 +13539,11 @@ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "dev": true }, + "w3c-keyname": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.4.tgz", + "integrity": "sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw==" + }, "watchpack": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", diff --git a/package.json b/package.json index 895266c..42e2032 100644 --- a/package.json +++ b/package.json @@ -23,21 +23,22 @@ "@fortawesome/angular-fontawesome": "^0.7.0", "@fortawesome/fontawesome-svg-core": "^1.2.28", "@fortawesome/free-solid-svg-icons": "^5.13.0", - "@progress/kendo-angular-buttons": "^5.0.0", + "@progress/kendo-angular-buttons": "^5.1.1", "@progress/kendo-angular-charts": "^4.2.1", - "@progress/kendo-angular-common": "^1.2.2", + "@progress/kendo-angular-common": "^1.2.1", "@progress/kendo-angular-dateinputs": "^4.0.0", - "@progress/kendo-angular-dialog": "^4.2.2", - "@progress/kendo-angular-dropdowns": "^4.0.0", + "@progress/kendo-angular-dialog": "^4.1.1", + "@progress/kendo-angular-dropdowns": "^4.2.4", + "@progress/kendo-angular-editor": "^1.2.5", "@progress/kendo-angular-excel-export": "^3.0.0", "@progress/kendo-angular-grid": "^4.8.0", "@progress/kendo-angular-icons": "^0.2.1", "@progress/kendo-angular-indicators": "^0.2.0", - "@progress/kendo-angular-inputs": "^6.0.0", + "@progress/kendo-angular-inputs": "^6.4.0", "@progress/kendo-angular-intl": "^2.0.0", - "@progress/kendo-angular-l10n": "^2.0.1", + "@progress/kendo-angular-l10n": "^2.0.0", "@progress/kendo-angular-label": "^2.3.3", - "@progress/kendo-angular-layout": "^5.0.4", + "@progress/kendo-angular-layout": "4.1.5 - 5", "@progress/kendo-angular-menu": "^2.0.4", "@progress/kendo-angular-navigation": "^0.2.0", "@progress/kendo-angular-notification": "^2.1.3", @@ -45,14 +46,15 @@ "@progress/kendo-angular-popup": "^3.0.0", "@progress/kendo-angular-progressbar": "^0.2.3", "@progress/kendo-data-query": "^1.0.0", - "@progress/kendo-drawing": "^1.1.2", + "@progress/kendo-drawing": "^1.5.12", "@progress/kendo-svg-icons": "^0.0.3", "@progress/kendo-theme-default": "latest", "bootstrap": "^3.4.1", "hammerjs": "^2.0.0", "rxjs": "^6.6.6", "tslib": "^2.0.0", - "zone.js": "~0.10.2" + "zone.js": "~0.10.2", + "@progress/kendo-angular-toolbar": "^3.0.1" }, "devDependencies": { "@angular-devkit/build-angular": "~0.1002.0", diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index c149349..4da49af 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -7,6 +7,7 @@ import { AuthGuard } from './service/auth-guard.service'; import { TransactionListComponent } from './transaction-list/transaction-list.component'; import { TransactionComponent } from './transaction/transaction.component'; import {ListAllLoansComponent} from './list-all-loans/list-all-loans.component'; +import {LoanAddNewComponent} from './loan-add-new/loan-add-new.component'; const routes: Routes = [ @@ -17,6 +18,7 @@ const routes: Routes = [ {path : 'transaction', component: TransactionComponent, canActivate: [AuthGuard]}, {path : 'transaction-list', component: TransactionListComponent, canActivate: [AuthGuard]}, {path : 'list-all-loans', component: ListAllLoansComponent, }, + {path : 'start-a-new-loan', component: LoanAddNewComponent, }, ]; @NgModule({ diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 74e335d..c9d447e 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -53,6 +53,13 @@ import { ChartTopBrokersComponent } from './chart-top-brokers/chart-top-brokers. import { ListAllLoansComponent } from './list-all-loans/list-all-loans.component'; import { TopBarComponent } from './top-bar/top-bar.component'; import {LoanSummaryService} from './service/loan_summary.service'; +import { LoanAddNewComponent } from './loan-add-new/loan-add-new.component'; +import { EditorModule } from '@progress/kendo-angular-editor'; +import { BasicinfoComponent } from './loan-edit/basicinfo/basicinfo.component'; +import { PeopleRewardComponent } from './loan-edit/people-reward/people-reward.component'; +import { TrailIncomeComponent } from './loan-edit/trail-income/trail-income.component'; +import { HintCardComponent } from './loan-edit/hint-card/hint-card.component'; + @@ -77,7 +84,12 @@ import {LoanSummaryService} from './service/loan_summary.service'; ChartRecentTenLoansComponent, ChartTopBrokersComponent, ListAllLoansComponent, - TopBarComponent + TopBarComponent, + LoanAddNewComponent, + BasicinfoComponent, + PeopleRewardComponent, + TrailIncomeComponent, + HintCardComponent ], imports: [ BrowserModule, @@ -105,7 +117,8 @@ import {LoanSummaryService} from './service/loan_summary.service'; ChartsModule, DateInputsModule, DropDownsModule, - ExcelExportModule + ExcelExportModule, + EditorModule ], providers: [ MenuService, diff --git a/src/app/list-all-loans/list-all-loans.component.html b/src/app/list-all-loans/list-all-loans.component.html index 17cbd68..f4b9946 100644 --- a/src/app/list-all-loans/list-all-loans.component.html +++ b/src/app/list-all-loans/list-all-loans.component.html @@ -5,14 +5,17 @@ [skip]="skip" [sortable]="true" [sort]="sort" + [filter]="filter" [pageable]="true" [height]="1000" [navigable]="true" + [filterable]="true" (dataStateChange)="dataStateChange($event)" + (filterChange)="filterChange($event)" class="fullheight_grid" > - - + +

{{dataItem.Index}}

@@ -24,6 +27,13 @@
{{ p }}
+ + + +
@@ -33,6 +43,13 @@
{{ p }}
+ + + +
@@ -42,11 +59,19 @@
{{ p }}
+ + + +
+ - + + + + + - + {{dataItem.Status}} + + + + - + + +
+ {{ dataItem.Settlement | date: 'yyyy-MM-dd' }} {{dataItem.Index}} +
+
+ + + +
- + {{ dataItem.Amount | currency }} + + + + - + {{ dataItem.Balance | currency }} + + + + - + {{ dataItem.OffsetBalance | currency }} + + + + - + {{ dataItem.Trail | currency }} + + + + + + - + + +
+ {{ dataItem.LastPayInDate | date: 'yyyy-MM-dd' }} +
+
- + {{ dataItem.PayOut | currency }} @@ -106,8 +192,11 @@ -
-
{{ dataItem.Item }} details should be here.
- -
+ + + +
{{dataItem.Id}}
+
+ + diff --git a/src/app/list-all-loans/list-all-loans.component.scss b/src/app/list-all-loans/list-all-loans.component.scss index f87900e..5a23354 100644 --- a/src/app/list-all-loans/list-all-loans.component.scss +++ b/src/app/list-all-loans/list-all-loans.component.scss @@ -25,6 +25,7 @@ line-height: 32px; box-shadow: inset 0 0 1px #999, inset 0 0 10px rgba(0,0,0,.2); margin-left: 5px; + margin-bottom: 10px; } .customer-name { diff --git a/src/app/list-all-loans/list-all-loans.component.ts b/src/app/list-all-loans/list-all-loans.component.ts index ab97aff..561669a 100644 --- a/src/app/list-all-loans/list-all-loans.component.ts +++ b/src/app/list-all-loans/list-all-loans.component.ts @@ -1,9 +1,7 @@ import {Component, OnInit, ViewChild, ViewEncapsulation} from '@angular/core'; import {DataStateChangeEvent, GridComponent, GridDataResult} from '@progress/kendo-angular-grid'; -import {Observable} from 'rxjs'; -import {SortDescriptor} from '@progress/kendo-data-query'; +import {CompositeFilterDescriptor, SortDescriptor, toODataString} from '@progress/kendo-data-query'; import {LoanSummaryService} from '../service/loan_summary.service'; -import {images} from '../transaction-list/images'; import {AuthService} from '../service/auth.service'; @Component({ @@ -14,10 +12,13 @@ import {AuthService} from '../service/auth.service'; }) export class ListAllLoansComponent implements OnInit { public view: LoanSummaryService; - public sort: Array = []; + public sort: Array = [{dir: 'desc', field: 'Settlement'}]; + public filter: CompositeFilterDescriptor; public pageSize = 10; public skip = 0; + + @ViewChild(GridComponent, { static: true }) public grid: GridComponent; @@ -31,29 +32,35 @@ export class ListAllLoansComponent implements OnInit { this.loadData(); } - public dataStateChange({ skip, take, sort }: DataStateChangeEvent): void { + public dataStateChange({ skip, take, sort, filter }: DataStateChangeEvent): void { // Save the current state of the Grid component this.skip = skip; this.pageSize = take; this.sort = sort; + this.filter = filter; // Reload the data with the new state this.loadData(); - // console.log(this.skip, this.pageSize, this.sort); - // Expand the first row initially - this.grid.expandRow(0); + //this.grid.expandRow(0); } + public filterChange(filter: CompositeFilterDescriptor): void { + this.filter = filter; + console.log(filter); + } private loadData(): void { - this.service.query({ skip: this.skip, take: this.pageSize, sort: this.sort }); + this.service.query({ skip: this.skip, take: this.pageSize, sort: this.sort, filter: this.filter}); } private photoURL(peopleId: any): string { - let url = this.auth.getUrl('avatar/') + peopleId; - console.log(url, peopleId); + const url = this.auth.getUrl('avatar/') + peopleId; return 'url("' + url + '")'; } + public allowEdit(): boolean { + return this.auth.allowEditLoan(); + } + } diff --git a/src/app/loan-add-new/loan-add-new.component.html b/src/app/loan-add-new/loan-add-new.component.html new file mode 100644 index 0000000..c295e63 --- /dev/null +++ b/src/app/loan-add-new/loan-add-new.component.html @@ -0,0 +1,57 @@ + +
+
+ + +
+ +
+
+ + +
+
+
+
+
+
+ + + + + +
+ Step {{ currentStep + 1 }} of 3 +
+ + + +
+
+
+
+
+
+ +
+
+
+
+
+
+ Proudly presented by Supercredit.com +
+
+
+
+
+ + + + + + diff --git a/src/app/loan-add-new/loan-add-new.component.scss b/src/app/loan-add-new/loan-add-new.component.scss new file mode 100644 index 0000000..7702e70 --- /dev/null +++ b/src/app/loan-add-new/loan-add-new.component.scss @@ -0,0 +1,5 @@ + + +div.vertical-spacer { + margin-bottom: 30px; +} diff --git a/src/app/loan-add-new/loan-add-new.component.spec.ts b/src/app/loan-add-new/loan-add-new.component.spec.ts new file mode 100644 index 0000000..a594711 --- /dev/null +++ b/src/app/loan-add-new/loan-add-new.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LoanAddNewComponent } from './loan-add-new.component'; + +describe('LoanAddNewComponent', () => { + let component: LoanAddNewComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ LoanAddNewComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(LoanAddNewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/loan-add-new/loan-add-new.component.ts b/src/app/loan-add-new/loan-add-new.component.ts new file mode 100644 index 0000000..8f678ad --- /dev/null +++ b/src/app/loan-add-new/loan-add-new.component.ts @@ -0,0 +1,82 @@ +import {Component, OnInit, ViewChild} from '@angular/core'; +import {FormControl, FormGroup, Validators} from '@angular/forms'; +import {StepperComponent} from '@progress/kendo-angular-layout'; + +@Component({ + selector: 'app-loan-add-new', + templateUrl: './loan-add-new.component.html', + styleUrls: ['./loan-add-new.component.scss'] +}) +export class LoanAddNewComponent implements OnInit { + public submitted: boolean ; + public currentStep = 0; + @ViewChild('stepper', { static: true }) + public stepper: StepperComponent; + + + + public steps = [ + { label: 'Basic Info', isValid: true }, + { label: 'People Reward', isValid: false }, + { label: 'Trail Income', isValid: true }, + { label: 'Payable', isValid: true, optional: true } + ]; + + + + public registerForm: FormGroup = new FormGroup({ + transID: new FormControl(), + submissionDate: new FormControl(new Date(2020, 0, 10)), + status: new FormControl(), + lender: new FormControl('SuperCredit', Validators.required), + amount: new FormControl(100, [Validators.required , Validators.min(100), Validators.max(1000000000)]), + settlementDate: new FormControl(new Date(2020, 0, 9)), + description: new FormControl( '', Validators.maxLength(2000)), + }); + + + + public form = new FormGroup({ + basicInfo: this.registerForm, + peopleReward: this.registerForm, + trailIncome :this.registerForm, + payable: this.registerForm + }); + + constructor() { } + + public get currentGroup(): FormGroup { + return this.getGroupAt(this.currentStep); + } + + private getGroupAt(index: number): FormGroup { + const groups = Object.keys(this.form.controls).map((groupName) => this.form.get(groupName)) as FormGroup[]; + return groups[index]; + } + + public next(): void { + this.currentStep += 1; + } + + public prev(): void { + this.currentStep -= 1; + } + + public submit(): void { + this.submitted = true; + + if (!this.form.valid) { + this.form.markAllAsTouched(); + this.stepper.validateSteps(); + } + + console.log('Submitted data', this.form.value); + } + + + + ngOnInit(): void { + } + + +} diff --git a/src/app/loan-edit/dist/loan-edit.component.js b/src/app/loan-edit/dist/loan-edit.component.js index 25512ba..dead341 100644 --- a/src/app/loan-edit/dist/loan-edit.component.js +++ b/src/app/loan-edit/dist/loan-edit.component.js @@ -13,7 +13,7 @@ var LoanEditComponent = /** @class */ (function () { //form access //@ViewChild('birthDate', {static: true}) birthDate: LoanEditComponent; function LoanEditComponent() { - //popup + //popup this.dialogOpened = false; this.windowOpened = false; //test @@ -31,7 +31,7 @@ var LoanEditComponent = /** @class */ (function () { limit: new forms_1.FormControl(), settlementDate: new forms_1.FormControl(new Date(2020, 0, 9)) }); - this.listClientNames = [ + this.listLoanStatus = [ { text: 'John', value: 1 }, { text: 'Steven', value: 2 }, { text: 'William', value: 3 } diff --git a/src/app/loan-edit/hint-card/hint-card.component.html b/src/app/loan-edit/hint-card/hint-card.component.html new file mode 100644 index 0000000..1ceb0a9 --- /dev/null +++ b/src/app/loan-edit/hint-card/hint-card.component.html @@ -0,0 +1,44 @@ + + + +
+

bg_tourism

+

Bulgaria, Europe

+
+
+ cover_img + +

Black Sea, Bulgaria

+
+

+ The Black Sea is bordered by Ukraine, Romania, Bulgaria, + Turkey, Georgia, and Russia. It has a positive water + balance; that is, a net outflow of water 300 km3 per year + through the Bosphorus and the Dardanelles into the Aegean + Sea. +

+
+ + +
+ +
+ +
+ + Created By @alex + March 4, 2020 + +
diff --git a/src/app/loan-edit/hint-card/hint-card.component.scss b/src/app/loan-edit/hint-card/hint-card.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/loan-edit/hint-card/hint-card.component.spec.ts b/src/app/loan-edit/hint-card/hint-card.component.spec.ts new file mode 100644 index 0000000..b22b951 --- /dev/null +++ b/src/app/loan-edit/hint-card/hint-card.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HintCardComponent } from './hint-card.component'; + +describe('HintCardComponent', () => { + let component: HintCardComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ HintCardComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(HintCardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/loan-edit/hint-card/hint-card.component.ts b/src/app/loan-edit/hint-card/hint-card.component.ts new file mode 100644 index 0000000..4f1558d --- /dev/null +++ b/src/app/loan-edit/hint-card/hint-card.component.ts @@ -0,0 +1,28 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-loan-edit-hint-card', + templateUrl: './hint-card.component.html', + styleUrls: ['./hint-card.component.scss'] +}) +export class HintCardComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + // tslint:disable-next-line:max-line-length + public thumbnailSrc = 'https://www.telerik.com/kendo-angular-ui-develop/components/layout/card/assets/rila.jpg'; + // tslint:disable-next-line:max-line-length + public cover = 'https://www.telerik.com/kendo-angular-ui-develop/components/layout/card/assets/black_sea.jpg'; + + public liked = false; + + public toggleLike(): void { + this.liked = !this.liked; + } + + public heartIcon(): string { + return this.liked ? 'k-icon k-i-heart' : 'k-icon k-i-heart-outline'; + } +} diff --git a/src/app/loan-edit/loan-edit.component.scss b/src/app/loan-edit/loan-edit.component.scss index 46f7c18..8282965 100644 --- a/src/app/loan-edit/loan-edit.component.scss +++ b/src/app/loan-edit/loan-edit.component.scss @@ -1 +1,3 @@ -.pane-content { padding: 0 10px; } \ No newline at end of file +.pane-content { padding: 0 10px; } + + diff --git a/src/app/main-menu-items.ts b/src/app/main-menu-items.ts index 77f9cc4..328a810 100644 --- a/src/app/main-menu-items.ts +++ b/src/app/main-menu-items.ts @@ -19,6 +19,7 @@ export const mainMenuItems: any[] = [ icon: 'dollar', items: [ { text: 'Add+', icon: 'plus', popup: "loanEdit" }, + { text: 'Start New Loan', icon: 'plus', url: "./#start-a-new-loan" }, { text: 'Edit', icon: 'plus', url: "./#transaction" }, { text: 'List All old', icon: 'table' ,url: './#transaction-list' }, { text: 'List All New', icon: 'table' ,url: './#list-all-loans' }, diff --git a/src/app/service/auth.service.ts b/src/app/service/auth.service.ts index 617c856..3d86370 100644 --- a/src/app/service/auth.service.ts +++ b/src/app/service/auth.service.ts @@ -11,7 +11,7 @@ export class AuthService { public apiUrl = 'https://svr2021.lawipac.com:8080/api/v1/'; public apiWsUrl = 'wss://svr2021.lawipac.com:8080/api/v1/ws'; - public loggedIn = new apiV1LoginResponse(false, '','',0 ); + public loggedIn = new apiV1LoginResponse(false, '', '',0 ); loginSuccess = new EventEmitter (); constructor( private http: HttpClient , @@ -33,7 +33,7 @@ export class AuthService { sfm.sessionExpire ); this.loginSuccess.emit(this.loggedIn); - console.log ( 'auto login emit events', this.loggedIn); + //console.log ( 'auto login emit events', this.loggedIn); } // tslint:disable-next-line:typedef @@ -41,6 +41,10 @@ export class AuthService { return this.loggedIn.login; } + allowEditLoan(): boolean{ + return true; + } + // tslint:disable-next-line:typedef login(email: string, password: string) { diff --git a/src/app/service/loan_summary.service.ts b/src/app/service/loan_summary.service.ts index e68f0c2..bb6a00f 100644 --- a/src/app/service/loan_summary.service.ts +++ b/src/app/service/loan_summary.service.ts @@ -26,20 +26,33 @@ export abstract class LoanQueryService extends BehaviorSubject { } protected fetch(tableName: string, state: any): Observable { - const queryStr = `${toODataString(state)}&$count=true`; + // const queryStr = `${toODataString(state)}&$count=true`; this.loading = true; return this.http - .get(`${this.BASE_URL}${tableName}?${queryStr}`) + .post(`${this.BASE_URL}${tableName}`, state) .pipe( map(response => { - console.log( response.data[0]['Settlement']); - console.log( response.data[0]['LastPayInDate']); + response.data.forEach( (value, index) =>{ + response.data[index].Settlement = this.convertToDateTimeObject(value.Settlement); + response.data[index].LastPayInDate = this.convertToDateTimeObject(value.LastPayInDate); + // console.log(index, response.data[index].Settlement , typeof response.data[index].Settlement ); + // console.log(index, response.data[index].LastPayInDate , typeof response.data[index].LastPayInDate ); + }); + console.log(response); return response; }), tap(() => this.loading = false) ); } + + public convertToDateTimeObject(str: string): Date{ + if (str === '0001-01-01T00:00:00Z' || str === ''){ + return null; //new Date('1900-12-31T13:00:00.000Z'); + }else{ + return new Date(str); + } + } } @Injectable()