diff --git a/.env.prod b/.env.prod index 82b2ef4f39c376aa54e71f115e6c648d91ba3929..84a8235e3ca44df3b4ee747701a67e63ab57c226 100644 --- a/.env.prod +++ b/.env.prod @@ -1,4 +1,4 @@ NODE_PATH=src NODE_ENV=prod -API_URL_ACCOUNT=http://account-service.account.svc.cluster.loca REACT_APP_API_URL_AUTH=http://auth-service.auth.svc.cluster.local +REACT_APP_API_URL_ACCOUNT=http://account-service.account.svc.cluster.local diff --git a/src/assets/css/fonts.css b/src/assets/css/fonts.css new file mode 100644 index 0000000000000000000000000000000000000000..a67c63e6a3233736e8a4c2f35f18ab6b3d5a7d37 --- /dev/null +++ b/src/assets/css/fonts.css @@ -0,0 +1,315 @@ +/********************************************************************************** + FONTS NOTOSANS +**********************************************************************************/ + +@font-face { + font-family: 'NotoSans-bold'; + src: url('../fonts/noto_sans/bold/notosans-bold-webfont.eot'); + src: url('../fonts/noto_sans/bold/notosans-bold-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/noto_sans/bold/notosans-bold-webfont.woff2') format('woff2'), + url('../fonts/noto_sans/bold/notosans-bold-webfont.woff') format('woff'), + url('../fonts/noto_sans/bold/notosans-bold-webfont.ttf') format('truetype'), + url('../fonts/noto_sans/bold/notosans-bold-webfont.svg#noto_sansbold') format('svg'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'NotoSans-regular'; + src: url('../fonts/noto_sans/regular/NotoSans-Regular-webfont.eot'); + src: url('../fonts/noto_sans/regular/NotoSans-Regular-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/noto_sans/regular/NotoSans-Regular-webfont.woff2') format('woff2'), + url('../fonts/noto_sans/regular/NotoSans-Regular-webfont.woff') format('woff'), + url('../fonts/noto_sans/regular/NotoSans-Regular-webfont.ttf') format('truetype'), + url('../fonts/noto_sans/regular/NotoSans-Regular-webfont.svg#noto_sansregular') format('svg'); + font-weight: normal; + font-style: normal; +} + +/********************************************************************************** + ICON MOON +**********************************************************************************/ +@font-face { + font-family: 'icomoon'; + src: url('../fonts/icons/icomoon.eot?e87ho1'); + src: url('../fonts/icons/icomoon.eot?e87ho1#iefix') format('embedded-opentype'), + url('../fonts/icons/icomoon.ttf?e87ho1') format('truetype'), + url('../fonts/icons/icomoon.woff?e87ho1') format('woff'), + url('../fonts/icons/icomoon.svg?e87ho1#icomoon') format('svg'); + font-weight: normal; + font-style: normal; +} + +[class^="icon-"], [class*=" icon-"] { + font-family: 'icomoon' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-access:before { + content: "\e948"; +} +.icon-app:before { + content: "\e949"; +} +.icon-bot:before { + content: "\e94a"; +} +.icon-design:before { + content: "\e94b"; +} +.icon-freelance:before { + content: "\e94c"; +} +.icon-basic-star:before { + content: "\e94d"; +} +.icon-interpretation:before { + content: "\e94e"; +} +.icon-marketplace:before { + content: "\e94f"; +} +.icon-media:before { + content: "\e950"; +} +.icon-sticker:before { + content: "\e951"; +} +.icon-support:before { + content: "\e952"; +} +.icon-virtual-goods:before { + content: "\e953"; +} +.icon-email:before { + content: "\e946"; +} +.icon-facebook:before { + content: "\e947"; +} +.icon-closed-envelope:before { + content: "\e945"; +} +.icon-save-edited:before { + content: "\e944"; +} +.icon-arrow_down:before { + content: "\e940"; +} +.icon-arrow_up:before { + content: "\e941"; +} +.icon-calendar:before { + content: "\e942"; +} +.icon-schedule:before { + content: "\e943"; +} +.icon-cm_admin:before { + content: "\e931"; +} +.icon-cm_another_transcribe:before { + content: "\e932"; +} +.icon-cm_another_translate:before { + content: "\e933"; +} +.icon-cm_copy:before { + content: "\e934"; +} +.icon-cm_delete:before { + content: "\e935"; +} +.icon-cm_edit:before { + content: "\e936"; +} +.icon-cm_forward:before { + content: "\e937"; +} +.icon-cm_info:before { + content: "\e938"; +} +.icon-cm_reply:before { + content: "\e939"; +} +.icon-cm_share:before { + content: "\e93a"; +} +.icon-cm_star:before { + content: "\e93b"; +} +.icon-cm_to_downloads:before { + content: "\e93c"; +} +.icon-cm_to_gallery:before { + content: "\e93d"; +} +.icon-cm_transcribe:before { + content: "\e93e"; +} +.icon-cm_translate:before { + content: "\e93f"; +} +.icon-delete:before { + content: "\e92e"; +} +.icon-play2:before { + content: "\e92f"; +} +.icon-stop:before { + content: "\e930"; +} +.icon-channels:before { + content: "\e928"; +} +.icon-family:before { + content: "\e929"; +} +.icon-history:before { + content: "\e92a"; +} +.icon-new_channel:before { + content: "\e92b"; +} +.icon-new_chat:before { + content: "\e92c"; +} +.icon-work:before { + content: "\e92d"; +} +.icon-new-group:before { + content: "\e927"; +} +.icon-country:before { + content: "\e925"; +} +.icon-phone:before { + content: "\e926"; +} +.icon-number:before { + content: "\e923"; +} +.icon-username:before { + content: "\e924"; +} +.icon-play:before { + content: "\e91b"; +} +.icon-pause:before { + content: "\e91c"; +} +.icon-read:before { + content: "\e920"; +} +.icon-sent:before { + content: "\e921"; +} +.icon-unsent:before { + content: "\e922"; +} +.icon-add-open:before { + content: "\e919"; +} +.icon-add:before { + content: "\e91a"; +} +.icon-cancel:before { + content: "\e91d"; +} +.icon-download:before { + content: "\e91e"; +} +.icon-expand:before { + content: "\e91f"; +} +.icon-star:before { + content: "\e918"; +} +.icon-mic:before { + content: "\e911"; +} +.icon-send:before { + content: "\e912"; +} +.icon-calls:before { + content: "\e913"; +} +.icon-chats:before { + content: "\e914"; +} +.icon-contacts:before { + content: "\e915"; +} +.icon-groups:before { + content: "\e916"; +} +.icon-settings:before { + content: "\e917"; +} +.icon-accepted:before { + content: "\e90f"; +} +.icon-ignored:before { + content: "\e910"; +} +.icon-add_contact:before { + content: "\e900"; +} +.icon-all:before { + content: "\e901"; +} +.icon-audio:before { + content: "\e902"; +} +.icon-contact_request:before { + content: "\e903"; +} +.icon-contact:before { + content: "\e904"; +} +.icon-files:before { + content: "\e905"; +} +.icon-link:before { + content: "\e906"; +} +.icon-location:before { + content: "\e907"; +} +.icon-photo:before { + content: "\e908"; +} +.icon-photos:before { + content: "\e909"; +} +.icon-storage:before { + content: "\e90a"; +} +.icon-upload:before { + content: "\e90b"; +} +.icon-video:before { + content: "\e90c"; +} +.icon-videocall:before { + content: "\e90d"; +} +.icon-voicecall:before { + content: "\e90e"; +} +.icon-left-arrow:before { +content: "\2039"; +} +.icon-cm_marketplace:before { + content: "\e934"; +} +.icon-phone-fill:before { + content: "\e954"; +} diff --git a/src/assets/fonts/icons/icomoon.eot b/src/assets/fonts/icons/icomoon.eot new file mode 100644 index 0000000000000000000000000000000000000000..97c612e0b9f97f8ad2021a3587f0d87f24880af4 Binary files /dev/null and b/src/assets/fonts/icons/icomoon.eot differ diff --git a/src/assets/fonts/icons/icomoon.svg b/src/assets/fonts/icons/icomoon.svg new file mode 100644 index 0000000000000000000000000000000000000000..e2ca5c4a02b8b0eed66bb7e9e97d0f2a12a23829 --- /dev/null +++ b/src/assets/fonts/icons/icomoon.svg @@ -0,0 +1,95 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/fonts/icons/icomoon.ttf b/src/assets/fonts/icons/icomoon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c0db759209aa46e4b5235d1869f0f3e40b3ca6ba Binary files /dev/null and b/src/assets/fonts/icons/icomoon.ttf differ diff --git a/src/assets/fonts/icons/icomoon.woff b/src/assets/fonts/icons/icomoon.woff new file mode 100644 index 0000000000000000000000000000000000000000..99a39b6e0347fbf2cce191f6f5394e70aef95503 Binary files /dev/null and b/src/assets/fonts/icons/icomoon.woff differ diff --git a/src/assets/fonts/noto_sans/bold/notosans-bold-webfont.eot b/src/assets/fonts/noto_sans/bold/notosans-bold-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..ac61adc599397be0a8107c63cb3bda09e4a1f8fe Binary files /dev/null and b/src/assets/fonts/noto_sans/bold/notosans-bold-webfont.eot differ diff --git a/src/assets/fonts/noto_sans/bold/notosans-bold-webfont.svg b/src/assets/fonts/noto_sans/bold/notosans-bold-webfont.svg new file mode 100644 index 0000000000000000000000000000000000000000..8b3e95cc30d120c4896734c3ad3c7b51dd4fab35 --- /dev/null +++ b/src/assets/fonts/noto_sans/bold/notosans-bold-webfont.svg @@ -0,0 +1,6243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/fonts/noto_sans/bold/notosans-bold-webfont.ttf b/src/assets/fonts/noto_sans/bold/notosans-bold-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..49e145411f7959071f32d26e7ee689a5db81ce09 Binary files /dev/null and b/src/assets/fonts/noto_sans/bold/notosans-bold-webfont.ttf differ diff --git a/src/assets/fonts/noto_sans/bold/notosans-bold-webfont.woff b/src/assets/fonts/noto_sans/bold/notosans-bold-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..4521b9227a0479f2d48a1222e5d4e8936eab9cb1 Binary files /dev/null and b/src/assets/fonts/noto_sans/bold/notosans-bold-webfont.woff differ diff --git a/src/assets/fonts/noto_sans/bold/notosans-bold-webfont.woff2 b/src/assets/fonts/noto_sans/bold/notosans-bold-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..cf952ff4519889678753d2becd4be2a32f113d77 Binary files /dev/null and b/src/assets/fonts/noto_sans/bold/notosans-bold-webfont.woff2 differ diff --git a/src/assets/fonts/noto_sans/regular/NotoSans-Regular-webfont.eot b/src/assets/fonts/noto_sans/regular/NotoSans-Regular-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..5333e6bb81e204dc9d378b14df2ff0e348a642f5 Binary files /dev/null and b/src/assets/fonts/noto_sans/regular/NotoSans-Regular-webfont.eot differ diff --git a/src/assets/fonts/noto_sans/regular/NotoSans-Regular-webfont.svg b/src/assets/fonts/noto_sans/regular/NotoSans-Regular-webfont.svg new file mode 100644 index 0000000000000000000000000000000000000000..17e97f49babe47b692f096419d0b6547ede440af --- /dev/null +++ b/src/assets/fonts/noto_sans/regular/NotoSans-Regular-webfont.svg @@ -0,0 +1,604 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/fonts/noto_sans/regular/NotoSans-Regular-webfont.ttf b/src/assets/fonts/noto_sans/regular/NotoSans-Regular-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c66a993cb9ab82b0318249f1344f500ba5a7923b Binary files /dev/null and b/src/assets/fonts/noto_sans/regular/NotoSans-Regular-webfont.ttf differ diff --git a/src/assets/fonts/noto_sans/regular/NotoSans-Regular-webfont.woff b/src/assets/fonts/noto_sans/regular/NotoSans-Regular-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..87c8222e162387c0b9a259b69873773cd97feda1 Binary files /dev/null and b/src/assets/fonts/noto_sans/regular/NotoSans-Regular-webfont.woff differ diff --git a/src/assets/fonts/noto_sans/regular/NotoSans-Regular-webfont.woff2 b/src/assets/fonts/noto_sans/regular/NotoSans-Regular-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f56db6c0f6050548dff79c0d1554f1e2a6c5177d Binary files /dev/null and b/src/assets/fonts/noto_sans/regular/NotoSans-Regular-webfont.woff2 differ diff --git a/src/assets/img/logo/ninja_sm.svg b/src/assets/img/logo/ninja_sm.svg new file mode 100644 index 0000000000000000000000000000000000000000..ed2fa079b41e5fc4f77c526978d250eaa7246209 --- /dev/null +++ b/src/assets/img/logo/ninja_sm.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/img/logo/ninja_text.svg b/src/assets/img/logo/ninja_text.svg new file mode 100644 index 0000000000000000000000000000000000000000..d9d2c65049f42a03eb3f93958b32f81b1d3b43fd --- /dev/null +++ b/src/assets/img/logo/ninja_text.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/components/dashboard_users/index.js b/src/components/dashboard_users/index.js index e09668f7e285d00fd8b0c621478950fb40156ae2..d506db40cec86336f1aa0f178aebf246f45c54ce 100644 --- a/src/components/dashboard_users/index.js +++ b/src/components/dashboard_users/index.js @@ -6,6 +6,7 @@ import { bindActionCreators } from 'redux' import * as PropTypes from 'prop-types' import userAvatar from 'utils/helpers/avatar_insertion' +import contactList from 'utils/helpers/contact_insertion' import Spinner from './../shared/ui/spinner/spinner' import PageSize from './page_size' import Paging from './paging/paging' @@ -32,13 +33,13 @@ class DashboardUsers extends Component { paginationPageSize: PropTypes.number.isRequired, PageSizeUpdate: PropTypes.func } - + static colDefs = [ { headerName: 'First name', hide: false, field: 'firstname', filter: 'agTextColumnFilter', cellRenderer: 'agGroupCellRenderer', cellRendererParams: { innerRenderer: userAvatar }, filterParams }, { headerName: 'Last name', hide: false, field: 'lastname', filter: 'agTextColumnFilter', filterParams }, { headerName: 'Username', hide: false, field: 'username', filter: 'agTextColumnFilter', filterParams }, - { headerName: 'Phone', hide: false, field: 'authPhone', filter: 'agTextColumnFilter', filterParams }, - { headerName: 'Email', hide: false, field: 'authEmail', filter: 'agTextColumnFilter', filterParams }, + { headerName: 'Phone', hide: false, field: 'authPhone', filter: 'agTextColumnFilter', cellRenderer: 'agGroupCellRenderer', cellRendererParams: { innerRenderer: contactList }, filterParams }, + { headerName: 'Email', hide: false, field: 'authEmail', filter: 'agTextColumnFilter', cellRenderer: 'agGroupCellRenderer', cellRendererParams: { innerRenderer: contactList }, filterParams }, { headerName: 'Access Status', hide: false, field: 'accessstatus', filter: 'agSetColumnFilter', filterParams: { values: ['ENABLED', 'DISABLED'], ...filterParams } }, { headerName: 'Created', hide: false, field: 'creationtimestamp', filter: 'agDateColumnFilter' }, { headerName: 'Updated', hide: false, field: 'lastupdatetimestamp', filter: 'agDateColumnFilter' }, diff --git a/src/components/edit_user/generic_data/index.js b/src/components/edit_user/generic_data/index.js index 19fc5cc995767331ceb736b842973835afbf3f3a..afdebdbffe86bd4e2f167c7430b9d3e6178eaaf3 100644 --- a/src/components/edit_user/generic_data/index.js +++ b/src/components/edit_user/generic_data/index.js @@ -1,4 +1,5 @@ import React, { Fragment, Component } from 'react' +import { isInputValid } from 'utils/helpers/common' import PropTypes from 'prop-types' import './index.css' @@ -62,6 +63,7 @@ class genericUserData extends Component { avatar: PropTypes.any, classes: PropTypes.object.isRequired, changed: PropTypes.func.isRequired, + isValidPersonalInfoFields: PropTypes.func.isRequired, push: PropTypes.func.isRequired, deleteProfileRedirect: PropTypes.bool.isRequired, deleteAccount: PropTypes.func.isRequired @@ -102,12 +104,14 @@ class genericUserData extends Component { this.state.personalInfo.firstname !== this.props.user.firstname || this.state.personalInfo.lastname !== this.props.user.lastname || this.state.personalInfo.username !== this.props.user.username || - this.state.personalInfo.birthday !== this.props.user.birthday + (this.state.personalInfo.birthday !== this.props.user.birthday && this.state.personalInfo.birthday !== null) ) { this.props.changed(true) } else { this.props.changed(false) } + + this.handledIsPersonalInfoFieldsValid() } handleChange = (e, type) => { @@ -250,6 +254,16 @@ class genericUserData extends Component { this.setState({ modalState: newModalState }) } + handledIsPersonalInfoFieldsValid = () => { + if (isInputValid(this.state.personalInfo.firstname, 'FIRST_NAME') && + isInputValid(this.state.personalInfo.lastname, 'LAST_NAME') && + isInputValid(this.state.personalInfo.username, 'USER_NAME')) { + return this.props.isValidPersonalInfoFields(true) + } else { + return this.props.isValidPersonalInfoFields(false) + } + } + render () { const { user, classes } = this.props const { avatar, contactInfo, accessStatus, personalInfo, modalState, phoneCodeFocus, addPhoneFocus, birthDayFocus, selectPhoneCountryFocus } = this.state diff --git a/src/components/edit_user/generic_data/personal_info/personal_info.js b/src/components/edit_user/generic_data/personal_info/personal_info.js index 302699323b9b4a50b8d4678bdb898a66fb93ba61..09fbb709170f6044d94b4a7e99f6e814ae9b85d8 100644 --- a/src/components/edit_user/generic_data/personal_info/personal_info.js +++ b/src/components/edit_user/generic_data/personal_info/personal_info.js @@ -24,15 +24,12 @@ const styles = theme => ({ }) const PersonalInfo = (props) => { - /** - * @const {Object} personalInfo - * @const {Object} initialUser - * @const {Object} classes - * @const {Func} onChangeInfo - */ - const { personalInfo, initialInfo, classes, onChangeInfo, setActiveOnFocus, birthDayFocus } = props + // console.log('===================================='); + // console.log(personalInfo.birthday, initialInfo.birthday); + // console.log('===================================='); + return (
@@ -46,7 +43,7 @@ const PersonalInfo = (props) => { value={personalInfo.firstname} onChange={onChangeInfo} required - error={isInputValid(personalInfo.firstname, 'FIRST_NAME')} + error={!isInputValid(personalInfo.firstname, 'FIRST_NAME')} margin="normal" fullWidth /> @@ -62,7 +59,7 @@ const PersonalInfo = (props) => { name="lastname" value={personalInfo.lastname} onChange={onChangeInfo} - error={isInputValid(personalInfo.lastname, 'LAST_NAME')} + error={!isInputValid(personalInfo.lastname, 'LAST_NAME')} margin="normal" fullWidth /> @@ -78,14 +75,14 @@ const PersonalInfo = (props) => { name="username" value={personalInfo.username} onChange={onChangeInfo} - error={isInputValid(personalInfo.username, 'USER_NAME')} + error={!isInputValid(personalInfo.username, 'USER_NAME')} margin="normal" fullWidth />
- Edited + Edited
diff --git a/src/components/edit_user/index.js b/src/components/edit_user/index.js index 25b114c9b0a3468ad52f9e9fa1ca728adc65d1ca..c6180674134a58f345d803fddc268e932886f5bc 100644 --- a/src/components/edit_user/index.js +++ b/src/components/edit_user/index.js @@ -15,7 +15,9 @@ import TabsNavigation from './tabs_navigation/index' const styles = theme => ({}) class EditUser extends Component { state = { - isUpdated: false + isUpdatedContactInfo: false, + isUpdatedLoginOptions: false, + isValidFields: true } static propTypes = { @@ -39,7 +41,15 @@ class EditUser extends Component { } userDataChanged = (flag) => { - this.setState({ isUpdated: flag }) + this.setState({ isUpdatedContactInfo: flag }) + } + + userLoginDataChanged = (flag) => { + this.setState({ isUpdatedLoginOptions: flag }) + } + + isValidPersonalInfoFields = (isValid) => { + this.setState({ isValidFields: isValid }) } render () { @@ -49,7 +59,13 @@ class EditUser extends Component { - + @@ -58,6 +74,7 @@ class EditUser extends Component { ? @@ -68,7 +85,11 @@ class EditUser extends Component { { selectedUser.loginOptionsList - ? + ? : null } diff --git a/src/components/edit_user/profile_tools/index.js b/src/components/edit_user/profile_tools/index.js index d7e9b567263a3e66efe261d30079d4947f402295..0a2a4e81f4c627d1e8e8b494d623c636f38c52da 100644 --- a/src/components/edit_user/profile_tools/index.js +++ b/src/components/edit_user/profile_tools/index.js @@ -41,7 +41,9 @@ const styles = { class ProfileTools extends Component { static propTypes = { - isUpdated: PropTypes.bool.isRequired, + isUpdatedLoginOptions: PropTypes.bool.isRequired, + isUpdatedContactInfo: PropTypes.bool.isRequired, + isValidFields: PropTypes.bool, classes: PropTypes.object.isRequired, saveChanges: PropTypes.func.isRequired, goBack: PropTypes.func.isRequired @@ -52,7 +54,12 @@ class ProfileTools extends Component { } render () { - const { classes, isUpdated, saveChanges } = this.props + const { classes, isUpdatedContactInfo, isUpdatedLoginOptions, saveChanges, isValidFields } = this.props + + let saveDisabled = true + if ((isValidFields === true && isUpdatedContactInfo === true) || (isUpdatedLoginOptions === true && isValidFields === true)) { + saveDisabled = false + } return (
@@ -63,13 +70,13 @@ class ProfileTools extends Component { User Profile - +
- + { ({ onConfirm, onCancel }) => ( diff --git a/src/components/edit_user/profile_tools/profile_tools.css b/src/components/edit_user/profile_tools/profile_tools.css index ae45bedc6ba77e159086462682e42329676fc56f..e48a6748fd67e19f8e2c282766861ded6d694560 100644 --- a/src/components/edit_user/profile_tools/profile_tools.css +++ b/src/components/edit_user/profile_tools/profile_tools.css @@ -8,13 +8,14 @@ background-color: #eeeeee; color: black; } -.profile-tools-wrapper .MuiTypography-h2-288 { - font-size: 18px; -} .profile-tools-wrapper button:disabled { - background-color: #dadada; - color: #afafaf; + background-color: #d9d9d9; + color: #959699; +} +.profile-tools-wrapper button.isvalid-fields:disabled { + background-color: rgba(0,134,248, .5); + color: #fff; } .profile-tools-wrapper header > div { min-height: auto; diff --git a/src/components/header_bar/index.js b/src/components/header_bar/index.js index 7b45d7bb04e4141a3980ff71879323545cc122c4..e754e850e64cf3c837401ff90e8238ae277b4bec 100644 --- a/src/components/header_bar/index.js +++ b/src/components/header_bar/index.js @@ -16,13 +16,9 @@ import * as actions from './actions' */ const styles = {} class HeaderBar extends Component { - // componentDidMount() { - // this.props.getAuthedUser(); - // } render () { /** - * @const {object} classes * @const {string} adaptiveWidth * @const {string} firstName * @const {string} lastName @@ -42,7 +38,6 @@ class HeaderBar extends Component { } HeaderBar.propTypes = { - classes: PropTypes.object.isRequired, firstName: PropTypes.string, lastName: PropTypes.string } diff --git a/src/components/sidebar/index.js b/src/components/sidebar/index.js index 792c27688ef9eb5064ef89b64e65453acb0f4248..6a244eb105cc27580ec017c3ed7b44ae1dc5ec21 100644 --- a/src/components/sidebar/index.js +++ b/src/components/sidebar/index.js @@ -1,20 +1,28 @@ import React, { Component } from 'react' + +import PropTypes from 'prop-types' import Paper from '@material-ui/core/Paper' -import { SideNav } from './side_nav' +import SideNav from './side_nav' import './css/style.css' class Sidebar extends Component { render () { + const { sideBarToggleHandler } = this.props + return (
-
+
- +
) } } +Sidebar.propTypes = { + sideBarToggleHandler: PropTypes.func.isRequired +} + export default Sidebar diff --git a/src/components/sidebar/side_nav/index.js b/src/components/sidebar/side_nav/index.js index 23d8fa093c5f9afdef03d4e8daec78b1da33bc47..bf4f820d613549583d40bff41fa85aeac5fe1510 100644 --- a/src/components/sidebar/side_nav/index.js +++ b/src/components/sidebar/side_nav/index.js @@ -1,19 +1,24 @@ -import React, { Fragment } from 'react' +import React from 'react' import { NavLink } from 'react-router-dom' +import PropTypes from 'prop-types' + import MenuItem from '@material-ui/core/MenuItem' import ListItemIcon from '@material-ui/core/ListItemIcon' import ListItemText from '@material-ui/core/ListItemText' import InboxIcon from '@material-ui/icons/MoveToInbox' -import logo from './svg/logo.svg' +import logo from '../../../assets/img/logo/ninja_text.svg' + +const SideNav = (props) => { + const { sideBarToggleHandler } = props -export const SideNav = (props) => { return ( - + <>
logo
Admin Console
- + + @@ -21,6 +26,12 @@ export const SideNav = (props) => { -
+ + ) } + +SideNav.propTypes = { + sideBarToggleHandler: PropTypes.func.isRequired +} +export default SideNav diff --git a/src/index.js b/src/index.js index 2e391e21b153d7d7f5c161d8f8340f15ea53973b..e0973c3564e55b975cbdd52a537b0d5fa75e5b4c 100644 --- a/src/index.js +++ b/src/index.js @@ -14,6 +14,7 @@ import persistConfig from './utils/localstorage/configure_persist' import Spinner from './components/shared/ui/spinner/spinner' import './index.css' +import './assets/css/fonts.css' import App from './App' LicenseManager.setLicenseKey('Evaluation_License_Valid_Until__22_December_2018__MTU0NTQzNjgwMDAwMA==d8310d76d04f6e775e384fcc32f337c5') diff --git a/src/utils/helpers/common.js b/src/utils/helpers/common.js index 0c8e6b954dedde114308c05fd88f70e58b81d3e9..0e94102724305120bff5ef923af7078c0285ab3f 100644 --- a/src/utils/helpers/common.js +++ b/src/utils/helpers/common.js @@ -16,23 +16,23 @@ export const isInputValid = (value, type) => { break case 'FIRST_NAME': - result = !isFirstNameValid.test(value) + result = isFirstNameValid.test(value) break case 'LAST_NAME': - result = !isLastNameValid.test(value) + result = isLastNameValid.test(value) break case 'USER_NAME': - result = !isUserNameValid.test(value) + result = isUserNameValid.test(value) break case 'PHONE_LABEL': - result = !isPhoneLabelValid.test(value) + result = isPhoneLabelValid.test(value) break default: - result = true + result = false break } diff --git a/src/utils/helpers/contact_insertion.js b/src/utils/helpers/contact_insertion.js new file mode 100644 index 0000000000000000000000000000000000000000..78b834748dfb7d7a815536ca227d96132b627a14 --- /dev/null +++ b/src/utils/helpers/contact_insertion.js @@ -0,0 +1,10 @@ +const contactListAgregator = (params) => { + + var contactList = params.value.reduce((accumulator, currentValue, currentIndex) => { + return accumulator + ' ' + currentValue.authenticationprovider + }, ''); + + return contactList +} + +export default contactListAgregator \ No newline at end of file diff --git a/src/utils/services/admin_account.js b/src/utils/services/admin_account.js index 900d0843e2e8687b02ced79dcf23086cf460cba1..d2a99a3c51b51e5e067119b816d61b45d8f2dec5 100644 --- a/src/utils/services/admin_account.js +++ b/src/utils/services/admin_account.js @@ -8,6 +8,7 @@ export function getAllAccountsGrpcRequest (startRow, endRow, filter) { let getAllAccountsRequest = new GetAllAccountsRequest() getAllAccountsRequest.setStartrow(startRow) getAllAccountsRequest.setEndrow(endRow) + if (filter.firstname) { let filterModel = new FilterModel() @@ -28,22 +29,32 @@ export function getAllAccountsGrpcRequest (startRow, endRow, filter) { getAllAccountsRequest.addFiltermodel(filterModel) } - if (filter.accessStatus) { + if (filter.username) { let filterModel = new FilterModel() - filterModel.setColid('accessStatus') + filterModel.setColid('username') filterModel.setFiltertype(FilterModel.FilterType.EQUALS) - filterModel.setFiltervalue(filter.lastname.filter) + filterModel.setFiltervalue(filter.username.filter) filterModel.setValuetype('text') getAllAccountsRequest.addFiltermodel(filterModel) } - if (filter.username) { + if (filter.authPhone) { let filterModel = new FilterModel() - filterModel.setColid('username') + filterModel.setColid('phone') filterModel.setFiltertype(FilterModel.FilterType.EQUALS) - filterModel.setFiltervalue(filter.username.filter) + filterModel.setFiltervalue(filter.authPhone.filter) + filterModel.setValuetype('text') + + getAllAccountsRequest.addFiltermodel(filterModel) + } + if (filter.authEmail) { + let filterModel = new FilterModel() + + filterModel.setColid('email') + filterModel.setFiltertype(FilterModel.FilterType[filter.authEmail.type.toUpperCase().replace(' ', '')]) + filterModel.setFiltervalue(filter.authEmail.filter) filterModel.setValuetype('text') getAllAccountsRequest.addFiltermodel(filterModel) @@ -51,7 +62,7 @@ export function getAllAccountsGrpcRequest (startRow, endRow, filter) { if (filter.accessstatus) { let filterModel = new FilterModel() - filterModel.setColid('accessstatus') + filterModel.setColid('accessStatus') filterModel.setFiltertype(FilterModel.FilterType.EQUALS) filterModel.setFiltervalue(filter.accessstatus.values[0]) filterModel.setValuetype('text') diff --git a/src/utils/services/ag_grid_server_model.js b/src/utils/services/ag_grid_server_model.js index 59b4f48a9435aaee0ffa1b7bb8e79f226a8f1fbd..8f005b6172a5ce97c62ad63a84157070c654110c 100644 --- a/src/utils/services/ag_grid_server_model.js +++ b/src/utils/services/ag_grid_server_model.js @@ -27,6 +27,7 @@ ServerSideDatasource.prototype.getRows = function (params) { let getCountOfAllAccountsPromise = getCountOfAllAccountsGrpcRequest() Promise.all([getUsersDataPromise, getCountOfAllAccountsPromise]).then((data) => { + data[0].accountdetailsList.map((item, index) => { // convert Access Status int to string from protobuf item.accessstatus = item.accessstatus === undefined || item.accessstatus === 0 ? accountStatusVariations[1] : accountStatusVariations[item.accessstatus] @@ -52,11 +53,11 @@ ServerSideDatasource.prototype.getRows = function (params) { item.lastupdatetimestamp = ['no updates done', ''] } - // todo: rework this so it supports email and social providers + // todo: rework this so it supports social providers // note: for now it stays "hardcoded", due to AG-Grid freezing // when you loop through item.authprovidersList items - item.authPhone = item.loginoptions.phonesList.length ? item.loginoptions.phonesList[0].authenticationprovider : 'N/A' - item.authEmail = item.loginoptions.emailsList.length ? item.loginoptions.emailsList[0].authenticationprovider : 'N/A' + item.authPhone = item.loginoptions.phonesList.length ? item.loginoptions.phonesList : [{'authenticationprovider': 'N/A'}] + item.authEmail = item.loginoptions.emailsList.length ? item.loginoptions.emailsList : [{'authenticationprovider': 'N/A'}] item.authFacebook = 'N/A' item.authGoogle = 'N/A'