From eded98a6cfbe00b5ddfd42dd7bccaeb54d07763a Mon Sep 17 00:00:00 2001 From: Park Byung Eun Date: Mon, 10 Aug 2020 14:05:32 +0900 Subject: [PATCH] sync --- package-lock.json | 6 +- package.json | 91 +-- src/app/app-provider.module.ts | 8 +- src/app/app-routing.module.ts | 13 +- src/app/app.component.ts | 84 ++- src/app/app.module.ts | 12 + .../dialogs/account/account.dialog.module.ts | 9 +- .../components/settings.dialog.component.html | 182 ++---- .../components/settings.dialog.component.scss | 8 +- .../components/settings.dialog.component.ts | 102 +++- .../default-dialog.layout.component.html | 2 +- .../default-dialog.layout.component.scss | 5 + .../components/default.layout.component.html | 53 +- .../components/default.layout.component.scss | 67 ++- .../components/default.layout.component.ts | 221 ++++--- .../components/no-navi.layout.component.html | 2 +- .../layouts/components/top-bar.component.html | 7 +- .../layouts/components/top-bar.component.ts | 12 +- src/app/layouts/layouts.module.ts | 8 +- src/app/models/group-open-info.ts | 3 + src/app/models/login-session.ts | 2 +- src/app/models/settings.ts | 8 +- src/app/models/user-store.ts | 2 +- .../components/login.page.component.scss | 38 +- .../components/logout.page.component.html | 23 +- .../components/logout.page.component.scss | 53 ++ .../pages/call/call-routing.page.module.ts | 9 +- src/app/pages/call/call.page.module.ts | 52 +- .../call-history.page.component.html | 58 ++ .../call-history.page.component.scss | 33 ++ .../call-history.page.component.spec.ts | 32 + .../components/call-history.page.component.ts | 129 ++++ .../call/components/index.page.component.html | 40 +- .../call/components/index.page.component.scss | 33 ++ src/app/pages/call/components/index.ts | 7 +- .../components/sidenav.page.component.html | 22 +- .../components/sidenav.page.component.scss | 29 + .../call/components/sidenav.page.component.ts | 106 +++- src/app/pages/call/types/params.type.ts | 3 + src/app/pages/chat/chat.page.module.ts | 12 +- .../components/chat-room.page.component.html | 15 +- .../components/chat-room.page.component.ts | 70 ++- .../chat/components/index.page.component.scss | 12 + .../components/sidenav.page.component.scss | 6 +- .../chat/components/sidenav.page.component.ts | 51 +- .../components/index.page.component.html | 3 +- .../components/index.page.component.scss | 9 +- .../group/components/index.page.component.ts | 149 +++-- .../components/sidenav.page.component.html | 2 + .../components/sidenav.page.component.ts | 77 ++- src/app/pages/group/group.page.module.ts | 3 +- .../components/index.page.component.scss | 2 +- .../components/index.page.component.html | 1 + .../components/index.page.component.ts | 5 +- .../components/sidenav.page.component.html | 1 + .../components/sidenav.page.component.ts | 20 +- .../organization/organization.page.module.ts | 5 +- src/app/resolvers/app-session.resolver.ts | 8 +- .../account/account.section.module.ts | 3 +- src/app/sections/call/call.section.module.ts | 63 ++ src/app/sections/call/components/index.ts | 4 + .../components/info.section.component.html | 28 + .../components/info.section.component.scss | 0 .../components/info.section.component.spec.ts | 32 + .../call/components/info.section.component.ts | 106 ++++ .../components/list.section.component.html | 132 +++++ .../components/list.section.component.scss | 4 + .../components/list.section.component.spec.ts | 32 + .../call/components/list.section.component.ts | 114 ++++ .../dialogs/dialpad.dialog.component.html | 14 + .../dialogs/dialpad.dialog.component.scss | 75 +++ .../dialogs/dialpad.dialog.component.spec.ts | 26 + .../call/dialogs/dialpad.dialog.component.ts | 86 +++ src/app/sections/call/dialogs/index.ts | 3 + src/app/sections/chat/chat.section.module.ts | 21 +- .../components/form.section.component.html | 46 +- .../components/form.section.component.scss | 12 +- .../chat/components/form.section.component.ts | 238 +++++--- .../components/info.section.component.html | 12 +- .../chat/components/info.section.component.ts | 63 +- .../components/list.section.component.scss | 2 +- .../chat/components/list.section.component.ts | 20 +- .../components/message.section.component.html | 123 +++- .../components/message.section.component.scss | 91 +-- .../components/message.section.component.ts | 560 ++++++++++++++---- .../components/search.section.component.html | 10 +- .../components/search.section.component.ts | 18 +- .../chat/dialogs/create.dialog.component.html | 33 +- .../chat/dialogs/create.dialog.component.scss | 6 +- .../chat/dialogs/create.dialog.component.ts | 160 ++--- .../dialogs/file-viewer.dialog.component.ts | 67 ++- .../dialogs/forward.dialog.component.html | 21 +- .../dialogs/forward.dialog.component.scss | 8 +- .../chat/dialogs/forward.dialog.component.ts | 230 ++++--- .../chat/dialogs/setting.dialog.component.ts | 9 +- .../dialogs/text-detail.dialog.component.html | 4 +- .../dialogs/text-detail.dialog.component.ts | 49 +- .../trans-detail.dialog.component.html | 2 +- .../dialogs/trans-detail.dialog.component.ts | 29 +- .../directives/file-upload-for.directive.ts | 179 ++++++ src/app/sections/chat/directives/index.ts | 3 + .../drawers/add-group.drawer.component.html | 2 +- .../drawers/add-group.drawer.component.ts | 22 +- .../drawers/add-users.drawer.component.ts | 96 +-- .../drawers/attach-data.drawer.component.html | 8 +- .../drawers/attach-data.drawer.component.ts | 143 +++-- .../chat/drawers/setting.drawer.component.ts | 23 +- .../chat/drawers/users.drawer.component.html | 3 +- .../chat/drawers/users.drawer.component.ts | 46 +- .../components/info.section.component.html | 1 + .../components/info.section.component.scss | 2 +- .../components/info.section.component.ts | 8 +- .../components/list.section.component.html | 8 +- .../components/list.section.component.ts | 305 +++++++--- .../components/profile.section.component.ts | 12 +- .../select-group.section.component.html | 11 +- .../select-group.section.component.scss | 6 + .../select-group.section.component.ts | 61 +- .../select-user.section.component.html | 4 +- .../select-user.section.component.ts | 17 +- .../dialogs/add-user.dialog.component.html | 124 ++++ .../dialogs/add-user.dialog.component.scss | 75 +++ .../dialogs/add-user.dialog.component.spec.ts | 26 + .../dialogs/add-user.dialog.component.ts | 273 +++++++++ .../dialogs/create.dialog.component.html | 14 +- .../group/dialogs/create.dialog.component.ts | 179 ++---- .../edit-inline-input.dialog.component.html | 5 +- .../edit-inline-input.dialog.component.scss | 10 +- .../edit-inline-input.dialog.component.ts | 16 +- .../dialogs/edit-user.dialog.component.html | 6 +- .../dialogs/edit-user.dialog.component.ts | 116 ++-- src/app/sections/group/dialogs/index.ts | 4 +- .../dialogs/manage.dialog.component.html | 4 +- .../group/dialogs/manage.dialog.component.ts | 122 ++-- .../sections/group/group.section.module.ts | 8 +- .../components/member-list.component.html | 7 +- .../components/member-list.component.scss | 4 +- .../components/member-list.component.ts | 119 ++-- .../dialogs/add-group.dialog.component.html | 2 +- .../dialogs/add-group.dialog.component.scss | 3 + .../dialogs/add-group.dialog.component.ts | 21 +- .../dialogs/profile.dialog.component.html | 5 +- .../dialogs/profile.dialog.component.scss | 1 + .../dialogs/profile.dialog.component.ts | 134 ++++- .../organization.section.module.ts | 4 +- src/app/services/app-account.service.ts | 2 +- .../services/app-authentication.service.ts | 80 ++- src/app/services/app-call.service.ts | 86 +++ src/app/services/app-chat.service.ts | 246 +++++--- src/app/services/app-file.service.ts | 71 ++- src/app/services/app-group.service.ts | 491 +++++++++------ src/app/services/app-native.service.ts | 72 ++- src/app/services/app-notification.service.ts | 112 ++-- src/app/services/app-organization.service.ts | 50 ++ src/app/services/app-ui.service.ts | 108 ++++ src/app/services/app.service.ts | 68 +-- src/app/store/app/actions.ts | 11 + src/app/store/app/effects.ts | 52 +- src/app/store/app/reducers.ts | 18 +- src/app/store/app/state.ts | 18 +- src/app/store/authentication/effects.ts | 2 +- src/app/store/room/actions.ts | 5 + src/app/store/room/effects.ts | 37 +- src/app/store/room/reducers.ts | 11 +- src/app/store/room/state.ts | 15 +- src/app/store/state.ts | 3 + src/app/types/app-key.type.ts | 3 +- src/app/types/index.ts | 1 + src/app/types/navigation.type.ts | 8 + src/app/types/user.type.ts | 10 +- src/app/types/window-size-mode.type.ts | 5 + .../authentication/authentication.module.ts | 10 +- .../components/change-password.component.html | 103 ++++ .../components/change-password.component.scss | 140 +++++ .../change-password.component.spec.ts | 32 + .../components/change-password.component.ts | 24 + .../ucap/authentication/components/index.ts | 3 +- .../components/login.component.scss | 4 +- .../components/login.component.ts | 5 +- src/app/ucap/call/call.module.ts | 82 +++ .../history-expansion.component.html | 137 +++++ .../history-expansion.component.scss | 42 ++ .../history-expansion.component.spec.ts | 32 + .../components/history-expansion.component.ts | 122 ++++ .../history-list-item-01.component.html | 41 ++ .../history-list-item-01.component.scss | 19 + .../history-list-item-01.component.spec.ts | 26 + .../history-list-item-01.component.ts | 109 ++++ src/app/ucap/call/components/index.ts | 9 + .../call/components/time-line.component.html | 14 + .../call/components/time-line.component.scss | 1 + .../components/time-line.component.spec.ts | 32 + .../call/components/time-line.component.ts | 56 ++ src/app/ucap/chat/chat.module.ts | 10 +- .../attach-downcheck.component.html | 2 +- .../components/attach-downcheck.component.ts | 28 +- .../attach-file-list.component.html | 2 +- .../components/attach-file-list.component.ts | 33 +- .../attach-image-list.component.html | 2 +- .../components/attach-image-list.component.ts | 19 +- .../email-send.selector.component.ts | 6 +- .../file-upload.selector.component.scss | 4 +- .../file-upload.selector.component.ts | 8 +- .../components/message-box.component.html | 24 +- .../chat/components/message-box.component.ts | 249 ++++---- .../components/recent-message.component.html | 11 +- .../components/recent-message.component.ts | 22 +- .../components/room-expansion.component.ts | 23 +- .../room-list-item-01.component.html | 3 +- .../components/room-list-item-01.component.ts | 17 +- .../chat/components/room-list.component.ts | 19 +- .../components/room-setting.component.html | 5 +- .../chat/components/room-setting.component.ts | 17 +- .../components/sticker.selector.component.ts | 15 +- .../translation.selector.component.scss | 2 +- .../translation.selector.component.ts | 22 +- .../components/expansion-01.component.html | 86 ++- .../components/expansion-01.component.ts | 537 +++++++++-------- .../components/expansion-02.component.html | 5 +- .../components/expansion-02.component.ts | 89 +-- src/app/ucap/group/components/index.ts | 2 + .../components/name-input.component.scss | 4 +- .../group/components/name-input.component.ts | 20 +- .../profile-image-01.component.html | 1 + .../components/profile-image-01.component.ts | 31 +- .../components/profile-list-01.component.html | 2 +- .../components/profile-list-01.component.ts | 12 +- .../profile-list-item-02.component.html | 79 +-- .../profile-list-item-02.component.ts | 99 ++-- .../profile-list-item-03.component.html | 48 +- .../profile-list-item-03.component.scss | 8 - .../profile-list-item-03.component.ts | 57 +- .../profile-list-item-04.component.html | 56 ++ .../profile-list-item-04.component.scss | 19 + .../profile-list-item-04.component.spec.ts | 26 + .../profile-list-item-04.component.ts | 151 +++++ .../components/profile-list.component.html | 18 +- .../components/profile-list.component.ts | 68 ++- src/app/ucap/group/group.module.ts | 4 +- .../components/profile-01.component.html | 7 +- .../components/profile-01.component.scss | 8 +- .../components/profile-01.component.ts | 191 +++--- .../components/profile-image-01.component.ts | 24 +- .../components/profile-list.component.html | 59 +- .../components/profile-list.component.ts | 72 ++- .../components/profile-menu-01.component.html | 4 +- .../components/profile-menu-01.component.ts | 14 +- .../profile-navigation-list.component.html | 32 +- .../profile-navigation-list.component.scss | 6 +- .../profile-navigation-list.component.ts | 46 +- .../search-for-tenant.component.html | 9 +- .../components/search-for-tenant.component.ts | 83 ++- .../organization/components/tree.component.ts | 50 +- .../ucap/organization/organization.module.ts | 15 +- .../materialdesignicons/scss/_variables.scss | 2 +- src/assets/i18n/en/call.json | 17 + src/assets/i18n/en/chat.json | 15 + src/assets/i18n/en/common.json | 4 +- src/assets/i18n/en/group.json | 14 +- src/assets/i18n/en/locale.json | 1 + src/assets/i18n/en/organization.json | 3 +- src/assets/i18n/ko/call.json | 17 + src/assets/i18n/ko/chat.json | 15 + src/assets/i18n/ko/common.json | 4 +- src/assets/i18n/ko/group.json | 14 +- src/assets/i18n/ko/locale.json | 1 + src/assets/i18n/ko/organization.json | 3 +- src/assets/images/ico/img_logout.png | Bin 0 -> 56667 bytes src/assets/images/ico/img_logout_text.svg | 14 + src/assets/scss/_fonts.scss | 60 +- src/assets/scss/global/_default.scss | 71 ++- src/assets/scss/global/_material-ui.scss | 19 +- src/assets/scss/global/ucap/_call.scss | 39 ++ src/assets/scss/global/ucap/_chat.scss | 50 +- src/assets/scss/global/ucap/_dialog.scss | 91 ++- src/assets/scss/global/ucap/_group.scss | 7 - .../scss/global/ucap/_organization.scss | 50 +- .../scss/mixins/_ucap-organization.scss | 3 +- src/environments/environment.hmr.ts | 33 +- src/environments/environment.prod.ts | 35 +- src/environments/environment.ts | 35 +- src/environments/environment.type.ts | 36 +- src/favicon.ico | Bin 948 -> 109473 bytes src/index.html | 14 +- 284 files changed, 9356 insertions(+), 3347 deletions(-) create mode 100644 src/app/pages/call/components/call-history.page.component.html create mode 100644 src/app/pages/call/components/call-history.page.component.scss create mode 100644 src/app/pages/call/components/call-history.page.component.spec.ts create mode 100644 src/app/pages/call/components/call-history.page.component.ts create mode 100644 src/app/pages/call/types/params.type.ts create mode 100644 src/app/sections/call/call.section.module.ts create mode 100644 src/app/sections/call/components/index.ts create mode 100644 src/app/sections/call/components/info.section.component.html create mode 100644 src/app/sections/call/components/info.section.component.scss create mode 100644 src/app/sections/call/components/info.section.component.spec.ts create mode 100644 src/app/sections/call/components/info.section.component.ts create mode 100644 src/app/sections/call/components/list.section.component.html create mode 100644 src/app/sections/call/components/list.section.component.scss create mode 100644 src/app/sections/call/components/list.section.component.spec.ts create mode 100644 src/app/sections/call/components/list.section.component.ts create mode 100644 src/app/sections/call/dialogs/dialpad.dialog.component.html create mode 100644 src/app/sections/call/dialogs/dialpad.dialog.component.scss create mode 100644 src/app/sections/call/dialogs/dialpad.dialog.component.spec.ts create mode 100644 src/app/sections/call/dialogs/dialpad.dialog.component.ts create mode 100644 src/app/sections/call/dialogs/index.ts create mode 100644 src/app/sections/chat/directives/file-upload-for.directive.ts create mode 100644 src/app/sections/chat/directives/index.ts create mode 100644 src/app/sections/group/dialogs/add-user.dialog.component.html create mode 100644 src/app/sections/group/dialogs/add-user.dialog.component.scss create mode 100644 src/app/sections/group/dialogs/add-user.dialog.component.spec.ts create mode 100644 src/app/sections/group/dialogs/add-user.dialog.component.ts create mode 100644 src/app/services/app-call.service.ts create mode 100644 src/app/services/app-organization.service.ts create mode 100644 src/app/services/app-ui.service.ts create mode 100644 src/app/types/navigation.type.ts create mode 100644 src/app/types/window-size-mode.type.ts create mode 100644 src/app/ucap/authentication/components/change-password.component.html create mode 100644 src/app/ucap/authentication/components/change-password.component.scss create mode 100644 src/app/ucap/authentication/components/change-password.component.spec.ts create mode 100644 src/app/ucap/authentication/components/change-password.component.ts create mode 100644 src/app/ucap/call/call.module.ts create mode 100644 src/app/ucap/call/components/history-expansion.component.html create mode 100644 src/app/ucap/call/components/history-expansion.component.scss create mode 100644 src/app/ucap/call/components/history-expansion.component.spec.ts create mode 100644 src/app/ucap/call/components/history-expansion.component.ts create mode 100644 src/app/ucap/call/components/history-list-item-01.component.html create mode 100644 src/app/ucap/call/components/history-list-item-01.component.scss create mode 100644 src/app/ucap/call/components/history-list-item-01.component.spec.ts create mode 100644 src/app/ucap/call/components/history-list-item-01.component.ts create mode 100644 src/app/ucap/call/components/index.ts create mode 100644 src/app/ucap/call/components/time-line.component.html create mode 100644 src/app/ucap/call/components/time-line.component.scss create mode 100644 src/app/ucap/call/components/time-line.component.spec.ts create mode 100644 src/app/ucap/call/components/time-line.component.ts create mode 100644 src/app/ucap/group/components/profile-list-item-04.component.html create mode 100644 src/app/ucap/group/components/profile-list-item-04.component.scss create mode 100644 src/app/ucap/group/components/profile-list-item-04.component.spec.ts create mode 100644 src/app/ucap/group/components/profile-list-item-04.component.ts create mode 100644 src/assets/images/ico/img_logout.png create mode 100644 src/assets/images/ico/img_logout_text.svg diff --git a/package-lock.json b/package-lock.json index 9d4c475..9315ebd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2022,9 +2022,9 @@ "integrity": "sha512-GA9MDcwCvtxI0gOysgRm7DDHIfKfhCkDSa69QBFIEgWbob2OdGYKvxfymr6lGdl+vY7AqjlJXvSFkA1b0rTy1A==" }, "@ucap/ng-core": { - "version": "0.0.7", - "resolved": "https://nexus.loafle.net/repository/npm-all/@ucap/ng-core/-/ng-core-0.0.7.tgz", - "integrity": "sha512-ZC6LE3A0bg+REGbzDI/i1ad7mGpKsw6X0UtZ+Q8TUthHNv0DfWEieHFCgfYTRY1u022XyQ4ViOsrq9KunU1vfw==" + "version": "0.0.8", + "resolved": "https://nexus.loafle.net/repository/npm-all/@ucap/ng-core/-/ng-core-0.0.8.tgz", + "integrity": "sha512-VMvitw2PnaGo4tsdD9EJcvzVi5Kt+xjzA6z09uLavPpAWViFXTx7P76N1nt7XMgACRAMOTMyNocWTbFs6oKsqA==" }, "@ucap/ng-i18n": { "version": "0.0.6", diff --git a/package.json b/package.json index c7e5b4c..6eeddc3 100644 --- a/package.json +++ b/package.json @@ -31,24 +31,39 @@ "@ngrx/entity": "^9.2.0", "@ngrx/router-store": "^9.2.0", "@ngrx/store": "^9.2.0", - "@ucap/api": "~0.0.4", - "@ucap/api-common": "~0.0.11", - "@ucap/api-external": "~0.0.5", - "@ucap/api-message": "~0.0.3", - "@ucap/api-prompt": "~0.0.3", - "@ucap/api-public": "~0.0.4", - "@ucap/core": "~0.0.14", - "@ucap/logger": "~0.0.13", - "@ucap/native": "~0.0.19", + "@ucap/api": "~0.0.5", + "@ucap/api-common": "~0.0.12", + "@ucap/api-contact": "~0.0.5", + "@ucap/api-external": "~0.0.8", + "@ucap/api-message": "~0.0.7", + "@ucap/api-prompt": "~0.0.6", + "@ucap/api-public": "~0.0.6", + "@ucap/api-webex": "~0.0.2", + "@ucap/core": "~0.0.15", + "@ucap/domain-authentication": "~0.0.4", + "@ucap/domain-authorization": "~0.0.3", + "@ucap/domain-call": "~0.0.4", + "@ucap/domain-chat": "~0.0.3", + "@ucap/domain-common": "~0.0.1", + "@ucap/domain-group": "~0.0.2", + "@ucap/domain-message": "~0.0.1", + "@ucap/domain-organization": "~0.0.1", + "@ucap/domain-status": "~0.0.1", + "@ucap/electron-native": "~0.0.19", + "@ucap/i18n": "~0.0.2", + "@ucap/logger": "~0.0.14", + "@ucap/native": "~0.0.27", "@ucap/ng-api-common": "~0.0.1", "@ucap/ng-api-external": "~0.0.1", "@ucap/ng-api-message": "~0.0.1", "@ucap/ng-api-prompt": "~0.0.1", "@ucap/ng-api-public": "~0.0.1", - "@ucap/ng-core": "~0.0.7", + "@ucap/ng-api-webex": "~0.0.1", + "@ucap/ng-api-contact": "~0.0.2", + "@ucap/ng-core": "~0.0.9", "@ucap/ng-logger": "~0.0.2", - "@ucap/ng-i18n": "~0.0.6", - "@ucap/ng-native": "~0.0.5", + "@ucap/ng-i18n": "~0.0.8", + "@ucap/ng-native": "~0.0.12", "@ucap/ng-pi": "~0.0.1", "@ucap/ng-protocol": "~0.0.3", "@ucap/ng-protocol-authentication": "~0.0.3", @@ -66,35 +81,37 @@ "@ucap/ng-protocol-status": "~0.0.3", "@ucap/ng-protocol-sync": "~0.0.3", "@ucap/ng-protocol-umg": "~0.0.3", - "@ucap/ng-store-authentication": "~0.0.14", - "@ucap/ng-store-chat": "~0.0.66", - "@ucap/ng-store-group": "~0.0.22", - "@ucap/ng-store-organization": "~0.0.20", + "@ucap/ng-store-authentication": "~0.0.17", + "@ucap/ng-store-chat": "~0.0.74", + "@ucap/ng-store-group": "~0.0.25", + "@ucap/ng-store-organization": "~0.0.23", + "@ucap/ng-store-call": "~0.0.7", "@ucap/ng-web-socket": "~0.0.2", "@ucap/ng-web-storage": "~0.0.3", - "@ucap/ng-ui": "0.0.97", - "@ucap/ng-ui-organization": "~0.0.202", - "@ucap/ng-ui-authentication": "~0.0.29", - "@ucap/ng-ui-group": "~0.0.78", - "@ucap/ng-ui-chat": "~0.0.72", + "@ucap/ng-ui": "~0.0.108", + "@ucap/ng-ui-organization": "~0.0.222", + "@ucap/ng-ui-authentication": "~0.0.32", + "@ucap/ng-ui-group": "~0.0.87", + "@ucap/ng-ui-chat": "~0.0.80", + "@ucap/ng-ui-call": "~0.0.15", "@ucap/ng-ui-material": "~0.0.4", "@ucap/ng-ui-skin-default": "~0.0.1", - "@ucap/pi": "~0.0.8", - "@ucap/protocol": "~0.0.17", - "@ucap/protocol-authentication": "~0.0.5", - "@ucap/protocol-buddy": "~0.0.5", - "@ucap/protocol-event": "~0.0.6", - "@ucap/protocol-file": "~0.0.6", - "@ucap/protocol-group": "~0.0.5", - "@ucap/protocol-info": "~0.0.9", - "@ucap/protocol-inner": "~0.0.4", - "@ucap/protocol-option": "~0.0.7", - "@ucap/protocol-ping": "~0.0.6", - "@ucap/protocol-query": "~0.0.5", - "@ucap/protocol-room": "~0.0.7", - "@ucap/protocol-service": "~0.0.4", - "@ucap/protocol-status": "~0.0.5", - "@ucap/protocol-sync": "~0.0.6", + "@ucap/pi": "~0.0.9", + "@ucap/protocol": "~0.0.20", + "@ucap/protocol-authentication": "~0.0.7", + "@ucap/protocol-buddy": "~0.0.6", + "@ucap/protocol-event": "~0.0.11", + "@ucap/protocol-file": "~0.0.7", + "@ucap/protocol-group": "~0.0.6", + "@ucap/protocol-info": "~0.0.10", + "@ucap/protocol-inner": "~0.0.5", + "@ucap/protocol-option": "~0.0.9", + "@ucap/protocol-ping": "~0.0.7", + "@ucap/protocol-query": "~0.0.8", + "@ucap/protocol-room": "~0.0.9", + "@ucap/protocol-service": "~0.0.5", + "@ucap/protocol-status": "~0.0.6", + "@ucap/protocol-sync": "~0.0.8", "@ucap/protocol-umg": "~0.0.5", "@ucap/ui-scss": "~0.0.5", "@ucap/web-socket": "~0.0.10", diff --git a/src/app/app-provider.module.ts b/src/app/app-provider.module.ts index 625d68f..212ad7b 100644 --- a/src/app/app-provider.module.ts +++ b/src/app/app-provider.module.ts @@ -15,10 +15,13 @@ import { AppAuthenticationService } from './services/app-authentication.service' import { AppNotificationService } from './services/app-notification.service'; import { AppNativeService } from './services/app-native.service'; import { AppService } from './services/app.service'; +import { AppCallService } from './services/app-call.service'; import { AppChatService } from './services/app-chat.service'; import { AppFileService } from './services/app-file.service'; import { AppGroupService } from './services/app-group.service'; import { AppAccountService } from './services/app-account.service'; +import { AppUiService } from './services/app-ui.service'; +import { AppOrganizationService } from './services/app-organization.service'; const GUARDS = [AppAuthenticationGuard]; const RESOLVERS = [AppSessionResolver]; @@ -27,10 +30,13 @@ const SERVICES = [ AppAuthenticationService, AppNativeService, AppFileService, + AppCallService, AppChatService, AppNotificationService, + AppOrganizationService, AppGroupService, - AppAccountService + AppAccountService, + AppUiService ]; const axiosFactory = () => { diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 0833757..889d90c 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -6,11 +6,12 @@ import { NoNaviLayoutComponent } from '@app/layouts/components/no-navi.layout.co import { AppAuthenticationGuard } from '@app/guards/app-authentication.guard'; import { AppSessionResolver } from './resolvers/app-session.resolver'; +import { NavigationType } from './types'; const routes: Routes = [ { path: '', - redirectTo: '/group/(content:index)', + redirectTo: `/${NavigationType.Group}/(content:index)`, pathMatch: 'full' }, { @@ -38,35 +39,35 @@ const routes: Routes = [ }, children: [ { - path: 'organization', + path: NavigationType.Organization, loadChildren: () => import('./pages/organization/organization.page.module').then( (m) => m.AppOrganizationPageModule ) }, { - path: 'group', + path: NavigationType.Group, loadChildren: () => import('./pages/group/group.page.module').then( (m) => m.AppGroupPageModule ) }, { - path: 'chat', + path: NavigationType.Chat, loadChildren: () => import('./pages/chat/chat.page.module').then( (m) => m.AppChatPageModule ) }, { - path: 'call', + path: NavigationType.Call, loadChildren: () => import('./pages/call/call.page.module').then( (m) => m.AppCallPageModule ) }, { - path: 'message', + path: NavigationType.Message, loadChildren: () => import('./pages/message/message.page.module').then( (m) => m.AppMessagePageModule diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 24f685f..1acb28e 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,30 +1,44 @@ +import { fromEvent, interval, Subject } from 'rxjs'; +import { debounce, takeUntil } from 'rxjs/operators'; + import { Component, OnDestroy, OnInit, AfterViewInit, - Renderer2 + Renderer2, + Inject } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { Router } from '@angular/router'; import { Store } from '@ngrx/store'; +import { NativeService } from '@ucap/native'; + +import { UCAP_NATIVE_SERVICE } from '@ucap/ng-native'; + import { AppActions } from '@app/store/actions'; -import { fromEvent, interval, Subject } from 'rxjs'; -import { debounce, takeUntil } from 'rxjs/operators'; + import { AppAuthenticationService } from './services/app-authentication.service'; +import { AnimationBuilder, style, animate } from '@angular/animations'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'] }) -export class AppComponent implements OnInit, OnDestroy, AfterViewInit { +export class AppComponent implements OnInit, OnDestroy { private ngOnDestroySubject: Subject = new Subject(); constructor( + private router: Router, private renderer2: Renderer2, private store: Store, - private appAuthenticationService: AppAuthenticationService + private appAuthenticationService: AppAuthenticationService, + @Inject(UCAP_NATIVE_SERVICE) private nativeService: NativeService, + @Inject(DOCUMENT) private _document: any, + private _animationBuilder: AnimationBuilder ) { fromEvent(window, 'resize') .pipe( @@ -38,6 +52,12 @@ export class AppComponent implements OnInit, OnDestroy, AfterViewInit { }); }); + fromEvent(window, 'unload') + .pipe(takeUntil(this.ngOnDestroySubject)) + .subscribe((event: any) => { + this.nativeService.app_postDestroy(); + }); + // fromEvent(window, 'beforeunload') // .pipe(takeUntil(this.ngOnDestroySubject)) // .subscribe((event: any) => { @@ -50,6 +70,53 @@ export class AppComponent implements OnInit, OnDestroy, AfterViewInit { width: window.innerWidth, height: window.innerHeight }); + this.nativeService.app_postInit().then((info) => { + if (!info) { + return; + } + if (!!info.initUrl) { + this.router.navigateByUrl(info.initUrl); + } + }); + + const splash = this._document.body.querySelector('#ucap-lg-web-splash'); + const player = this._animationBuilder + .build([ + style({ opacity: '1' }), + animate( + '400ms ease', + style({ + opacity: '0', + zIndex: '-10' + }) + ) + ]) + .create(splash); + + setTimeout(() => { + player.play(); + }, 0); + + // const preloader = this.renderer2.selectRootElement( + // '#ucap-lg-web-preloader' + // ); + // const fadeEffect = setInterval(() => { + // if (!preloader.style.opacity) { + // this.renderer2.setStyle(preloader, 'opacity', 1); + // } + // if (preloader.style.opacity > 0) { + // this.renderer2.setStyle( + // preloader, + // 'opacity', + // preloader.style.opacity - 0.1 + // ); + // } else { + // this.renderer2.setStyle(preloader, 'display', 'none'); + // clearInterval(fadeEffect); + // } + // }, 200); + + // this.renderer2.setStyle(preloader, 'display', 'none'); } ngOnDestroy(): void { @@ -59,13 +126,6 @@ export class AppComponent implements OnInit, OnDestroy, AfterViewInit { } } - ngAfterViewInit(): void { - const preloader = this.renderer2.selectRootElement( - '#ucap-lg-web-preloader' - ); - this.renderer2.setStyle(preloader, 'display', 'none'); - } - private dispatchWindowSize(size: { width: number; height: number }) { this.store.dispatch(AppActions.windowResized(size)); } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 02210bb..bfbeac9 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -15,8 +15,10 @@ import { LoggerModule } from '@ucap/ng-logger'; import { CommonApiModule } from '@ucap/ng-api-common'; import { PublicApiModule } from '@ucap/ng-api-public'; import { ExternalApiModule } from '@ucap/ng-api-external'; +import { ContactApiModule } from '@ucap/ng-api-contact'; import { MessageApiModule } from '@ucap/ng-api-message'; import { PromptApiModule } from '@ucap/ng-api-prompt'; +import { WebexApiModule } from '@ucap/ng-api-webex'; import { PiModule } from '@ucap/ng-pi'; @@ -46,6 +48,7 @@ import { OrganizationStoreModule } from '@ucap/ng-store-organization'; import { AuthenticationStoreModule } from '@ucap/ng-store-authentication'; import { GroupStoreModule } from '@ucap/ng-store-group'; import { ChatStoreModule } from '@ucap/ng-store-chat'; +import { CallStoreModule } from '@ucap/ng-store-call'; import { OrganizationUiModule } from '@ucap/ng-ui-organization'; @@ -62,6 +65,7 @@ import { metaReducers } from '@app/store/state'; import { AppAccountDialogModule } from '@app/dialogs/account/account.dialog.module'; import { environment } from '@environments'; +import { MatDialogModule } from '@angular/material/dialog'; @NgModule({ declarations: [AppComponent], @@ -121,13 +125,17 @@ import { environment } from '@environments'; */ EffectsModule.forRoot([...effects]), + MatDialogModule, + LoggerModule.forRoot({}), CommonApiModule.forRoot(environment.commonApiModuleConfig), PublicApiModule.forRoot(environment.publicApiModuleConfig), ExternalApiModule.forRoot(environment.externalApiModuleConfig), + ContactApiModule.forRoot(environment.contactApiModuleConfig), MessageApiModule.forRoot(environment.messageApiModuleConfig), PromptApiModule.forRoot(environment.promptApiModuleConfig), + WebexApiModule.forRoot(environment.webexApiModuleConfig), PiModule.forRoot(environment.piModuleConfig), @@ -162,6 +170,10 @@ import { environment } from '@environments'; eventRequestDefaultCount: environment.productConfig.chat.eventRequestDefaultCount }), + CallStoreModule.forRoot({ + historyRequestDefaultCount: + environment.productConfig.call.historyRequestDefaultCount + }), OrganizationUiModule.forRoot({}), diff --git a/src/app/dialogs/account/account.dialog.module.ts b/src/app/dialogs/account/account.dialog.module.ts index c756cb2..9411a46 100644 --- a/src/app/dialogs/account/account.dialog.module.ts +++ b/src/app/dialogs/account/account.dialog.module.ts @@ -13,11 +13,12 @@ import { MatSelectModule } from '@angular/material/select'; import { MatTabsModule } from '@angular/material/tabs'; import { I18nModule } from '@ucap/ng-i18n'; -import { UiModule } from '@ucap/ng-ui'; + +import { UiscrollingModule } from '@ucap/ng-ui/scrolling'; import { AppLayoutsModule } from '@app/layouts/layouts.module'; import { AppAccountSectionModule } from '@app/sections/account/account.section.module'; - +import { AppAuthenticationModule } from '@app/ucap/authentication/authentication.module'; import { COMPONENTS } from './components'; @NgModule({ @@ -36,7 +37,9 @@ import { COMPONENTS } from './components'; I18nModule, - UiModule, + UiscrollingModule, + + AppAuthenticationModule, AppLayoutsModule, AppAccountSectionModule diff --git a/src/app/dialogs/account/components/settings.dialog.component.html b/src/app/dialogs/account/components/settings.dialog.component.html index ed932b0..6ff1a0f 100644 --- a/src/app/dialogs/account/components/settings.dialog.component.html +++ b/src/app/dialogs/account/components/settings.dialog.component.html @@ -30,7 +30,10 @@
  • - + {{ 'authentication:login.settings.autoStartOnBoot' | ucapI18n @@ -38,12 +41,18 @@
  • - + {{ 'authentication:login.settings.autoLogin' | ucapI18n }}
  • - + {{ 'authentication:login.settings.autoHide' | ucapI18n }}
  • @@ -66,7 +75,7 @@ class="setting-select-obj ucap-mat-input-container" > {{ @@ -186,20 +200,25 @@ appearance="standard" class="setting-select-obj ucap-mat-input-container" > - - + + {{ 'organization:settings.notification.methodTypeSound' | ucapI18n }} - + {{ 'organization:settings.notification.methodTypeAlert' | ucapI18n }} - + {{ 'organization:settings.notification.methodTypeSoundAndAlert' | ucapI18n @@ -222,7 +241,12 @@ appearance="standard" class="setting-select-obj ucap-mat-input-container" > - + 5{{ 'common:units.second' | ucapI18n }} @@ -249,7 +273,12 @@
    • - + {{ 'organization:settings.notification.receiveForMessageTypePopup' | ucapI18n @@ -269,7 +298,7 @@
      파일 전송
      -
      +
      다운로드 폴더
      @@ -278,18 +307,12 @@ color="accent" class="setting-input-obj input-set-obj ucap-mat-input-container" > - + @@ -299,7 +322,6 @@ mat-stroked-button color="primary" class="btn-folder-first" - [disabled]="'browser' === platform" > 폴더 초기화 @@ -338,123 +360,7 @@
      -
      -
      - {{ 'authentication:password.fields.changePassword' | ucapI18n }} -
      -
      -
      - {{ - 'authentication:password.fields.currentPassword' | ucapI18n - }} -
      -
      - - - - Hint - -
      -
      -
      -
      - {{ 'authentication:password.fields.newPassword' | ucapI18n }} -
      -
      - - - - 반드시 영어 소문자, 숫자, 특수문자 중 2가지 이상 사용해야 - 합니다. - - - - - - Error - -
      -
      - -
      -
      -
      - info_outline - {{ 'authentication:password.notice.condition' | ucapI18n }} -
      -
      - {{ 'authentication:password.notice.condition1' | ucapI18n }} -
      -
      - {{ 'authentication:password.notice.condition2' | ucapI18n }} -
      -
      - {{ 'authentication:password.notice.condition3' | ucapI18n }} -
      -
      - {{ 'authentication:password.notice.condition4' | ucapI18n }} -
      -
      - {{ 'authentication:password.notice.condition5' | ucapI18n }} -
      -
      -
      -
      +
      diff --git a/src/app/dialogs/account/components/settings.dialog.component.scss b/src/app/dialogs/account/components/settings.dialog.component.scss index fbd800c..a97ee8d 100644 --- a/src/app/dialogs/account/components/settings.dialog.component.scss +++ b/src/app/dialogs/account/components/settings.dialog.component.scss @@ -12,10 +12,10 @@ display: flex; flex-direction: column; width: 100%; - padding: 10px 16px 9px; + padding: 10px 16px; &:first-of-type { border-top: 0; - padding: 20px 16px 9px; + padding: 20px 16px 10px; } .title-settings-subject { color: #5c444b; @@ -52,11 +52,11 @@ .settings-contents { ul { li { - padding: 6px 0 7px; + padding: 6px 0; } } .settings-radio-group { - padding: 6px 0 7px; + padding: 6px 0; height: 42px; display: flex; flex-direction: row; diff --git a/src/app/dialogs/account/components/settings.dialog.component.ts b/src/app/dialogs/account/components/settings.dialog.component.ts index a2bf624..4297048 100644 --- a/src/app/dialogs/account/components/settings.dialog.component.ts +++ b/src/app/dialogs/account/components/settings.dialog.component.ts @@ -13,17 +13,27 @@ import { Inject, ViewChild } from '@angular/core'; +import { FormControl } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog'; +import { MatOptionSelectionChange } from '@angular/material/core'; import { MatSelectChange, MatSelect } from '@angular/material/select'; +import { MatCheckboxChange } from '@angular/material/checkbox'; +import { MatRadioChange } from '@angular/material/radio'; +import { ObjectUtil } from '@ucap/core'; +import { NotificationMethod } from '@ucap/domain-common'; import { NativeService, NativeType } from '@ucap/native'; import { UCAP_NATIVE_SERVICE } from '@ucap/ng-native'; +import { I18nService } from '@ucap/ng-i18n'; +import { DateService } from '@ucap/ng-ui/date'; +import { VirtualScrollViewportComponent } from '@ucap/ng-ui/scrolling'; +import { TranslateService } from '@ucap/ng-ui-organization'; import { environment } from '@environments'; @@ -34,10 +44,6 @@ import { ChatSetting, PresenceSetting } from '@app/models/settings'; -import { I18nService } from '@ucap/ng-i18n'; -import { VirtualScrollViewportComponent } from '@ucap/ng-ui'; -import { FormControl } from '@angular/forms'; -import { MatOptionSelectionChange } from '@angular/material/core'; export interface TimezoneData { displayName: string; @@ -47,7 +53,9 @@ export interface TimezoneData { export interface SettingsDialogData { settings: Settings; } -export interface SettingsDialogResult {} +export interface SettingsDialogResult { + settings: Settings; +} @Component({ selector: 'app-sections-account-settings', @@ -66,10 +74,7 @@ export class SettingsDialogComponent implements OnInit, OnDestroy { platform: 'browser' | 'electron' = 'electron'; - generalSetting: GeneralSetting; - notificationSetting: NotificationSetting; - chatSetting: ChatSetting; - presenceSetting: PresenceSetting; + settings: Settings; timezoneList: TimezoneData[]; timezonePlaceholder: string; @@ -78,15 +83,24 @@ export class SettingsDialogComponent implements OnInit, OnDestroy { supportedHrLanguages = environment.productConfig.organization.supportedLanguages; + String = String; + NotificationMethod = NotificationMethod; + + private ngOnDestroySubject: Subject = new Subject(); + constructor( public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: SettingsDialogData, @Inject(UCAP_NATIVE_SERVICE) private nativeService: NativeService, + private dateService: DateService, private i18nService: I18nService, + private translateService: TranslateService, private changeDetectorRef: ChangeDetectorRef, public matDialog: MatDialog ) { this.nativeService.platform_nativeType().then((type) => { + // this.platform = 'electron'; + // return; switch (type) { case NativeType.Browser: this.platform = 'browser'; @@ -99,14 +113,9 @@ export class SettingsDialogComponent implements OnInit, OnDestroy { } }); - this.generalSetting = data.settings.general; - this.notificationSetting = data.settings.notification; - this.chatSetting = data.settings.chat; - this.presenceSetting = data.settings.presence; + this.settings = ObjectUtil.deepClone(data.settings); } - private ngOnDestroySubject: Subject = new Subject(); - ngOnInit(): void { this.generateTimezoneData(); @@ -124,9 +133,27 @@ export class SettingsDialogComponent implements OnInit, OnDestroy { } } - onSelectionChangeLanguage(event: MatSelectChange) {} + onChangeForAutoStartOnBoot(event: MatCheckboxChange) { + this.settings.general.autoLaunch = event.checked; + } - onSelectionChangeHrLanguage(event: MatSelectChange) {} + onChangeForAutoLogin(event: MatCheckboxChange) { + this.settings.general.autoLogin = event.checked; + } + + onChangeForAutoHide(event: MatCheckboxChange) { + this.settings.general.startupHideWindow = event.checked; + } + + onSelectionChangeLanguage(event: MatSelectChange) { + this.i18nService.changeLanguage(event.value); + this.settings.general.locale = event.value; + } + + onSelectionChangeHrLanguage(event: MatSelectChange) { + this.translateService.use(event.value); + this.settings.general.hrInfoLocale = event.value; + } onOpenedChangeTimezone(opened: boolean) { if (opened) { @@ -139,15 +166,41 @@ export class SettingsDialogComponent implements OnInit, OnDestroy { if (!event.isUserInput) { return; } + this.dateService.use(event.source.value); + this.settings.general.timezone = event.source.value; + } + + onChangeForReceiveNotification(event: MatRadioChange) { + const use = 'true' === event.value; + console.log('onChangeForReceiveNotification', use); + } + + onSelectionChangeMethodOfNotification(event: MatSelectChange) { + console.log('onSelectionChangeMethodOfNotification', event.value); + } + + onSelectionChangeAlertExposureTimeOfNotification(event: MatSelectChange) { + const v = Number(event.value); + console.log('onSelectionChangeAlertExposureTimeOfNotification', v); + } + + onChangeForReceiveForMessageOfNotification(event: MatCheckboxChange) { + console.log('onChangeForReceiveForMessageOfNotification', event.checked); } onClosed(event: MouseEvent): void { - this.dialogRef.close(); + this.dialogRef.close({ settings: this.data.settings }); } - onCancel() {} + onCancel() { + this.dialogRef.close({ settings: this.data.settings }); + } - onConfirm() {} + onConfirm() { + this.dialogRef.close({ + settings: this.settings + }); + } private generateTimezoneData() { const timezoneData = this.i18nService.t('locale:timezone', { @@ -159,11 +212,14 @@ export class SettingsDialogComponent implements OnInit, OnDestroy { const displayName = `(UTC${moment.tz(name).format('Z')}) ${ timezoneData[name] }`; + if (-1 < displayName.indexOf('undefined')) { + console.log('timezone', name); + } timezoneList.push({ displayName, name }); - if (name === this.generalSetting.timezone) { + if (name === this.settings.general.timezone) { this.timezonePlaceholder = displayName; } } @@ -176,12 +232,12 @@ export class SettingsDialogComponent implements OnInit, OnDestroy { private setTimezoneData() { const timezoneIndex = this.timezoneList.findIndex( - (t) => t.name === this.generalSetting.timezone + (t) => t.name === this.settings.general.timezone ); if (-1 !== timezoneIndex) { if (!!this.vsTimezone && !!this.selectForTimezone) { - this.vsTimezone.scrollToIndex(timezoneIndex); + this.vsTimezone.scrollToIndex(timezoneIndex, 'start'); this.selectForTimezone.value = this.timezoneList[timezoneIndex].name; } } diff --git a/src/app/layouts/components/default-dialog.layout.component.html b/src/app/layouts/components/default-dialog.layout.component.html index 20b6def..d8845d4 100644 --- a/src/app/layouts/components/default-dialog.layout.component.html +++ b/src/app/layouts/components/default-dialog.layout.component.html @@ -1,6 +1,6 @@
      -
      +
      -