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 @@ + + + \ 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 (