File: /var/www/vhosts/app.ett-stag.2amigos.us/docroot/build/static/js/main.0b86f837.chunk.js.map
{"version":3,"sources":["serviceWorker.js","components/GlobalStyles.js","theme/index.js","theme/shadows.js","theme/typography.js","layouts/DashboardLayout/NavBar/NavItem.js","utils/api.js","components/Logo.js","layouts/DashboardLayout/NavBar/index.js","utils/jsonApiConfig.js","utils/EmitValidation.js","layouts/DashboardLayout/TopBar.js","layouts/DashboardLayout/index.js","layouts/MainLayout/TopBar.js","layouts/MainLayout/index.js","theme/emitStyle.js","components/AllComponent.js","components/Page.js","views/people/PeopleList/Toolbar.js","utils/SelectOptions.js","views/people/PeopleList/AddPeopleDailog.js","views/people/PeopleList/index.js","views/dashboard/LatestOrders.js","views/dashboard/TrafficByDevice.js","views/dashboard/Card.js","views/dashboard/index.js","views/auth/LoginView.js","views/auth/SuccessEmailVerified.js","views/settings/NewEmailVerified.js","views/errors/NotFoundView.js","views/auth/RegisterView.js","views/settings/Account.js","views/settings/Password.js","views/settings/NewPaymentMethod.js","views/settings/PaymentMethod.js","views/settings/index.js","views/auth/ForgotPassword.js","views/auth/ResetPassword.js","views/people/AddPeople/PersonalDetails.js","views/people/AddPeople/EmailDetails.js","views/people/AddPeople/PhoneDetails.js","views/people/AddPeople/SocialNetworks.js","views/people/AddPeople/LinkDetails.js","views/people/AddPeople/AddressDetails.js","views/people/AddPeople/index.js","views/VirtualPhone/YourPhone.js","views/settings/MakeDeposit.js","views/VirtualPhone/PhoneSearchToolbar.js","views/VirtualPhone/PhoneSearch.js","views/VirtualPhone/index.js","views/listing/index.js","views/listing/ManageListing.js","views/message/list/MessageToolbar.js","views/message/list/PhotoSlider.js","views/message/list/MessageList.js","views/message/create/Listings.js","views/message/create/Recipient.js","views/message/create/DropPhoto.js","views/message/create/CreateMessage.js","views/message/view/LogToolbar.js","views/message/view/ViewMessage.js","views/Invoice/index.js","views/Invoice/ViewInvoice.js","views/wallet/WalletToolbar.js","views/wallet/Wallet.js","routes.js","reducer/index.js","App.js","index.js"],"names":["Boolean","window","location","hostname","match","useStyles","makeStyles","createStyles","boxSizing","margin","padding","html","height","width","body","backgroundColor","a","textDecoration","visibility","GlobalStyles","theme","createMuiTheme","palette","background","dark","card","light","default","colors","common","white","paper","primary","main","secondary","indigo","text","blueGrey","navbar","hover","shadows","typography","h1","fontWeight","fontSize","letterSpacing","h2","h3","h4","h5","h6","overline","item","display","paddingTop","paddingBottom","button","color","fontWeightMedium","justifyContent","textTransform","icon","marginRight","spacing","title","active","borderRadius","NavItem","className","href","Icon","onClick","rest","classes","navigate","useNavigate","ListItem","clsx","disableGutters","Button","size","activeClassName","component","RouterLink","to","auth_url","process","app_url","config","base_url","jsonapi_base_url","api","path","bearer","Promise","resolve","reject","headers","Headers","append","fetch","method","redirect","then","response","json","result","catch","error","data","basic","request","JSON","stringify","Logo","props","alt","src","items","BarChartIcon","UsersIcon","ListIcon","Phone","MessageSquare","FileText","AccountBalanceWalletOutlinedIcon","SettingsIcon","UnlockIcon","mobileDrawer","desktopDrawer","top","border","avatar","cursor","NavBar","onMobileClose","openMobile","useLocation","useEffect","pathname","content","Box","flexDirection","pl","pt","pr","List","map","key","resToken","localStorage","getItem","parse","post","access_token","resLogout","message","removeItem","replace","onLogout","flexGrow","Hidden","lgUp","Drawer","anchor","onClose","open","variant","mdDown","defaultProps","jsonApiInit","jsonApi","JsonApi","apiUrl","define","JsonConfig","people","email","phone","social_network","addresses","url","listing","user","wallet","deposit","invoice","country","payment_method","virtual_phones","outbound_message","transaction","insertMiddlewareBefore","name","req","payload","attributes","id","type","cardBrand","status","cardLastFour","password","password_confirmation","createdAt","updatedAt","profile","listings","organizations","paymentMethods","balance","autoTopUp","topUpAmount","amount","invoice_id","currency","receiptId","description","fullName","person","dob","gender","bio","meta","gdpr","ssNumber","passportNumber","nidNumber","verified","emails","phones","urls","phone_number","phone_sid","address_sid","number","endsAt","incomingMessages","outboundMessages","virtual_phone_twilio","friendlyName","phoneNumber","lata","locality","rateCenter","latitude","longitude","region","postalCode","isoCountry","addressRequirements","beta","capabilities","user_id","person_id","account","confirmed","optIn","p_type","type_def","isDefault","provider","code","organization","urlType","street","city","exp_month","exp_year","cvc","card_brand","is_default","card_last_four","countryCode","currencyCode","callingCode","flag","iso_3166_2","gateway","recipients","cost","files","message_id","phone_id","message_sid","account_sid","transactionType","messageId","invoiceId","validateLogin","token_parse","expiryDate","dayjs","Date","loginTime","add","expires_in","timeNow","diff","root","paddingLeft","header","minHeight","TopBar","userId","onMobileNavOpen","enqueueSnackbar","useSnackbar","dispatch","useDispatch","useState","setWallet","processing","setProcessing","accessToken","setAccessToken","state","useSelector","updateBalance","find","resUser","include","resWallet","err","toBeUpdated","AppBar","elevation","regular","style","paddingRight","boxShadow","fontFamily","toFixed","CircularProgress","IconButton","overflow","wrapper","flex","breakpoints","up","contentContainer","DashboardLayout","isMobileNavOpen","setMobileNavOpen","toolbar","MainLayout","listingStyle","outline","avatarStyle","blankDiv","blankText","alignItems","textAlign","breadcrumbStyle","link","bgColorList","PeopleListingSearch","peopleList","btnPress","btnColor","Table","TableBody","listing_data","i","added","TableRow","TableCell","Avatar","Typography","align","aria-label","AppLink","Link","ListingInput","placeholderText","onTextChange","autoFocus","required","inputHeight","value","maxLength","placeholder","onChange","target","BlankAvatar","randum_bgcolor_index","Math","floor","random","toUpperCase","DeleteDialog","onDelete","Dialog","p","DialogTitle","DialogContent","DialogContentText","DialogActions","DeleteWarning","deleteText","EmitSelect","label","options","disabled","fullWidth","FormControl","InputLabel","Select","e","d","MenuItem","errorText","SheduleButton","time","sheduleButton","ErrorLabel","OnAmountAdd","onAddDeposit","loading","TextField","helperText","SuccessDeposit","green","pb","FailedDeposit","onCancel","red","DepositProcessing","CircularProcessing","FailedProcessing","ctaTitle","onCtaClick","SuccessProcessing","PopupHeader","MessageSentDialog","onGoBack","totalPeople","ChooseDateDialog","onPickDateTime","onClickDate","after_hour","tomorrow_morning","tomorrow_afternoon","monday_morning","px","py","Intl","DateTimeFormat","resolvedOptions","timeZone","format","Divider","datePickButton","PickDateTimeDialog","onScheduleSend","timeError","onDateChange","selectedDate","selectedTime","onTimeChange","minDate","next2Label","prev2Label","AddPaymentMethodCard","handleChange","card_data","PhoneCheckout","addedPhone","onRemovedPhone","onCheckoutPhone","phoneCost","totalCost","length","Grid","TableHead","parseFloat","borderBottom","GroupSendButton","anchorRef","validateData","handleToggle","alignSelf","ButtonGroup","ref","aria-controls","undefined","aria-expanded","aria-haspopup","Popper","anchorEl","current","role","transition","disablePortal","TransitionProps","placement","Grow","transformOrigin","Paper","ClickAwayListener","onClickAway","MenuList","FilterInput","withStyles","borderBottomColor","borderColor","FilterSelect","lists","onListChange","widthSelect","Autocomplete","getOptionLabel","option","v","renderInput","params","PlusButton","tooltip","Tooltip","Fab","DownloadReportButton","FilterButton","FilterList","PageBreadcrumb","Page","forwardRef","children","Helmet","Toolbar","onAddPeople","onSearchTextChange","selectedList","showFilter","setShowFilter","mt","mb","Breadcrumbs","Card","CardContent","container","md","Collapse","in","maxWidth","justify","phone_type_list","social_media_list","url_option_list","gender_list","currencyList","gateway_list","status_color","cyan","lightBlue","bg_color","message_status_list","message_log_status_list","transaction_type_list","AddPeopleDailog","formikFormRef","useRef","base64","extraData","setExtraData","onSubmitPeople","values","errors","Object","pd_form_data","create","resPerson","keys","forEach","detail","innerRef","initialValues","validationSchema","Yup","shape","min","max","onSubmit","handleBlur","handleSubmit","touched","isSubmitting","onBlur","accept","hidden","event","imageData","currentTarget","reader","FileReader","onloadend","readAsDataURL","handleFileChange","multiline","rows","PeopleList","peoples","setPeoples","total","pagination","setPagination","deleteData","setDeleteData","addPeople","setAddPeople","sort","sorting","setSorting","setLists","setSelectedList","setLoading","searching","setSearching","handlePagination","initialPeopleList","loadPeople","query","findAll","resPeople","isPhoneExist","x","page","initialQuery","resList","loadList","checkDeleteResource","deleteStatus","destroy","Container","filter","onSearchPeople","resListPeople","TableSortLabel","direction","sortType","sortName","sortQuery","sortPeople","colSpan","Alert","severity","AlertTitle","people_data","DeleteRounded","EditRounded","TablePagination","count","onChangePage","onChangeRowsPerPage","rowsPerPage","rowsPerPageOptions","socialMedia","social","address","isLoadPeople","LatestOrders","messageData","setMessageData","loadMessage","resMessage","CardHeader","minWidth","Chip","endIcon","BootstrapInput","marginTop","input","position","transitions","join","InputBase","noBorder","TrafficByDevice","useTheme","setFilter","success","failed","graphData","setGraphData","datasets","borderWidth","hoverBorderColor","labels","animation","cutoutPercentage","layout","legend","maintainAspectRatio","responsive","tooltips","bodyFontColor","divider","enabled","footerFontColor","intersect","mode","titleFontColor","devices","TelegramIcon","ErrorIcon","loadGraphData","duration","get","resFailed","resSuccess","totalMessage","differenceIcon","blue","differencePositive","differenceNegative","TotalSent","gutterBottom","MonthTotal","TotalPeople","TotalFailed","Dashboard","sentMonth","sentTotal","dashData","setDashData","loadTotalPeople","model","res","loadData","loadMessageCount","totalFailed","lastMonth","lg","sm","xl","xs","LoginView","setToken","executeRecaptcha","useGoogleReCaptcha","handleVerify","React","useCallback","token","user_data","basic64","btoa","resLogin","toString","setItem","error_array","setErrors","server_error","setSubmitting","catch_error","onLogin","onVerify","FormHelperText","my","image","SuccessEmailVerified","queryString","search","getVerification","resVerify","statusText","sendVerificationRequest","NewEmailVerified","NotFoundView","RegisterView","hasRegistered","setRegistered","confirm_password","register_params","recaptcha","postAuth","resRegister","ok","onSignUp","firstName","errors_d","Account","accountChanged","setChanged","setAccount","initialName","initialEmail","initialAccount","setInitialAccount","onSaveAccount","initialId","isValid","validate","one","patch","resUpdate","ml","action","Password","confirm","setValues","resPassword","NewPaymentMethod","onCardAdded","payment_params","cardData","setCardData","setError","trim_num","split","trim","pay_params_data","resAdded","PaymentMethod","getSvgProps","useCardBrand","addedPaymentList","setAddedPaymentList","newCard","setNewCard","set_default","loadAllCard","resCard","toLowerCase","images","Payment","setDefaultCard","AccountBalanceWallet","resDelete","onDelCard","onNewCardAdded","TabPanel","index","other","innerHeight","aria-labelledby","a11yProps","tabs","borderRight","Settings","setValue","tabBarStyle","Tabs","orientation","newValue","centered","Tab","ForgotPassword","requestSent","setRequestSent","resForgotPassword","onForgotPassword","ResetPassword","userData","setUserData","urlParams","URLSearchParams","reset_params","resResetPassword","onResetPassword","PersonalDetails","isEdit","editData","pd_initial_value","pdValues","setPdValues","parseError","err_arr","innerWidth","baseString","InputLabelProps","shrink","mr","resUpdatePD","err_data","setTimeout","onSaveAndUpdate","EmailDetails","email_params","update","isNew","emailList","setEmailList","onSaveEmail","email_data","lastIndex","handleError","resCreate","all","resEmail","editEmailList","push","onEmailTextChange","splice","onDeleteEmail","test","String","validateEmail","PhoneDetails","phone_params","phoneList","setphoneList","onSavePhone","phone_data","editphoneList","loadPhoneNumber","resDefault","onDeletePhone","SocialNetworks","social_media_params","setSocialMedia","onSaveSocialNetwork","social_data","relationships","resSocialData","editSocialList","social_id","LinkDetails","url_params","url_type","isState","urlList","seturlList","onUrlInputChange","onSaveUrl","url_data","resUrlData","editUrlList","url_id","AddressDetails","address_params","street_address","postal_code","addressList","setaddressList","countryList","setCountryList","onTextInputChange","onSaveAddress","address_data","addr_form_data","resAddress","arranged_ctr_list","loadCountryList","editAddressList","addrEditObj","onCountryChange","address_id","tabHeight","tavDiv","AddPeople","setEdit","redux_data","people_edit_data","YourPhone","setPhoneList","deleteModal","setDeleteModal","loadAllPhone","resPhone","reDel","MakeDeposit","onMakeDeposit","setAmount","modalState","setModalState","onCloseAddDeposit","onChangeAmount","Number","resDeposit","PhoneSearchToolbar","onCartClick","country_list","ShoppingCart","marginLeft","tableDiv","isPayMethodAdded","checkFund","PhoneSearch","customers","phonesList","setAddedPhone","checkoutStatus","setCheckoutStatus","checkout","setCheckout","costData","setCostData","setCountryCode","loadPhoneList","country_code","resPhoneList","arr_phone_list","buyPhone","resPay","resFund","resCreatePhone","loadConfigData","messaging","svg","voice","Call","SMS","Sms","fax","Print","MMS","Mms","VirtualPhone","tabIndex","setTabIndex","newIndex","indicatorColor","textColor","Listing","setListing","loadListingData","resListing","loadListing","sortListing","onDeleteListing","deleteRequest","onSearchList","ManageListing","setEditData","searchPeople","setSearchPeople","addedPeople","setAddedPeople","addedPeopleMeta","setAddedPeopleMeta","listingName","setListingName","limit","setLimit","setPage","loadListingPeople","resProfile","added_p","added_i","d_p","d_i","handlePageChange","handleLimitChange","newAddedPeople","slice","resSearch","indexOf","onSearchAdded","onDeletePeople","MessageToolbar","onSearchContent","statusList","onStatusChange","selectedStatus","PhotoSlider","showArrows","MessageList","messageList","setMessageList","setSelectedStatus","photoData","setPhotoData","loadMessageData","isExpanded","loadMessageList","filterQuery","sortMessage","message_data","substring","sent","handleAction","Message","AttachFileRounded","resDel","Listings","onTabChecked","checkedList","setCheckedList","checked_list","checkAdded","findIndex","checked","list_id","p_data","p_index","selected","peopleType","loadListPeople","Checkbox","deleteIndex","onListChecked","buildPeopleList","noListPeople","new_people_list","hash_list","list","nl_d","nl_i","no_list_people","people_id","Recipients","newPeopleList","onPeopleSelectedChange","setPeopleList","setNoListPeople","searchList","setSearchList","searchText","setSearchText","searchQuery","setEditPeople","sort_type","b","localeCompare","onPeopleSelected","dropMainArea","gridList","flexWrap","transform","dropzoneText","DropPhoto","allFiles","onFileChanges","setFiles","CloudUpload","dropzoneClass","dropzoneParagraphClass","fileObjects","maxFileSize","file_list","acceptedFiles","filesLimit","showPreviews","showPreviewsInDropzone","GridList","cols","backgroundImage","backgroundSize","setIsEdit","hasNonLatinCharacter","setHasNonLatinCharacter","list_name","recipients_numbers","chooseDateTime","setChooseDateTime","date","pickupDate","setPickupDate","setOpen","successPop","setSuccessPop","RegExp","onCreateMessage","schedule_date","message_form_data","offset_minutes","getTimezoneOffset","schedule_at","subtract","abs","files_list","startOf","totalCharacters","message_len","message_count","parseInt","uploadDivWidth","alignContent","prevOpen","Recipient","listPeople","list_arr","people_arr","onRecipientChange","merge_date_time","check_date","isAfter","LogToolbar","onSearchPhone","ViewMessage","messageLog","setMessageLog","setMessageId","resLog","loadMessageLog","sortLog","msg_id","loadMessageGateway","costs","Invoice","invoiceList","setInvoiceList","loadInvoices","loadInvoicesData","resInvoice","sortInvoice","onSearchInvoice","blob","file","URL","createObjectURL","onDonwloadInvoice","ViewInvoice","WalletToolbar","onDownloadSOA","onSelectedChange","prototype","capitalize","this","charAt","Wallet","setTransaction","addDeposit","setAddDeposit","downloadSOA","setDownloadSOA","start","end","reportDates","setReportDates","setSelected","loadTransactionData","resTrans","loadTransaction","onActionClick","onTransactionChange","sortTransaction","console","log","selectRange","maxDate","startIcon","routes","element","CreateMessage","people_initial_data","balance_initial_data","combineReducers","App","routing","useRoutes","store","createStore","reducer","maxSnack","ThemeProvider","reCaptchaKey","ReactDOM","render","document","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.0b86f837.chunk.js","sourcesContent":["/* eslint-disable */\n// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit http://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import { createStyles, makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles(() => createStyles({\n '@global': {\n '*': {\n boxSizing: 'border-box',\n margin: 0,\n padding: 0,\n },\n html: {\n '-webkit-font-smoothing': 'antialiased',\n '-moz-osx-font-smoothing': 'grayscale',\n height: '100%',\n width: '100%'\n },\n body: {\n backgroundColor: '#f4f6f8',\n height: '100%',\n width: '100%'\n },\n a: {\n textDecoration: 'none'\n },\n '#root': {\n height: '100%',\n width: '100%'\n },\n '.grecaptcha-badge': { \n visibility: 'hidden'\n }\n }\n}));\n\nconst GlobalStyles = () => {\n useStyles();\n\n return null;\n};\n\nexport default GlobalStyles;\n","import { createMuiTheme, colors } from '@material-ui/core';\nimport shadows from './shadows';\nimport typography from './typography';\n\nconst theme = createMuiTheme({\n palette: {\n background: {\n dark: '#F4F6F8',\n card: 'white',\n light: '#EFF2F7',\n default: colors.common.white,\n paper: colors.common.white\n },\n primary: {\n main: '#6077E7',\n },\n secondary: {\n main: colors.indigo[500]\n },\n text: {\n primary: '#1D2445',\n secondary: colors.blueGrey[600],\n navbar: 'white'\n },\n hover: {\n navbar: '#dae3ff'\n }\n },\n shadows,\n typography\n});\n\nexport default theme;\n","export default [\n 'none',\n '0 0 0 1px rgba(63,63,68,0.05), 0 1px 2px 0 rgba(63,63,68,0.15)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 2px 2px -2px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 3px 4px -2px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 3px 4px -2px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 4px 6px -2px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 4px 6px -2px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 4px 8px -2px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 5px 8px -2px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 6px 12px -4px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 7px 12px -4px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 6px 16px -4px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 7px 16px -4px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 8px 18px -8px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 9px 18px -8px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 10px 20px -8px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 11px 20px -8px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 12px 22px -8px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 13px 22px -8px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 14px 24px -8px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 16px 28px -8px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 18px 30px -8px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 20px 32px -8px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 22px 34px -8px rgba(0,0,0,0.25)',\n '0 0 1px 0 rgba(0,0,0,0.31), 0 24px 36px -8px rgba(0,0,0,0.25)'\n];\n","export default {\n h1: {\n fontWeight: 500,\n fontSize: 35,\n letterSpacing: '-0.24px'\n },\n h2: {\n fontWeight: 500,\n fontSize: 29,\n letterSpacing: '-0.24px'\n },\n h3: {\n fontWeight: 500,\n fontSize: 24,\n letterSpacing: '-0.06px'\n },\n h4: {\n fontWeight: 500,\n fontSize: 20,\n letterSpacing: '-0.06px'\n },\n h5: {\n fontWeight: 500,\n fontSize: 16,\n letterSpacing: '-0.05px'\n },\n h6: {\n fontWeight: 500,\n fontSize: 14,\n letterSpacing: '-0.05px'\n },\n overline: {\n fontWeight: 500\n }\n};\n","import React from 'react';\nimport { NavLink as RouterLink, useNavigate } from 'react-router-dom';\nimport clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport { Button, ListItem, makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles((theme) => ({\n item: {\n display: 'flex',\n paddingTop: 0,\n paddingBottom: 0\n },\n button: {\n color: theme.palette.text.secondary,\n fontWeight: theme.typography.fontWeightMedium,\n justifyContent: 'flex-start',\n letterSpacing: 0,\n padding: '10px 24px',\n textTransform: 'none',\n width: '100%',\n '&:hover': {\n backgroundColor: theme.palette.hover.navbar,\n '& $icon': {\n color: theme.palette.primary.main,\n },\n '& $title': {\n color: theme.palette.primary.main,\n }\n }\n },\n icon: {\n marginRight: theme.spacing(1)\n },\n title: {\n marginRight: 'auto'\n },\n active: {\n color: theme.palette.text.navbar,\n backgroundColor: theme.palette.primary.main,\n borderRadius: 4,\n '& $title': {\n fontWeight: theme.typography.fontWeightMedium,\n },\n '& $icon': {\n color: theme.palette.text.navbar\n }\n }\n}));\n\nconst NavItem = ({ className, href, icon: Icon, title, onClick, ...rest }) => {\n const classes = useStyles();\n const navigate = useNavigate();\n \n return (\n <ListItem className={clsx(classes.item, className)} disableGutters {...rest} >\n {\n href === \"/login\" ?\n <Button \n onClick={onClick} \n className={classes.button}\n >\n {Icon && ( <Icon className={classes.icon} size=\"20\" /> )}\n <span className={classes.title}>{title}</span>\n </Button>\n :\n <Button\n activeClassName={classes.active}\n className={classes.button}\n component={RouterLink}\n to={href}\n onClick={() => navigate(href)}\n >\n {Icon && ( <Icon className={classes.icon} size=\"20\" /> )}\n <span className={classes.title}>{title}</span>\n </Button>\n }\n\n </ListItem>\n );\n};\n\nNavItem.propTypes = {\n className: PropTypes.string,\n href: PropTypes.string,\n icon: PropTypes.elementType,\n title: PropTypes.string\n};\n\nexport default NavItem;\n","import config from '../config.json'\n\nlet auth_url = process.env.REACT_APP_AUTH_API_URL;\nlet app_url = process.env.REACT_APP_APP_API_URL\n\nif(!auth_url && !app_url){\n auth_url = config.base_url\n app_url = config.jsonapi_base_url\n}\n\nclass api {\n static get (path, bearer) {\n return new Promise((resolve, reject) => {\n let headers = new Headers();\n headers.append(\"Authorization\", `Bearer ${bearer}`);\n headers.append(\"Accept\", \"application/vnd.api+json\");\n headers.append(\"Content-Type\", \"application/vnd.api+json\");\n const request = { method: 'GET', headers, redirect: 'follow'};\n\n fetch(app_url + path, request)\n .then(response => response.json())\n .then(result => resolve(result))\n .catch(error => reject(error));\n });\n }\n\n static getVerification (path, bearer) {\n return new Promise((resolve, reject) => {\n let headers = new Headers();\n headers.append(\"Authorization\", `Bearer ${bearer}`);\n headers.append(\"Accept\", \"application/vnd.api+json\");\n headers.append(\"Content-Type\", \"application/vnd.api+json\");\n const request = { method: 'GET', headers, redirect: 'follow'};\n fetch(auth_url + path, request)\n .then(result => resolve(result))\n .catch(error => reject(error));\n });\n }\n\n static post (path, data, bearer, basic) {\n return new Promise((resolve, reject) => {\n let headers = new Headers();\n headers.append(\"Accept\", \"application/json\");\n headers.append(\"Content-Type\", \"application/json\");\n if(bearer){\n headers.append(\"Authorization\", `Bearer ${bearer}`);\n }\n if(basic){\n headers.append(\"Authorization\", `Basic ${basic}`);\n }\n const request = { method: 'POST', headers, body: JSON.stringify(data), redirect: 'follow' };\n fetch(auth_url + path, request)\n .then(response => response.json())\n .then(result => resolve(result))\n .catch(error => reject(error));\n })\n }\n\n static postAuth (path, data, bearer, basic) {\n return new Promise((resolve, reject) => {\n let headers = new Headers();\n headers.append(\"Accept\", \"application/json\");\n headers.append(\"Content-Type\", \"application/json\");\n if(bearer){\n headers.append(\"Authorization\", `Bearer ${bearer}`);\n }\n if(basic){\n headers.append(\"Authorization\", `Basic ${basic}`);\n }\n const request = { method: 'POST', headers, body: JSON.stringify(data), redirect: 'follow' };\n fetch(auth_url + path, request)\n .then(result => resolve(result))\n .catch(error => reject(error));\n })\n }\n\n static patch (path, data, bearer) {\n return new Promise((resolve, reject) => {\n let headers = new Headers();\n headers.append(\"Authorization\", `Bearer ${bearer}`);\n headers.append(\"Accept\", \"application/vnd.api+json\");\n headers.append(\"Content-Type\", \"application/vnd.api+json\");\n const request = { method: 'PATCH', headers, body: JSON.stringify(data), redirect: 'follow'};\n\n fetch(app_url + path, request)\n .then(response => response.json())\n .then(result => resolve(result))\n .catch(error => reject(error));\n })\n }\n\n static delete (path, bearer) {\n return new Promise((resolve, reject) => {\n let headers = new Headers();\n headers.append(\"Authorization\", `Bearer ${bearer}`);\n headers.append(\"Accept\", \"application/vnd.api+json\");\n headers.append(\"Content-Type\", \"application/vnd.api+json\");\n const request = { method: 'DELETE', headers, redirect: 'follow'};\n\n fetch(app_url + path, request)\n .then(response => response.json())\n .then(result => resolve(result))\n .catch(error => reject(error));\n })\n }\n}\n\nexport default api;","import React from 'react';\n\nconst Logo = (props) => {\n return (\n <img\n alt=\"Logo\"\n src=\"/static/logo.svg\"\n {...props}\n />\n );\n};\n\nexport default Logo;\n","import React, { useEffect } from 'react';\nimport { useLocation, useNavigate, Link as RouterLink } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport { Box, Drawer, Hidden, List, makeStyles } from '@material-ui/core';\nimport {\n BarChart as BarChartIcon,\n Unlock as UnlockIcon,\n Settings as SettingsIcon,\n Users as UsersIcon,\n Phone,\n FileText,\n List as ListIcon,\n MessageSquare\n} from 'react-feather';\nimport AccountBalanceWalletOutlinedIcon from '@material-ui/icons/AccountBalanceWalletOutlined';\nimport NavItem from './NavItem';\nimport api from 'src/utils/api';\nimport Logo from 'src/components/Logo';\n\nconst items = [\n {\n href: '/app/dashboard',\n icon: BarChartIcon,\n title: 'Dashboard'\n },\n {\n href: '/app/people',\n icon: UsersIcon,\n title: 'People'\n },\n {\n href: '/app/listing',\n icon: ListIcon,\n title: 'Listings'\n },\n {\n href: '/app/phones',\n icon: Phone,\n title: 'Virtual Phones'\n },\n {\n href: '/app/message',\n icon: MessageSquare,\n title: 'Messages'\n },\n {\n href: '/app/invoice',\n icon: FileText,\n title: 'Invoices'\n },\n {\n href: '/app/wallet',\n icon: AccountBalanceWalletOutlinedIcon,\n title: 'Wallet'\n },\n {\n href: '/app/settings',\n icon: SettingsIcon,\n title: 'Settings'\n },\n {\n href: '/login',\n icon: UnlockIcon,\n title: 'Logout'\n },\n];\n\nconst useStyles = makeStyles(() => ({\n mobileDrawer: {\n width: 256\n },\n desktopDrawer: {\n width: 256,\n top: 0,\n height: 'calc(100% - 0px)',\n border: 'none',\n backgroundColor: '#fbfbfb'\n },\n avatar: {\n cursor: 'pointer',\n width: 64,\n height: 64\n }\n}));\n\nconst onLogout = (navigate) => {\n let resToken = localStorage.getItem('user_token')\n resToken = resToken ? JSON.parse(resToken) : resToken;\n api.post('logout', {}, resToken.access_token).then((resLogout) => {\n if(resLogout.message){\n localStorage.removeItem('user_token');\n navigate('/login', { replace: true }); \n }\n }).catch((error) => {\n \n })\n}\n\nconst NavBar = ({ onMobileClose, openMobile }) => {\n const classes = useStyles();\n const location = useLocation();\n const navigate = useNavigate();\n\n useEffect(() => {\n if (openMobile && onMobileClose) {\n onMobileClose();\n }\n }, [location.pathname]);\n\n const content = (\n <Box height=\"100%\" display=\"flex\" flexDirection=\"column\">\n <RouterLink to=\"/\">\n <Box pl={4} pt={3} pr={4} >\n <Logo />\n </Box>\n </RouterLink>\n <Box pl={2} pt={4} pr={2} >\n <List>\n {items.map((item) => (\n <NavItem\n href={item.href}\n key={item.title}\n title={item.title}\n icon={item.icon}\n onClick={() => onLogout(navigate)}\n />\n ))}\n </List>\n </Box>\n <Box flexGrow={1} />\n </Box>\n );\n\n return (\n <>\n <Hidden lgUp>\n <Drawer\n anchor=\"left\"\n classes={{ paper: classes.mobileDrawer }}\n onClose={onMobileClose}\n open={openMobile}\n variant=\"temporary\"\n >\n {content}\n </Drawer>\n </Hidden>\n <Hidden mdDown>\n <Drawer\n anchor=\"left\"\n classes={{ paper: classes.desktopDrawer }}\n open\n variant=\"persistent\"\n >\n {content}\n </Drawer>\n </Hidden>\n </>\n );\n};\n\nNavBar.propTypes = {\n onMobileClose: PropTypes.func,\n openMobile: PropTypes.bool\n};\n\nNavBar.defaultProps = {\n onMobileClose: () => {},\n openMobile: false\n};\n\nexport default NavBar;\n","import JsonApi from \"devour-client\";\nimport config from \"../config.json\";\n\nlet app_url = process.env.REACT_APP_APP_API_URL;\n\nif (!app_url) {\n app_url = config.jsonapi_base_url;\n}\n\nexport const jsonApiInit = (access_token) => {\n const jsonApi = new JsonApi({ apiUrl: app_url });\n jsonApi.define(\"person\", JsonConfig.people);\n jsonApi.define(\"email\", JsonConfig.email);\n jsonApi.define(\"phone\", JsonConfig.phone);\n jsonApi.define(\"social-network\", JsonConfig.social_network);\n jsonApi.define(\"address\", JsonConfig.addresses);\n jsonApi.define(\"addresses\", JsonConfig.addresses);\n jsonApi.define(\"url\", JsonConfig.url);\n jsonApi.define(\"listing\", JsonConfig.listing);\n jsonApi.define(\"user\", JsonConfig.user);\n jsonApi.define(\"wallet\", JsonConfig.wallet);\n jsonApi.define(\"deposit\", JsonConfig.deposit);\n jsonApi.define(\"invoice\", JsonConfig.invoice);\n jsonApi.define(\"country\", JsonConfig.country);\n jsonApi.define(\"payment-method\", JsonConfig.payment_method);\n jsonApi.define(\"message\", JsonConfig.message);\n jsonApi.define(\"virtual-phone\", JsonConfig.virtual_phones);\n jsonApi.define(\"outbound-message\", JsonConfig.outbound_message);\n jsonApi.define(\"transaction\", JsonConfig.transaction);\n jsonApi.headers[\"Authorization\"] = `Bearer ${access_token}`;\n jsonApi.headers[\"Accept\"] = \"application/vnd.api+json\";\n jsonApi.headers[\"Content-Type\"] = \"application/vnd.api+json\";\n\n //This middleware removes the property 'id' from 'attributes' in the request. This is necesary to validate the request server side\n let requestMiddleware = {\n name: \"remove-id-from-atrributes\",\n req: (payload) => {\n if (payload.req.method === \"PATCH\") {\n delete payload.req.data.data.attributes.id;\n }\n return payload;\n },\n };\n jsonApi.insertMiddlewareBefore(\"axios-request\", requestMiddleware);\n\n return jsonApi;\n};\n\nexport const JsonConfig = {\n user: {\n type: \"\",\n id: \"\",\n name: \"\",\n email: \"\",\n cardBrand: \"\",\n status: \"\",\n cardLastFour: \"\",\n avatar: \"\",\n password: \"\",\n password_confirmation: \"\",\n createdAt: \"\",\n updatedAt: \"\",\n profile: {\n jsonApi: \"hasOne\",\n type: \"link\",\n },\n wallet: {\n jsonApi: \"hasOne\",\n type: \"link\",\n },\n listings: {\n jsonApi: \"hasMany\",\n type: \"listings\",\n },\n people: {\n jsonApi: \"hasMany\",\n type: \"people\",\n },\n organizations: {\n jsonApi: \"hasMany\",\n type: \"people\",\n },\n paymentMethods: {\n jsonApi: \"hasMany\",\n type: \"paymentMethods\",\n },\n },\n wallet: {\n id: \"\",\n balance: \"\",\n autoTopUp: \"\",\n topUpAmount: \"\",\n createdAt: \"\",\n updatedAt: \"\",\n },\n deposit: {\n id: \"\",\n amount: \"\",\n invoice_id: \"\",\n currency: \"\",\n status: \"\",\n createdAt: \"\",\n },\n invoice: {\n id: \"\",\n receiptId: \"\",\n amount: \"\",\n currency: \"\",\n cardLastFour: \"\",\n cardBrand: \"\",\n description: \"\",\n createdAt: \"\",\n },\n profile: {\n avatar: \"\",\n fullName: \"\",\n phone: \"\",\n createdAt: \"\",\n updatedAt: \"\",\n },\n listing: {\n title: \"\",\n description: \"\",\n createdAt: \"\",\n updatedAt: \"\",\n status: \"\",\n person: {\n jsonApi: \"hasMany\",\n type: \"person\",\n },\n people: {\n jsonApi: \"hasMany\",\n type: \"person\",\n },\n user: {\n jsonApi: \"hasMany\",\n type: \"user\",\n },\n },\n people: {\n title: \"\",\n fullName: \"\",\n avatar: \"\",\n dob: \"\",\n gender: \"\",\n bio: \"\",\n meta: \"\",\n gdpr: \"\",\n ssNumber: \"\",\n passportNumber: \"\",\n nidNumber: \"\",\n status: \"\",\n verified: \"\",\n createdAt: \"\",\n updatedAt: \"\",\n listings: { jsonApi: \"hasMany\", type: \"listing\" },\n organizations: { jsonApi: \"hasMany\" },\n addresses: { jsonApi: \"hasMany\", type: \"addresses\" },\n emails: { jsonApi: \"hasMany\", type: \"emails\" },\n phones: { jsonApi: \"hasMany\" },\n urls: { jsonApi: \"hasMany\", type: \"url\" },\n phone_number: \"\",\n \"social-networks\": { jsonApi: \"hasMany\", type: \"social-network\" },\n \"full-name\": \"\",\n \"ss-number\": \"\",\n \"nid-number\": \"\",\n \"passport-number\": \"\",\n },\n virtual_phones: {\n id: \"\",\n phone_sid: \"\",\n address_sid: \"\",\n number: \"\",\n status: \"\",\n endsAt: \"\",\n incomingMessages: { jsonApi: \"hasMany\", type: \"incomingMessages\" },\n outboundMessages: { jsonApi: \"hasMany\", type: \"outboundMessages\" },\n createdAt: \"\",\n updatedAt: \"\",\n },\n virtual_phone_twilio: {\n friendlyName: \"\",\n phoneNumber: \"\",\n number: \"\",\n lata: \"\",\n locality: \"\",\n rateCenter: \"\",\n latitude: \"\",\n longitude: \"\",\n region: \"\",\n postalCode: \"\",\n isoCountry: \"\",\n addressRequirements: \"\",\n beta: \"\",\n capabilities: \"\",\n },\n email: {\n user_id: \"\",\n person_id: \"\",\n \"person-id\": \"\",\n account: \"\",\n confirmed: \"\",\n optIn: \"\",\n verified: \"\",\n createdAt: \"\",\n updatedAt: \"\",\n person: {\n jsonApi: \"hasMany\",\n },\n },\n phone: {\n user_id: \"\",\n person_id: \"\",\n \"person-id\": \"\",\n p_type: \"\",\n type_def: \"\",\n number: \"\",\n isDefault: \"\",\n \"is-default\": \"\",\n optIn: \"\",\n person: { jsonApi: \"hasOne\", type: \"person\" },\n verified: \"\",\n createdAt: \"\",\n updatedAt: \"\",\n },\n social_network: {\n user_id: \"\",\n profile: \"\",\n provider: \"\",\n code: \"\",\n data: \"\",\n optIn: \"\",\n person: { jsonApi: \"hasOne\", type: \"person\" },\n organization: { jsonApi: \"hasOne\" },\n createdAt: \"\",\n updatedAt: \"\",\n },\n url: {\n user_id: \"\",\n url: \"\",\n urlType: \"\",\n \"url-type\": \"\",\n person: { jsonApi: \"hasOne\", type: \"person\" },\n organization: { jsonApi: \"hasOne\" },\n createdAt: \"\",\n updatedAt: \"\",\n },\n addresses: {\n street: \"\",\n city: \"\",\n \"postal-code\": \"\",\n \"country-id\": \"\",\n latitude: \"\",\n longitude: \"\",\n verified: \"\",\n person: { jsonApi: \"hasOne\", type: \"person\" },\n organization: { jsonApi: \"hasOne\" },\n country: { jsonApi: \"hasOne\", type: \"country\" },\n createdAt: \"\",\n updatedAt: \"\",\n },\n payment_method: {\n number: \"\",\n exp_month: \"\",\n exp_year: \"\",\n cvc: \"\",\n card_brand: \"\",\n provider: \"\",\n default: \"\",\n is_default: \"\",\n card_last_four: \"\",\n createdAt: \"\",\n updatedAt: \"\",\n },\n country: {\n name: \"\",\n fullName: \"\",\n countryCode: \"\",\n currency: \"\",\n currencyCode: \"\",\n callingCode: \"\",\n flag: \"\",\n iso_3166_2: ''\n },\n message: {\n gateway: \"\",\n content: \"\",\n recipients: {},\n status: \"\",\n cost: \"\",\n \"scheduled-at\": \"\",\n files: [],\n outboundMessages: { jsonApi: \"hasMany\", type: \"outboundMessages\" },\n createdAt: \"\",\n updatedAt: \"\",\n },\n outbound_message: {\n id: \"\",\n message_id: \"\",\n phone_id: \"\",\n message_sid: \"\",\n account_sid: \"\",\n to: \"\",\n response: \"\",\n status: \"\",\n createdAt: \"\",\n updatedAt: \"\",\n },\n transaction: {\n amount: \"\",\n transactionType: \"\",\n message_id: \"\",\n messageId: \"\",\n invoiceId: \"\",\n wallet: { jsonApi: \"hasOne\", type: \"wallet\" },\n createdAt: \"\",\n updatedAt: \"\",\n },\n};\n","import dayjs from 'dayjs';\n\nexport const validateLogin = () => {\n const resToken = localStorage.getItem('user_token');\n if(resToken){\n let token_parse = JSON.parse(resToken);\n const expiryDate = dayjs(new Date(token_parse.loginTime)).add(token_parse.expires_in, 'second');\n const timeNow = dayjs(new Date());\n const diffTime = expiryDate.diff(timeNow, 'second');\n if(diffTime > 0){\n return token_parse.access_token\n }else{\n return false;\n }\n }else{\n return false;\n }\n}\n\nexport const validateEmail = (email) => {\n const re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return re.test(String(email).toLowerCase());\n}","import React, { useState, useEffect } from \"react\";\nimport clsx from \"clsx\";\nimport PropTypes from \"prop-types\";\nimport {\n AppBar,\n Box,\n Hidden,\n IconButton,\n CircularProgress,\n Toolbar,\n makeStyles,\n} from \"@material-ui/core\";\nimport MenuIcon from \"@material-ui/icons/Menu\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { useSnackbar } from \"notistack\";\nimport { jsonApiInit } from \"../../utils/jsonApiConfig\";\nimport { validateLogin } from \"src/utils/EmitValidation\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n paddingLeft: 255,\n backgroundColor: theme.palette.background.light,\n },\n avatar: {\n width: 60,\n height: 60,\n },\n header: {\n minHeight: 68,\n },\n}));\n\nconst TopBar = ({ className, onMobileNavOpen, ...rest }) => {\n const classes = useStyles();\n const navigate = useNavigate();\n const { enqueueSnackbar } = useSnackbar();\n const dispatch = useDispatch();\n const [wallet, setWallet] = useState(\"\");\n const [processing, setProcessing] = useState(false);\n const [accessToken, setAccessToken] = useState(\"\");\n const state = useSelector((state) => state.balance);\n let userId;\n\n const updateBalance = async (access_token) => {\n const jsonApi = jsonApiInit(access_token);\n setProcessing(true);\n await jsonApi.find(\"user\").then((resUser) => {\n userId = resUser.data[0].id;\n })\n jsonApi\n .find(\"users\", userId, { include: \"wallet\" })\n .then((resWallet) => {\n setProcessing(false);\n setWallet(resWallet.data.wallet);\n })\n .catch((err) => {\n setProcessing(false);\n enqueueSnackbar(\"Failed to get wallet \"+(`${err}`), { variant: 'error' });\n });\n };\n\n if (state.toBeUpdated) {\n updateBalance(accessToken);\n dispatch({ type: \"BALANCE_UPDATE\", data: false });\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if (access_token) {\n setAccessToken(access_token);\n updateBalance(access_token);\n }\n }, []);\n\n return (\n <AppBar className={clsx(classes.root, className)} elevation={0} {...rest}>\n <Toolbar classes={{ regular: classes.header }}>\n <Box flexGrow={1} />\n <Hidden mdDown>\n <Box pr={2}>\n <Box\n onClick={() => navigate(\"/app/wallet\")}\n style={{\n borderRadius: 22,\n backgroundColor: \"#dae3ff\",\n padding: 12,\n paddingLeft: 20,\n paddingRight: 20,\n boxShadow: \"1px 1px 2px 0px #ccc9ff\",\n cursor: \"pointer\",\n }}\n >\n <Box\n style={{\n color: \"#4e41ff\",\n fontFamily: \"roboto\",\n fontSize: 16,\n fontWeight: \"700\",\n }}\n >\n Balance - ${wallet ? (wallet.balance/100).toFixed(2) : \"0.00\"} {processing ? <CircularProgress size={14} /> : \"\"}\n </Box>\n </Box>\n </Box>\n </Hidden>\n <Hidden lgUp>\n <IconButton color=\"primary\" onClick={onMobileNavOpen}>\n <MenuIcon />\n </IconButton>\n </Hidden>\n </Toolbar>\n </AppBar>\n );\n};\n\nTopBar.propTypes = {\n className: PropTypes.string,\n onMobileNavOpen: PropTypes.func,\n};\n\nexport default TopBar;\n","import React, { useState } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { makeStyles } from '@material-ui/core';\nimport NavBar from './NavBar';\nimport TopBar from './TopBar';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.light,\n display: 'flex',\n height: '100%',\n overflow: 'hidden',\n width: '100%'\n },\n wrapper: {\n backgroundColor: 'white',\n display: 'flex',\n flex: '1 1 auto',\n overflow: 'hidden',\n paddingTop: 40,\n [theme.breakpoints.up('lg')]: {\n paddingLeft: 256\n }\n },\n contentContainer: {\n display: 'flex',\n flex: '1 1 auto',\n overflow: 'hidden'\n },\n content: {\n flex: '1 1 auto',\n height: '100%',\n overflow: 'auto'\n }\n}));\n\nconst DashboardLayout = () => {\n const classes = useStyles();\n const [isMobileNavOpen, setMobileNavOpen] = useState(false);\n\n return (\n <div className={classes.root}>\n <TopBar onMobileNavOpen={() => setMobileNavOpen(true)} />\n <NavBar\n onMobileClose={() => setMobileNavOpen(false)}\n openMobile={isMobileNavOpen}\n />\n <div className={classes.wrapper}>\n <div className={classes.contentContainer}>\n <div className={classes.content}>\n <Outlet />\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default DashboardLayout;\n","import React from 'react';\nimport { Link as RouterLink } from 'react-router-dom';\nimport clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport { AppBar, Toolbar, makeStyles } from '@material-ui/core';\nimport Logo from 'src/components/Logo';\n\nconst useStyles = makeStyles(({\n root: {},\n toolbar: {\n minHeight: 68,\n backgroundColor: 'white'\n }\n}));\n\nconst TopBar = ({ className, ...rest }) => {\n const classes = useStyles();\n\n return (\n <AppBar className={clsx(classes.root, className)} elevation={2} {...rest} >\n <Toolbar className={classes.toolbar}>\n <RouterLink to=\"/\">\n <Logo width={130} />\n </RouterLink>\n </Toolbar>\n </AppBar>\n );\n};\n\nTopBar.propTypes = {\n className: PropTypes.string\n};\n\nexport default TopBar;\n","import React from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { makeStyles } from '@material-ui/core';\nimport TopBar from './TopBar';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.light,\n display: 'flex',\n height: '100%',\n overflow: 'hidden',\n width: '100%'\n },\n wrapper: {\n display: 'flex',\n flex: '1 1 auto',\n overflow: 'hidden',\n paddingTop: 64\n },\n contentContainer: {\n display: 'flex',\n flex: '1 1 auto',\n overflow: 'hidden'\n },\n content: {\n flex: '1 1 auto',\n height: '100%',\n overflow: 'auto'\n }\n}));\n\nconst MainLayout = () => {\n const classes = useStyles();\n\n return (\n <div className={classes.root}>\n <TopBar />\n <div className={classes.wrapper}>\n <div className={classes.contentContainer}>\n <div className={classes.content}>\n <Outlet />\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default MainLayout;\n","export const listingStyle = {\n input: {\n backgroundColor: '#86c3ff21', \n width: '100%', \n borderRadius: 6, \n border: 'none', \n outline: 'none', \n color: '#5a5a5a', \n fontSize: 20,\n paddingLeft: 32, \n paddingRight: 32, \n }\n}\n\nexport const avatarStyle = {\n blankDiv: {\n width: 40, \n height: 40, \n borderRadius: 24, \n marginRight: 8 \n },\n blankText: {\n justifyContent: 'center', \n alignItems: 'center',\n fontWeight: 'bold', \n fontSize: 20, \n color: 'white', \n paddingTop: 4,\n textAlign: 'center'\n }\n}\n\nexport const breadcrumbStyle = {\n link: {\n textDecoration: 'none',\n cursor: 'pointer',\n \"&:hover\": {\n textDecoration: 'none',\n }\n }\n}\n\nexport const bgColorList = [ \"#4cc9f0\", \"#7209b7\", \"#3a0ca3\", \"#4361ee\", \"#4cc9f0\"];","import React from 'react';\nimport {\n Button,\n Table,\n TableBody,\n TableHead,\n TableCell,\n TableRow,\n Typography,\n Avatar,\n Box,\n CircularProgress,\n IconButton,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions,\n FormControl,\n InputLabel,\n Select,\n MenuItem,\n colors,\n Divider,\n TextField,\n Grid,\n Link,\n ButtonGroup, ClickAwayListener, Grow, Paper,Popper, MenuList,\n withStyles,\n Fab,\n Tooltip\n} from '@material-ui/core';\nimport { listingStyle, bgColorList, avatarStyle, breadcrumbStyle } from '../theme/emitStyle';\nimport { Minus, Plus, FileText } from 'react-feather';\nimport CheckCircleOutlineIcon from '@material-ui/icons/CheckCircleOutline';\nimport ErrorOutlineIcon from '@material-ui/icons/ErrorOutline';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport CloseIcon from '@material-ui/icons/Close';\nimport EventIcon from '@material-ui/icons/Event';\nimport Calendar from 'react-calendar';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport dayjs from 'dayjs';\nimport { FilterList } from '@material-ui/icons';\nimport theme from '../theme'\n\nexport const AuthErrorMessage = (props) => {\n return(\n <div style={{ color: 'red', fontWeight: 'bold', fontFamily: 'roboto' }}>{props.text}</div>\n )\n}\n\nexport const PeopleListingSearch = (props) => {\n let { peopleList, classes, btnColor, btnPress, type } = props\n return(\n <Table>\n <TableBody >\n {\n peopleList.map((listing_data, i) => {\n return(\n !listing_data.added?\n <TableRow hover key={listing_data.id} >\n <TableCell width={48} style={{ paddingTop: 8 }} >\n <Avatar className={classes.avatar} src={listing_data.avatar} />\n </TableCell> \n <TableCell padding=\"none\">\n <Typography variant=\"h5\">{listing_data[\"full-name\"]}</Typography>\n <Typography variant=\"body1\">{listing_data.title}</Typography>\n </TableCell>\n <TableCell width=\"80\" align=\"right\" padding=\"none\" >\n <IconButton \n onClick={() => btnPress(listing_data, i)} \n aria-label=\"delete\" \n size=\"small\" \n style={{ width: 24, height: 24, color: 'white', backgroundColor: theme.palette.primary.main }} \n >\n {\n type === \"add\" ?\n <Plus fontSize=\"small\" />\n :\n <Minus fontSize=\"small\" />\n }\n </IconButton>\n </TableCell>\n </TableRow>\n : null\n )\n })\n }\n </TableBody>\n </Table>\n )\n}\n\nexport const EmptyTable = ({ message }) => {\n return(\n <Box pt={4} pb={4} display=\"flex\" alignItems=\"center\" flexDirection=\"column\" >\n <Box pt={2} pb={2}>\n <Typography style={{ fontSize: 30 }} >{message}</Typography>\n </Box>\n </Box>\n )\n}\n\nexport const AppLink = ({ navigate, title, href }) => {\n return(\n <Link \n color=\"inherit\" \n onClick={() => navigate(href ? href : '/app/dashboard')} \n style={breadcrumbStyle.link} \n >\n {title ? title : 'App'}\n </Link>\n )\n}\n\nexport const ListingInput = ({ placeholderText, onTextChange, autoFocus, required, inputHeight, value }) => {\n return(\n <input \n required={required}\n autoFocus={autoFocus}\n maxLength={125}\n placeholder={placeholderText}\n style={{...listingStyle.input, ...{ height: inputHeight ? inputHeight : 56 }}}\n onChange={(text) => onTextChange(text.target.value)}\n value={value}\n />\n )\n}\n\nexport const BlankAvatar = (props) => {\n let { name } = props;\n const randum_bgcolor_index = Math.floor(Math.random() * 5);\n return(\n <Box style={{ backgroundColor: bgColorList[randum_bgcolor_index], width: 40, height: 40, borderRadius: 24, marginRight: 8 }}>\n <Typography variant=\"body1\" style={avatarStyle.blankText} >{name[0].toUpperCase()}</Typography>\n </Box>\n )\n}\n\nexport const DeleteDialog = (props) => {\n const { status, onDelete, onClose, name, type } = props;\n return(\n <Dialog open={status} onClose={() => {}} >\n <Box p={2}>\n <DialogTitle>\n <Typography style={{ fontSize: 22 }} >Are you sure want to delete?</Typography>\n </DialogTitle>\n <DialogContent>\n {\n type === \"people\" ?\n <DialogContentText component=\"h4\" >\n You are going to delete all the data of <Box component=\"span\" style={{ fontWeight: 'bold' }} >{name}</Box>, and it include personal details, phones,emails, addresses, social networks and urls.\n </DialogContentText>\n :\n <DialogContentText component=\"h4\" >\n You are going to delete list which include <Box component=\"span\" style={{ fontWeight: 'bold' }} >{name}</Box> people, and all the data related to people will not be deleted.\n </DialogContentText>\n }\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"primary\">Cancel</Button>\n <Button onClick={onDelete} color=\"primary\" >Delete</Button>\n </DialogActions>\n </Box>\n </Dialog>\n )\n}\n\nexport const DeleteWarning = ({ status, onClose, onDelete, title, deleteText }) => {\n return(\n <Dialog open={status} onClose={() => {}} >\n <Box p={2}>\n <DialogTitle>\n <Typography style={{ fontSize: 22 }} >{title}</Typography>\n </DialogTitle>\n <DialogContent>\n <DialogContentText component=\"h4\" >\n {deleteText}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"primary\">Cancel</Button>\n <Button onClick={onDelete} color=\"primary\" >Delete</Button>\n </DialogActions>\n </Box>\n </Dialog>\n )\n}\n\nexport const EmitSelect = ({ name, value, onChange, label, options, disabled, fullWidth, error }) => {\n return(\n <FormControl fullWidth variant=\"outlined\" >\n <InputLabel >{label}</InputLabel>\n <Select\n value={value}\n onChange={(e) => onChange(e)}\n fullWidth={fullWidth}\n label={label}\n disabled={disabled}\n name={name}\n error={Boolean(error)}\n >\n {\n options.map((d, i) => {\n return(\n <MenuItem key={i} value={d.value}>{d.name}</MenuItem>\n )\n })\n }\n </Select>\n <ErrorLabel errorText={error} />\n </FormControl>\n )\n}\n\nexport const SheduleButton = ({ classes, title, time, onClick }) => {\n const textStyle = {\n fontSize: 20, fontFamily: 'Roboto', fontWeight: '400', textTransform: 'none'\n }\n return(\n <Button className={classes.sheduleButton} onClick={onClick} >\n <Box component=\"div\" style={textStyle} >{title}</Box>\n <Box component=\"div\" style={{ display: 'flex', justifyContent: 'flex-end', fontSize: 18, fontFamily: 'Roboto', fontWeight: '400', textTransform: 'none' }} >\n {time}\n </Box>\n </Button>\n )\n}\n\nexport const ErrorLabel = ({ errorText }) => {\n return(\n <Box style={{ paddingTop: 4, paddingLeft: 8 }} >\n <Box style={{ fontFamily: 'Roboto', color: '#f44336', fontSize: '0.75em' }} >{errorText}</Box>\n </Box>\n )\n}\n\nexport const OnAmountAdd = ({ onChange, amount, error, onAddDeposit, loading }) => {\n return(\n <Box component=\"div\" pt={2}>\n <Box pt={2} >\n <TextField \n error={Boolean(error)}\n helperText={error}\n placeholder=\"Enter amount (example: 10.50)\"\n label=\"Amount (USD)\"\n onChange={(e) => onChange(e)}\n value={amount}\n variant=\"outlined\"\n fullWidth\n />\n </Box>\n <Box pt={3} display=\"flex\" flexDirection=\"row\" justifyContent=\"flex-end\" >\n <Button \n onClick={onAddDeposit} \n color=\"primary\" \n variant=\"contained\" \n >\n {\"Add Deposit\"}\n </Button>\n </Box>\n </Box>\n )\n}\n\nexport const SuccessDeposit = ({ onClose }) => {\n return(\n <Box component=\"div\" pt={4}>\n <Box display=\"flex\" justifyContent=\"center\">\n <CheckCircleOutlineIcon style={{ color: colors.green[500], width: 100, height: 100 }} />\n </Box>\n <Box pt={2} pb={4} >\n <Typography style={{ fontFamily: 'Roboto', textAlign: 'center', fontSize: 20 }} >\n Deposit successfully made to your account\n </Typography>\n </Box>\n <Box pr={1} display=\"flex\" justifyContent=\"flex-end\" >\n <Button onClick={onClose} variant=\"contained\" >Close</Button>\n </Box>\n </Box>\n )\n}\n\nexport const FailedDeposit = ({ onCancel }) => {\n return(\n <Box component=\"div\" pt={4}>\n <Box display=\"flex\" justifyContent=\"center\">\n <ErrorOutlineIcon style={{ color: colors.red[500], width: 100, height: 100 }} />\n </Box>\n <Box pt={2} pb={4} >\n <Typography style={{ textAlign: 'center', fontSize: 20 }} >\n Payment failed please try again\n </Typography>\n </Box>\n <Box pr={1} display=\"flex\" justifyContent=\"flex-end\" >\n <Button onClick={onCancel} variant=\"contained\" >Close</Button>\n </Box>\n </Box>\n )\n}\n\nexport const DepositProcessing = () => {\n return(\n <Box component=\"div\" pt={4} pb={4}>\n <Box display=\"flex\" justifyContent=\"center\">\n <CircularProgress style={{ width: 60, height: 60 }} />\n </Box>\n <Box pt={2}>\n <Typography style={{ textAlign: 'center', fontSize: 20 }} >Processing your deposit</Typography>\n </Box>\n </Box>\n );\n}\n\nexport const CircularProcessing = ({ title, size }) => {\n return(\n <Box component=\"div\" pt={4} pb={4}>\n <Box display=\"flex\" justifyContent=\"center\">\n <CircularProgress style={{ width: size ? size : 60, height: size ? size : 60 }} />\n </Box>\n <Box pt={2}>\n {\n title ?\n <Typography style={{ textAlign: 'center', fontSize: 20 }} >{title}</Typography>\n : null\n }\n </Box>\n </Box>\n );\n}\n\nexport const FailedProcessing = ({ onCancel, title, ctaTitle, onCtaClick }) => {\n return(\n <Box component=\"div\" pt={4}>\n <Box display=\"flex\" justifyContent=\"center\">\n <ErrorOutlineIcon style={{ color: colors.red[500], width: 100, height: 100 }} />\n </Box>\n <Box pt={2} pb={2} >\n <Typography style={{ textAlign: 'center', fontSize: 20 }} >\n {title}\n </Typography>\n </Box>\n <Box display=\"flex\" flexDirection=\"row\" justifyContent=\"flex-end\" pt={2} >\n <Box>\n <Button onClick={onCancel} variant=\"contained\" >Close</Button>\n </Box>\n {\n ctaTitle ?\n <Box pl={2} >\n <Button onClick={onCtaClick} color=\"primary\" variant=\"contained\" >{ctaTitle}</Button>\n </Box>\n : null\n }\n </Box>\n </Box>\n )\n}\n\nexport const SuccessProcessing = ({ title, onClose }) => {\n return(\n <Box component=\"div\" pt={4}>\n <Box display=\"flex\" justifyContent=\"center\">\n <CheckCircleOutlineIcon style={{ color: colors.green[500], width: 100, height: 100 }} />\n </Box>\n <Box pt={2} pb={4} >\n <Typography style={{ fontFamily: 'Roboto', textAlign: 'center', fontSize: 20 }} >\n {title}\n </Typography>\n </Box>\n <Box display=\"flex\" justifyContent=\"flex-end\" >\n <Button onClick={onClose} variant=\"contained\" >\n Close\n </Button>\n </Box>\n </Box>\n )\n}\n\nexport const PopupHeader = ({ title, onClose }) => {\n return(\n <Box display=\"flex\" flexDirection=\"row\" >\n <Box style={{ flex: 1 }} ></Box>\n <Box style={{ flex: 10 }}>\n <Box display=\"flex\" flexDirection=\"row\" justifyContent=\"center\">\n <Typography style={{ fontSize: 24 }} >{title}</Typography>\n </Box>\n </Box>\n <Box style={{ flex: 1 }} >\n <IconButton onClick={onClose} >\n <CloseIcon />\n </IconButton>\n </Box>\n </Box>\n )\n}\n\nexport const MessageSentDialog = ({ status, onClose, onGoBack, title, totalPeople }) => {\n return(\n <Dialog open={status}>\n <Box p={4} style={{ width: 450 }} >\n <Box display=\"flex\" flexDirection=\"row\" >\n <Box style={{ flex: 14 }} ></Box>\n <Box style={{ flex: 2 }} >\n <IconButton onClick={onClose} >\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </Box>\n </Box>\n <Box pb={4}>\n <Box>\n <Typography style={{ fontSize: 28, textAlign: 'center' }} >\n {title}\n </Typography>\n </Box>\n <Box>\n <Typography style={{ textAlign: 'center', fontSize: 120, color: colors.green[500] }} >\n {totalPeople}\n </Typography>\n </Box>\n <Box display=\"flex\" flexDirection=\"row\" justifyContent=\"center\" >\n <Box pr={2} >\n <Button color=\"primary\" variant=\"contained\" onClick={onGoBack} >Go Back</Button>\n </Box>\n </Box>\n </Box>\n </Box>\n </Dialog>\n )\n}\n\nexport const ChooseDateDialog = ({ status, classes, onClose, onPickDateTime, onClickDate, after_hour, tomorrow_morning, tomorrow_afternoon, monday_morning }) => {\n return(\n <Dialog open={status} onClose={() => {}}>\n <Box px={2} py={2}>\n <Box pl={3} pt={1} pb={1} >\n <Box display=\"flex\" flexDirection=\"row\" >\n <Box style={{ flex: 14 }} >\n <Typography style={{ fontSize: 24 }} >\n Schedule date\n </Typography>\n <Typography style={{ fontSize: 16, color: '#797979' }} >\n Your timezone: {Intl.DateTimeFormat().resolvedOptions().timeZone}\n </Typography>\n </Box>\n <Box style={{ flex: 2 }} >\n <IconButton onClick={onClose} >\n <CloseIcon />\n </IconButton>\n </Box>\n </Box>\n </Box>\n <Box display=\"flex\" flexDirection=\"column\" >\n <SheduleButton \n classes={classes} \n title=\"After one hour\" \n time={after_hour.format('MMM D, hh:mm A')}\n onClick={() => onClickDate(\"later\", after_hour)}\n />\n <SheduleButton \n classes={classes} \n title=\"Tomorrow morning\" \n time={tomorrow_morning.format('MMM D, hh:mm A')}\n onClick={() => onClickDate(\"later\", tomorrow_morning)}\n />\n <SheduleButton \n classes={classes} \n title=\"Tomorrow afternoon\" \n time={tomorrow_afternoon.format('MMM D, hh:mm A')}\n onClick={() => onClickDate(\"later\", tomorrow_afternoon)}\n />\n <SheduleButton \n classes={classes} \n title=\"Monday morning\" \n time={`${monday_morning.format('MMM D, hh:mm A')}`}\n onClick={() => onClickDate(\"later\", monday_morning)}\n />\n </Box>\n </Box>\n <Divider />\n <Button className={classes.datePickButton} onClick={onPickDateTime} >\n <Box style={{ display: 'flex' }} >\n <Box pr={1} style={{ paddingTop: 6 }} ><EventIcon /></Box>\n <Box onClick={() => {}} color=\"primary\" style={{ fontSize: 20 }} >Pick up date and time</Box>\n </Box>\n </Button>\n </Dialog>\n )\n}\n\nexport const PickDateTimeDialog = ({ status, onClose, onScheduleSend, timeError, onDateChange, selectedDate, selectedTime, onTimeChange }) => {\n return(\n <Dialog open={status} onClose={() => {}} >\n <Box pl={3} pt={2} pb={1} >\n <Box display=\"flex\" flexDirection=\"row\">\n <Box style={{ flex: 14 }} >\n <Typography style={{ fontSize: 24 }} >\n Pick date & time\n </Typography>\n <Typography style={{ fontSize: 20, color: '#797979' }} >\n Your timezone {Intl.DateTimeFormat().resolvedOptions().timeZone}\n </Typography>\n </Box>\n <Box style={{ flex: 2 }} >\n <IconButton onClick={onClose} >\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </Box>\n </Box>\n <Box pt={2} display=\"flex\" >\n <Box>\n <Calendar\n onChange={onDateChange}\n value={selectedDate}\n minDate={new Date()}\n next2Label={null}\n prev2Label={null}\n />\n </Box>\n <Box pl={4} pr={4} >\n <Box>\n <TextField \n label=\"Date\" \n value={dayjs(selectedDate).format('MMM d, YYYY')}\n />\n </Box>\n <Box pt={2}>\n <TextField \n error={Boolean(timeError)}\n label=\"Time\" \n value={selectedTime}\n onChange={(text) => onTimeChange(text)}\n helperText={timeError}\n />\n </Box>\n </Box>\n </Box>\n <Box pt={4} pr={2} pb={2} display=\"flex\" justifyContent=\"flex-end\" >\n <Box pr={2} >\n <Button onClick={onClose} >Cancel</Button>\n </Box>\n <Button color=\"primary\" variant=\"contained\" onClick={onScheduleSend} >Schedule and Send</Button>\n </Box>\n </Box>\n </Dialog>\n )\n};\n\nexport const AddPaymentMethodCard = ({ handleChange, card_data }) => {\n return(\n <Box style={{ display: 'flex', flexDirection: 'column', width: '100%' }}>\n <Box display=\"flex\">\n <TextField\n fullWidth\n label=\"Card Number\"\n placeholder={'1234 1234 1234 1234'}\n margin=\"normal\"\n name=\"number\"\n onChange={(e) => handleChange(e)}\n type=\"text\"\n value={card_data.number}\n variant=\"outlined\"\n />\n </Box>\n <Box style={{ display: 'flex' }}>\n <Box style={{ flex: 10 }}>\n <TextField\n label=\"Expiry month\"\n margin=\"normal\"\n name=\"exp_month\"\n onChange={(e) => handleChange(e)}\n type=\"number\"\n value={card_data.exp_month}\n variant=\"outlined\"\n />\n </Box>\n <Box style={{ flex: 1 }}></Box>\n <Box style={{ flex: 10 }}>\n <TextField\n label=\"Expiry year\"\n margin=\"normal\"\n name=\"exp_year\"\n onChange={(e) => handleChange(e)}\n type=\"number\"\n value={card_data.exp_year}\n variant=\"outlined\"\n />\n </Box>\n <Box style={{ flex: 1 }}></Box>\n <Box style={{ flex: 10 }}>\n <TextField\n label=\"CVC\"\n margin=\"normal\"\n name=\"cvc\"\n onChange={(e) => handleChange(e)}\n type=\"number\"\n value={card_data.cvc}\n variant=\"outlined\"\n />\n </Box>\n </Box>\n </Box>\n )\n}\n\nexport const PhoneCheckout = ({ onClose, addedPhone, onRemovedPhone, onCheckoutPhone, processing, phoneCost }) => {\n const totalCost = phoneCost ? addedPhone.length*(phoneCost/100) : '';\n return(\n <Grid>\n <PopupHeader title=\"Shopping Cart\" onClose={onClose} />\n <Box pt={2} pb={1}>\n <Table>\n <TableHead>\n <TableRow>\n <TableCell width=\"120\" >Phone</TableCell>\n <TableCell width=\"100\" align=\"right\" >Cost</TableCell>\n <TableCell width=\"80\" align=\"center\" >Action</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {\n addedPhone.map((d, i) => {\n return(\n <TableRow key={i}>\n <TableCell width=\"160\" >{d.friendlyName}</TableCell>\n <TableCell width=\"100\" align=\"right\" >${phoneCost ? parseFloat(phoneCost/100).toFixed(2) : ''}</TableCell>\n <TableCell width=\"80\" align=\"center\" >\n <IconButton \n size=\"small\" \n onClick={() => onRemovedPhone(d, i)}\n style={{ width: 18, height: 18, color: 'white', backgroundColor: '#7465f2' }} \n >\n <Minus fontSize=\"small\" />\n </IconButton>\n </TableCell>\n </TableRow>\n )\n })\n }\n </TableBody>\n </Table>\n </Box>\n <Table>\n <TableHead>\n <TableRow>\n <TableCell width=\"160\" align=\"right\" style={{ borderBottom: 0 }} >\n <Typography style={{ fontWeight: '700' }} >Total</Typography>\n </TableCell>\n <TableCell width=\"100\" align=\"right\" style={{ borderBottom: 0 }} >\n <Typography style={{ fontWeight: '500' }} >${parseFloat(totalCost).toFixed(2)}</Typography>\n </TableCell>\n <TableCell width=\"80\" style={{ borderBottom: 0 }} ></TableCell>\n </TableRow>\n </TableHead>\n </Table>\n {\n !processing ?\n <Box pt={2} display=\"flex\" justifyContent=\"flex-end\">\n <Button \n style={{ width: '100%' }} \n variant=\"contained\" \n color=\"primary\" \n onClick={onCheckoutPhone}\n >\n Checkout\n </Button>\n </Box>\n : \n <Box pt={4} display=\"flex\" justifyContent=\"center\" >\n <CircularProgress />\n </Box>\n }\n </Grid>\n )\n}\n\nexport const GroupSendButton = ({ open, anchorRef, validateData, handleToggle }) => {\n return(\n <Box pt={2} display=\"flex\" flexDirection=\"row\" justifyContent=\"flex-end\">\n <Box pr={1} style={{ alignSelf:\"center\" }}>\n <Button onClick={() => validateData('draft')} color=\"secondary\">Save as Draft</Button>\n </Box>\n <Box>\n <ButtonGroup variant=\"contained\" color=\"primary\" ref={anchorRef} aria-label=\"split button\">\n <Button onClick={() => validateData('now')}>Send Now</Button>\n <Button\n color=\"primary\"\n size=\"small\"\n aria-controls={open ? 'split-button-menu' : undefined}\n aria-expanded={open ? 'true' : undefined}\n aria-label=\"select merge strategy\"\n aria-haspopup=\"menu\"\n onClick={handleToggle}\n >\n <ArrowDropDownIcon />\n </Button>\n </ButtonGroup>\n </Box>\n <Popper open={open} anchorEl={anchorRef.current} role={undefined} transition disablePortal>\n {({ TransitionProps, placement }) => (\n <Grow\n {...TransitionProps}\n style={{\n transformOrigin: placement === 'bottom' ? 'center top' : 'center bottom',\n }}\n >\n <Paper>\n <ClickAwayListener onClickAway={handleToggle}>\n <MenuList id=\"split-button-menu\">\n <MenuItem onClick={() => validateData('later')} >\n <Button> Send later </Button>\n </MenuItem>\n </MenuList>\n </ClickAwayListener>\n </Paper>\n </Grow>\n )}\n </Popper>\n </Box>\n )\n}\n\nconst FilterInput = withStyles({\n root: {\n '& label.Mui-focused': {\n color: 'white',\n },\n '& .MuiInput-underline:after': {\n borderBottomColor: '#b3b3b3',\n },\n '& .MuiOutlinedInput-root': {\n '& fieldset': {\n borderColor: '#d8d8d8',\n },\n '&:hover fieldset': {\n borderColor: '#e8e8e8',\n },\n '&.Mui-focused fieldset': {\n borderColor: '#ececec',\n },\n },\n },\n})(TextField);\n\nexport const FilterSelect = ({ lists, onListChange, widthSelect, placeholder }) => {\n return(\n <Autocomplete\n options={lists}\n getOptionLabel={(option) => option.label}\n style={{ width: widthSelect }}\n onChange={(e, v) => onListChange(v)}\n renderInput={(params) => \n <FilterInput \n {...params} \n variant=\"outlined\"\n size=\"small\" \n placeholder={placeholder}\n />\n }\n />\n );\n}\n\nexport const PlusButton = ({ onClick, tooltip }) => {\n return(\n <Tooltip title={tooltip} >\n <Fab \n onClick={onClick} \n size=\"medium\" \n style={{ backgroundColor: theme.palette.primary.main }} \n aria-label=\"add\" \n >\n <Plus style={{ color: 'white' }} />\n </Fab>\n </Tooltip>\n );\n};\n\nexport const DownloadReportButton = ({ onClick, tooltip }) => {\n return(\n <Tooltip title={tooltip} >\n <Fab \n onClick={onClick} \n size=\"medium\" \n style={{ backgroundColor: theme.palette.primary.main }} \n aria-label=\"FileText\" \n >\n <FileText style={{ color: 'white' }} />\n </Fab>\n </Tooltip>\n );\n};\n\nexport const FilterButton = ({ onClick, tooltip }) => {\n return(\n <Tooltip title={tooltip} >\n <Fab \n onClick={onClick} \n size=\"medium\" \n style={{ backgroundColor: theme.palette.primary.main }} \n aria-label=\"filter\" \n >\n <FilterList style={{ color: 'white' }} />\n </Fab>\n </Tooltip>\n );\n};\n\nexport const PageBreadcrumb = ({ title }) => {\n return(\n <Typography \n style={{ color: theme.palette.primary.main, fontWeight: '700' }} \n >\n {title}\n </Typography>\n );\n}","import React, { forwardRef } from 'react';\nimport { Helmet } from 'react-helmet';\nimport PropTypes from 'prop-types';\n\nconst Page = forwardRef(({\n children,\n title = '',\n ...rest\n}, ref) => {\n return (\n <div\n ref={ref}\n {...rest}\n >\n <Helmet>\n <title>{title}</title>\n </Helmet>\n {children}\n </div>\n );\n});\n\nPage.propTypes = {\n children: PropTypes.node.isRequired,\n title: PropTypes.string\n};\n\nexport default Page;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { Box, Card, CardContent, Grid, Breadcrumbs, Collapse, Paper } from '@material-ui/core';\n\nimport { ListingInput, AppLink, FilterSelect, PlusButton, FilterButton, PageBreadcrumb } from 'src/components/AllComponent';\n\nconst Toolbar = ({ className, navigate, onAddPeople, onSearchTextChange, selectedList, lists, onListChange }) => {\n const [showFilter, setShowFilter] = useState(false);\n\n return (\n <div className={clsx(className)} >\n <Box mt={1}>\n <Box mb={1}>\n <Breadcrumbs aria-label=\"breadcrumb\">\n <AppLink navigate={navigate} />\n <PageBreadcrumb title=\"People\" />\n </Breadcrumbs>\n </Box>\n <Card elevation={0}>\n <CardContent>\n <Grid container>\n <Grid item md={5} >\n <Collapse in={!showFilter}>\n <Paper elevation={0} >\n <Box maxWidth={500}>\n <ListingInput \n placeholderText=\"Type name of people to search\"\n inputHeight={48}\n onTextChange={(text) => onSearchTextChange(text)}\n />\n </Box>\n </Paper>\n </Collapse>\n <Collapse in={showFilter}>\n <Paper elevation={0} >\n <Box style={{ display: 'flex' }} >\n <FilterSelect \n lists={lists}\n onListChange={e => onListChange(e)}\n widthSelect={220}\n placeholder=\"Filter by list\" \n />\n </Box>\n </Paper>\n </Collapse>\n </Grid>\n <Grid item md={7} >\n <Grid container justify=\"flex-end\" >\n <Box pr={2}>\n <FilterButton onClick={() => setShowFilter(!showFilter)} tooltip=\"View filter\" />\n </Box>\n <Box>\n <PlusButton onClick={onAddPeople} tooltip=\"Add People\" />\n </Box>\n </Grid>\n </Grid>\n \n </Grid>\n </CardContent>\n </Card>\n </Box>\n </div>\n );\n};\n\nToolbar.propTypes = {\n className: PropTypes.string\n};\n\nexport default Toolbar;\n","import { colors } from '@material-ui/core';\n\nexport const phone_type_list = [\n { name: \"Home\", value: \"home\" },\n { name: \"Work\", value: \"work\" },\n { name: \"Mobile\", value: \"mobile\" },\n { name: \"Other\", value: \"other\" }\n];\n\nexport const social_media_list = [\n { name: \"Facebook\", value: \"facebook\" },\n { name: \"Twitter\", value: \"twitter\" },\n { name: \"Instagram\", value: \"instagram\" },\n { name: \"Telegram\", value: \"telegram\" },\n { name: \"WhatsApp\", value: \"whatsApp\" }\n];\n\nexport const url_option_list = [\n { name: \"Website\", value: 'website' },\n { name: \"Blog\", value: 'blog' },\n];\n\nexport const gender_list = [\n { name: \"Male\", value: 1 },\n { name: \"Female\", value: 2 },\n { name: \"Intersex\", value: 3 },\n { name: \"Androgyne\", value: 4 },\n { name: \"Queer\", value: 5 },\n { name: \"Questioning\", value: 6 },\n { name: \"Other\", value: 7 },\n { name: \"Prefer not to say\", value: 8 }\n];\n\nexport const currencyList = {\n 'usd': '$',\n 'eur': '€'\n};\n\nexport const gateway_list = [\n { name: 'SMS', value: 'sms' },\n { name: 'MMS', value: 'mms' },\n];\n\nexport const status_color = {\n \"draft\": colors.cyan[800],\n \"processed\": colors.green[500],\n \"send\": colors.green[800],\n \"sent\": colors.green[800],\n \"processing\": colors.lightBlue[500],\n \"scheduled\": colors.indigo[500],\n \"failed\": colors.red[500],\n \"active\": colors.green[700],\n \"inactive\": colors.red[400],\n};\n\nexport const bg_color = {\n 'draft': colors.cyan[100],\n 'send': colors.green[100],\n 'sent': colors.green[100],\n 'processed': colors.green[100],\n 'failed': colors.red[100],\n 'active': colors.green[100],\n 'inactive': colors.red[100],\n 'processing': colors.lightBlue[100],\n 'scheduled': colors.indigo[100],\n}\n\nexport const message_status_list = [\n { label: 'draft', value: 'draft' },\n { label: 'send', value: 'send' },\n { label: 'processing', value: 'processing' },\n { label: 'processed', value: 'processed' },\n { label: 'scheduled', value: 'scheduled' },\n];\n\nexport const message_log_status_list = [\n { label: 'Send', value: 'send' },\n { label: 'Failed', value: 'failed' },\n];\n\nexport const transaction_type_list = [\n { label: 'Debit', value: 'debit' },\n { label: 'Credit', value: 'credit' },\n];","import React, { useRef, useState } from 'react';\nimport { Card, Grid, CardContent, Dialog, Box, TextField, Button, Avatar, CircularProgress } from '@material-ui/core';\nimport * as Yup from 'yup';\nimport { Formik } from 'formik';\n\nimport { PopupHeader, EmitSelect } from 'src/components/AllComponent';\nimport { gender_list } from '../../../utils/SelectOptions';\nimport { jsonApiInit } from 'src/utils/jsonApiConfig';\n\nconst AddPeopleDailog = ({ status, onClose, accessToken, enqueueSnackbar }) => {\n const formikFormRef = useRef();\n const [extraData, setExtraData] = useState({ base64: '', gender: 1 });\n const [processing, setProcessing] = useState(false);\n const pd_initial_value = { title: '',fullName: '', phone: '', bio: '' };\n\n const handleFileChange = (event) => {\n let imageData = event.currentTarget.files;\n if(imageData.length !== 0){\n var reader = new FileReader();\n reader.onloadend = () => {\n setExtraData({ ...extraData, ...{ base64: reader.result }});\n };\n reader.readAsDataURL(imageData[0]);\n }\n }\n\n const onSubmitPeople = () => {\n let { values, errors } = formikFormRef.current;\n const error_array = Object.values(errors);\n if(error_array.length === 0){\n setProcessing(true);\n let pd_form_data = {\n \"title\": values.title,\n \"full-name\": values.fullName,\n \"gender\": extraData.gender,\n \"bio\": values.bio,\n \"avatar\": extraData.base64,\n \"phone_number\": values.phone\n }\n\n const jsonApi = jsonApiInit(accessToken);\n jsonApi.create('person', pd_form_data).then((resPerson) => {\n onClose(true);\n setProcessing(false);\n setExtraData({ base64: '', gender: 1 });\n enqueueSnackbar('People added successfully', { variant: 'success' });\n }).catch(err => {\n setProcessing(false);\n\n Object.keys(err).forEach(key => {\n enqueueSnackbar(err[key].detail, { variant: 'error' });\n });\n })\n }\n }\n\n return(\n <Dialog open={status}>\n <Grid>\n <Card style={{ width: 500 }}>\n <CardContent>\n <Box pl={2} >\n <PopupHeader title=\"Add people\" onClose={() => onClose(false)} />\n </Box>\n <Box pl={2} pr={2} >\n <Formik\n innerRef={formikFormRef}\n initialValues={pd_initial_value}\n validationSchema={Yup.object().shape({\n fullName: Yup.string().min(2, 'Full name must be at least 2 characters').max(255, 'Full name must be at most 255 characters').required('Full name is required'),\n title: Yup.string().min(2, 'Title must be at least 2 characters').max(125, 'Title must be at most 125 characters'),\n bio: Yup.string().max(5000, 'Notes must be at most 5000 characters')\n })}\n onSubmit={(data) => {}}\n >\n {({ errors, handleBlur, handleChange, handleSubmit, isSubmitting, touched, values }) => (\n <form onSubmit={handleSubmit}>\n <TextField\n autoFocus\n error={Boolean(touched.title && errors.title)}\n fullWidth\n helperText={touched.title && errors.title}\n label=\"Title\"\n margin=\"normal\"\n name=\"title\"\n onBlur={handleBlur}\n onChange={handleChange}\n type=\"text\"\n value={values.title}\n variant=\"outlined\"\n />\n <TextField\n error={Boolean(touched.fullName && errors.fullName)}\n fullWidth\n helperText={touched.fullName && errors.fullName}\n label=\"Full name\"\n margin=\"normal\"\n name=\"fullName\"\n onBlur={handleBlur}\n onChange={handleChange}\n type=\"text\"\n value={values.fullName}\n variant=\"outlined\"\n />\n <TextField\n error={Boolean(touched.phone && errors.phone)}\n fullWidth\n helperText={touched.phone && errors.phone}\n label=\"Phone number\"\n margin=\"normal\"\n name=\"phone\"\n onBlur={handleBlur}\n onChange={handleChange}\n type=\"text\"\n value={values.phone}\n variant=\"outlined\"\n />\n <Box pt={2}>\n <EmitSelect\n label=\"Gender\"\n name=\"url_type\"\n options={gender_list}\n value={extraData.gender}\n onChange={(e) => {\n setExtraData({ ...extraData, ...{ gender: e.target.value }})\n }}\n />\n </Box>\n <Box pt={2} display=\"flex\" style={{ borderRadius: 4 }} >\n <Button variant=\"contained\" component=\"label\" style={{ width: '100%', backgroundColor: '#f7f7f7' }} >\n <Box display=\"flex\" justifyContent=\"flex-start\" >\n <Avatar src={extraData.base64} style={{ height: 44, width: 44 }} />\n </Box>\n <Box pl={1}>Choose avatar</Box>\n <Box style={{ width: '52%' }} ></Box>\n <input type=\"file\" name=\"people_avatar\" accept=\"image/*\" hidden onChange={(e) => handleFileChange(e)} />\n </Button>\n </Box>\n <TextField\n multiline\n rows={3}\n error={Boolean(touched.bio && errors.bio)}\n fullWidth\n helperText={touched.bio && errors.bio}\n label=\"Notes\"\n margin=\"normal\"\n name=\"bio\"\n onBlur={handleBlur}\n onChange={handleChange}\n type=\"text\"\n value={values.bio}\n variant=\"outlined\"\n />\n <Box pt={2} display=\"flex\" justifyContent=\"center\" >\n {\n !processing ?\n <Button\n style={{ width: '100%' }}\n variant=\"contained\"\n color=\"primary\"\n onClick={onSubmitPeople}\n >\n Submit\n </Button>\n :\n <CircularProgress />\n }\n </Box>\n </form>\n )}\n </Formik>\n </Box>\n </CardContent>\n </Card>\n </Grid>\n </Dialog>\n\n )\n}\n\nexport default AddPeopleDailog;","import React, { useState, useEffect } from 'react';\nimport clsx from 'clsx';\nimport PerfectScrollbar from 'react-perfect-scrollbar';\nimport { useNavigate } from 'react-router-dom';\nimport {\n Avatar,\n Box,\n Card,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TablePagination,\n TableRow,\n TableSortLabel,\n Typography,\n makeStyles,\n Container,\n IconButton,\n CircularProgress\n} from '@material-ui/core';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport {DeleteRounded, EditRounded} from '@material-ui/icons';\nimport { useSnackbar } from 'notistack';\nimport dayjs from 'dayjs';\n\nimport { jsonApiInit } from '../../../utils/jsonApiConfig';\nimport { BlankAvatar, DeleteDialog } from 'src/components/AllComponent';\nimport { validateLogin } from 'src/utils/EmitValidation';\nimport Page from 'src/components/Page';\nimport Toolbar from './Toolbar';\nimport AddPeopleDailog from './AddPeopleDailog';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.light,\n minHeight: '100%',\n paddingBottom: theme.spacing(1),\n paddingTop: theme.spacing(2),\n display: 'flex',\n },\n avatar: {\n marginRight: theme.spacing(1)\n }\n}));\n\nconst PeopleList = ({ className, ...rest }) => {\n const classes = useStyles();\n const navigate = useNavigate();\n const { enqueueSnackbar } = useSnackbar();\n const [peoples, setPeoples] = useState([]);\n const [pagination, setPagination] = useState({ size: 10, number: 0, total: 100 });\n const [accessToken, setAccessToken] = useState('');\n const [deleteData, setDeleteData] = useState('');\n const [addPeople, setAddPeople] = useState(false);\n const [sorting, setSorting] = useState({ sort: '-id', 'created-at': 'asc' });\n const [lists, setLists] = useState([]);\n const [selectedList, setSelectedList] = useState('');\n const [loading, setLoading] = useState(false);\n const [searching, setSearching] = useState(false);\n\n const loadList = (access_token) => {\n const jsonApi = jsonApiInit(access_token);\n jsonApi.findAll('listing').then(resList => {\n let { data } = resList;\n data.map((d, i) => {\n data[i].label = d.title;\n data[i].value = d.id;\n });\n setLists(data);\n })\n }\n\n const handlePagination = (e, type) => {\n if(type === 'limit'){\n pagination.size = e.target.value;\n initialPeopleList(accessToken, e.target.value, pagination.number);\n setPagination({...pagination});\n }else{\n pagination.number = e;\n initialPeopleList(accessToken, pagination.size, e);\n setPagination({...pagination});\n }\n }\n\n const loadPeople = (access_token, query) => {\n setLoading(true);\n setPeoples([]);\n const jsonApi = jsonApiInit(access_token);\n jsonApi.findAll('person', query).then((resPeople) => {\n const { data, error, meta } = resPeople;\n if(!error){\n data.map((d, i) => {\n const isPhoneExist = d.phones.find(x => x['is-default'] && x.type_def === 'mobile');\n data[i].phone_number = isPhoneExist ? isPhoneExist.number : '';\n })\n setPeoples(data);\n setPagination({ ...pagination, ...{ total: meta ? meta.page.total : data.length } });\n setSelectedList('');\n setLoading(false);\n }\n })\n }\n\n const initialPeopleList = (access_token, size, number) => {\n let initialQuery = { page: { size, number: number+1 }, sort: \"-id\", include: 'phones'};\n initialQuery.sort = sorting.sort ? sorting.sort : \"\";\n loadPeople(access_token, initialQuery);\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n setAccessToken(access_token);\n initialPeopleList(access_token, 10, 0);\n loadList(access_token);\n }else{\n navigate('/login', { replace: true }); \n }\n }, []);\n\n const onSearchPeople = (text) => { \n if(text.length > 2){\n setSearching(true);\n const searchQuery = { filter: { \"full-name\": text }, include: 'phones' };\n loadPeople(accessToken, searchQuery);\n }else{\n setSearching(false);\n initialPeopleList(accessToken, 10, 0);\n }\n }\n\n const sortPeople = (sortType, sortName) => {\n const { size, number } = pagination;\n let sortQuery = { include: 'phones', sort: sortType === 'asc' ? `${sortName}` : `-${sortName}` };\n sortQuery.page = { size, number: number+1 };\n sorting[sortName] = sortType === 'asc' ? 'desc' : 'asc';\n sorting.sort = sortType === 'asc' ? `${sortName}` : `-${sortName}`;\n setSorting({ ...sorting });\n loadPeople(accessToken, sortQuery);\n }\n\n const checkDeleteResource = (deleteStatus, jsonApi) => {\n const { email, phone } = deleteStatus;\n if(email && phone){\n jsonApi.destroy('people', deleteData.id);\n initialPeopleList(accessToken, pagination.size, pagination.number);\n setDeleteData('')\n enqueueSnackbar(`${deleteData['full-name']} deleted successfully`, { variant: 'success' });\n }\n }\n\n const onDeletePeople = () => {\n const jsonApi = jsonApiInit(accessToken);\n jsonApi.find('people', deleteData.id, { include: 'phones,emails,urls,addresses,social-networks,listings' }).then((resPeople) => {\n if(resPeople.errors){\n return enqueueSnackbar(`${resPeople.errors[0].detail}`, { variant: 'error' });\n }\n const { addresses, emails, phones, urls } = resPeople.data;\n const socialMedia = resPeople.data['social-networks'];\n let deleteStatus = {\n email: emails.length > 0 ? false : true,\n phone: phones.length > 0 ? false : true,\n social: socialMedia.length > 0 ? false : true,\n address: addresses.length > 0 ? false : true,\n url: urls.length > 0 ? false : true,\n }\n checkDeleteResource(deleteStatus, jsonApi, deleteData.id);\n phones.map((d, i) => {\n jsonApi.destroy('phone', d.id);\n if(phones.length-1 === i){\n deleteStatus.phone = true;\n checkDeleteResource(deleteStatus, jsonApi, deleteData.id);\n }\n })\n emails.map((d, i) => {\n jsonApi.destroy('email', d.id);\n if(emails.length-1 === i){\n deleteStatus.email = true;\n checkDeleteResource(deleteStatus, jsonApi, deleteData.id);\n }\n })\n })\n }\n\n const onListChange = (e) => {\n if(e){\n setLoading(true);\n setPeoples([]);\n const jsonApi = jsonApiInit(accessToken);\n jsonApi.find('listing', e.id, { include: 'people' }).then(resListPeople => {\n const { data } = resListPeople;\n setPeoples(data.people);\n setLoading(false);\n })\n }else{\n initialPeopleList(accessToken, pagination.size, pagination.number);\n }\n setSelectedList(e);\n }\n\n return (\n <Page className={classes.root} title=\"People\" >\n <Container>\n <Toolbar \n onAddPeople={() => setAddPeople(true)} \n onSearchTextChange={(text) => onSearchPeople(text)}\n lists={lists}\n onListChange={(e) => onListChange(e)}\n selectedList={selectedList}\n navigate={navigate}\n />\n <Card className={clsx(className)} {...rest} elevation={0} >\n <PerfectScrollbar>\n <Table style={{ }}>\n <TableHead>\n <TableRow>\n <TableCell style={{ paddingLeft: 16 }} width=\"160\" >Title</TableCell>\n <TableCell padding=\"none\" style={{ paddingLeft: 16 }} >Full name</TableCell>\n <TableCell>Phone</TableCell>\n <TableCell padding=\"none\" >\n <TableSortLabel \n active={true} \n direction={sorting['created-at']} \n onClick={() => sortPeople(sorting['created-at'], 'created-at')} \n >\n Date\n </TableSortLabel>\n </TableCell>\n <TableCell width=\"100\" align=\"center\" >Actions</TableCell>\n </TableRow>\n </TableHead>\n {\n loading ?\n <TableHead>\n <TableRow>\n <TableCell></TableCell>\n <TableCell align=\"right\" style={{ paddingRight: 48 }} ><CircularProgress size={32} /></TableCell>\n <TableCell width=\"200\" ></TableCell>\n <TableCell width=\"140\" ></TableCell>\n <TableCell></TableCell>\n </TableRow>\n </TableHead>\n : !peoples[0]&&!searching ?\n <TableBody>\n <TableRow>\n <TableCell colSpan={12}>\n <Box component=\"div\" style={{ display: 'flex', flex: 10, justifyContent: 'center' }} pt={2} pl={2}>\n <Alert severity=\"info\" onClick={() => setAddPeople(true)} style={{ cursor:'pointer' }}>\n <AlertTitle>There are no people created yet, add your first one now</AlertTitle>\n </Alert>\n </Box>\n </TableCell>\n </TableRow>\n </TableBody>\n : null\n }\n <TableBody>\n {\n peoples.map((people_data, i) => {\n return(\n <TableRow hover key={people_data.id} >\n <TableCell style={{ paddingLeft: 16 }} >{people_data.title}</TableCell> \n <TableCell padding=\"none\" style={{ paddingLeft: 16 }} >\n <Box alignItems=\"center\" display=\"flex\">\n {\n people_data.avatar ?\n <Avatar className={classes.avatar} src={people_data.avatar} >\n {people_data[\"full-name\"]}\n </Avatar>\n : <BlankAvatar name={people_data[\"full-name\"]} />\n }\n <Typography color=\"textPrimary\" variant=\"body1\" >\n {people_data[\"full-name\"]}\n </Typography>\n </Box>\n </TableCell>\n <TableCell width=\"200\" >{people_data.phone_number}</TableCell>\n <TableCell padding=\"none\" width=\"140\" >\n {dayjs(people_data.createdAt).format('DD MMM YYYY')}\n </TableCell>\n <TableCell align=\"center\" padding=\"none\" >\n <Box>\n <IconButton \n onClick={() => setDeleteData(people_data)} \n aria-label=\"delete\" \n size=\"small\" \n style={{ color: '#7465f2', }} \n >\n <DeleteRounded fontSize=\"small\" />\n </IconButton>\n <IconButton \n onClick={() => navigate('/app/managepeople', { state: people_data })} \n size=\"small\" \n style={{ color: '#7465f2', }} \n >\n <EditRounded fontSize=\"small\" />\n </IconButton>\n </Box>\n </TableCell>\n </TableRow>\n )\n })\n }\n </TableBody>\n </Table>\n </PerfectScrollbar>\n <TablePagination\n component=\"div\"\n count={pagination.total}\n onChangePage={(e, p) => handlePagination(p, 'page')}\n onChangeRowsPerPage={(e) => handlePagination(e, 'limit')}\n page={pagination.number}\n rowsPerPage={pagination.size}\n rowsPerPageOptions={[5, 10, 25]}\n />\n </Card>\n <DeleteDialog \n status={Boolean(deleteData)} \n onClose={() => setDeleteData('')} \n onDelete={onDeletePeople}\n name={deleteData[\"full-name\"]}\n type=\"people\"\n />\n <AddPeopleDailog \n status={addPeople}\n onClose={(isLoadPeople) => {\n setAddPeople(false);\n if(isLoadPeople){\n initialPeopleList(accessToken, pagination.size, pagination.number);\n }\n }}\n accessToken={accessToken}\n enqueueSnackbar={enqueueSnackbar}\n />\n </Container>\n </Page>\n );\n};\n\nexport default PeopleList;\n","import React, { useState, useEffect } from 'react';\nimport PerfectScrollbar from 'react-perfect-scrollbar';\nimport PropTypes from 'prop-types';\nimport {\n Box,\n Button,\n Card,\n CardHeader,\n Chip,\n Divider,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n makeStyles,\n CircularProgress,\n} from '@material-ui/core';\nimport dayjs from 'dayjs';\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\nimport { useNavigate } from 'react-router-dom';\nimport { status_color, bg_color } from 'src/utils/SelectOptions'\nimport { jsonApiInit } from 'src/utils/jsonApiConfig';\nimport api from 'src/utils/api';\nimport { validateLogin } from 'src/utils/EmitValidation';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.card,\n }\n}));\n\n// TODO Update failed and success message number and make dynamic\nconst LatestOrders = ({ className, ...rest }) => {\n const classes = useStyles();\n const navigate = useNavigate();\n const [messageData, setMessageData] = useState([]);\n const [loading, setLoading] = useState(true);\n\n const loadMessage = async (access_token) => {\n const jsonApi = jsonApiInit(access_token);\n await jsonApi.findAll('message', { page: { size: 7, number: 1 }, sort: \"-id\" }).then((resMessage) => {\n const { data, error } = resMessage;\n if(!error){\n setMessageData(data);\n setLoading(false);\n }\n })\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n loadMessage(access_token);\n }\n }, [])\n \n return (\n <Card className={classes.root} {...rest} elevation={0} >\n <CardHeader title=\"Latest Messages\" />\n <Divider />\n <PerfectScrollbar>\n <Box minWidth={740}>\n <Table>\n <TableHead>\n <TableRow>\n <TableCell width=\"140\">Date</TableCell>\n <TableCell>Gateway</TableCell>\n <TableCell width=\"100\" align=\"center\" >\n Failed\n </TableCell>\n <TableCell width=\"100\" align=\"center\" >\n Delivered\n </TableCell>\n <TableCell width=\"140\" align=\"center\" >Status</TableCell>\n </TableRow>\n </TableHead>\n {\n loading ?\n <TableHead>\n <TableRow>\n <TableCell></TableCell>\n <TableCell align=\"right\" ><CircularProgress size={32} /></TableCell>\n <TableCell></TableCell>\n <TableCell></TableCell>\n <TableCell></TableCell>\n </TableRow>\n </TableHead>\n : null\n }\n <TableBody>\n {messageData.map((d, i) => (\n <TableRow hover key={i} >\n <TableCell>{dayjs(d.createdAt).format('DD MMM YYYY')}</TableCell>\n <TableCell>{d.gateway}</TableCell>\n <TableCell align=\"center\">{d.outboundMessages.length>0 ? d.outboundMessages.filter((status) => (status === 'failed')).length : 0}</TableCell>\n <TableCell align=\"center\">{d.outboundMessages.length>0 ? d.outboundMessages.filter((status) => (status === 'delivered')).length : 0}</TableCell>\n <TableCell align=\"center\">\n <Chip \n style={{ color: status_color[d.status], backgroundColor: bg_color[d.status] }} \n color=\"primary\" \n label={d.status} \n size=\"small\" \n />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Box>\n </PerfectScrollbar>\n <Box display=\"flex\" justifyContent=\"flex-end\" p={2} >\n <Button \n color=\"primary\" \n endIcon={<ArrowRightIcon />} \n size=\"small\" \n variant=\"text\" \n onClick={() => navigate('/app/message')}\n >\n View all\n </Button>\n </Box>\n </Card>\n );\n};\n\nLatestOrders.propTypes = {\n className: PropTypes.string\n};\n\nexport default LatestOrders;\n","import React, { useEffect, useState } from 'react';\nimport clsx from 'clsx';\nimport { Doughnut } from 'react-chartjs-2';\nimport {\n Box,\n Card,\n CardContent,\n CardHeader,\n Divider,\n Typography,\n colors,\n makeStyles,\n useTheme,\n FormControl,\n Select,\n MenuItem,\n withStyles,\n InputBase,\n CircularProgress\n} from '@material-ui/core';\nimport TelegramIcon from '@material-ui/icons/Telegram';\nimport ErrorIcon from '@material-ui/icons/Error';\nimport api from 'src/utils/api';\n\nimport { validateLogin } from 'src/utils/EmitValidation';\n\nconst BootstrapInput = withStyles((theme) => ({\n root: {\n 'label + &': {\n marginTop: theme.spacing(3),\n },\n },\n input: {\n borderRadius: 4,\n position: 'relative',\n backgroundColor: theme.palette.background.paper,\n border: 'none',\n fontSize: 16,\n padding: '10px 26px 10px 12px',\n transition: theme.transitions.create(['border-color', 'box-shadow']),\n // Use the system font instead of the default Roboto font.\n fontFamily: [\n '-apple-system',\n 'BlinkMacSystemFont',\n '\"Segoe UI\"',\n 'Roboto',\n '\"Helvetica Neue\"',\n 'Arial',\n 'sans-serif',\n '\"Apple Color Emoji\"',\n '\"Segoe UI Emoji\"',\n '\"Segoe UI Symbol\"',\n ].join(','),\n '&:focus': {\n borderRadius: 4,\n borderColor: '#80bdff',\n boxShadow: '0 0 0 0.2rem rgba(0,123,255,.25)',\n },\n },\n}))(InputBase);\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n height: '100%',\n backgroundColor: theme.palette.background.card\n },\n noBorder: {\n border: 'none'\n }\n}));\n\nconst TrafficByDevice = ({ className, ...rest }) => {\n const classes = useStyles();\n const theme = useTheme();\n const [filter, setFilter] = useState('month');\n const [graphData, setGraphData] = useState({ success: 0, failed: 0 });\n const [accessToken, setAccessToken] = useState('');\n const [loading, setLoading] = useState(true);\n\n const data = {\n datasets: [\n {\n data: [graphData.success, graphData.failed],\n backgroundColor: [\n colors.indigo[500],\n colors.red[400],\n ],\n borderWidth: 0,\n borderColor: colors.common.white,\n hoverBorderColor: colors.common.white\n }\n ],\n labels: ['Success', 'Failed']\n };\n\n const options = {\n animation: false,\n cutoutPercentage: 80,\n layout: { padding: 0 },\n legend: {\n display: false\n },\n maintainAspectRatio: false,\n responsive: true,\n tooltips: {\n backgroundColor: theme.palette.background.default,\n bodyFontColor: theme.palette.text.secondary,\n borderColor: theme.palette.divider,\n borderWidth: 1,\n enabled: true,\n footerFontColor: theme.palette.text.secondary,\n intersect: false,\n mode: 'index',\n titleFontColor: theme.palette.text.primary\n }\n };\n\n const devices = [\n {\n title: 'Success',\n value: graphData.success,\n icon: TelegramIcon,\n color: colors.indigo[500]\n },\n {\n title: 'Failed',\n value: graphData.failed,\n icon: ErrorIcon,\n color: colors.red[400]\n }\n ];\n\n const onChange = (e) => {\n setFilter(e.target.value);\n if(e.target.value === 'week'){\n loadGraphData(accessToken, 7);\n }else if(e.target.value === 'month') {\n loadGraphData(accessToken, 30);\n }else if(e.target.value === 'threemonth') {\n loadGraphData(accessToken, 90);\n }\n }\n\n const loadGraphData = async (access_token, duration) => {\n setLoading(true);\n graphData.success = 0;\n graphData.failed = 0;\n const resFailed = await api.get(`/messages/totals?status=failed&period=custom&days=${duration}`, access_token);\n const resSuccess = await api.get(`/messages/totals?status=sent&period=custom&days=${duration}`, access_token);\n const totalMessage = resFailed.data.attributes.total + resSuccess.data.attributes.total;\n if(totalMessage === 0){\n setGraphData({ ...graphData });\n }else{\n graphData.success = parseFloat(( resSuccess.data.attributes.total / totalMessage )*100).toFixed(2);\n graphData.failed = parseFloat(( resFailed.data.attributes.total / totalMessage )*100).toFixed(2);\n setGraphData({ ...graphData });\n }\n setLoading(false);\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n setAccessToken(access_token);\n loadGraphData(access_token, 30);\n }\n }, []);\n\n return (\n <Card className={clsx(classes.root, className)} {...rest} elevation={0} >\n <CardHeader title=\"SENDING STATS\" />\n <Divider />\n <CardContent>\n <Box height={300} position=\"relative\" >\n {\n graphData.success === 0 && graphData.failed === 0 ?\n <Box style={{ height: '100%', display: 'flex', justifyContent: 'center', alignItems: 'center' }} >\n {\n loading ? \n <CircularProgress size={24} />\n :\n <Typography style={{ fontSize: 18 }} >No data </Typography>\n }\n </Box>\n : <Doughnut data={data} options={options} />\n }\n </Box>\n <Box display=\"flex\" justifyContent=\"center\" mt={2} >\n {devices.map(({ color, icon: Icon, title, value }) => (\n <Box key={title} p={1} textAlign=\"center\" >\n <Icon color=\"action\" />\n <Typography color=\"textPrimary\" variant=\"body1\" >\n {title}\n </Typography>\n <Typography style={{ color }} variant=\"h2\" >{value}%</Typography>\n </Box>\n ))}\n </Box>\n </CardContent>\n <Divider />\n <Box display=\"flex\" justifyContent=\"flex-end\" pt={1.5} pr={2} >\n <FormControl className={classes.margin}>\n <Select \n value={filter}\n onChange={(e) => onChange(e)}\n input={<BootstrapInput />} \n >\n <MenuItem value={\"week\"}>One Week</MenuItem>\n <MenuItem value={\"month\"}>One Month</MenuItem>\n <MenuItem value={\"threemonth\"}>Three Month</MenuItem>\n </Select>\n </FormControl>\n </Box>\n </Card>\n );\n};\n\nexport default TrafficByDevice;\n","import React from 'react';\nimport clsx from 'clsx';\nimport {\n Avatar,\n Box,\n Card,\n CardContent,\n Grid,\n Typography,\n colors,\n makeStyles,\n CircularProgress\n} from '@material-ui/core';\nimport TelegramIcon from '@material-ui/icons/Telegram';\nimport PeopleIcon from '@material-ui/icons/PeopleOutlined';\nimport ErrorOutlinedIcon from '@material-ui/icons/ErrorOutlined';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n height: '100%',\n backgroundColor: theme.palette.background.card\n },\n avatar: {\n backgroundColor: theme.palette.primary.main,\n height: 56,\n width: 56\n },\n differenceIcon: {\n color: colors.blue[900]\n },\n differencePositive: {\n color: colors.green[500],\n marginRight: theme.spacing(1)\n },\n differenceNegative: {\n color: colors.red[900],\n marginRight: theme.spacing(1)\n }\n}));\n\nexport const TotalSent = ({ className, total, loading, ...rest }) => {\n const classes = useStyles();\n return (\n <Card className={clsx(classes.root, className)} {...rest} elevation={0} >\n <CardContent>\n <Grid container justify=\"space-between\" spacing={3} >\n <Grid item>\n <Typography color=\"textSecondary\" gutterBottom variant=\"h6\" >\n TOTAL SENT\n </Typography>\n <Typography color=\"textPrimary\" variant=\"h3\" >\n { loading ? <CircularProgress size={24} /> : total}\n </Typography>\n </Grid>\n <Grid item>\n <Avatar className={classes.avatar}><TelegramIcon /></Avatar>\n </Grid>\n </Grid>\n <Box mt={2} display=\"flex\" alignItems=\"center\" >\n <Typography color=\"textSecondary\" variant=\"caption\" >\n Since beginning\n </Typography>\n </Box>\n </CardContent>\n </Card>\n );\n};\n\nexport const MonthTotal = ({ className, total, loading, ...rest }) => {\n const classes = useStyles();\n return (\n <Card className={clsx(classes.root, className)} {...rest} elevation={0} >\n <CardContent>\n <Grid container justify=\"space-between\" spacing={3} >\n <Grid item>\n <Typography color=\"textSecondary\" gutterBottom variant=\"h6\" >\n THIS MONTH SENT\n </Typography>\n <Typography color=\"textPrimary\" variant=\"h3\" >\n { loading ? <CircularProgress size={24} /> : total}\n </Typography>\n </Grid>\n <Grid item>\n <Avatar className={classes.avatar}><TelegramIcon /></Avatar>\n </Grid>\n </Grid>\n <Box mt={2} display=\"flex\" alignItems=\"center\" >\n {/* <ArrowDownwardIcon className={classes.differenceNegative} />\n <Typography className={classes.differenceNegative} variant=\"body2\" >12%</Typography>\n <Typography color=\"textSecondary\" variant=\"caption\" >\n Since last month\n </Typography> */}\n </Box>\n </CardContent>\n </Card>\n );\n};\n\nexport const TotalPeople = ({ className, total, loading, ...rest }) => {\n const classes = useStyles();\n return (\n <Card className={clsx(classes.root, className)} {...rest} elevation={0} >\n <CardContent>\n <Grid container justify=\"space-between\" spacing={3} >\n <Grid item>\n <Typography color=\"textSecondary\" gutterBottom variant=\"h6\" >\n TOTAL PEOPLE\n </Typography>\n <Typography color=\"textPrimary\" variant=\"h3\" >\n { loading ? <CircularProgress size={24} /> : total}\n </Typography>\n </Grid>\n <Grid item>\n <Avatar className={classes.avatar}><PeopleIcon /></Avatar>\n </Grid>\n </Grid>\n <Box mt={2} display=\"flex\" alignItems=\"center\" >\n {/* <ArrowUpwardIcon className={classes.differencePositive} />\n <Typography className={classes.differencePositive} variant=\"body2\" >\n 16%\n </Typography>\n <Typography color=\"textSecondary\" variant=\"caption\">\n Since last month\n </Typography> */}\n </Box>\n </CardContent>\n </Card>\n );\n };\n \n export const TotalFailed = ({ className, total, loading, ...rest }) => {\n const classes = useStyles();\n \n return (\n <Card className={clsx(classes.root, className)} {...rest} elevation={0} >\n <CardContent>\n <Grid container justify=\"space-between\" spacing={3} >\n <Grid item>\n <Typography color=\"textSecondary\" gutterBottom variant=\"h6\" >\n TOTAL FAILED\n </Typography>\n <Typography color=\"textPrimary\" variant=\"h3\" >\n { loading ? <CircularProgress size={24} /> : total}\n </Typography>\n </Grid>\n <Grid item>\n <Avatar className={classes.avatar}><ErrorOutlinedIcon /></Avatar>\n </Grid>\n </Grid>\n <Box mt={2} display=\"flex\" alignItems=\"center\" ></Box>\n </CardContent>\n </Card>\n );\n };\n \n","import React, { useEffect, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Container, Grid, makeStyles,Box, Breadcrumbs } from '@material-ui/core';\nimport Page from 'src/components/Page';\nimport LatestOrders from './LatestOrders';\nimport TrafficByDevice from './TrafficByDevice';\n\nimport { TotalSent, MonthTotal, TotalPeople, TotalFailed } from './Card';\nimport { validateLogin } from 'src/utils/EmitValidation';\nimport { jsonApiInit } from 'src/utils/jsonApiConfig';\nimport { AppLink, PageBreadcrumb } from 'src/components/AllComponent';\nimport api from 'src/utils/api';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.dark,\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3)\n }\n}));\n\nconst loadData = (access_token, model, query) => {\n return new Promise((resolve, reject) => {\n const jsonApi = jsonApiInit(access_token);\n jsonApi.findAll(model, query).then(res => {\n const { meta } = res;\n resolve(meta.page);\n }).catch(err => reject(err));\n })\n}\n\nconst Dashboard = () => {\n const classes = useStyles();\n const navigate = useNavigate();\n const [loading, setLoading] = useState({ message: true, people: true });\n const [dashData, setDashData] = useState({ sentMonth: 0, sentTotal: 0, people: 0, failed: 0 });\n\n const loadTotalPeople = (access_token) => {\n const peopleQuery = { page: { size: 1, number: 1 } };\n loadData(access_token, 'person', peopleQuery).then(res => {\n dashData.people = res.total;\n setDashData(dashData);\n loading.people = false;\n setLoading({ ...loading });\n })\n }\n\n const loadMessageCount = async (access_token) => {\n const totalPeople = await api.get('/messages/totals', access_token);\n const totalFailed = await api.get(`/messages/totals?status=failed`, access_token);\n const lastMonth = await api.get(`/messages/totals?period=custom&days=90`, access_token);\n dashData.sentTotal = totalPeople.data.attributes.total;\n dashData.failed = totalFailed.data.attributes.total;\n dashData.sentMonth = lastMonth.data.attributes.total;\n setDashData({ ...dashData });\n loading.message = false;\n setLoading({ ...loading });\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n loadTotalPeople(access_token);\n loadMessageCount(access_token);\n }else{\n navigate('/login', { replace: true }); \n }\n }, []);\n return (\n <Page className={classes.root} title=\"Dashboard\" >\n <Container maxWidth={false}>\n <Box mb={1}>\n <Breadcrumbs aria-label=\"breadcrumb\">\n <AppLink navigate={navigate} />\n <PageBreadcrumb title=\"Dashboard\" />\n </Breadcrumbs>\n </Box>\n <Grid container spacing={3} >\n <Grid item lg={3} sm={6} xl={3} xs={12} >\n <TotalSent total={dashData.sentTotal} loading={loading.message} />\n </Grid>\n <Grid item lg={3} sm={6} xl={3} xs={12} >\n <MonthTotal total={dashData.sentMonth} loading={loading.message} />\n </Grid>\n <Grid item lg={3} sm={6} xl={3} xs={12} >\n <TotalPeople total={dashData.people} loading={loading.people} />\n </Grid>\n <Grid item lg={3} sm={6} xl={3} xs={12} >\n <TotalFailed total={dashData.failed} loading={loading.message} />\n </Grid>\n <Grid item lg={8} md={12} xl={9} xs={12} >\n <LatestOrders />\n </Grid>\n <Grid item lg={4} md={6} xl={3} xs={12} >\n <TrafficByDevice />\n </Grid>\n </Grid>\n </Container>\n </Page>\n );\n};\n\nexport default Dashboard;\n","import React, { useRef, useEffect, useState } from 'react';\nimport { Link as RouterLink, useNavigate } from 'react-router-dom';\nimport * as Yup from 'yup';\nimport { Formik } from 'formik';\nimport {\n Box,\n Button,\n Container,\n Link,\n TextField,\n FormHelperText,\n Typography,\n makeStyles,\n CircularProgress\n} from '@material-ui/core';\nimport Page from 'src/components/Page';\nimport api from 'src/utils/api';\nimport { validateLogin } from 'src/utils/EmitValidation';\nimport { GoogleReCaptcha, useGoogleReCaptcha } from 'react-google-recaptcha-v3';\n\n\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.dark,\n height: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3)\n }\n}));\n\n\n\nconst LoginView = () => {\n const [token, setToken] = useState(\"\");\n const classes = useStyles();\n const navigate = useNavigate();\n const { executeRecaptcha } = useGoogleReCaptcha();\n\n const onLogin = (user_data, navigate, formikFormRef) => {\n const basic64 = btoa(`${user_data.email}:${user_data.password}`)\n\n executeRecaptcha(\"login\").then(function (token) {\n api.post('login', {\n \"recaptcha\": token\n }, false, basic64).then((resLogin) => {\n if(resLogin.access_token){\n resLogin.loginTime = new Date().toString();\n localStorage.setItem('user_token', JSON.stringify(resLogin));\n navigate('/app/dashboard', { replace: true });\n }else if(resLogin.errors){\n const error_array = Object.keys(resLogin.errors).map(function(key) {\n return {\"type\" : key, \"data\" : resLogin.errors[key] }\n })\n formikFormRef.current.setErrors({ server_error: error_array })\n formikFormRef.current.setSubmitting(false)\n }else{\n formikFormRef.current.setErrors({ catch_error: \"Email or password does not match\" })\n formikFormRef.current.setSubmitting(false)\n }\n }).catch((error) => {\n formikFormRef.current.setErrors({ catch_error: error.message })\n formikFormRef.current.setSubmitting(false)\n })\n });\n\n\n };\n\n const formikFormRef = useRef();\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n navigate('/app/dashboard', { replace: true });\n }\n }, []);\n\n\n const handleVerify = React.useCallback((token) => {\n setToken(token)\n }, []);\n\n return (\n <Page className={classes.root} title=\"Login\" >\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n height=\"100%\"\n justifyContent=\"center\"\n >\n <Container maxWidth=\"sm\">\n <Formik\n innerRef={formikFormRef}\n initialValues={{ email: '', password: '' }}\n validationSchema={Yup.object().shape({\n email: Yup.string().email('Must be a valid email').max(255).required('Email is required'),\n password: Yup.string().min(8, 'Password must be at least 8 characters').max(32, 'Password must be at most 32 characters').required('Password is required'),\n })}\n onSubmit={(data) => onLogin(data, navigate, formikFormRef)}\n >\n {({ errors, handleBlur, handleChange, handleSubmit, isSubmitting, touched, values }) => (\n <form onSubmit={handleSubmit}>\n <Box mb={3}>\n <Typography align=\"center\" color=\"textPrimary\" variant=\"h2\" >Sign in</Typography>\n <Typography align=\"center\" color=\"textSecondary\" variant=\"body2\" gutterBottom >\n Use your email address to sign in\n </Typography>\n </Box>\n <TextField\n autoFocus\n error={Boolean(touched.email && errors.email)}\n fullWidth\n helperText={touched.email && errors.email}\n label=\"Email address\"\n margin=\"normal\"\n name=\"email\"\n onBlur={handleBlur}\n onChange={handleChange}\n type=\"email\"\n value={values.email}\n variant=\"outlined\"\n />\n <TextField\n error={Boolean(touched.password && errors.password)}\n fullWidth\n helperText={touched.password && errors.password}\n label=\"Password\"\n margin=\"normal\"\n name=\"password\"\n onBlur={handleBlur}\n onChange={handleChange}\n type=\"password\"\n value={values.password}\n variant=\"outlined\"\n />\n\n <GoogleReCaptcha onVerify={handleVerify} />\n\n {Boolean(errors.catch_error) && (<FormHelperText error>{errors.catch_error}</FormHelperText>)}\n <Box my={2} display=\"flex\" justifyContent=\"center\" >\n {\n !isSubmitting ?\n <Button color=\"primary\" disabled={isSubmitting} fullWidth size=\"large\" type=\"submit\" variant=\"contained\">\n Sign in now\n </Button>\n :\n <CircularProgress />\n }\n </Box>\n <Box display=\"flex\" flexDirection=\"row\">\n <Box flex={2}>\n <Typography color=\"textSecondary\" variant=\"body1\" >\n Don't have an account?{' '}\n <Link component={RouterLink} to=\"/register\" variant=\"h6\" >\n Sign up\n </Link>\n </Typography>\n </Box>\n <Box flex={2} display=\"flex\" justifyContent=\"flex-end\">\n <Typography color=\"textSecondary\" variant=\"body1\" >\n <Link component={RouterLink} to=\"/forgot-password\" variant=\"h6\" >\n Forgot Password?\n </Link>\n </Typography>\n </Box>\n </Box>\n </form>\n )}\n </Formik>\n </Container>\n </Box>\n </Page>\n );\n};\n\nexport default LoginView;\n","import React, { useState, useEffect } from 'react';\nimport { Link as RouterLink, useNavigate } from 'react-router-dom';\nimport {\n Box,\n Container,\n Link,\n Typography,\n CircularProgress,\n makeStyles\n} from '@material-ui/core';\nimport api from 'src/utils/api';\nimport { useSnackbar } from 'notistack';\nimport Page from 'src/components/Page';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.dark,\n height: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3)\n },\n image: {\n marginTop: 50,\n display: 'inline-block',\n maxWidth: '100%',\n width: 560\n }\n}));\n\nconst SuccessEmailVerified = () => {\n const classes = useStyles();\n const { enqueueSnackbar } = useSnackbar();\n const navigate = useNavigate();\n const [processing, setProcessing] = useState(false);\n\n const sendVerificationRequest = () => {\n const queryString = window.location.search;\n setProcessing(true);\n api.getVerification('account/verify'+queryString).then((resVerify) => {\n setProcessing(false);\n if(resVerify.errors) {\n enqueueSnackbar(`${resVerify.errors[0].detail}`, { variant: 'error' });\n navigate('/404', { replace: true });\n }\n else if(resVerify.status != 204) {\n enqueueSnackbar(`${resVerify.statusText}`, { variant: 'error' });\n navigate('/404', { replace: true });\n }\n }).catch((err) => {\n setProcessing(false);\n enqueueSnackbar(`${err}`, { variant: 'error' });\n navigate('/404', { replace: true });\n });\n }\n\n useEffect(() => {\n sendVerificationRequest();\n }, []);\n\n return (\n <Page\n className={classes.root}\n title=\"Registration complete\"\n >\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n height=\"100%\"\n justifyContent=\"center\"\n > \n <Container maxWidth=\"md\">\n {!processing ?\n <Box>\n <Typography\n align=\"center\"\n color=\"textPrimary\"\n variant=\"h1\"\n >\n ¡Congratulations!\n </Typography>\n <Typography\n align=\"center\"\n color=\"textPrimary\"\n variant=\"subtitle2\"\n >\n Your email has been verified. You can now <Link component={RouterLink} to=\"/login\" variant=\"h6\" > login </Link> to the app.\n </Typography>\n </Box>\n :\n <Box display=\"flex\"\n flexDirection=\"row\"\n height=\"100%\"\n justifyContent=\"center\">\n <CircularProgress />\n </Box>\n }\n </Container> \n </Box>\n </Page>\n );\n};\n\nexport default SuccessEmailVerified;","import React, { useState, useEffect } from 'react';\nimport { Link as RouterLink, useNavigate } from 'react-router-dom';\nimport {\n Box,\n Container,\n Link,\n Typography,\n CircularProgress,\n makeStyles\n} from '@material-ui/core';\nimport api from 'src/utils/api';\nimport { validateLogin } from 'src/utils/EmitValidation';\nimport { useSnackbar } from 'notistack';\nimport Page from 'src/components/Page';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.dark,\n height: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3)\n },\n image: {\n marginTop: 50,\n display: 'inline-block',\n maxWidth: '100%',\n width: 560\n }\n}));\n\nconst NewEmailVerified = () => {\n const classes = useStyles();\n const { enqueueSnackbar } = useSnackbar();\n const navigate = useNavigate();\n const [processing, setProcessing] = useState(false);\n\n const sendVerificationRequest = (access_token) => {\n const queryString = window.location.search;\n setProcessing(true);\n api.getVerification('account/verifyModifiedEmail'+queryString, access_token).then((resVerify) => {\n setProcessing(false);\n if(resVerify.errors) {\n enqueueSnackbar(`${resVerify.errors[0].detail}`, { variant: 'error' });\n navigate('/404', { replace: true });\n }\n else if(resVerify.status != 204) {\n enqueueSnackbar(`${resVerify.statusText}`, { variant: 'error' });\n navigate('/404', { replace: true });\n }\n else {\n enqueueSnackbar('Email updated', { variant: 'success' });\n navigate('/app/settings', { replace: true });\n }\n }).catch((err) => {\n setProcessing(false);\n enqueueSnackbar(`${err}`, { variant: 'error' });\n navigate('/404', { replace: true });\n });\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n sendVerificationRequest(access_token);\n }\n \n }, []);\n\n return (\n <Page\n className={classes.root}\n title=\"New email verified\"\n >\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n height=\"100%\"\n justifyContent=\"center\"\n > \n <Container maxWidth=\"md\">\n {!processing ?\n <Box>\n <Typography\n align=\"center\"\n color=\"textPrimary\"\n variant=\"h1\"\n >\n ¡Congratulations!\n </Typography>\n <Typography\n align=\"center\"\n color=\"textPrimary\"\n variant=\"subtitle2\"\n >\n Your new email has been verified. You can now use it to <Link component={RouterLink} to=\"/login\" variant=\"h6\" > login </Link> to the app.\n </Typography>\n </Box>\n :\n <Box display=\"flex\"\n flexDirection=\"row\"\n height=\"100%\"\n justifyContent=\"center\">\n <CircularProgress />\n </Box>\n }\n </Container> \n </Box>\n </Page>\n );\n};\n\nexport default NewEmailVerified;","import React from 'react';\nimport {\n Box,\n Container,\n Typography,\n makeStyles\n} from '@material-ui/core';\nimport Page from 'src/components/Page';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.dark,\n height: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3)\n },\n image: {\n marginTop: 50,\n display: 'inline-block',\n maxWidth: '100%',\n width: 560\n }\n}));\n\nconst NotFoundView = () => {\n const classes = useStyles();\n\n return (\n <Page\n className={classes.root}\n title=\"404\"\n >\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n height=\"100%\"\n justifyContent=\"center\"\n >\n <Container maxWidth=\"md\">\n <Typography\n align=\"center\"\n color=\"textPrimary\"\n variant=\"h1\"\n >\n 404: The page you are looking for isn’t here\n </Typography>\n <Typography\n align=\"center\"\n color=\"textPrimary\"\n variant=\"subtitle2\"\n >\n You either tried some shady route or you came here by mistake.\n Whichever it is, try using the navigation\n </Typography>\n <Box textAlign=\"center\">\n <img\n alt=\"Under development\"\n className={classes.image}\n src=\"/static/images/undraw_page_not_found_su7k.svg\"\n />\n </Box>\n </Container>\n </Box>\n </Page>\n );\n};\n\nexport default NotFoundView;\n","import React, {useRef, useState} from 'react';\nimport { Link as RouterLink, useNavigate } from 'react-router-dom';\nimport * as Yup from 'yup';\nimport { Formik } from 'formik';\nimport {\n Box,\n Button,\n Container,\n FormHelperText,\n Link,\n TextField,\n Typography,\n makeStyles,\n CircularProgress\n} from '@material-ui/core';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport Page from 'src/components/Page';\nimport api from 'src/utils/api';\nimport { useSnackbar } from 'notistack';\nimport { GoogleReCaptcha, useGoogleReCaptcha } from 'react-google-recaptcha-v3';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.dark,\n height: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3)\n }\n}));\n\nconst RegisterView = () => {\n const [token, setToken] = useState(\"\");\n const [hasRegistered, setRegistered] = useState(false);\n const classes = useStyles();\n const { enqueueSnackbar } = useSnackbar();\n const navigate = useNavigate();\n const { executeRecaptcha } = useGoogleReCaptcha();\n const formikFormRef = useRef();\n\n const onSignUp = (user_data, navigate, formikFormRef) => {\n if(user_data.password === user_data.confirm_password){\n let { name, email, password, confirm_password } = user_data\n const register_params = {\n name,\n email,\n password,\n \"password-confirmation\": confirm_password,\n recaptcha: token,\n }\n executeRecaptcha(\"register\").then(function (token){\n api.postAuth('register', {...register_params, \"recaptcha\": token}, false).then((resRegister) => {\n if(resRegister.ok) setRegistered(true)\n else if(resRegister.errors){\n const error_array = Object.keys(resRegister.errors).map(function(key) {\n return {\"type\" : key, \"data\" : resRegister.errors[key] }\n })\n formikFormRef.current.setErrors({ server_error: error_array })\n formikFormRef.current.setSubmitting(false)\n }else{\n formikFormRef.current.setErrors({ catch_error: \"Something went wrong please try again\" })\n formikFormRef.current.setSubmitting(false)\n }\n }).catch((error) => {\n formikFormRef.current.setErrors({ catch_error: error.message })\n formikFormRef.current.setSubmitting(false)\n })\n });\n }else{\n formikFormRef.current.setErrors({ email: false, password: \"Both passwords do not match\", confirm_password: \"Both passwords do not match\" });\n formikFormRef.current.setSubmitting(false)\n }\n }\n\n const handleVerify = React.useCallback((token) => {\n setToken(token)\n }, []);\n\n return (\n <Page className={classes.root} title=\"Register\">\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n height=\"100%\"\n justifyContent=\"center\"\n >\n <Container maxWidth=\"sm\">\n {!hasRegistered ?\n <Formik\n innerRef={formikFormRef}\n initialValues={{\n name: '',\n email: '',\n password: '',\n confirm_password: ''\n }}\n validationSchema={\n Yup.object().shape({\n name: Yup.string().min(3, 'Full name must be at least 3 characters').max(70, 'Full name must be at most 70 characters').required('Full name is required'),\n email: Yup.string().email('Must be a valid email').max(255).required('Email is required'),\n password: Yup.string().min(8, 'Password must be at least 8 characters').max(32, 'Password must be at most 32 characters').required('Password is required'),\n confirm_password: Yup.string().required('Password confirmation is required'),\n })\n }\n onSubmit={(user_data) => onSignUp(user_data, navigate, formikFormRef)}\n >\n {({ errors, handleBlur, handleChange, handleSubmit, isSubmitting, touched, values\n }) => (\n <form onSubmit={handleSubmit}>\n <Box mb={3}>\n <Typography color=\"textPrimary\" align=\"center\" variant=\"h2\" >\n Create new account\n </Typography>\n <Typography color=\"textSecondary\" gutterBottom variant=\"body2\" align=\"center\">\n Use your email to create new account\n </Typography>\n </Box>\n <TextField\n error={Boolean(touched.name && errors.name)}\n fullWidth\n helperText={touched.name && errors.name}\n label=\"Full name\"\n margin=\"normal\"\n name=\"name\"\n onBlur={handleBlur}\n onChange={handleChange}\n value={values.firstName}\n variant=\"outlined\"\n />\n <TextField\n error={Boolean(touched.email && errors.email)}\n fullWidth\n helperText={touched.email && errors.email}\n label=\"Email address\"\n margin=\"normal\"\n name=\"email\"\n onBlur={handleBlur}\n onChange={handleChange}\n type=\"email\"\n value={values.email}\n variant=\"outlined\"\n />\n <TextField\n error={Boolean(touched.password && errors.password)}\n fullWidth\n helperText={touched.password && errors.password}\n label=\"Password\"\n margin=\"normal\"\n name=\"password\"\n onBlur={handleBlur}\n onChange={handleChange}\n type=\"password\"\n value={values.password}\n variant=\"outlined\"\n />\n <TextField\n error={Boolean(touched.confirm_password && errors.confirm_password)}\n fullWidth\n helperText={touched.confirm_password && errors.confirm_password}\n label=\"Confirm password\"\n margin=\"normal\"\n name=\"confirm_password\"\n onBlur={handleBlur}\n onChange={handleChange}\n type=\"password\"\n value={values.confirm_password}\n variant=\"outlined\"\n />\n {Boolean(errors.catch_error) && (<FormHelperText error>{errors.catch_error}</FormHelperText>)}\n {Boolean(errors.server_error) && (\n errors.server_error.map((errors_d, i) => {\n return(\n <FormHelperText key={i} error>{errors_d.data}</FormHelperText>\n )\n })\n )}\n\n <GoogleReCaptcha onVerify={handleVerify} />\n\n <Box my={2} display=\"flex\" justifyContent=\"center\">\n {\n !isSubmitting ? \n <Button color=\"primary\" disabled={isSubmitting} fullWidth size=\"large\" type=\"submit\" variant=\"contained\">\n Sign up now\n </Button>\n :\n <CircularProgress />\n }\n </Box>\n <Typography color=\"textSecondary\" variant=\"body1\">\n Have an account?{' '}\n <Link component={RouterLink} to=\"/login\" variant=\"h6\">\n Sign in\n </Link>\n </Typography>\n </form>\n )}\n </Formik>\n : \n <Alert severity=\"success\" onClose={() => {setRegistered(false)}}>\n <AlertTitle>Thank you for registering!</AlertTitle>\n Please verify your email to complete the process\n </Alert>\n }\n </Container>\n </Box>\n </Page>\n );\n};\n\nexport default RegisterView;\n","import React, { useState, useEffect } from 'react';\nimport { Box, Button, IconButton, Collapse, TextField, CircularProgress, Container, Grid } from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { useNavigate } from 'react-router-dom';\nimport { useSnackbar } from 'notistack';\nimport * as Yup from 'yup';\nimport { Alert } from '@material-ui/lab';\nimport { validateLogin } from 'src/utils/EmitValidation';\nimport { jsonApiInit } from '../../utils/jsonApiConfig';\n\nconst Account = () => {\n const navigate = useNavigate();\n const [accessToken, setAccessToken] = useState('');\n const { enqueueSnackbar } = useSnackbar();\n const [processing, setProcessing] = useState(false);\n const [accountChanged, setChanged] = useState({message: '', value: false});\n const [account, setAccount] = useState({ \n name: { value: '', error: '' }, \n email: { value: '', error: '' }, \n id: '' \n });\n const [initialAccount, setInitialAccount] = useState({ \n initialName: '',\n initialEmail: '', \n });\n\n const handleChange = (event) => {\n account[event.target.name].value = event.target.value;\n account[event.target.name].error = '';\n setAccount({...account});\n };\n\n const onSaveAccount = async () => {\n const jsonApi = jsonApiInit(accessToken);\n const { name, email, id } = account;\n const { initialName, initialEmail, initialId } = initialAccount;\n\n if(initialName===name.value&&initialEmail===email.value){\n enqueueSnackbar(\"No changes detected\", { variant: \"error\"});\n return;\n }\n\n let isValid = true;\n let validateData = Yup.object().shape({\n name: Yup.string().min(2, 'Too short').max(255, 'Too long').required(),\n email: Yup.string().email('Email must be valid').required()\n });\n validateData.validate({ name: name.value, email: email.value }).catch((err) => {\n account[err.path].error = err.message;\n setAccount({...account});\n isValid = false;\n });\n let data = {\n name: name.value,\n email: email.value\n }\n\n //We check if name, email or both were changed\n if(initialEmail===email.value) delete data.email; \n if(initialName===name.value) delete data.name;\n\n if(isValid){\n setProcessing(true);\n jsonApi.one('user', id).patch({id, ...data}).then((resUpdate) => {\n if(data.name) setChanged({message: 'Name updated successfully', value: true}); \n if(data.email) setChanged({message: 'Email update received, please verify your new email address to complete the operation', value: true});\n setInitialAccount({ \n initialName: name.value, \n initialEmail: email.value, \n });\n setProcessing(false);\n }).catch((err) => {\n enqueueSnackbar('Failed to update', { variant: 'error' });\n if(!err.name) setAccount({ name: { value: name.value, error: ''}, email: { value: email.value, error: err.email.detail }, id });\n if(!err.email) setAccount({ name: { value: name.value, error: err.name.detail }, email: { value: email.value, error: '' }, id });\n setProcessing(false);\n })\n }\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n const jsonApi = jsonApiInit(access_token);\n jsonApi.find('user').then((resUser) => {\n const { name, email, id } = resUser.data[0];\n setInitialAccount({ \n initialName: name, \n initialEmail: email, \n });\n setAccount({ \n name: { value: name, error: '' }, \n email: { value: email, error: '' },\n id \n });\n });\n setAccessToken(access_token);\n }else{\n navigate('/login', { replace: true }); \n }\n }, [])\n\n return (\n <Container maxWidth=\"lg\" style={{ }} >\n <Grid item xs={12} >\n <Box ml={2} style={{ }} >\n <TextField\n error={Boolean(account.name.error)}\n helperText={account.name.error}\n fullWidth\n label=\"Full Name\"\n margin=\"normal\"\n name=\"name\"\n onChange={handleChange}\n type=\"text\"\n value={account.name.value}\n variant=\"outlined\"\n />\n <TextField\n error={Boolean(account.email.error)}\n helperText={account.email.error}\n fullWidth\n label=\"Email\"\n margin=\"normal\"\n name=\"email\"\n onChange={handleChange}\n type=\"email\"\n value={account.email.value}\n variant=\"outlined\"\n />\n </Box>\n <Box display=\"flex\" justifyContent=\"flex-end\" mt={2} >\n {!processing ?\n <Button onClick={onSaveAccount} color=\"primary\" variant=\"contained\" >\n Update Account\n </Button>\n :\n <CircularProgress />\n }\n </Box>\n <Box component=\"div\" style={{ display: 'flex', flex: 12, justifyContent: 'center' }} pt={2} pl={2}>\n <Collapse in={accountChanged.value}>\n <Alert severity=\"success\" action={\n <IconButton\n aria-label=\"close\"\n color=\"inherit\"\n size=\"small\"\n onClick={() => {\n setChanged({message: accountChanged.message, value: false});\n }}\n >\n <CloseIcon fontSize=\"inherit\" />\n </IconButton>\n }>\n {accountChanged.message}\n </Alert>\n </Collapse>\n </Box>\n </Grid>\n </Container>\n );\n};\n\nexport default Account;\n","import React, { useState, useEffect } from 'react';\nimport clsx from 'clsx';\nimport {\n Box,\n Button,\n TextField,\n makeStyles,\n IconButton, \n Collapse,\n CircularProgress,\n Container,\n Grid\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { Alert } from '@material-ui/lab';\nimport { useNavigate } from 'react-router-dom';\nimport { useSnackbar } from 'notistack';\nimport { validateLogin } from 'src/utils/EmitValidation';\nimport { jsonApiInit } from '../../utils/jsonApiConfig';\n\n// TODO update password api implement\n\nconst useStyles = makeStyles(({\n root: {}\n}));\n\nconst Password = ({ className, ...rest }) => {\n const classes = useStyles();\n const navigate = useNavigate();\n const [accessToken, setAccessToken] = useState('');\n const [processing, setProcessing] = useState(false);\n const [accountChanged, setChanged] = useState({message: '', value: false});\n const { enqueueSnackbar } = useSnackbar();\n const [values, setValues] = useState({\n password: '',\n confirm: '',\n error: '',\n id: ''\n });\n\n const handleChange = (event) => {\n setValues({\n ...values,\n [event.target.name]: event.target.value\n });\n };\n\n const onChangePassword = () => {\n const jsonApi = jsonApiInit(accessToken);\n const { password, confirm, id } = values;\n let data = {\n \"password\": password,\n \"password_confirmation\": confirm\n }\n if(password === confirm){\n setProcessing(true);\n jsonApi.one('user', id).patch({id, ...data}).then((resPassword) => {\n setChanged({message: 'Password updated successfully', value: true}); \n setProcessing(false);\n }).catch((err) => {\n setProcessing(false);\n setValues({ password: '', confirm: '', error: err.password.detail, id });\n enqueueSnackbar('Failed to update', { variant: 'error' });\n })\n }else{\n setValues({ password: '', confirm: '', error: 'Passwords do not match', id });\n }\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n const jsonApi = jsonApiInit(access_token);\n jsonApi.find('user').then((resUser) => {\n const { id } = resUser.data[0];\n setValues({ id, password: '', confirm: '' });\n });\n setAccessToken(access_token);\n }else{\n navigate('/login', { replace: true }); \n }\n }, [])\n\n return (\n <Container maxWidth=\"lg\" >\n <Grid item xs={12} >\n <form className={clsx(classes.root, className)} {...rest} >\n <Box ml={2} style={{ }} >\n <TextField\n error={Boolean(values.error)}\n helperText={values.error}\n fullWidth\n label=\"New password\"\n margin=\"normal\"\n name=\"password\"\n onChange={handleChange}\n type=\"password\"\n value={values.password}\n variant=\"outlined\"\n />\n <TextField\n fullWidth\n label=\"Confirm new password\"\n margin=\"normal\"\n name=\"confirm\"\n onChange={handleChange}\n type=\"password\"\n value={values.confirm}\n variant=\"outlined\"\n />\n </Box>\n <Box display=\"flex\" justifyContent=\"flex-end\" mt={2} >\n {!processing ?\n <Button onClick={onChangePassword} color=\"primary\" variant=\"contained\" >\n Update Password\n </Button>\n :\n <CircularProgress />\n }\n </Box>\n </form>\n <Box component=\"div\" style={{ display: 'flex', flex: 12, justifyContent: 'center' }} pt={2} pl={2}>\n <Collapse in={accountChanged.value}>\n <Alert severity=\"success\" action={\n <IconButton\n aria-label=\"close\"\n color=\"inherit\"\n size=\"small\"\n onClick={() => {\n setChanged({message: accountChanged.message, value: false});\n }}\n >\n <CloseIcon fontSize=\"inherit\" />\n </IconButton>\n }>\n {accountChanged.message}\n </Alert>\n </Collapse>\n </Box>\n </Grid>\n \n </Container>\n );\n};\n\nexport default Password;\n","import React, { useState } from 'react';\nimport { Box, Button, CardContent, Card } from '@material-ui/core';\n\nimport { AddPaymentMethodCard, CircularProcessing, FailedProcessing, SuccessProcessing } from '../../components/AllComponent';\nimport { jsonApiInit } from '../../utils/jsonApiConfig'\n\nconst NewPaymentMethod = ({ accessToken, onCardAdded, onClose }) => {\n const payment_params = { number: '', exp_month: '', exp_year: '', cvc: '' };\n const [cardData, setCardData] = useState(payment_params);\n const [processing, setProcessing] = useState('card');\n const [error, setError] = useState('');\n\n const handleChange = (event, i) => {\n if(event.target.name === 'number'){\n const trim_num = event.target.value.split(' ').join('');\n if(trim_num.length <= 16){\n if(trim_num.length % 4 === 0 && trim_num.length < 16){\n cardData[event.target.name] = `${event.target.value.trim()} `;\n }else{\n cardData[event.target.name] = `${event.target.value}`;\n }\n }\n setCardData({...cardData});\n }else{\n cardData[event.target.name] = event.target.value;\n setCardData({...cardData});\n }\n };\n\n const onSaveCard = () => {\n const pay_params_data = cardData;\n pay_params_data.number = pay_params_data.number.split(' ').join('');\n setProcessing('loading');\n const jsonApi = jsonApiInit(accessToken);\n jsonApi.create('payment-method', pay_params_data).then((resAdded) => {\n setCardData(payment_params);\n setProcessing('success');\n onCardAdded(true, resAdded.data);\n }).catch((err) => {\n const error_array = Object.values(err);\n setError(error_array[0].detail);\n onCardAdded(false, error_array[0]);\n setProcessing('failed');\n })\n }\n\n return(\n <Box pt={2} >\n <Card>\n <CardContent>\n {\n processing === \"card\" ?\n <Box>\n <AddPaymentMethodCard handleChange={(e) => handleChange(e)} card_data={cardData} />\n <Box pt={4} style={{ display: 'flex', flexDirection: 'row', justifyContent: 'flex-end' }} >\n <Box pr={2} >\n <Button onClick={onClose} variant=\"contained\" >Cancel</Button>\n </Box>\n <Box >\n <Button onClick={onSaveCard} color=\"primary\" variant=\"contained\" >SAVE</Button>\n </Box>\n </Box>\n </Box>\n : processing === \"loading\" ?\n <Box style={{ display: 'flex', justifyContent: 'center' }} pt={1} pb={1} >\n <CircularProcessing title=\"Adding payment method...\" />\n </Box>\n : processing === \"failed\" ?\n <FailedProcessing \n title={error} \n onCancel={onClose}\n ctaTitle=\"Try Again\"\n onCtaClick={() => {\n setError('');\n setCardData(payment_params);\n setProcessing('card');\n }}\n />\n : processing === \"success\" ?\n <SuccessProcessing title=\"Payment method added successfully\" onClose={onClose} />\n : null\n }\n </CardContent>\n </Card>\n </Box>\n )\n}\n\nexport default NewPaymentMethod;","import React, { useState, useEffect } from 'react';\nimport { Box, Container, Grid, Typography, Card, IconButton, Tooltip, Dialog, CircularProgress } from '@material-ui/core';\nimport { DeleteRounded, Payment, AccountBalanceWallet } from '@material-ui/icons';\nimport { useNavigate } from 'react-router-dom';\nimport { useSnackbar } from 'notistack';\nimport { useCardBrand, images } from 'react-card-brand';\n\nimport { validateLogin } from 'src/utils/EmitValidation';\nimport { jsonApiInit } from '../../utils/jsonApiConfig';\nimport NewPaymentMethod from './NewPaymentMethod';\nimport { PlusButton, PopupHeader } from 'src/components/AllComponent';\n\nconst PaymentMethod = () => {\n const navigate = useNavigate();\n const { getSvgProps } = useCardBrand();\n const { enqueueSnackbar } = useSnackbar();\n const [accessToken, setAccessToken] = useState('');\n const [addedPaymentList, setAddedPaymentList] = useState([]);\n const [newCard, setNewCard] = useState(false);\n const [loading, setLoading] = useState({ set_default: false });\n\n const onAddPaymentMethod = () => {\n if(!newCard){\n setNewCard(true);\n }else{\n enqueueSnackbar('Please save your card', { variant: 'info' });\n }\n }\n\n const loadAllCard = (access_token) => {\n const jsonApi = jsonApiInit(access_token);\n jsonApi.findAll('payment-method').then((resCard) => {\n let { data } = resCard;\n setAddedPaymentList([...data]);\n });\n }\n\n const setDefaultCard = (cardData) => {\n const jsonApi = jsonApiInit(accessToken);\n loading.set_default = true;\n setLoading({ ...loading });\n jsonApi.one('payment-method', cardData.id).patch({ id: cardData.id, default: true }).then(res => {\n enqueueSnackbar(`Card with last four digit ${cardData.card_last_four} is set to default successfully`, { variant: 'success' });\n loading.set_default = false;\n setLoading({ ...loading });\n }).catch(err => {\n enqueueSnackbar(`Failed to set the default card`, { variant: 'error' });\n loading.set_default = false;\n setLoading({ ...loading });\n })\n loadAllCard(accessToken);\n \n }\n\n const onDelCard = (data, i) => {\n if(!data.is_default){\n const jsonApi = jsonApiInit(accessToken);\n enqueueSnackbar('Deleting your card...', { variant: 'info' });\n jsonApi.destroy('payment-method', data.id).then((resDelete) => {\n enqueueSnackbar('Card delete successfully', { variant: 'success' });\n loadAllCard(accessToken);\n }).catch((err) => {\n enqueueSnackbar('Failed to delete your card', { variant: 'error' });\n })\n }else{\n enqueueSnackbar('You cannot delete default card', { variant: 'error' });\n }\n }\n\n const onNewCardAdded = (status, data) => {\n if(status){\n enqueueSnackbar('Payment method added successfully', { variant: 'success' });\n loadAllCard(accessToken);\n }\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n setAccessToken(access_token);\n loadAllCard(access_token);\n }else{\n navigate('/login', { replace: true }); \n }\n }, []);\n return (\n <Container maxWidth=\"lg\" >\n <Grid item xs={12} >\n <Box ml={2} mb={2} style={{ display: 'flex' }} >\n <Box style={{ display: 'flex', flex: 2, alignItems: 'center' }}>\n <Typography variant=\"h4\">Payment Setting</Typography>\n </Box>\n <Box style={{ display: 'flex', flex: 2, justifyContent: 'flex-end' }}>\n <PlusButton onClick={onAddPaymentMethod} tooltip=\"Add Payment method\" />\n </Box>\n </Box>\n <Box mb={2} ml={2}>\n {\n addedPaymentList.map((d, i) => {\n return(\n <Box mb={2} key={i} >\n <Card>\n <Box p={2} style={{ display: 'flex' }}>\n <Box>\n <svg fontSize=\"24\" {...getSvgProps({ type: d.card_brand.toLowerCase(), images })} />\n </Box>\n <Box pl={2} style={{ display: 'flex', flex: 2 }} >\n <Typography style={{ fontSize: 20 }} >**** **** **** </Typography>\n <Typography component=\"h5\" > {d.card_last_four}</Typography>\n </Box>\n <Box style={{ display: 'flex', flex: 1, justifyContent: 'flex-end' }} >\n {\n !loading.set_default ?\n d.is_default ?\n <Tooltip title=\"Default card\" >\n <IconButton size=\"small\" style={{ color: '#7465f2' }} ><Payment fontSize=\"small\" /></IconButton>\n </Tooltip>\n : \n <Tooltip title=\"Set Default card\" >\n <IconButton size=\"small\" style={{ color: '#7465f2' }} onClick={() => setDefaultCard(d)} >\n <AccountBalanceWallet fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n :\n <Box pt={1} ><CircularProgress size={16} /></Box>\n }\n <Tooltip title=\"Delete\" >\n <IconButton onClick={() => onDelCard(d, i)} size=\"small\" style={{ color: '#7465f2', }} >\n <DeleteRounded fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </Box>\n </Box>\n </Card>\n </Box>\n )\n })\n }\n </Box>\n <Box ml={2} style={{ width: 460 }} ></Box>\n </Grid>\n <Dialog open={newCard}>\n <Box p={4} style={{ width: 520 }} >\n <PopupHeader onClose={() => setNewCard(false)} title=\"Add Payment Method\" />\n <NewPaymentMethod \n onCardAdded={(status, data) => onNewCardAdded(status, data)}\n accessToken={accessToken}\n onClose={() => setNewCard(false)}\n />\n </Box>\n </Dialog>\n </Container>\n );\n};\n\nexport default PaymentMethod;\n","import React, { useState, useEffect } from 'react';\nimport {\n Box,\n Container,\n makeStyles,\n Tabs,\n Tab,\n Grid,\n Card,\n Breadcrumbs,\n Link\n} from '@material-ui/core';\nimport { useNavigate } from 'react-router-dom';\nimport Page from 'src/components/Page';\nimport Account from './Account';\nimport Password from './Password';\nimport PaymentMethod from './PaymentMethod'\nimport { validateLogin } from 'src/utils/EmitValidation';\nimport { AppLink, PageBreadcrumb } from 'src/components/AllComponent';\nimport { breadcrumbStyle } from 'src/theme/emitStyle';\n\nfunction TabPanel(props) {\n const { children, value, index, ...other } = props;\n return (\n <div\n style={{ minHeight: window.innerHeight-160-100 }}\n role=\"tabpanel\"\n hidden={value !== index}\n id={`vertical-tabpanel-${index}`}\n aria-labelledby={`vertical-tab-${index}`}\n {...other}\n >\n {children}\n </div>\n );\n}\n\nfunction a11yProps(index) {\n return {\n id: `vertical-tab-${index}`,\n 'aria-controls': `vertical-tabpanel-${index}`,\n };\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.light,\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3),\n display: 'flex'\n },\n tabs: {\n borderRight: `1px solid ${theme.palette.divider}`,\n },\n}));\n\nconst Settings = () => {\n const classes = useStyles();\n const navigate = useNavigate();\n const [value, setValue] = useState(0);\n\n const tabBarStyle = (i) => { \n if(i === value){\n return '#dae3ff';\n }else{\n return 'white';\n }\n };\n\n useEffect(() => {\n const access_token = validateLogin();\n if(!access_token){\n navigate('/login', { replace: true }); \n }\n }, [])\n\n return (\n <Page className={classes.root} title=\"Settings\" >\n <Container maxWidth={false} >\n <Grid item xs={8} >\n <Box mb={1}>\n <Breadcrumbs aria-label=\"breadcrumb\">\n <AppLink navigate={navigate} />\n <Link color=\"inherit\" onClick={() => setValue(0)} style={breadcrumbStyle.link} >Settings</Link>\n <PageBreadcrumb title={value === 0 ? \"Account\" : value === 1 ? \"Change Password\" : \"Payment methods\" } />\n </Breadcrumbs>\n </Box>\n <Card color=\"white\" elevation={0} >\n <div className={classes.root} style={{ backgroundColor: 'white' }}>\n <Tabs\n orientation=\"vertical\"\n variant=\"fullWidth\"\n value={value}\n onChange={(event, newValue) => setValue(newValue)}\n aria-label=\"Vertical tabs example\"\n className={classes.tabs}\n centered={false}\n >\n <Tab style={{ width: 240, backgroundColor: tabBarStyle(0) }} label=\"Account\" {...a11yProps(0)} />\n <Tab style={{ width: 240, backgroundColor: tabBarStyle(1) }} label=\"Security\" {...a11yProps(1)} />\n <Tab style={{ width: 240, backgroundColor: tabBarStyle(2) }} label=\"Payment Methods\" {...a11yProps(2)} />\n </Tabs>\n <TabPanel value={value} index={0}>\n <Account />\n </TabPanel>\n <TabPanel value={value} index={1}>\n <Password />\n </TabPanel>\n <TabPanel value={value} index={2}>\n <PaymentMethod />\n </TabPanel>\n </div>\n </Card>\n </Grid>\n </Container>\n </Page>\n );\n};\n\nexport default Settings;\n","import React, { useRef, useEffect, useState } from 'react';\nimport { Link as RouterLink, useNavigate } from 'react-router-dom';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport * as Yup from 'yup';\nimport { Formik } from 'formik';\nimport {\n Box,\n Button,\n Container,\n Link,\n TextField,\n FormHelperText,\n Typography,\n makeStyles,\n CircularProgress\n} from '@material-ui/core';\nimport Page from 'src/components/Page';\nimport api from 'src/utils/api';\nimport { GoogleReCaptcha, useGoogleReCaptcha } from 'react-google-recaptcha-v3';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.dark,\n height: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3)\n }\n}));\n\nconst ForgotPassword = () => {\n const classes = useStyles();\n const navigate = useNavigate();\n const [requestSent, setRequestSent] = useState(false);\n const [token, setToken] = useState(\"\");\n const formikFormRef = useRef();\n const { executeRecaptcha } = useGoogleReCaptcha();\n\n const onForgotPassword = (user_data, navigate, formikFormRef) => {\n executeRecaptcha(\"forgot\").then(function (token) { \n api.postAuth('password/forgot', {...user_data, \"recaptcha\": token}).then((resForgotPassword) => {\n if(resForgotPassword.ok){\n formikFormRef.current.setSubmitting(false)\n setRequestSent(true)\n }else if(resForgotPassword.errors){\n formikFormRef.current.setErrors({ catch_error: resForgotPassword.errors })\n formikFormRef.current.setSubmitting(false)\n }else{\n formikFormRef.current.setErrors({ catch_error: \"Something went wrong please try again\" })\n formikFormRef.current.setSubmitting(false)\n }\n }).catch((error) => {\n formikFormRef.current.setErrors({ catch_error: error.message })\n formikFormRef.current.setSubmitting(false)\n })\n });\n }\n\n useEffect(() => {\n const resToken = localStorage.getItem('user_token')\n if(resToken){\n navigate('/app/dashboard', { replace: true }); \n }\n })\n\n const handleVerify = React.useCallback((token) => {\n setToken(token)\n }, []);\n\n return (\n <Page className={classes.root} title=\"Forgot Password\" >\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n height=\"100%\"\n justifyContent=\"center\"\n >\n <Container maxWidth=\"sm\">\n { !requestSent ?\n <Formik\n innerRef={formikFormRef}\n initialValues={{ email: '' }}\n validationSchema={Yup.object().shape({\n email: Yup.string().email('Must be a valid email').max(255).required('Email is required'),\n })}\n onSubmit={(data) => onForgotPassword(data, navigate, formikFormRef)}\n >\n {({ errors, handleBlur, handleChange, handleSubmit, isSubmitting, touched, values }) => (\n <form onSubmit={handleSubmit}>\n <Box mb={3}>\n <Typography align=\"center\" color=\"textPrimary\" variant=\"h2\" >Forgot Password</Typography>\n </Box>\n <TextField\n autoFocus\n error={Boolean(touched.email && errors.email)}\n fullWidth\n helperText={touched.email && errors.email}\n label=\"Email address\"\n margin=\"normal\"\n name=\"email\"\n onBlur={handleBlur}\n onChange={handleChange}\n type=\"email\"\n value={values.email}\n variant=\"outlined\"\n />\n {Boolean(errors.catch_error) && (<FormHelperText error>{errors.catch_error}</FormHelperText>)}\n <Box my={2} display=\"flex\" justifyContent=\"center\" >\n {\n !isSubmitting ? \n <Button color=\"primary\" disabled={isSubmitting} fullWidth size=\"large\" type=\"submit\" variant=\"contained\">\n Submit\n </Button>\n :\n <CircularProgress />\n }\n </Box>\n <Typography color=\"textSecondary\" variant=\"body1\">\n <Link component={RouterLink} to=\"/login\" variant=\"h6\">\n Back\n </Link>\n </Typography>\n <GoogleReCaptcha onVerify={handleVerify} />\n </form>\n )}\n </Formik>\n :\n <Alert severity=\"success\" onClose={() => {setRequestSent(false)}}>\n <AlertTitle>Password reset requested</AlertTitle>\n Please check your email to complete the process\n </Alert>\n }\n </Container>\n </Box>\n </Page>\n );\n};\n\nexport default ForgotPassword;\n","import React, { useRef, useEffect, useState } from 'react';\nimport { Link as RouterLink, useNavigate, useLocation } from 'react-router-dom';\nimport * as Yup from 'yup';\nimport { Formik } from 'formik';\nimport {\n Box,\n Button,\n Container,\n TextField,\n FormHelperText,\n Typography,\n Link,\n makeStyles,\n CircularProgress\n} from '@material-ui/core';\nimport Page from 'src/components/Page';\nimport { useSnackbar } from 'notistack';\nimport api from 'src/utils/api';\nimport { GoogleReCaptcha, useGoogleReCaptcha } from 'react-google-recaptcha-v3';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.dark,\n height: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3)\n }\n}));\n\nconst ResetPassword = () => {\n const classes = useStyles();\n const navigate = useNavigate();\n const formikFormRef = useRef();\n let { state } = useLocation();\n const [token, setToken] = useState(\"\");\n const { enqueueSnackbar } = useSnackbar();\n const [userData, setUserData] = useState({ access_token: '', email: '' });\n const { executeRecaptcha } = useGoogleReCaptcha();\n\n const onResetPassword = (state, user_data, navigate, formikFormRef) => {\n const reset_params = { \n token: userData.access_token,\n email: userData.email,\n password: user_data.password,\n password_confirmation: user_data.confirm_password\n }\n if(reset_params.password === reset_params.password_confirmation){\n executeRecaptcha(\"reset\").then(function (token) {\n api.post('password/reset', {...reset_params, \"recaptcha\": token}, false).then((resResetPassword) => {\n formikFormRef.current.setSubmitting(false)\n if(resResetPassword.errors){\n formikFormRef.current.setErrors({ catch_error: resResetPassword.message }) \n if(resResetPassword.errors.recaptcha) formikFormRef.current.setErrors({ catch_error: resResetPassword.errors.recaptcha }) \n }else{\n enqueueSnackbar('Password updated', { variant: 'success' });\n navigate('/login', { replace: true });\n }\n }).catch((error) => {\n formikFormRef.current.setErrors({ catch_error: error.message })\n formikFormRef.current.setSubmitting(false)\n })\n });\n }else{\n formikFormRef.current.setErrors({ password: \"Both password does not match\", confirm_password: \"Both password does not match\" })\n formikFormRef.current.setSubmitting(false)\n }\n }\n\n useEffect(() => {\n const resToken = localStorage.getItem('user_token')\n if(resToken){\n navigate('/app/dashboard', { replace: true }); \n }\n const queryString = window.location.search;\n const urlParams = new URLSearchParams(queryString);\n setUserData({ access_token: urlParams.get('token'), email: urlParams.get('email')});\n }, [])\n\n const handleVerify = React.useCallback((token) => {\n setToken(token)\n }, []);\n\n return (\n <Page className={classes.root} title=\"Reset Password\" >\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n height=\"100%\"\n justifyContent=\"center\"\n >\n <Container maxWidth=\"sm\">\n <Formik\n innerRef={formikFormRef}\n initialValues={{ password: '', confirm_password: ''}}\n validationSchema={Yup.object().shape({\n password: Yup.string().min(8, 'Password must be at least 8 characters').max(32, 'Password must be at most 32 characters').required('Password is required'),\n confirm_password: Yup.string().required('Password confirmation is required'),\n })}\n onSubmit={(data) => onResetPassword(state, data, navigate, formikFormRef)}\n >\n {({ errors, handleBlur, handleChange, handleSubmit, isSubmitting, touched, values }) => (\n <form onSubmit={handleSubmit}>\n <Box mb={3}>\n <Typography align=\"center\" color=\"textPrimary\" variant=\"h2\" >Reset Password</Typography>\n </Box>\n <TextField\n error={Boolean(touched.password && errors.password)}\n fullWidth\n helperText={touched.password && errors.password}\n label=\"New Password\"\n margin=\"normal\"\n name=\"password\"\n onBlur={handleBlur}\n onChange={handleChange}\n type=\"password\"\n value={values.password}\n variant=\"outlined\"\n />\n <TextField\n error={Boolean(touched.confirm_password && errors.confirm_password)}\n fullWidth\n helperText={touched.confirm_password && errors.confirm_password}\n label=\"Confirm new password\"\n margin=\"normal\"\n name=\"confirm_password\"\n onBlur={handleBlur}\n onChange={handleChange}\n type=\"password\"\n value={values.confirm_password}\n variant=\"outlined\"\n />\n {Boolean(errors.catch_error) && (<FormHelperText error>{errors.catch_error}</FormHelperText>)}\n <Box my={2} display=\"flex\" justifyContent=\"center\" >\n {\n !isSubmitting ? \n <Button color=\"primary\" disabled={isSubmitting} fullWidth size=\"large\" type=\"submit\" variant=\"contained\">\n Reset Password\n </Button>\n :\n <CircularProgress />\n }\n </Box>\n <Typography color=\"textSecondary\" variant=\"body1\">\n <Link component={RouterLink} to=\"/login\" variant=\"h6\">\n Back\n </Link>\n </Typography>\n\n <GoogleReCaptcha onVerify={handleVerify} />\n </form>\n )}\n </Formik>\n </Container>\n </Box>\n </Page>\n );\n};\n\nexport default ResetPassword;\n","import React, { useState, useRef, useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport * as Yup from 'yup';\nimport { Formik } from 'formik';\nimport { Container, TextField, Grid, CircularProgress, CardContent, Box, Button, Avatar } from '@material-ui/core';\nimport dayjs from 'dayjs';\nimport { useSnackbar } from 'notistack';\n\nimport { EmitSelect } from '../../../components/AllComponent';\nimport { jsonApiInit } from '../../../utils/jsonApiConfig';\nimport { gender_list } from '../../../utils/SelectOptions';\n\nconst PersonalDetails = ({ isEdit, editData, accessToken, index }) => {\n const dispatch = useDispatch();\n const formikFormRef = useRef();\n const [processing, setProcessing] = useState(false);\n const { enqueueSnackbar } = useSnackbar();\n const pd_initial_value = { title: '', fullName: '', dob: '', bio: '' };\n const [pdValues, setPdValues] = useState(pd_initial_value);\n const [extraData, setExtraData] = useState({ gender: 1, base64: '', phone: '' });\n\n const parseError = err => {\n const err_arr = Object.values(err);\n if(err_arr && err_arr.length > 0){\n return(err_arr[0].detail)\n }else{\n return null\n }\n }\n\n const onSaveAndUpdate = () => {\n let { values, errors } = formikFormRef.current;\n const error_array = Object.values(errors);\n const { base64, gender } = extraData;\n let pd_form_data = {\n \"title\": values.title,\n \"full-name\": values.fullName,\n \"dob\": values.dob,\n \"gender\": gender,\n \"bio\": values.bio,\n \"meta\": [values.bio]\n }\n\n const jsonApi = jsonApiInit(accessToken);\n if(error_array.length === 0){\n setProcessing(true);\n if(isEdit){\n if(base64) {\n pd_form_data.avatar = base64\n }\n pd_form_data.id = editData.id;\n jsonApi.one('person', editData.id).patch(pd_form_data).then((resUpdatePD) => {\n if(!resUpdatePD.error){\n enqueueSnackbar('Personal details updated successfully', { variant: 'success' });\n setProcessing(false);\n }\n }).catch(err => {\n const err_data = parseError(err);\n if(err_data && typeof(err_data) === 'string'){\n enqueueSnackbar(err_data, { variant: 'error' })\n }else{\n enqueueSnackbar(`Failed to update people`, { variant: 'error' })\n }\n setProcessing(false);\n })\n }else{\n pd_form_data.gdpr = false;\n pd_form_data.verified = false;\n pd_form_data.status = \"active\";\n pd_form_data.avatar = base64;\n jsonApi.create('person', pd_form_data).then((resPerson) => {\n dispatch({ type: 'PEOPLE_DETAILS', data: resPerson.data });\n enqueueSnackbar('Personal details saved successfully', { variant: 'success' });\n setTimeout(() => { enqueueSnackbar('You can add email, phone and more', { variant: 'info' }); }, 600)\n }).catch(err => {\n const err_data = parseError(err);\n if(err_data && typeof(err_data) === 'string'){\n enqueueSnackbar(err_data, { variant: 'error' })\n }else{\n enqueueSnackbar(`Failed to add people`, { variant: 'error' })\n }\n })\n }\n }\n }\n\n const handleFileChange = (event) => {\n let imageData = event.currentTarget.files;\n if(imageData.length !== 0){\n var reader = new FileReader();\n var baseString;\n reader.onloadend = function () {\n baseString = reader.result;\n setExtraData({ ...extraData, ...{ base64: baseString } });\n };\n reader.readAsDataURL(imageData[0]);\n }\n }\n\n useEffect(() => {\n if(isEdit){\n const { gender, phone_number } = editData;\n pdValues.fullName = editData[\"full-name\"];\n pdValues.title = editData.title ? editData.title : '';\n pdValues.bio = editData.bio ? editData.bio : '';\n pdValues.dob = editData.dob ? editData.dob : '';\n setPdValues({...pdValues});\n setExtraData({ ...extraData, ...{\n gender: gender,\n phone: phone_number ? phone_number : ''\n } });\n }\n }, []);\n\n return (\n <Container maxWidth=\"lg\" style={{ width: window.innerWidth-540, height: '100%' }} >\n <Grid container justify=\"center\" style={{ height: '100%' }} >\n <Grid item md={6} lg={12} xs={12} >\n <Formik\n innerRef={formikFormRef}\n initialValues={pd_initial_value}\n validationSchema={Yup.object().shape({\n fullName: Yup.string().min(2).max(255).required('Full name is required'),\n title: Yup.string().min(2).max(125),\n dob: Yup.date().max(dayjs().format('D-MMM-YYYY')),\n })}\n onSubmit={(data) => {}}\n >\n {({ errors, handleBlur, handleChange, handleSubmit, isSubmitting, touched, values }) => (\n <form onSubmit={handleSubmit}>\n <CardContent>\n <Grid container spacing={3} >\n <Grid item md={6} xs={12} >\n <TextField\n error={Boolean(touched.title && errors.title)}\n fullWidth\n helperText={touched.title && errors.title}\n label=\"Title\"\n margin=\"normal\"\n name=\"title\"\n onBlur={handleBlur}\n onChange={handleChange}\n type=\"text\"\n value={values.title}\n variant=\"outlined\"\n />\n </Grid>\n <Grid item md={6} xs={12}>\n <TextField\n autoFocus={isEdit ? false : true}\n error={Boolean(touched.fullName && errors.fullName)}\n fullWidth\n helperText={touched.fullName && errors.fullName}\n label=\"Fullname\"\n margin=\"normal\"\n name=\"fullName\"\n onBlur={handleBlur}\n onChange={handleChange}\n type=\"text\"\n value={values.fullName}\n variant=\"outlined\"\n />\n </Grid>\n </Grid>\n\n <Grid container spacing={3}>\n <Grid item md={6} xs={12} >\n <EmitSelect\n label=\"Gender\"\n name=\"url_type\"\n options={gender_list}\n value={extraData.gender}\n onChange={(e) => setExtraData({ ...extraData, ...{ gender: e.target.value } })}\n />\n </Grid>\n <Grid item md={6} xs={12} >\n <Box display=\"flex\" style={{ borderRadius: 4 }} >\n <Button variant=\"contained\" component=\"label\" style={{ width: '100%', backgroundColor: '#f7f7f7' }} >\n <Box display=\"flex\" justifyContent=\"flex-start\" >\n <Avatar src={extraData.base64} style={{ height: 44, width: 44 }} />\n </Box>\n <Box pl={1}>Choose avatar</Box>\n <Box style={{ width: '52%' }} ></Box>\n <input type=\"file\" name=\"people_avatar\" accept=\"image/*\" hidden onChange={(e) => handleFileChange(e)} />\n </Button>\n </Box>\n </Grid>\n </Grid>\n\n <Grid container spacing={3} >\n <Grid item md={6} xs={12}>\n <TextField\n error={Boolean(touched.dob && errors.dob)}\n fullWidth\n helperText={touched.dob && errors.dob}\n label=\"Date of birth\"\n margin=\"normal\"\n name=\"dob\"\n onBlur={handleBlur}\n onChange={handleChange}\n type=\"date\"\n value={values.dob}\n variant=\"outlined\"\n InputLabelProps={{\n shrink: true\n }}\n />\n </Grid>\n <Grid item md={6} xs={12}>\n <TextField\n fullWidth\n label=\"Phone number\"\n margin=\"normal\"\n name=\"phone\"\n onBlur={handleBlur}\n onChange={handleChange}\n type=\"text\"\n value={extraData.phone}\n variant=\"outlined\"\n disabled={true}\n />\n </Grid>\n </Grid>\n <Grid container spacing={3} >\n <Grid item md={12} xs={12}>\n <TextField\n multiline\n rows={3}\n error={Boolean(touched.bio && errors.bio)}\n fullWidth\n helperText={touched.bio && errors.bio}\n label=\"Notes\"\n margin=\"normal\"\n name=\"bio\"\n onBlur={handleBlur}\n onChange={handleChange}\n type=\"text\"\n value={values.bio}\n variant=\"outlined\"\n />\n </Grid>\n </Grid>\n </CardContent>\n </form>\n )}\n </Formik>\n </Grid>\n <Grid item xs={12} style={{ display: 'flex', alignItems: 'flex-end', justifyContent: 'flex-end' }}>\n <Box component=\"div\" mr={2} mt={2} >\n {!processing ?\n <Button onClick={() => onSaveAndUpdate()} variant='contained' color=\"primary\" size=\"large\" >\n {isEdit ? \"Update\" : \"Save\"}\n </Button>\n :\n <CircularProgress />\n }\n </Box>\n </Grid>\n </Grid>\n </Container>\n );\n};\n\nexport default PersonalDetails;\n","import React, { useState, useEffect } from 'react';\nimport { Container, TextField, makeStyles, Grid, CardContent, Box, IconButton } from '@material-ui/core';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport { useSnackbar } from 'notistack';\n\nimport { jsonApiInit } from '../../../utils/jsonApiConfig';\nimport { validateLogin, validateEmail } from 'src/utils/EmitValidation';\nimport { EmitSelect, PlusButton } from '../../../components/AllComponent';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.dark,\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3)\n },\n input: {\n height: 30\n }\n}));\n\nconst EmailDetails = ({ isEdit, editData, accessToken }) => {\n const classes = useStyles();\n const email_params = { email: '', errorText: '', confirmed: false, optIn: false, update: false, isNew: true };\n const [emailList, setEmailList] = useState([email_params]);\n const { enqueueSnackbar } = useSnackbar();\n\n const onAddMoreEmail = () => {\n const lastIndex = emailList.length-1;\n const { email, update, isNew } = emailList[lastIndex];\n if( validateEmail(email) ){\n emailList.push(email_params);\n if(update || isNew){\n onSaveEmail(emailList[lastIndex], lastIndex);\n }\n }else{\n emailList[lastIndex].errorText = \"Please enter valid email\";\n }\n setEmailList([...emailList]);\n }\n\n const onDeleteEmail = (index) => {\n if(isEdit && emailList[index].id){\n const jsonApi = jsonApiInit(accessToken);\n jsonApi.destroy('email', emailList[index].id);\n enqueueSnackbar('Email deleted successfully', { variant: 'success' });\n }\n emailList.splice(index, 1);\n setEmailList([...emailList]);\n }\n\n const onEmailTextChange = (text, index) => {\n emailList[index].email = text.target.value;\n emailList[index].errorText = '';\n if(emailList[index].id){\n emailList[index].update = true;\n }\n setEmailList([...emailList]);\n }\n\n const onSaveEmail = (email_data, lastIndex) => {\n const { update, email, id } = email_data;\n const jsonApi = jsonApiInit(accessToken);\n if(update && id){\n jsonApi.one('email', id).patch({ id, account: email }).then((resUpdate) => {\n enqueueSnackbar(`${email} updated successfully`, { variant: 'success' });\n emailList[lastIndex].update = false;\n setEmailList([...emailList]);\n }).catch((err) => {\n handleError(err, lastIndex);\n })\n }else{\n jsonApi.create('email', { \"person-id\": editData.id, account: email }).then((resCreate) => {\n enqueueSnackbar(`${email} saved successfully`, { variant: 'success' });\n emailList[lastIndex].id = resCreate.data.id;\n setEmailList(emailList);\n }).catch((err) => {\n handleError(err, lastIndex);\n })\n }\n }\n\n const handleError = (err, index) => {\n enqueueSnackbar(err.account.detail, { variant: 'error' });\n emailList[index].errorText = err.account.detail;\n setEmailList([...emailList]);\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token && isEdit){\n const jsonApi = jsonApiInit(access_token);\n jsonApi.one('person', editData.id).all('emails').get().then((resEmail) => {\n const { data, error } = resEmail;\n let editEmailList = [];\n if(!error && data.length !== 0){\n data.map((d, i) => {\n const { account, optIn, verified, id } = d;\n editEmailList.push({ email: account, confirmed: verified, optIn, id, update: false, isNew: false })\n });\n setEmailList(editEmailList);\n }\n })\n }\n }, []);\n\n return (\n <Container maxWidth=\"lg\" style={{ width: window.innerWidth-540 }} >\n <Grid container justify=\"center\" >\n <Grid item md={6} lg={12} xs={12} >\n <form onSubmit={() => {}}>\n <CardContent>\n {\n emailList.map((email_data, i) => {\n return(\n <Grid container spacing={2} key={i} >\n <Grid item md={5} xs={12}>\n <TextField\n fullWidth\n error={Boolean(email_data.errorText)}\n helperText={email_data.errorText}\n type=\"email\"\n label=\"Email\"\n margin=\"normal\"\n name=\"passportNumber\"\n onChange={(text) => onEmailTextChange(text, i)}\n value={email_data.email}\n variant=\"outlined\"\n />\n </Grid>\n <Grid item md={3} xs={12} >\n <Box mt={2}>\n <EmitSelect \n value={email_data.confirmed}\n disabled={true}\n label=\"Confirmed\"\n name=\"email_confirm\"\n options={[{ name: 'Yes', value: true }, { name: 'No', value: false }]}\n />\n </Box>\n </Grid>\n <Grid item md={3} xs={12} >\n <Box mt={2}>\n <EmitSelect \n value={email_data.optIn}\n disabled={true}\n label=\"OPT In\"\n name=\"email_optin\"\n options={[{ name: 'Yes', value: true }, { name: 'No', value: false }]}\n />\n </Box>\n </Grid>\n <Grid item md={1} xs={12} >\n <Box mt={2}>\n <IconButton onClick={() => { email_data.update ? onSaveEmail(email_data, i) : onDeleteEmail(i) }} style={{ color: '#7465f2' }} className={classes.margin}>\n {email_data.update ? <CheckCircleIcon fontSize=\"large\" /> : <DeleteIcon fontSize=\"large\" />}\n </IconButton>\n </Box>\n </Grid>\n </Grid>\n )\n })\n }\n <Grid container spacing={2} >\n <Grid item md={11} xs={12}>\n <Box display=\"flex\" justifyContent=\"flex-end\" >\n <PlusButton onClick={onAddMoreEmail} tooltip=\"Add Email\" />\n </Box>\n </Grid>\n </Grid>\n </CardContent>\n </form>\n </Grid>\n </Grid>\n </Container>\n );\n};\n\nexport default EmailDetails;\n","import React, { useState, useEffect } from 'react';\nimport { Container, TextField, makeStyles, Grid, CardContent, Box, IconButton } from '@material-ui/core';\nimport { useSnackbar } from 'notistack';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\n\nimport { EmitSelect, PlusButton } from '../../../components/AllComponent';\nimport { jsonApiInit } from '../../../utils/jsonApiConfig';\nimport { validateLogin } from 'src/utils/EmitValidation';\nimport { phone_type_list } from 'src/utils/SelectOptions';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.dark,\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3)\n }\n}));\n\nconst PhoneDetails = (props) => {\n const { isEdit, editData, accessToken } = props;\n const classes = useStyles();\n const phone_params = { \n phone: { value: '', error: '' }, \n type_def: { value: '', error: '' }, \n isDefault: { value: false, error: '' },\n confirmed: false, optIn: false,\n update: false,\n isNew: true \n };\n const [phoneList, setphoneList] = useState([phone_params]);\n const { enqueueSnackbar } = useSnackbar();\n\n const onAddMore = () => {\n const lastIndex = phoneList.length-1;\n if(lastIndex >= 0){\n const { type_def, phone, update, isNew } = phoneList[lastIndex];\n if(!type_def.value){\n phoneList[lastIndex].type_def.error = 'Please choose phone type';\n }else if(!phone.value){\n phoneList[lastIndex].phone.error = 'Please enter phone number';\n }else{\n if(update || isNew){\n onSavePhone(phoneList[lastIndex], lastIndex).then(res => {\n phoneList.push(phone_params);\n setphoneList([...phoneList])\n }).catch(err => {})\n }else{\n phoneList.push(phone_params);\n setphoneList([...phoneList])\n }\n }\n setphoneList([...phoneList]);\n }else{\n phoneList.push(phone_params);\n setphoneList([...phoneList]);\n }\n }\n\n const onDeletePhone = (index) => {\n const { isDefault, id } = phoneList[index];\n if(!isDefault.value){\n if(isEdit && id){\n const jsonApi = jsonApiInit(accessToken);\n jsonApi.destroy('phone', id);\n enqueueSnackbar('Phone deleted successfully', { variant: 'success' });\n }\n phoneList.splice(index, 1);\n setphoneList([...phoneList]);\n }else{\n enqueueSnackbar('Default phone cannot be deleted', { variant: 'error' });\n }\n }\n\n const onTextChange = (event, index) => {\n phoneList[index][event.target.name].value = event.target.value;\n phoneList[index][event.target.name].error = '';\n if(phoneList[index].id){\n phoneList[index].update = true;\n }\n setphoneList([...phoneList]);\n }\n\n const onDefaultSet = (data, index, changeValue) => {\n if(changeValue.target.value){\n if(isEdit){\n const jsonApi = jsonApiInit(accessToken);\n jsonApi.one('phone', data.id).patch({ id: data.id, 'is-default': true }).then((resDefault) => {\n enqueueSnackbar(`Phone ${data.phone.value} set to default successfully`, { variant: 'success' });\n phoneList.map((d, i) => {\n phoneList[i].isDefault.value = false;\n });\n phoneList[index].isDefault.value = true;\n setphoneList([...phoneList]);\n });\n }\n }else{\n enqueueSnackbar(`There must be at least a default number`, { variant: 'warning' });\n }\n }\n\n const onSavePhone = (phone_data, index) => {\n return new Promise((resolve, reject) => {\n const { type_def, phone, update, id } = phone_data;\n const jsonApi = jsonApiInit(accessToken);\n if(update && id){\n jsonApi.one('phone', id).patch({ id, type_def: type_def.value, number: phone.value }).then((resUpdate) => {\n enqueueSnackbar(`Phone number ${phone.value} updated successfully`, { variant: 'success' });\n phoneList[index].update = false;\n resolve({ action: 'update' })\n }).catch((err) => {\n const err_data = parseError(err)\n if(err_data && typeof(err_data) === 'string'){\n enqueueSnackbar(err_data, { variant: 'error' })\n }else{\n enqueueSnackbar(`Failed to update phone`, { variant: 'error' })\n }\n reject({ action: 'update' })\n })\n }else{\n jsonApi.create('phone', { \"person-id\": editData.id, type_def: type_def.value, number: phone.value, }).then((resCreate) => {\n enqueueSnackbar(`Phone number ${phone.value} saved successfully`, { variant: 'success' });\n phoneList[index].id = resCreate.data.id;\n resolve({ action: 'add' })\n }).catch((err) => {\n const err_data = parseError(err)\n if(err_data && typeof(err_data) === 'string'){\n enqueueSnackbar(err_data, { variant: 'error' })\n }else{\n enqueueSnackbar(`Failed to add phone`, { variant: 'error' })\n }\n reject({ action: 'add' })\n })\n }\n })\n }\n\n const parseError = err => {\n const err_arr = Object.values(err);\n if(err_arr && err_arr.length > 0){\n return(err_arr[0].detail)\n }else{\n return null\n }\n }\n\n const loadPhoneNumber = (access_token) => {\n const jsonApi = jsonApiInit(access_token);\n jsonApi.one('person', editData.id).all('phone').get().then((resEmail) => {\n let { data, error } = resEmail;\n if(!error && data.length !== 0){\n let editphoneList = [];\n data.map((d, i) => {\n const { number, optIn, verified, id, type_def } = d;\n editphoneList.push({ \n type_def: { value: type_def, error: '' },\n phone: { value: number, error: '' },\n isDefault: { value: Boolean(d['is-default']), error: '' },\n confirmed: verified, optIn, id, \n update: false,\n isNew: false\n });\n });\n setphoneList(editphoneList);\n }\n })\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token && isEdit){\n loadPhoneNumber(access_token);\n }\n }, []);\n\n return (\n <Container style={{ width: window.innerWidth-540 }} >\n <Grid container justify=\"center\" >\n <Grid item md={6} lg={12} xs={12} >\n <form onSubmit={() => {}}>\n <CardContent>\n {\n phoneList.map((phone_data, i) => {\n return(\n <Grid container spacing={2} key={i} >\n <Grid item md={3} xs={12} >\n <Box mt={2}>\n <EmitSelect \n label=\"Select Phone Type\"\n name=\"type_def\"\n options={phone_type_list}\n value={phone_data.type_def.value}\n onChange={(e) => onTextChange(e, i)}\n error={phone_data.type_def.error}\n />\n </Box>\n </Grid>\n <Grid item md={5} xs={12}>\n <TextField\n error={Boolean(phone_data.phone.error)}\n fullWidth\n helperText={phone_data.phone.error}\n label=\"Phone\"\n margin=\"normal\"\n name=\"phone\"\n onChange={(e) => onTextChange(e, i)}\n type=\"text\"\n value={phone_data.phone.value}\n variant=\"outlined\"\n />\n </Grid>\n <Grid item md={3} xs={12} >\n <Box mt={2}>\n <EmitSelect \n label=\"Set default Phone\"\n name=\"isDefault\"\n options={[{ name: 'Yes', value: true }, { name: 'No', value: false }]}\n value={phone_data.isDefault.value}\n onChange={(text) => onDefaultSet(phone_data, i, text)}\n />\n </Box>\n </Grid>\n <Grid item md={1} xs={12} >\n <Box display=\"flex\" flexDirection=\"row\" mt={2} >\n <Box >\n <IconButton onClick={() => { phone_data.update ? onSavePhone(phone_data, i) : onDeletePhone(i) } } style={{ color: '#7465f2' }} className={classes.margin}>\n { phone_data.update ? <CheckCircleIcon fontSize=\"large\"/> : <DeleteIcon fontSize=\"large\"/> }\n </IconButton>\n </Box>\n </Box>\n \n </Grid>\n </Grid>\n )\n })\n }\n <Grid container spacing={3} >\n <Grid item md={11} xs={12}>\n <Box display=\"flex\" justifyContent=\"flex-end\" >\n <PlusButton onClick={onAddMore} tooltip=\"Add Phone\" />\n </Box>\n </Grid>\n </Grid>\n </CardContent>\n </form>\n </Grid>\n </Grid>\n </Container>\n );\n};\n\nexport default PhoneDetails;\n","import React, { useState, useEffect } from 'react';\nimport { Container, TextField, makeStyles, Grid, CardContent, Box, IconButton } from '@material-ui/core';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport { useSnackbar } from 'notistack';\n\nimport { EmitSelect, PlusButton } from '../../../components/AllComponent';\nimport { jsonApiInit } from '../../../utils/jsonApiConfig';\nimport { validateLogin } from 'src/utils/EmitValidation';\nimport { social_media_list } from 'src/utils/SelectOptions';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.dark,\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3)\n }\n}));\n\nconst SocialNetworks = ({ isEdit, editData, accessToken }) => {\n const classes = useStyles();\n const social_media_params = {\n profile: { value: '', error: '' }, \n provider: { value: '', error: '' }, \n optIn: false,\n update: false,\n isNew: true\n };\n const [socialMedia, setSocialMedia] = useState([social_media_params]);\n const { enqueueSnackbar } = useSnackbar();\n\n const onAddMore = () => {\n const lastIndex = socialMedia.length-1;\n const { profile, provider, update, isNew } = socialMedia[lastIndex];\n if(!provider.value){\n socialMedia[lastIndex].provider.error = 'Please choose social media provider';\n }else if(!profile.value){\n socialMedia[lastIndex].profile.error = 'Please enter social media profile';\n }else{\n socialMedia.push(social_media_params);\n if(update || isNew){\n onSaveSocialNetwork(socialMedia[lastIndex], lastIndex);\n }\n }\n setSocialMedia([...socialMedia]);\n }\n\n const onDelete = (index) => {\n const social_id = socialMedia[index].id;\n if(isEdit && social_id){\n const jsonApi = jsonApiInit(accessToken);\n jsonApi.one('person', editData.id).relationships().all('social-networks').destroy([{type: \"social-networks\", id: social_id }]);\n jsonApi.destroy('social-networks', social_id);\n enqueueSnackbar('Social Network deleted successfully', { variant: 'success' });\n }\n socialMedia.splice(index, 1);\n setSocialMedia([...socialMedia]);\n }\n\n const onTextChange = (event, index) => {\n socialMedia[index][event.target.name].value = event.target.value;\n socialMedia[index][event.target.name].error = '';\n if(socialMedia[index].id){\n socialMedia[index].update = true;\n }\n setSocialMedia([...socialMedia]);\n }\n\n const onSaveSocialNetwork = (social_data, index) => {\n const jsonApi = jsonApiInit(accessToken);\n const { profile, provider, update, id } = social_data;\n if(update && id){\n jsonApi.one('social-network', id).patch({ profile: profile.value, provider: provider.value, id, code: 'null' }).then((resUpdate) => {\n enqueueSnackbar('Social Network updated successfully', { variant: 'success' });\n socialMedia[index].update = false;\n setSocialMedia([...socialMedia]);\n }).catch((err) => {\n handleError(err, index);\n })\n }else{\n jsonApi.create('social-network', { profile: profile.value, provider: provider.value }).then((resCreate) => {\n jsonApi.one('person', editData.id).relationships('social-networks').post([{ id: resCreate.data.id }]);\n enqueueSnackbar('Social Network saved successfully', { variant: 'success' });\n socialMedia[index].id = resCreate.data.id;\n setSocialMedia([...socialMedia]);\n }).catch((err) => {\n handleError(err, index)\n })\n }\n }\n\n const handleError = (err, index) => {\n const { profile, provider, } = socialMedia[index];\n enqueueSnackbar(`Failed to save ${profile.value} from ${provider.value}`, { variant: 'error' });\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token && isEdit){\n const jsonApi = jsonApiInit(access_token);\n jsonApi.one('person', editData.id).all('social-network').get().then((resSocialData) => {\n let { data, error } = resSocialData;\n if(!error && data.length !== 0){\n let editSocialList = [];\n data.map((d, i) => {\n const { provider, profile, optIn, id } = d;\n editSocialList.push({ \n provider: { value: provider, error: '' }, \n profile: { value: profile, error: '' }, \n optIn, id, update: false, isNew: false\n })\n });\n setSocialMedia(editSocialList);\n }\n })\n }\n }, []);\n\n return (\n <Container maxWidth=\"lg\" style={{ width: window.innerWidth-540 }} >\n <Grid container justify=\"center\" >\n <Grid item md={6} lg={12} xs={12} >\n <form onSubmit={() => {}}>\n <CardContent>\n {\n socialMedia.map((social_data, i) => {\n return(\n <Grid container spacing={2} key={i} >\n <Grid item md={3} xs={12} >\n <Box mt={2}>\n <EmitSelect \n label=\"Select Provider\"\n name=\"provider\"\n options={social_media_list}\n value={social_data.provider.value}\n onChange={(e) => onTextChange(e, i)}\n error={social_data.provider.error}\n />\n </Box>\n </Grid>\n <Grid item md={5} xs={12}>\n <TextField\n error={Boolean(social_data.profile.error)}\n fullWidth\n helperText={social_data.profile.error}\n label=\"Social Media ID\"\n margin=\"normal\"\n name=\"profile\"\n onChange={(text) => onTextChange(text, i)}\n type=\"email\"\n value={social_data.profile.value}\n variant=\"outlined\"\n />\n </Grid>\n \n <Grid item md={3} xs={12} >\n <Box mt={2}>\n <EmitSelect \n label=\"OPT In\"\n name=\"social_optin\"\n options={[{ name: 'Yes', value: true }, { name: 'No', value: false }]}\n value={social_data.optIn}\n disabled={true}\n />\n </Box>\n </Grid>\n <Grid item md={1} xs={12} >\n <Box mt={2}>\n <IconButton onClick={() => { social_data.update ? onSaveSocialNetwork(social_data, i) : onDelete(i) } } style={{ color: '#7465f2' }} className={classes.margin}>\n { social_data.update ? <CheckCircleIcon fontSize=\"large\" /> : <DeleteIcon fontSize=\"large\" /> }\n </IconButton>\n </Box>\n </Grid>\n </Grid>\n )\n })\n }\n <Grid container spacing={3} >\n <Grid item md={11} xs={12}>\n <Box display=\"flex\" justifyContent=\"flex-end\" >\n <PlusButton onClick={onAddMore} tooltip=\"Add Social Media\" />\n </Box>\n </Grid>\n </Grid>\n </CardContent>\n </form>\n </Grid>\n </Grid>\n </Container>\n );\n};\n\nexport default SocialNetworks;\n","import React, { useState, useEffect } from 'react';\nimport { Container, TextField, makeStyles, Grid, CardContent, Box, IconButton } from '@material-ui/core';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport { useSnackbar } from 'notistack';\n\nimport { jsonApiInit } from '../../../utils/jsonApiConfig';\nimport { validateLogin } from 'src/utils/EmitValidation';\nimport { EmitSelect, PlusButton } from '../../../components/AllComponent';\nimport { url_option_list } from 'src/utils/SelectOptions';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.dark,\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3)\n }\n}));\n\nconst LinkDetails = ({ isEdit, editData, accessToken }) => {\n const classes = useStyles();\n const { enqueueSnackbar } = useSnackbar();\n const url_params = { url: '', url_type: \"\", errorText: '', isState: true, update: false, isNew: true };\n const [urlList, seturlList] = useState([url_params]);\n \n const onAddMore = () => {\n const lastIndex = urlList.length-1;\n const { url } = urlList[lastIndex];\n if(url){\n urlList.push(url_params);\n onSaveUrl(urlList[lastIndex], lastIndex);\n }else{\n urlList[lastIndex].errorText = \"Please enter URL\";\n }\n seturlList([...urlList]);\n }\n\n const onDelete = (index) => {\n const url_id = urlList[index].id;\n if(isEdit && url_id){\n const jsonApi = jsonApiInit(accessToken);\n jsonApi.one('person', editData.id).relationships().all('urls').destroy([{type: \"urls\", id: url_id }]);\n jsonApi.destroy('url', url_id);\n enqueueSnackbar('URL deleted successfully', { variant: 'success' });\n }\n urlList.splice(index, 1);\n seturlList([...urlList]);\n }\n\n const onUrlInputChange = (event, index) => {\n urlList[index][event.target.name] = event.target.value;\n urlList[index].errorText = '';\n if(urlList[index].id){\n urlList[index].update = true;\n }\n seturlList([...urlList]);\n }\n\n const onSaveUrl = (url_data, index) => {\n const { url, url_type, update, id } = url_data;\n const jsonApi = jsonApiInit(accessToken);\n if(update && id){\n jsonApi.one('url', id).patch({ id, url, \"url-type\": url_type }).then((resUpdate) => {\n enqueueSnackbar(`Url updated successfully`, { variant: 'success' });\n urlList[index].update = false;\n seturlList([...urlList]);\n }).catch((err) => {\n handleError(err, index);\n })\n }else{\n jsonApi.create('url', { url, \"url-type\": url_type }).then((resCreate) => {\n jsonApi.one('person', editData.id).relationships('urls').post([{ id: resCreate.data.id }]);\n enqueueSnackbar(`URL saved successfully`, { variant: 'success' });\n urlList[index].id = resCreate.data.id;\n seturlList([...urlList]);\n }).catch((err) => {\n handleError(err, index)\n })\n }\n }\n\n const handleError = (err, index) => {\n enqueueSnackbar(`Failed to save`, { variant: 'error' });\n urlList[index].errorText = \"Some thing went wrong\";\n seturlList(urlList);\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token && isEdit){\n const jsonApi = jsonApiInit(access_token);\n jsonApi.one('person', editData.id).all('url').get().then((resUrlData) => {\n let { data, error } = resUrlData;\n if(!error && data.length !== 0){\n let editUrlList = [];\n data.map((d, i) => {\n const { url, id } = d;\n editUrlList.push({ url, url_type: d[\"url-type\"], id, isState: false, update: false, isNew: false })\n });\n seturlList(editUrlList);\n }\n })\n }\n }, []);\n\n return (\n <Container maxWidth=\"lg\" style={{ width: window.innerWidth-540 }} >\n <Grid container justify=\"center\" >\n <Grid item md={6} lg={12} xs={12} >\n <form onSubmit={() => {}}>\n <CardContent>\n {\n urlList.map((url_data, i) => {\n return(\n <Grid container spacing={2} key={i} >\n <Grid item md={3} xs={12} >\n <Box mt={2}>\n <EmitSelect \n label=\"Type\"\n name=\"url_type\"\n options={url_option_list}\n value={url_data.url_type ? url_data.url_type : ''}\n onChange={(e) => onUrlInputChange(e, i)}\n />\n </Box>\n </Grid>\n <Grid item md={8} xs={12}>\n <TextField\n error={Boolean(url_data.errorText)}\n helperText={url_data.errorText}\n fullWidth\n label=\"URL\"\n margin=\"normal\"\n name=\"url\"\n onChange={(e) => onUrlInputChange(e, i)}\n type=\"text\"\n value={url_data.url}\n variant=\"outlined\"\n />\n </Grid>\n <Grid item md={1} xs={12} >\n <Box mt={2}>\n <IconButton onClick={() => { url_data.update ? onSaveUrl(url_data, i) : onDelete(i) } } style={{ color: '#7465f2' }} className={classes.margin}>\n { url_data.update ? <CheckCircleIcon fontSize=\"large\" /> : <DeleteIcon fontSize=\"large\" /> }\n </IconButton>\n </Box>\n </Grid>\n </Grid>\n )\n })\n }\n <Grid container spacing={3} >\n <Grid item md={11} xs={12}>\n <Box display=\"flex\" justifyContent=\"flex-end\" >\n <PlusButton onClick={onAddMore} tooltip=\"Add Link\" />\n </Box>\n </Grid>\n </Grid>\n </CardContent>\n </form>\n </Grid>\n </Grid>\n </Container>\n );\n};\n\nexport default LinkDetails;\n","import React, { useState, useEffect } from 'react';\nimport { Container, TextField, makeStyles, Grid, CardContent, Box, IconButton } from '@material-ui/core';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport { useSnackbar } from 'notistack';\n\nimport { EmitSelect, PlusButton } from '../../../components/AllComponent';\nimport { jsonApiInit } from '../../../utils/jsonApiConfig';\nimport { validateLogin } from 'src/utils/EmitValidation';\nimport api from 'src/utils/api'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.dark,\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3)\n }\n}));\n\nconst AddressDetails = ({ isEdit, editData, accessToken, index }) => {\n const classes = useStyles();\n const address_params = { \n street_address: { value: '', error: '' }, \n city: { value: '', error: '' }, \n postal_code: { value: '', error: '' },\n country: { value: '840', error: '' }, \n verified: false, \n update: false, \n isNew: true,\n };\n const [addressList, setaddressList] = useState([]);\n const [countryList, setCountryList] = useState([]);\n const { enqueueSnackbar } = useSnackbar();\n\n const loadCountryList = (access_token) => {\n api.get('/countries', access_token).then(res => {\n let arranged_ctr_list = [];\n if( res.data && res.data.length > 0){\n res.data.map(d => {\n const { name } = d.attributes;\n arranged_ctr_list.push({ name, value: d.id })\n })\n }\n setCountryList(arranged_ctr_list);\n }).catch(err => {\n enqueueSnackbar('Failed to load country list', { variant: 'error' })\n })\n }\n\n const onAddMore = () => {\n const lastIndex = addressList.length-1;\n if(lastIndex > -1){\n const { street_address, city, postal_code, country, update, isNew } = addressList[lastIndex];\n if(!street_address.value){\n addressList[lastIndex].street_address.error = \"Please enter valid street address\";\n }else if(!city.value){\n addressList[lastIndex].city.error = \"Please enter city name\";\n }else if(!postal_code.value){\n addressList[lastIndex].postal_code.error = \"Please enter postal code\";\n }else{\n if(update || isNew){\n onSaveAddress(addressList[lastIndex], lastIndex).then(res => {\n addressList.push(address_params);\n setaddressList([...addressList])\n }).catch(err => {})\n }else{\n addressList.push(address_params);\n setaddressList([...addressList])\n }\n }\n setaddressList([...addressList]);\n }else{\n addressList.push(address_params);\n setaddressList([...addressList]);\n }\n }\n\n const onDelete = (index) => {\n const address_id = addressList[index].id;\n if(isEdit && address_id){\n const jsonApi = jsonApiInit(accessToken);\n jsonApi.one('person', editData.id).relationships().all('addresses').destroy([{type: \"addresses\", id: address_id }]);\n jsonApi.destroy('address', address_id);\n enqueueSnackbar('Address deleted successfully', { variant: 'success' });\n }\n addressList.splice(index, 1);\n setaddressList([...addressList]);\n }\n\n const onCountryChange = (event, index) => {\n addressList[index].country.value = event.target.value;\n setaddressList([...addressList]);\n }\n\n const onTextInputChange = (event, index) => {\n const { id, update } = addressList[index]; \n if(id && !update){\n addressList[index].update = true;\n }\n addressList[index][event.target.name].value = event.target.value;\n addressList[index][event.target.name].error = '';\n setaddressList([...addressList]);\n }\n\n const onSaveAddress = (address_data, index) => {\n return new Promise((resolve, reject) => {\n const { street_address, city, postal_code, id, country, update } = address_data;\n let addr_form_data = {\n street: street_address.value,\n city: city.value, \n 'postal-code': postal_code.value, \n 'country-id': country.value, \n latitude: '88.3241',\n longitude: '22.4321',\n };\n const jsonApi = jsonApiInit(accessToken);\n if(update && id){\n addr_form_data.id = id;\n jsonApi.one('address', id).patch(addr_form_data).then((resUpdate) => {\n enqueueSnackbar(`Address updated successfully`, { variant: 'success' });\n addressList[index].update = false;\n resolve({ action: 'update', data: addressList })\n }).catch((err) => {\n handleError(err, index);\n reject({ action: 'update' })\n })\n }else{\n jsonApi.create('address', addr_form_data).then((resAddress) => {\n jsonApi.one('person', editData.id).relationships('addresses').post([{ id: resAddress.data.id }]);\n enqueueSnackbar(`Address saved successfully`, { variant: 'success' });\n addressList[index].id = resAddress.data.id;\n resolve({ action: 'add', data: addressList })\n }).catch((err) => {\n handleError(err, index);\n reject({ action: 'update' })\n })\n }\n })\n }\n\n const handleError = (err, index) => {\n const { data } = err;\n if( data && data.detail && typeof(data.detail) === 'string' ){\n enqueueSnackbar(data.detail, { variant: 'error' });\n }else{\n enqueueSnackbar(`Failed to save address`, { variant: 'error' });\n }\n }\n\n useEffect(() => {\n const access_token = validateLogin()\n if(access_token && isEdit){\n loadCountryList(access_token);\n const jsonApi = jsonApiInit(access_token);\n jsonApi.one('person', editData.id).all('address').get().then((resEmail) => {\n let { data, error } = resEmail;\n if(!error && data.length !== 0){\n let editAddressList = [];\n data.map((d, i) => {\n const { street, city, country, verified, id } = d;\n const addrEditObj = { \n street_address: { value: street, error: '' }, \n city: { value: city, error: '' }, \n postal_code: { value: d[\"postal-code\"], error: '' },\n update: false,\n isNew: false,\n country: { value: country.id, error: '' }, \n verified, \n id, \n }\n editAddressList.push(addrEditObj);\n });\n setaddressList(editAddressList);\n }else{\n setaddressList([...[address_params]]);\n }\n })\n }else{\n setaddressList([...[address_params]]);\n }\n }, []);\n\n return (\n <Container maxWidth=\"lg\" style={{ width: window.innerWidth-540 }} >\n <Grid container justify=\"center\" >\n <Grid item md={6} lg={12} xs={12} >\n <form onSubmit={() => {}}>\n <CardContent>\n {\n addressList.map((address_data, i) => {\n return(\n <Grid container spacing={3} key={i} style={{ paddingBottom: 8, paddingTop: 8 }} >\n <Grid item md={11} xs={12} >\n <Grid container spacing={1} >\n <Grid item md={8} xs={12}>\n <TextField\n error={Boolean(address_data.street_address.error)}\n fullWidth\n helperText={address_data.street_address.error}\n label=\"Address\"\n margin=\"normal\"\n name=\"street_address\"\n onChange={(e) => onTextInputChange(e, i)}\n type=\"text\"\n value={address_data.street_address.value}\n variant=\"outlined\"\n />\n </Grid>\n <Grid item md={4} xs={12}>\n <TextField\n error={Boolean(address_data.city.error)}\n fullWidth\n helperText={address_data.city.error}\n label=\"City\"\n margin=\"normal\"\n name=\"city\"\n onChange={(e) => onTextInputChange(e, i)}\n type=\"text\"\n value={address_data.city.value}\n variant=\"outlined\"\n />\n </Grid>\n </Grid>\n <Grid container spacing={2} >\n <Grid item md={4} xs={12}>\n <TextField\n error={Boolean(address_data.postal_code.error)}\n fullWidth\n helperText={address_data.postal_code.error}\n label=\"Postal Code\"\n margin=\"normal\"\n name=\"postal_code\"\n onChange={(e) => onTextInputChange(e, i)}\n type=\"number\"\n value={address_data.postal_code.value}\n variant=\"outlined\"\n />\n </Grid>\n <Grid item md={4} xs={12}>\n <Box mt={2}>\n <EmitSelect \n value={address_data.country.value}\n label=\"Country\"\n name=\"country\"\n options={countryList}\n onChange={e => onCountryChange(e, i)}\n />\n </Box>\n </Grid>\n </Grid>\n </Grid>\n <Grid item md={1} xs={12} style={{ display: 'flex' }} >\n <Box mt={2} display=\"flex\" >\n <IconButton onClick={() => { address_data.update ? onSaveAddress(address_data, index) : onDelete(i) } } aria-label=\"delete\" style={{ color: '#7465f2' }} className={classes.margin}>\n { address_data.update ? <CheckCircleIcon fontSize=\"large\" /> : <DeleteIcon fontSize=\"large\" /> }\n </IconButton>\n </Box>\n </Grid>\n <Grid item xs={11} >\n <Box borderBottom={1} style={{ borderBottomColor: '#d6d6d6' }} ></Box>\n </Grid>\n </Grid>\n )\n })\n }\n <Grid container spacing={3} >\n <Grid item md={11} xs={12}>\n <Box display=\"flex\" justifyContent=\"flex-end\" >\n <PlusButton onClick={onAddMore} tooltip=\"Add Address\" />\n </Box>\n </Grid>\n </Grid>\n </CardContent>\n </form>\n </Grid>\n </Grid>\n </Container>\n );\n};\n\nexport default AddressDetails;\n","import React, { useState, useEffect } from 'react';\nimport { Box, Tab, Tabs, Grid, Card, Container, makeStyles, Breadcrumbs, Link } from '@material-ui/core';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport { useSelector } from 'react-redux'\n\nimport Page from 'src/components/Page';\nimport PersonalDetails from './PersonalDetails';\nimport EmailDetails from './EmailDetails';\nimport PhoneDetails from './PhoneDetails';\nimport SocialNetworks from './SocialNetworks';\nimport LinkDetails from './LinkDetails';\nimport AddressDetails from './AddressDetails';\nimport { validateLogin } from '../../../utils/EmitValidation';\nimport { AppLink, PageBreadcrumb } from 'src/components/AllComponent';\n\nconst tabHeight = window.innerHeight-116-60;\nfunction TabPanel(props) {\n const { children, value, index, ...other } = props;\n return (\n <div\n style={{ minHeight: tabHeight }}\n role=\"tabpanel\"\n hidden={value !== index}\n id={`vertical-tabpanel-${index}`}\n aria-labelledby={`vertical-tab-${index}`}\n {...other}\n >\n {children}\n </div>\n );\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.light,\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3),\n display: 'flex',\n },\n tavDiv: {\n backgroundColor: 'white',\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3),\n display: 'flex',\n },\n tabs: {\n borderRight: `1px solid ${theme.palette.divider}`,\n },\n}));\n\nfunction a11yProps(index) {\n return {\n id: `vertical-tab-${index}`,\n 'aria-controls': `vertical-tabpanel-${index}`,\n };\n}\n\nconst AddPeople = () => {\n const classes = useStyles();\n const [value, setValue] = useState(0);\n const navigate = useNavigate()\n let { state } = useLocation();\n const [accessToken, setAccessToken] = useState('');\n const [isEdit, setEdit] = useState(false);\n let redux_data = useSelector(state => state.people);\n let people_edit_data = state;\n\n if(people_edit_data && !isEdit){\n setEdit(true);\n }\n if(!isEdit && redux_data.people_data){\n people_edit_data = redux_data.people_data;\n }\n const handleChange = (event, newValue) => {\n setValue(newValue);\n };\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n setAccessToken(access_token);\n }else{\n navigate('/login', { replace: true });\n }\n }, []);\n\n const tabBarStyle = (i) => { \n if(i === value){\n return '#dae3ff';\n }else{\n return 'white';\n }\n };\n return(\n <Page className={[classes.root]} title=\"Edit people\" >\n <Container maxWidth={false} >\n <Grid item xs={12} >\n <Box mb={1}>\n <Breadcrumbs aria-label=\"breadcrumb\">\n <AppLink navigate={navigate} />\n <Link color=\"inherit\" href=\"/app/people\" >People</Link>\n <PageBreadcrumb title={isEdit ? \"Edit people\" : \"Add people\"} />\n </Breadcrumbs>\n </Box>\n <Card elevation={0} >\n <div className={classes.tavDiv} >\n <Tabs\n orientation=\"vertical\"\n variant=\"fullWidth\"\n value={value}\n onChange={handleChange}\n aria-label=\"Vertical tabs example\"\n className={classes.tabs}\n centered={false}\n >\n <Tab style={{ width: 240, backgroundColor: tabBarStyle(0) }} label=\"Personal Details\" {...a11yProps(0)} />\n <Tab disabled={Boolean(!people_edit_data)} style={{ backgroundColor: tabBarStyle(1) }} label=\"Emails\" {...a11yProps(1)} />\n <Tab disabled={Boolean(!people_edit_data)} style={{ backgroundColor: tabBarStyle(2) }} label=\"Phones\" {...a11yProps(2)} />\n <Tab disabled={Boolean(!people_edit_data)} style={{ backgroundColor: tabBarStyle(3) }} label=\"Social Networks\" {...a11yProps(3)} />\n <Tab disabled={Boolean(!people_edit_data)} style={{ backgroundColor: tabBarStyle(4) }} label=\"Addresses\" {...a11yProps(4)} />\n <Tab disabled={Boolean(!people_edit_data)} style={{ backgroundColor: tabBarStyle(5) }} label=\"Links\" {...a11yProps(5)} />\n </Tabs>\n <TabPanel value={value} index={0}>\n <PersonalDetails \n index={value} \n isEdit={isEdit} \n editData={people_edit_data} \n accessToken={accessToken} \n />\n </TabPanel>\n <TabPanel value={value} index={1}>\n <EmailDetails index={value} isEdit={isEdit} editData={people_edit_data} accessToken={accessToken} />\n </TabPanel>\n <TabPanel value={value} index={2}>\n <PhoneDetails index={value} isEdit={isEdit} editData={people_edit_data} accessToken={accessToken} />\n </TabPanel>\n <TabPanel value={value} index={3}>\n <SocialNetworks index={value} isEdit={isEdit} editData={people_edit_data} accessToken={accessToken} />\n </TabPanel>\n <TabPanel value={value} index={4}>\n <AddressDetails index={value} isEdit={isEdit} editData={people_edit_data} accessToken={accessToken} />\n </TabPanel>\n <TabPanel value={value} index={5}>\n <LinkDetails index={value} isEdit={isEdit} editData={people_edit_data} accessToken={accessToken} />\n </TabPanel>\n </div>\n </Card>\n </Grid>\n </Container>\n </Page>\n )\n}\n\nexport default AddPeople;","import React, { useEffect, useState } from 'react';\nimport {\n Box,\n Container,\n Grid,\n Table,\n TableCell,\n TableHead,\n TableRow,\n TableBody,\n TablePagination,\n Chip,\n IconButton,\n CircularProgress\n} from '@material-ui/core';\nimport { useNavigate } from 'react-router-dom';\nimport { DeleteRounded } from '@material-ui/icons';\nimport { useSnackbar } from 'notistack';\nimport { useDispatch } from 'react-redux';\nimport dayjs from 'dayjs';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport { validateLogin } from 'src/utils/EmitValidation';\nimport { jsonApiInit } from 'src/utils/jsonApiConfig';\nimport { DeleteWarning } from 'src/components/AllComponent';\nimport { status_color, bg_color } from 'src/utils/SelectOptions';\n\nconst YourPhone = () => {\n const navigate = useNavigate();\n const { enqueueSnackbar } = useSnackbar();\n const dispatch = useDispatch();\n const [accessToken, setAccessToken] = useState('');\n const [pagination, setPagination] = useState({ size: 10, number: 0, total: 100 });\n const [phoneList, setPhoneList] = useState([]);\n const [deleteModal, setDeleteModal] = useState(false);\n const [deleteData, setDeleteData] = useState('');\n const [loading, setLoading] = useState(false);\n\n const handlePagination = (e, type) => {\n if(type === 'limit'){\n pagination.size = e.target.value;\n loadAllPhone(accessToken, e.target.value, pagination.number);\n setPagination({...pagination});\n }else{\n pagination.number = e;\n loadAllPhone(accessToken, pagination.size, e);\n setPagination({...pagination});\n }\n }\n\n const loadAllPhone = (access_token, size, number) => {\n setLoading(true);\n const jsonApi = jsonApiInit(access_token);\n jsonApi.findAll('virtual-phone', { page: { size, number: number+1 } }).then((resPhone) => {\n const { data, error, meta } = resPhone;\n if(!error){\n setPhoneList(data);\n setPagination({ ...pagination, ...{ total: meta.page.total } });\n setLoading(false);\n }\n })\n }\n\n const onDeletePhone = () => {\n const jsonApi = jsonApiInit(accessToken);\n setDeleteModal(false);\n jsonApi.destroy('virtual-phone', deleteData.id).then((reDel) => {\n loadAllPhone(accessToken, pagination.size, pagination.number);\n enqueueSnackbar('Phone has been released successfully', { variant: 'success' });\n dispatch({ type: 'BALANCE_UPDATE', data: true });\n }).catch((err) => {\n enqueueSnackbar('Failed to delete phone number', { variant: 'error' });\n })\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n setAccessToken(access_token);\n loadAllPhone(access_token, 10, 0);\n }else{\n navigate('/login', { replace: true }); \n }\n }, []);\n return(\n <Container>\n <Box mt={1} mb={2} >\n <Grid item xs={12} >\n <Table>\n <TableHead>\n <TableRow>\n <TableCell>Number</TableCell>\n <TableCell align=\"center\" width=\"180\" >Date</TableCell>\n <TableCell align=\"center\" width=\"180\" >End on</TableCell>\n <TableCell align=\"center\" width=\"120\" >Status</TableCell>\n <TableCell align=\"center\" width=\"100\" >Action</TableCell>\n </TableRow>\n </TableHead>\n {\n loading ? \n <TableHead>\n <TableRow>\n <TableCell></TableCell>\n <TableCell>\n <CircularProgress />\n </TableCell>\n <TableCell></TableCell>\n </TableRow>\n </TableHead>\n : !phoneList[0] ?\n <TableBody>\n <TableRow>\n <TableCell colSpan={12}>\n <Box component=\"div\" style={{ display: 'flex', flex: 10, justifyContent: 'center' }} pt={2} pl={2}>\n <Alert severity=\"info\">\n <AlertTitle>There are no virtual phones available yet, buy your first one now</AlertTitle>\n </Alert>\n </Box>\n </TableCell>\n </TableRow>\n </TableBody>\n :\n null\n }\n <TableBody>\n {\n phoneList.map((d, i) => {\n return(\n <TableRow key={i}>\n <TableCell>{d.number}</TableCell>\n <TableCell align=\"center\" >{dayjs(d.createdAt).format('DD MMM, YYYY')}</TableCell>\n <TableCell align=\"center\" >{dayjs(d.endsAt).format('DD MMM, YYYY')}</TableCell>\n <TableCell align=\"center\" >\n <Chip \n style={{ color: status_color[d.status], backgroundColor: bg_color[d.status] }} \n color=\"primary\" \n label={d.status} \n size=\"small\" \n />\n </TableCell>\n <TableCell align=\"center\" >\n <IconButton \n onClick={() => {\n setDeleteModal(true); \n setDeleteData(d);\n }} \n aria-label=\"delete\" \n size=\"small\" \n style={{ color: '#7465f2' }} \n >\n <DeleteRounded fontSize=\"small\" />\n </IconButton>\n </TableCell>\n </TableRow>\n )\n })\n }\n </TableBody>\n </Table>\n <TablePagination\n component=\"div\"\n count={pagination.total}\n onChangePage={(e, p) => handlePagination(p, 'page')}\n onChangeRowsPerPage={(e) => handlePagination(e, 'limit')}\n page={pagination.number}\n rowsPerPage={pagination.size}\n rowsPerPageOptions={[5, 10, 25]}\n />\n </Grid>\n </Box>\n <DeleteWarning \n status={deleteModal}\n onClose={() => setDeleteModal(false)}\n onDelete={onDeletePhone}\n title=\"Are sure want to release phone number?\"\n deleteText=\"You are going to release phone and won't be charged from upcoming month.\"\n />\n </Container>\n )\n}\n\nexport default YourPhone;","import React, { useState } from 'react';\nimport { Box } from '@material-ui/core';\nimport { useDispatch } from 'react-redux';\n\nimport { OnAmountAdd, SuccessDeposit, FailedDeposit, DepositProcessing } from '../../components/AllComponent';\nimport { jsonApiInit } from '../../utils/jsonApiConfig'\n\nconst MakeDeposit = ({ onClose, accessToken, onMakeDeposit }) => {\n const dispatch = useDispatch();\n const [amount, setAmount] = useState({ amount: '', error: '' });\n const [modalState, setModalState] = useState('add');\n\n const onChangeAmount = (e) => {\n amount.amount = e.target.value;\n amount.error = ''\n setAmount({...amount});\n }\n\n const onAddDeposit = () => {\n if(!Number(amount.amount)){\n amount.error = 'Enter an amount';\n setAmount({...amount});\n }else if(amount.amount < 1){\n amount.error = 'Amount must be more than 1';\n setAmount({...amount});\n }else if(amount.amount > 99999900){\n amount.error = 'Amount must be less than 99999900';\n setAmount({...amount});\n }else{\n const jsonApi = jsonApiInit(accessToken);\n setModalState('loading');\n jsonApi.create('deposit', { amount: amount.amount*100 }).then((resDeposit) => {\n setModalState('success');\n onMakeDeposit(true, resDeposit.data);\n dispatch({ type: 'BALANCE_UPDATE', data: true });\n }).catch((err) => {\n onMakeDeposit(true, err);\n setModalState('failed');\n })\n }\n };\n\n const onCloseAddDeposit = () => {\n if(modalState !== \"loading\"){\n onClose();\n setTimeout(() => {\n setModalState('add');\n }, 100);\n }\n }\n\n return(\n <Box>\n {\n modalState === 'add' ?\n <OnAmountAdd \n amount={amount.amount}\n error={amount.error}\n onChange={(e) => onChangeAmount(e)} \n onAddDeposit={onAddDeposit}\n />\n : modalState === 'loading'?\n <DepositProcessing />\n : modalState === 'failed' ?\n <FailedDeposit onCancel={onCloseAddDeposit} />\n : modalState === 'success' ?\n <SuccessDeposit onClose={onCloseAddDeposit} />\n : null\n }\n </Box>\n )\n}\n\nexport default MakeDeposit;","import React from 'react';\nimport { Grid, Box, Typography } from '@material-ui/core';\nimport { ShoppingCart } from '@material-ui/icons'\n\nimport { FilterSelect } from 'src/components/AllComponent';\n\nconst PhoneSearchToolbar = ({ addedPhone, onCartClick, onCountryChange, country_list }) => {\n return(\n <Grid item xs={12}>\n <Box display=\"flex\" flexDirection=\"row\">\n <Box style={{ flex: 2, justifyContent: 'flex-end', paddingTop: 16 }} >\n <FilterSelect \n lists={country_list}\n onListChange={e => onCountryChange(e)}\n widthSelect={220}\n placeholder=\"Filter by country\" \n />\n </Box>\n <Box style={{ flex: 7, display: 'flex', justifyContent: 'flex-end' }} >\n <Box onClick={onCartClick} display=\"flex\" style={{ paddingTop: 16, cursor: 'pointer' }} >\n <ShoppingCart style={{ width: 48, height: 48, color: '#7465f2' }} />\n {\n addedPhone.length > 0 ?\n <Box style={{ \n marginTop: -10, marginLeft: -4, backgroundColor: '#7465f2', width: 24, height: 24, \n borderRadius: 12, padding: 2, display: 'flex', justifyContent: 'center', \n alignItems: 'center' \n }} >\n <Typography style={{ color: 'white' }} >{addedPhone.length}</Typography>\n </Box>\n : null\n }\n </Box>\n </Box>\n </Box>\n </Grid>\n )\n}\n\nexport default PhoneSearchToolbar;","import React, { useState, useEffect } from 'react';\nimport clsx from 'clsx';\nimport ReactCountryFlag from \"react-country-flag\";\nimport PerfectScrollbar from 'react-perfect-scrollbar';\nimport { useNavigate } from 'react-router-dom';\nimport {\n Box,\n Card,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TablePagination,\n TableRow,\n makeStyles,\n Container,\n CircularProgress,\n Tooltip,\n IconButton,\n Grid,\n Dialog,\n} from '@material-ui/core';\nimport { Mms, Call, Sms, Print } from '@material-ui/icons';\nimport { Minus, Plus } from 'react-feather';\nimport { useSnackbar } from 'notistack';\nimport { useDispatch } from 'react-redux';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport { jsonApiInit } from '../../utils/jsonApiConfig';\nimport { validateLogin } from 'src/utils/EmitValidation';\nimport { PhoneCheckout, PopupHeader, SuccessProcessing } from 'src/components/AllComponent';\nimport NewPaymentMethod from '../settings/NewPaymentMethod';\nimport MakeDeposit from '../settings/MakeDeposit';\nimport PhoneSearchToolbar from './PhoneSearchToolbar';\nimport api from 'src/utils/api';\n\nconst useStyles = makeStyles((theme) => ({\n tableDiv: {\n backgroundColor: 'white',\n }\n}));\n\nconst isPayMethodAdded = (access_token) => {\n return new Promise((resolve, reject) => {\n const jsonApi = jsonApiInit(access_token);\n jsonApi.findAll('payment-method').then((resCard) => {\n let { data } = resCard;\n if(data.length !== 0){\n resolve(true);\n }else{\n resolve(false);\n }\n }).catch((err) => {\n reject(err);\n })\n })\n}\n\nconst checkFund = (access_token, amount, userId) => {\n return new Promise((resolve, reject) => {\n const jsonApi = jsonApiInit(access_token);\n jsonApi.find(\"users\", userId, { include: \"wallet\" }).then((resWallet) => {\n const { data } = resWallet;\n if(amount < Number(data.wallet.balance)){\n resolve(true);\n }else{\n resolve(false);\n }\n }).catch((err) => {\n reject(err);\n })\n })\n}\n\nconst PhoneSearch = ({ className, customers, ...rest }) => {\n const classes = useStyles();\n const navigate = useNavigate();\n const dispatch = useDispatch();\n const [loading, setLoading] = useState(true);\n const [pagination, setPagination] = useState({ size: 10, number: 0, total: 100 });\n const { enqueueSnackbar } = useSnackbar();\n const [phonesList, setPhoneList] = useState([]);\n const [addedPhone, setAddedPhone] = useState([]);\n const [accessToken, setAccessToken] = useState('');\n const [checkoutStatus, setCheckoutStatus] = useState(false);\n const [checkout, setCheckout] = useState('phone');\n const [processing, setProcessing] = useState(false);\n const [costData, setCostData] = useState('');\n const [countryList, setCountryList] = useState([])\n const [countryCode, setCountryCode] = useState('us')\n let userId;\n\n const handlePagination = (e, type) => {\n if(type === 'limit'){\n pagination.size = e.target.value;\n loadPhoneList(accessToken, countryCode, e.target.value, pagination.number);\n setPagination({...pagination});\n }else{\n pagination.number = e;\n loadPhoneList(accessToken, countryCode, pagination.size, e);\n setPagination({...pagination});\n }\n }\n\n const onCountryChange = (event) => {\n if(event) {\n setCountryCode(event.value)\n loadPhoneList(accessToken, event.value)\n }else{\n setCountryCode('us')\n loadPhoneList(accessToken, 'us')\n }\n }\n\n const loadPhoneList = (access_token, country_code) => {\n api.get(`/virtual-phones/search?country-code=${country_code}&limit=10`, access_token).then(resPhoneList => {\n if(resPhoneList.data){\n const arr_phone_list = []\n resPhoneList.data.map(d => arr_phone_list.push(d.attributes));\n setPhoneList(arr_phone_list);\n setLoading(false);\n }\n }).catch(err => {\n enqueueSnackbar('Failed to load virtual phone number', { variant: 'error' })\n })\n }\n\n const loadCountryList = (access_token) => {\n api.get('/countries', access_token).then(res => {\n let arranged_ctr_list = [];\n if( res.data && res.data.length > 0){\n res.data.map(d => {\n const { name, iso_3166_2 } = d.attributes;\n arranged_ctr_list.push({ label: name, value: iso_3166_2 })\n })\n }\n setCountryList(arranged_ctr_list);\n }).catch(err => {\n enqueueSnackbar('Failed to load country list', { variant: 'error' })\n })\n }\n\n const buyPhone = async () => {\n if(addedPhone.length === 0) {\n enqueueSnackbar('Your cart is empty', { variant: 'error' })\n return\n }\n setProcessing(true);\n const jsonApi = jsonApiInit(accessToken);\n await jsonApi.find(\"user\").then((resUser) => {\n userId = resUser.data[0].id;\n })\n isPayMethodAdded(accessToken).then((resPay) => {\n if(resPay){\n checkFund(accessToken, costData['virtual-phones'].cost, userId).then((resFund) => {\n if(resFund){\n addedPhone.map((d, i) => {\n jsonApi.create('virtual-phone', { number: d.phoneNumber }).then(resCreatePhone => {\n if(addedPhone.length-1 === i){\n setProcessing(false);\n setCheckout(\"phonebought\");\n }\n }).catch(err => {\n setProcessing(false);\n enqueueSnackbar(`Failed to buy phone number ${d.phoneNumber}`, { variant: 'error' })\n })\n });\n dispatch({ type: 'BALANCE_UPDATE', data: true });\n }else{\n setCheckout('deposit');\n setProcessing(false);\n }\n }).catch((err) => {\n setProcessing(false);\n })\n }else{\n setCheckout('addcard');\n setProcessing(false);\n }\n }).catch((err) => {\n setProcessing(false);\n })\n }\n\n const onMakeDeposit = (status, data) => {\n if(status){\n setCheckout('phone');\n }\n }\n\n const onNewCardAdded = (status, data) => {\n if(status){\n enqueueSnackbar('Payment method added successfully', { variant: 'success' });\n setCheckout('deposit')\n }\n }\n\n const addPhone = (data, index) => {\n if(data.added){\n phonesList[index].added = false;\n addedPhone.map((d, i) => {\n if(d.phoneNumber === data.phoneNumber){\n addedPhone.splice(i, 1);\n }\n })\n enqueueSnackbar('Virtual Phone removed from cart', { variant: 'error' });\n }else{\n phonesList[index].added = true;\n addedPhone.push(data);\n enqueueSnackbar('Virtual Phone added to cart', { variant: 'success' });\n }\n setAddedPhone([...addedPhone]);\n setPhoneList([...phonesList]);\n }\n const onRemovePhoneCart = (data, index) => {\n addedPhone.splice(index, 1);\n phonesList.map((d, i) => {\n if(data.phoneNumber === d.phoneNumber){\n phonesList[i].added = false\n }\n });\n setAddedPhone([...addedPhone]);\n setPhoneList([...phonesList]);\n }\n\n const loadConfigData = async (access_token) => {\n const { messaging } = await api.get('/configs', access_token);\n setCostData(messaging);\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n setAccessToken(access_token);\n loadPhoneList(access_token, countryCode);\n loadConfigData(access_token);\n loadCountryList(access_token);\n }else{\n navigate('/login', { replace: true }); \n }\n }, [])\n\n return (\n <Container >\n <Box mt={1} mb={2} >\n <Grid item xs={12} >\n <Box display=\"flex\" flexDirection=\"row\" >\n <Box style={{ flex: 12 }} >\n <Card className={clsx(classes.tableDiv, className)} {...rest} elevation={0} >\n <PhoneSearchToolbar \n country_list={countryList}\n addedPhone={addedPhone}\n onCartClick={() => {\n if(addedPhone.length > 0){\n setCheckoutStatus(true);\n }\n }}\n onCountryChange={onCountryChange}\n />\n <PerfectScrollbar>\n <Box>\n <Table>\n <TableHead>\n <TableRow>\n <TableCell padding=\"none\" width=\"120\" style={{ paddingLeft: 16, paddingTop: 16, paddingBottom: 16 }}>Country</TableCell>\n <TableCell padding=\"none\" >Region</TableCell>\n <TableCell padding=\"none\" width=\"180\" >Phone Number</TableCell>\n <TableCell padding=\"none\" width=\"120\" >Postal Code</TableCell>\n <TableCell padding=\"none\" width=\"140\" >Capabilities</TableCell>\n <TableCell padding=\"none\" width=\"100\" align=\"center\" >Action</TableCell>\n </TableRow>\n </TableHead>\n {\n loading ?\n <TableBody>\n <TableRow>\n <TableCell />\n <TableCell />\n <TableCell>\n <CircularProgress />\n </TableCell>\n <TableCell />\n <TableCell />\n <TableCell />\n </TableRow>\n </TableBody>\n : !phonesList[0] ?\n <TableBody>\n <TableRow>\n <TableCell colSpan={12}>\n <Box component=\"div\" style={{ display: 'flex', flex: 10, justifyContent: 'center' }} pt={2} pl={2}>\n <Alert severity=\"info\">\n <AlertTitle>There are no Virtual Phones available in this country</AlertTitle>\n </Alert>\n </Box>\n </TableCell>\n </TableRow>\n </TableBody>\n :\n null\n }\n <TableBody>\n {\n phonesList.map((phone_data, i) => {\n return(\n <TableRow hover key={i} >\n <TableCell padding=\"none\" style={{ paddingLeft: 16, paddingTop: 2, paddingBottom: 2 }} >\n <ReactCountryFlag\n countryCode={phone_data.isoCountry}\n svg\n style={{ width: '3em', height: '3em' }}\n title={phone_data.isoCountry}\n />\n </TableCell>\n <TableCell padding=\"none\" >{phone_data.locality}, {phone_data.region}</TableCell> \n <TableCell padding=\"none\" >{phone_data.friendlyName}</TableCell> \n <TableCell padding=\"none\" >{phone_data.postalCode}</TableCell>\n <TableCell padding=\"none\" >\n <Box flexDirection=\"row\" display=\"flex\">\n {phone_data.capabilities.voice ?\n <Tooltip title=\"Voice\" ><IconButton size=\"small\" style={{ color: '#7465f2' }} > <Call /></IconButton></Tooltip>\n : null}\n {phone_data.capabilities.SMS ?\n <Tooltip title=\"SMS\" ><IconButton size=\"small\" style={{ color: '#7465f2' }} > <Sms /></IconButton></Tooltip>\n : null}\n {phone_data.capabilities.fax ?\n <Tooltip title=\"Fax\" ><IconButton size=\"small\" style={{ color: '#7465f2' }} > <Print /></IconButton></Tooltip> \n : null} \n {phone_data.capabilities.MMS ?\n <Tooltip title=\"MMS\" >\n <IconButton size=\"small\" style={{ color: '#7465f2' }} ><Mms /></IconButton>\n </Tooltip>\n : null}\n </Box>\n </TableCell>\n <TableCell width=\"80\" align=\"center\" padding=\"none\">\n <IconButton \n onClick={() => addPhone(phone_data, i)} \n size=\"small\" \n style={{ width: 24, height: 24, color: 'white', backgroundColor: '#7465f2' }} \n >\n { phone_data.added ? <Minus fontSize=\"small\" /> : <Plus fontSize=\"small\" />}\n </IconButton>\n </TableCell>\n </TableRow>\n )\n })\n }\n </TableBody>\n </Table>\n </Box>\n </PerfectScrollbar>\n <TablePagination\n component=\"div\"\n count={200}\n onChangePage={(e, p) => handlePagination(p, 'page')}\n onChangeRowsPerPage={(e) => handlePagination(e, 'limit')}\n page={pagination.number}\n rowsPerPage={pagination.size}\n rowsPerPageOptions={[5, 10, 25]}\n />\n </Card>\n </Box>\n </Box>\n </Grid>\n </Box>\n <Dialog open={checkoutStatus} >\n <Box p={4} style={{ width: 520 }} >\n {\n checkout === \"phone\" ?\n <PhoneCheckout \n addedPhone={addedPhone}\n onClose={() => setCheckoutStatus(false)}\n onRemovedPhone={(d, i) => onRemovePhoneCart(d, i)}\n onCheckoutPhone={buyPhone}\n processing={processing}\n phoneCost={costData ? costData['virtual-phones'].cost : ''}\n />\n : checkout === \"addcard\" ?\n <Box style={{ width: 460 }} >\n <PopupHeader title=\"Add Payment Method\" onClose={() => setCheckoutStatus(false)} />\n <NewPaymentMethod \n onCardAdded={(status, data) => onNewCardAdded(status, data)}\n accessToken={accessToken}\n onClose={() => {\n setCheckout('phone')\n }}\n />\n </Box>\n : checkout === \"deposit\" ?\n <Box>\n <PopupHeader title=\"Add deposit\" onClose={() => setCheckoutStatus(false)} />\n <MakeDeposit \n accessToken={accessToken} \n onClose={() => setCheckoutStatus(false)} \n onMakeDeposit={(status, data) => onMakeDeposit(status, data)}\n />\n </Box>\n : checkout === \"phonebought\" ?\n <SuccessProcessing \n title=\"Successfully added to your phone\" \n onClose={() => setCheckoutStatus(false)} \n />\n : null\n }\n </Box>\n </Dialog>\n </Container>\n );\n};\n\nexport default PhoneSearch;\n","import React, { useState } from 'react';\nimport { AppBar, Tab, Card, Tabs, Container, Box, Breadcrumbs, makeStyles } from '@material-ui/core';\nimport { useNavigate } from 'react-router-dom';\n\nimport YourPhone from './YourPhone';\nimport PhoneSearch from './PhoneSearch';\nimport Page from 'src/components/Page';\nimport { AppLink, PageBreadcrumb } from 'src/components/AllComponent';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.light,\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3),\n display: 'flex',\n },\n tableDiv: {\n backgroundColor: 'white',\n },\n avatar: {\n marginRight: theme.spacing(2)\n }\n}));\n\nfunction TabPanel(props) {\n const { children, value, index, ...other } = props;\n return (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`full-width-tabpanel-${index}`}\n aria-labelledby={`full-width-tab-${index}`}\n {...other}\n >\n {children}\n </div>\n );\n}\n\nfunction a11yProps(index) {\n return {\n id: `full-width-tab-${index}`,\n 'aria-controls': `full-width-tabpanel-${index}`,\n };\n}\n\n\nconst VirtualPhone = () => {\n const classes = useStyles();\n const navigate = useNavigate();\n const [tabIndex, setTabIndex] = useState(0);\n\n const tabBarStyle = (i) => { \n if(i === tabIndex){\n return '#dae3ff';\n }else{\n return 'white';\n }\n };\n\n return(\n <Page className={classes.root} title=\"Virtual Phones\" >\n <Container >\n <Box mb={1} >\n <Breadcrumbs aria-label=\"breadcrumb\">\n <AppLink navigate={navigate} />\n <PageBreadcrumb title=\"Virtual Phones\" />\n </Breadcrumbs>\n </Box>\n <Card elevation={0} >\n <AppBar position=\"static\" color=\"transparent\" elevation={1} >\n <Tabs\n value={tabIndex}\n onChange={(e, newIndex) => {\n setTabIndex(newIndex)\n }}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n variant=\"standard\"\n >\n <Tab style={{ backgroundColor: tabBarStyle(0) }} label=\"Buy Phone\" {...a11yProps(0)} />\n <Tab style={{ backgroundColor: tabBarStyle(1) }} label=\"Your Phone\" {...a11yProps(1)} />\n </Tabs>\n </AppBar>\n <TabPanel value={tabIndex} index={0} >\n <PhoneSearch />\n </TabPanel>\n <TabPanel value={tabIndex} index={1} >\n <YourPhone />\n </TabPanel>\n </Card>\n </Container>\n </Page>\n \n )\n}\n\nexport default VirtualPhone;","import React, { useState, useEffect } from 'react';\nimport {\n Box,\n Grid,\n Card, Container, makeStyles,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n TablePagination,\n TableSortLabel,\n IconButton,\n Breadcrumbs,\n CircularProgress,\n} from '@material-ui/core';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport { useNavigate } from 'react-router-dom';\nimport {DeleteRounded, EditRounded } from '@material-ui/icons';\nimport PerfectScrollbar from 'react-perfect-scrollbar';\nimport { useSnackbar } from 'notistack';\nimport clsx from 'clsx';\nimport dayjs from 'dayjs';\n\nimport Page from 'src/components/Page';\nimport { jsonApiInit } from '../../utils/jsonApiConfig';\nimport { ListingInput, DeleteDialog, AppLink, PlusButton, PageBreadcrumb } from '../../components/AllComponent';\nimport { validateLogin } from '../../utils/EmitValidation';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.light,\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3),\n display: 'flex',\n },\n tableDiv: {\n backgroundColor: 'white',\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3),\n display: 'flex',\n }\n}));\n\nconst Listing = () => {\n const classes = useStyles();\n const navigate = useNavigate();\n const [listing, setListing] = useState([]);\n const [pagination, setPagination] = useState({ size: 10, number: 0, total: 100 })\n const [accessToken, setAccessToken] = useState('');\n const [deleteData, setDeleteData] = useState('');\n const [sorting, setSorting] = useState({ sort: '', 'created-at': 'asc', 'updated-at': 'asc' });\n const [loading, setLoading] = useState(false);\n const { enqueueSnackbar } = useSnackbar();\n const [searching, setSearching] = useState(false);\n\n const loadListingData = (access_token, query) => {\n setLoading(true);\n const jsonApi = jsonApiInit(access_token);\n jsonApi.findAll('listing', query).then((resListing) => {\n const { data, error, meta } = resListing;\n if(!error){\n setListing(data);\n setLoading(false);\n setPagination({ ...pagination, ...{ total: meta ? meta.page.total : data.length } });\n }\n })\n }\n\n const loadListing = (access_token, size, number) => {\n let initialQuery = { page: { size, number: number+1 }, include: 'people' };\n initialQuery.sort = sorting.sort ? sorting.sort : \"\";\n loadListingData(access_token, initialQuery);\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n setAccessToken(access_token);\n loadListing(access_token, 10, 0)\n }else{\n navigate('/login', { replace: true }); \n }\n }, []);\n\n const onSearchList = (text) => {\n if(text.length > 2){\n setSearching(true);\n const searchQuery = { filter: { \"title\": text }, include: 'people' };\n loadListingData(accessToken, searchQuery);\n }else{\n setSearching(false);\n loadListing(accessToken, 10, 0);\n }\n }\n\n const sortListing = (sortType, sortName) => {\n const { size, number } = pagination;\n let sortQuery = { include: 'people', sort: sortType === 'asc' ? `${sortName}` : `-${sortName}` };\n sortQuery.page = { size, number: number+1 };\n sorting[sortName] = sortType === 'asc' ? 'desc' : 'asc';\n sorting.sort = sortType === 'asc' ? `${sortName}` : `-${sortName}`;\n setSorting({...sorting});\n loadListingData(accessToken, sortQuery);\n }\n\n const onDeleteListing = async () => {\n const jsonApi = jsonApiInit(accessToken);\n const deleteRequest = await jsonApi.destroy('listing', deleteData.id);\n if(deleteRequest.errors) return enqueueSnackbar(`${deleteRequest.errors[0].detail}`, { variant: 'error' });\n enqueueSnackbar(`List ${deleteData.title} deleted successfully`, { variant: 'success' });\n setDeleteData('');\n loadListing(accessToken, pagination.size, pagination.number);\n }\n\n const handlePagination = (e, type) => {\n if(type === 'limit'){\n pagination.size = e.target.value;\n loadListing(accessToken, e.target.value, pagination.number);\n setPagination({...pagination});\n }else{\n pagination.number = e;\n loadListing(accessToken, pagination.size, e);\n setPagination({...pagination});\n }\n }\n\n return(\n <Page className={[classes.root]} title=\"Listings\" >\n <Container maxWidth={false} >\n <Box component=\"div\" display=\"flex\" flexDirection=\"column\" >\n <Box display=\"flex\" justifyContent=\"center\" >\n <Grid item xs={12} >\n <Box mb={1}>\n <Breadcrumbs aria-label=\"breadcrumb\">\n <AppLink navigate={navigate} />\n <PageBreadcrumb title=\"Listings\" />\n </Breadcrumbs>\n </Box>\n <Card elevation={0} >\n <Box component=\"div\" display=\"flex\" pl={2} pt={2} pr={2} pb={1} >\n <Box component=\"div\" style={{ flex: 8 }} >\n <ListingInput \n placeholderText=\"Type name of list title to search\"\n inputHeight={48}\n onTextChange={(text) => onSearchList(text)}\n />\n </Box>\n <Box component=\"div\" style={{ display: 'flex', flex: 10, justifyContent: 'flex-end' }}>\n <PlusButton onClick={() => navigate('/app/managelisting')} tooltip=\"Add Listing\" />\n </Box>\n </Box>\n </Card>\n </Grid>\n </Box>\n \n <Box display=\"flex\" justifyContent=\"center\" >\n <Grid item xs={12} >\n <Card className={clsx(classes.tableDiv)} elevation={0} >\n <PerfectScrollbar style={{ minWidth: '100%' }} >\n <Box width=\"100%\" component=\"div\" >\n <Table>\n <TableHead>\n <TableRow>\n <TableCell>Title</TableCell>\n <TableCell width=\"180\" align=\"center\" >Number of People</TableCell>\n <TableCell padding=\"none\" width=\"140\" >\n <TableSortLabel \n active={true} \n direction={sorting['created-at']} \n onClick={() => sortListing(sorting['created-at'], 'created-at')} \n >\n Created\n </TableSortLabel>\n </TableCell>\n <TableCell padding=\"none\" width=\"140\" >\n <TableSortLabel \n active={true} \n direction={sorting['updated-at']} \n onClick={() => sortListing(sorting['updated-at'], 'updated-at')} \n >\n Updated\n </TableSortLabel>\n </TableCell>\n <TableCell width=\"120\" align=\"center\" >Actions</TableCell>\n </TableRow>\n </TableHead>\n {\n loading ? \n <TableHead>\n <TableRow>\n <TableCell></TableCell>\n <TableCell>\n <CircularProgress />\n </TableCell>\n <TableCell></TableCell>\n </TableRow>\n </TableHead>\n : !listing[0] ?\n <TableHead>\n <TableRow>\n <TableCell colSpan={12}>\n <Box component=\"div\" style={{ display: 'flex', flex: 10, justifyContent: 'center' }} pt={2} pl={2}>\n <Alert severity=\"info\" onClick={() => navigate('/app/managelisting')} style={{ cursor:'pointer' }}>\n <AlertTitle>There are no lists created yet, add your first one now</AlertTitle>\n </Alert>\n </Box>\n </TableCell>\n </TableRow>\n </TableHead>\n : null\n }\n <TableBody>\n {\n !loading ?\n listing.map((listing_data, i) => {\n return(\n <TableRow hover key={listing_data.id} >\n <TableCell padding=\"none\" style={{ padding: 16, paddingLeft: 16, paddingRight: 16 }} >{listing_data.title}</TableCell> \n <TableCell padding=\"none\" align=\"center\" >{listing_data.people.length}</TableCell> \n <TableCell padding=\"none\" width=\"140\" >\n {dayjs(listing_data.updatedAt).format('DD MMM YYYY')}\n </TableCell>\n <TableCell padding=\"none\" width=\"140\" >\n {dayjs(listing_data.createdAt).format('DD MMM YYYY')}\n </TableCell>\n <TableCell padding=\"none\" align=\"center\" >\n <Box>\n <IconButton \n onClick={() => setDeleteData(listing_data)} \n aria-label=\"delete\" \n size=\"small\" \n style={{ color: '#7465f2', }} \n >\n <DeleteRounded fontSize=\"small\" />\n </IconButton>\n <IconButton onClick={() => navigate('/app/managelisting', { state: listing_data }) } size=\"small\" style={{ color: '#7465f2', }} >\n <EditRounded fontSize=\"small\" />\n </IconButton>\n </Box>\n </TableCell>\n </TableRow>\n )\n })\n : null\n }\n </TableBody>\n </Table>\n <TablePagination\n component=\"div\"\n count={pagination.total}\n onChangePage={(e, p) => handlePagination(p, 'page')}\n onChangeRowsPerPage={(e) => handlePagination(e, 'limit')}\n page={pagination.number}\n rowsPerPage={pagination.size}\n rowsPerPageOptions={[5, 10, 25]}\n />\n </Box>\n </PerfectScrollbar>\n </Card>\n </Grid>\n </Box>\n </Box>\n </Container>\n <DeleteDialog \n status={Boolean(deleteData)} \n onClose={() => setDeleteData('')} \n onDelete={onDeleteListing}\n name={deleteData ? deleteData.people.length : ''}\n type=\"listing\"\n />\n </Page>\n )\n}\n\nexport default Listing;","import React, { useState, useEffect } from 'react';\nimport { \n Box, Grid, Button, Card, TablePagination, CircularProgress,\n Container, makeStyles, Typography, Breadcrumbs\n} from '@material-ui/core';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport { useSnackbar } from 'notistack';\n\nimport { PeopleListingSearch, ListingInput, AppLink, PageBreadcrumb } from '../../components/AllComponent';\nimport { jsonApiInit } from '../../utils/jsonApiConfig';\nimport { validateLogin } from '../../utils/EmitValidation'\nimport Page from 'src/components/Page';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.light,\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3),\n display: 'flex',\n },\n}));\n\nconst ManageListing = () => {\n const classes = useStyles();\n const navigate = useNavigate();\n const [isEdit, setEdit] = useState(false);\n const [editData, setEditData] = useState('');\n const [searchPeople, setSearchPeople] = useState([]);\n const [addedPeople, setAddedPeople] = useState([]);\n const [addedPeopleMeta, setAddedPeopleMeta] = useState('');\n const [listingName, setListingName] = useState('');\n const [limit, setLimit] = useState({ added: 10, search: 10 });\n const [page, setPage] = useState({ added: 0, search: 0 });\n const [accessToken, setAccessToken] = useState('');\n const [loading, setLoading] = useState({ search: false, added: false });\n const { enqueueSnackbar } = useSnackbar();\n let { state } = useLocation();\n if(state && !isEdit){\n setEdit(true);\n setListingName(state.title);\n setAddedPeople(state.people);\n setEditData(state);\n }\n const loadListingPeople = (access_token, page, limit) => {\n const jsonApi = jsonApiInit(access_token);\n loading.search = true;\n setLoading({ ...loading });\n jsonApi.findAll('person', { page: { size: limit, number: page+1 } }).then((resProfile) => {\n let { data, error, meta } = resProfile;\n if(!error){\n if(addedPeople.length !== 0){\n addedPeople.map((added_p, added_i) => {\n data.map((d_p, d_i) => {\n if(added_p.id === d_p.id){\n data[d_i].added = true;\n }\n })\n })\n setSearchPeople(data);\n setAddedPeopleMeta(meta.page);\n }else{\n setSearchPeople(data);\n setAddedPeopleMeta(meta.page);\n }\n loading.search = false;\n setLoading({ ...loading });\n }\n })\n }\n\n const onSearchTextChange = (text) => {\n const jsonApi = jsonApiInit(accessToken);\n if(text.length > 2){\n loading.search = true;\n setLoading({ ...loading });\n setSearchPeople([]);\n jsonApi.findAll('people', { filter: { \"full-name\": text } }).then((resSearch) => {\n const { error, data } = resSearch;\n if(!error){\n addedPeople.map((added_p, added_i) => {\n data.map((d_p, d_i) => {\n if(added_p.id === d_p.id){\n data[d_i].added = true;\n }\n })\n });\n loading.search = false;\n setLoading({ ...loading });\n setSearchPeople(data);\n }\n })\n } else if(text.length === 0){\n loadListingPeople(accessToken, page.search, limit.search)\n }\n }\n\n const onSearchAdded = (text) => {\n addedPeople.map((d, i) => {\n if(d[\"full-name\"].toLowerCase().indexOf(text.toLowerCase()) == -1){\n addedPeople[i].added = true;\n }else{\n addedPeople[i].added = false;\n }\n });\n setAddedPeople([...addedPeople]);\n }\n\n const handlePageChange = (p, type) => {\n if(type === 'search'){\n page.search = p\n loadListingPeople(accessToken, p, limit.search);\n }else{\n page.added = p\n }\n setPage({...page});\n }\n const handleLimitChange = (event, type) => {\n if(type === 'search'){\n limit.search = event.target.value;\n loadListingPeople(accessToken, page.search, event.target.value);\n }else{\n limit.added = event.target.value;\n }\n setLimit({...limit});\n }\n\n const onAddPeople = (data, index) => {\n data.added = false;\n addedPeople.push({...data});\n searchPeople[index].added = true;\n setAddedPeople([...addedPeople]);\n setSearchPeople([...searchPeople]);\n if(isEdit){\n const jsonApi = jsonApiInit(accessToken);\n jsonApi.one('listing', editData.id).relationships('people').post([{ id: data.id }]);\n enqueueSnackbar(`${data[\"full-name\"]} added successfully to the list`, { variant: 'success' });\n }\n }\n const onDeletePeople = (data, index) => {\n searchPeople.map((d, i) => {\n if(d.id === data.id){\n searchPeople[i].added = false;\n }\n })\n addedPeople.splice(index, 1)\n setAddedPeople([...addedPeople]);\n setSearchPeople([...searchPeople]);\n if(isEdit){\n const jsonApi = jsonApiInit(accessToken);\n jsonApi.one('listing', editData.id).relationships().all('people').destroy([{type: \"people\", id: data.id }]);\n enqueueSnackbar(`${data[\"full-name\"]} deleted successfully from the list`, { variant: 'success' });\n }\n }\n\n const onSaveListing = () => {\n const jsonApi = jsonApiInit(accessToken);\n if(!isEdit){\n if(!listingName){\n enqueueSnackbar(`Please give listing a name`, { variant: 'error' });\n }else if(addedPeople.length === 0){\n enqueueSnackbar(`At least one people should be added`, { variant: 'error' });\n }else{\n jsonApi.create('listing', { title: listingName }).then((resListing) => {\n addedPeople.map((d, i) => {\n jsonApi.one('listing', resListing.data.id).relationships('people').post([{ id: d.id }]);\n if(i === addedPeople.length-1){\n enqueueSnackbar(`List added successfully with ${addedPeople.length} people`, { variant: 'success' });\n navigate('/app/listing');\n }\n })\n });\n }\n }else{\n jsonApi.one('listing', editData.id).patch({ id: editData.id, title: listingName, description: 'list description' });\n enqueueSnackbar(`List updated successfully`, { variant: 'success' });\n navigate('/app/listing');\n }\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n setAccessToken(access_token);\n loadListingPeople(access_token, 0, limit.search)\n }else{\n navigate('/login', { replace: true }); \n }\n }, []);\n \n let newAddedPeople = addedPeople.slice(page.added*limit.added, (page.added+1)*limit.added)\n return(\n <Page className={[classes.root]} title={isEdit ? \"Edit Listing\" : \"Add Listing\"} >\n <Container maxWidth={false} >\n <Box mb={1}>\n <Breadcrumbs aria-label=\"breadcrumb\">\n <AppLink navigate={navigate} />\n <AppLink title=\"Listings\" navigate={navigate} href=\"/app/listing\" />\n <PageBreadcrumb title={isEdit ? \"Update listing\" : \"Create listing\"} />\n </Breadcrumbs>\n </Box>\n <Box mb={2}>\n <Grid item xs={12} >\n <Card elevation={0} style={{ width: '100%' }}>\n <Box ml={3} mr={3} mt={2} mb={2} display=\"flex\" >\n <Box style={{ flex: 4 }} component=\"div\">\n <ListingInput \n autoFocus\n placeholderText=\"Type name of list you want to create\"\n onTextChange={(text) => { setListingName(text) }}\n value={listingName}\n />\n </Box>\n <Box style={{ flex: 4, display: 'flex', justifyContent: 'flex-end', alignItems: 'center' }}>\n <Box>\n <Button onClick={onSaveListing} variant=\"contained\" color=\"primary\" >\n {isEdit ? \"Update List\" : \"Save List\"}\n </Button>\n </Box>\n </Box>\n </Box>\n </Card>\n </Grid>\n </Box>\n <Box display=\"flex\" flexDirection=\"row\" >\n <Box style={{ display: 'flex', flex: 20 }} >\n <Card elevation={0} style={{ width: '100%', display: 'flex', flexDirection: 'column', justifyContent: 'space-between' }} >\n <Box style={{ minHeight: ((window.innerHeight/100)*75)-70 }}>\n <Box ml={3} mr={3} mt={2} mb={1} >\n <Typography style={{ fontSize: 22, color: '#888888' }}>Select People</Typography>\n <ListingInput\n placeholderText=\"Type name of people to search\"\n onTextChange={(text) => onSearchTextChange(text)}\n />\n </Box>\n <Box ml={3} mr={3}>\n {\n loading.search ? \n <Box pt={2} style={{ display: 'flex', justifyContent: 'center' }} >\n <CircularProgress />\n </Box>\n : null\n }\n <PeopleListingSearch \n peopleList={searchPeople} \n classes={classes} \n btnColor=\"#91a8fd7d\"\n btnPress={(data, index) => onAddPeople(data, index)}\n type=\"add\"\n />\n </Box>\n </Box>\n <Box >\n <TablePagination\n component=\"div\"\n count={addedPeopleMeta ? addedPeopleMeta.total : 100}\n onChangePage={(e, p) => handlePageChange(p, 'search')}\n onChangeRowsPerPage={(e) => handleLimitChange(e, 'search')}\n page={page.search}\n rowsPerPage={limit.search}\n rowsPerPageOptions={[5, 10]}\n />\n </Box>\n </Card>\n </Box>\n <Box style={{ display: 'flex', flex: 1 }} ></Box>\n <Box style={{ display: 'flex', flex: 20 }} >\n <Card elevation={0} style={{ width: '100%', display: 'flex', flexDirection: 'column', justifyContent: 'space-between' }} >\n <Box style={{ minHeight: ((window.innerHeight/100)*75)-70 }}>\n <Box ml={3} mr={3} mt={2} mb={1} >\n <Typography style={{ fontSize: 22, color: '#888888' }}>Added People</Typography>\n <ListingInput \n placeholderText=\"Type name of people to search\"\n onTextChange={(text) => onSearchAdded(text)}\n />\n </Box>\n <Box ml={3} mr={3}>\n {\n loading.added ? \n <Box pt={2} style={{ display: 'flex', justifyContent: 'center' }} >\n <CircularProgress />\n </Box>\n : null\n }\n <PeopleListingSearch \n peopleList={newAddedPeople} \n classes={classes} \n btnColor=\"#ff000038\"\n btnPress={(data, index) => onDeletePeople(data, index)}\n type=\"delete\"\n />\n </Box>\n </Box>\n <Box style={{ }} >\n <TablePagination\n component=\"div\"\n count={addedPeople.length}\n onChangePage={(e, p) => handlePageChange(p, 'added')}\n onChangeRowsPerPage={(e) => handleLimitChange(e, 'added')}\n page={page.added}\n rowsPerPage={limit.added}\n rowsPerPageOptions={[5, 10]}\n />\n </Box>\n </Card>\n </Box>\n </Box>\n </Container>\n </Page>\n )\n}\n\nexport default ManageListing;","import React, { useState } from 'react';\nimport { Box, Grid, Breadcrumbs, Card, Collapse, Paper } from '@material-ui/core';\nimport { useNavigate } from 'react-router-dom';\n\nimport { AppLink, ListingInput, FilterSelect, PlusButton, FilterButton, PageBreadcrumb } from '../../../components/AllComponent';\n\nconst MessageToolbar = ({ onSearchContent, statusList, onStatusChange, selectedStatus }) => {\n const navigate = useNavigate();\n const [showFilter, setShowFilter] = useState(false);\n\n return(\n <Box display=\"flex\" justifyContent=\"center\" >\n <Grid item xs={12} >\n <Box mb={1}>\n <Breadcrumbs aria-label=\"breadcrumb\">\n <AppLink navigate={navigate} />\n <PageBreadcrumb title=\"Messages\" />\n </Breadcrumbs>\n </Box>\n <Card elevation={0} >\n <Box component=\"div\" display=\"flex\" pl={2} pt={2} pr={2} pb={1} >\n <Box component=\"div\" style={{ flex: 8 }} >\n <Collapse in={!showFilter}>\n <Paper elevation={0} >\n <ListingInput \n placeholderText=\"Search by content\"\n inputHeight={48}\n onTextChange={(text) => onSearchContent(text)}\n />\n </Paper>\n </Collapse>\n <Collapse in={showFilter}>\n <Paper elevation={0} >\n <FilterSelect \n lists={statusList}\n onListChange={e => onStatusChange(e)}\n widthSelect={200}\n placeholder=\"Filter by status\" \n />\n </Paper>\n </Collapse>\n </Box>\n <Box component=\"div\" style={{ display: 'flex', flex: 10, justifyContent: 'flex-end' }}>\n <Box pr={2} >\n <FilterButton onClick={() => setShowFilter(!showFilter)} tooltip=\"View filter\" />\n </Box>\n <Box>\n <PlusButton onClick={() => navigate('/app/createmessage')} tooltip=\"Create message\" />\n </Box>\n </Box>\n </Box>\n </Card>\n </Grid>\n </Box>\n )\n}\n\nexport default MessageToolbar;","import { Dialog, Box } from '@material-ui/core';\nimport React from 'react';\nimport { Carousel } from 'react-responsive-carousel';\nimport \"react-responsive-carousel/lib/styles/carousel.min.css\"; \nimport { PopupHeader } from 'src/components/AllComponent';\n\nconst PhotoSlider = ({ status, files, onClose }) => {\n\n return(\n <Dialog open={status} >\n <Box pl={4} pt={2}>\n <Box pb={1} >\n <PopupHeader title=\"Photo\" onClose={onClose} />\n </Box>\n <Box pr={4}>\n <Carousel showArrows={true} >\n {\n files && files.map((d, i) => {\n return(\n <div key={i}><img alt=\"\" src={d} /></div>\n )\n })\n }\n </Carousel>\n </Box>\n </Box>\n </Dialog>\n )\n}\n\nexport default PhotoSlider;","import React, { useState, useEffect } from 'react';\nimport {\n Box,\n Grid,\n Card, \n Container, \n makeStyles,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n TablePagination,\n TableSortLabel,\n Chip,\n IconButton,\n Collapse,\n CircularProgress\n} from '@material-ui/core';\nimport { useNavigate } from 'react-router-dom';\nimport { EditRounded, Message, DeleteRounded, AttachFileRounded } from '@material-ui/icons';\nimport PerfectScrollbar from 'react-perfect-scrollbar';\nimport { useSnackbar } from 'notistack';\nimport { useDispatch } from 'react-redux';\nimport clsx from 'clsx';\nimport dayjs from 'dayjs';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport { validateLogin } from '../../../utils/EmitValidation';\nimport { message_status_list, status_color, bg_color } from 'src/utils/SelectOptions';\nimport { jsonApiInit } from '../../../utils/jsonApiConfig';\nimport Page from 'src/components/Page';\nimport MessageToolbar from './MessageToolbar';\nimport { EmptyTable, DeleteWarning } from '../../../components/AllComponent';\nimport PhotoSlider from './PhotoSlider'\n\n// TODO Update failed and success message number and make dynamic\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.light,\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3),\n display: 'flex',\n },\n tableDiv: {\n backgroundColor: 'white',\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3),\n display: 'flex',\n }\n}));\n\nconst MessageList = () => {\n const classes = useStyles();\n const navigate = useNavigate();\n const dispatch = useDispatch();\n const [messageList, setMessageList] = useState([]);\n const [selectedStatus, setSelectedStatus] = useState('');\n const [accessToken, setAccessToken] = useState('');\n const [deleteData, setDeleteData] = useState('');\n const [pagination, setPagination] = useState({ size: 10, number: 0, total: 100 });\n const [sorting, setSorting] = useState({ sort: '', 'scheduled-at': 'asc' });\n const [photoData, setPhotoData] = useState('');\n const [loading, setLoading] = useState(false);\n const { enqueueSnackbar } = useSnackbar();\n\n const loadMessageData = (access_token, query) => {\n setLoading(true);\n const jsonApi = jsonApiInit(access_token);\n jsonApi.findAll('message', query).then((resMessage) => {\n const { data, error, meta } = resMessage;\n if(!error){\n data.map((d, i) => {\n data[i].isExpanded = false;\n });\n setMessageList(data);\n setLoading(false);\n setPagination({ ...pagination, total: meta ? meta.page.total : data.length });\n }\n })\n }\n\n const loadMessageList = (access_token, size, number) => {\n const initialQuery = { page: { size, number: number+1 }, include: 'outbound' };\n initialQuery.sort = sorting.sort ? sorting.sort : \"-id\";\n loadMessageData(access_token, initialQuery);\n }\n\n const onSearchContent = (text) => {\n if(text.length > 2){\n const searchQuery = { filter: { content: text }, include: 'outbound' };\n loadMessageData(accessToken, searchQuery);\n }else{\n loadMessageList(accessToken, 10, 0);\n }\n }\n\n const sortMessage = (sortType, sortName) => {\n const { size, number } = pagination;\n let sortQuery = { include: 'outbound', sort: sortType === 'asc' ? `${sortName}` : `-${sortName}` };\n sortQuery.page = { size, number: number+1 };\n sorting[sortName] = sortType === 'asc' ? 'desc' : 'asc';\n sorting.sort = sortType === 'asc' ? `${sortName}` : `-${sortName}`;\n setSorting({ ...sorting });\n loadMessageData(accessToken, sortQuery);\n }\n\n const handlePagination = (e, type) => {\n if(type === 'limit'){\n pagination.size = e.target.value;\n setPagination({...pagination});\n loadMessageList(accessToken, e.target.value, pagination.number);\n }else{\n pagination.number = e;\n setPagination({...pagination});\n loadMessageList(accessToken, pagination.size, e);\n }\n }\n\n const handleAction = (data) => {\n const { status } = data;\n if(status === \"draft\"){\n navigate('/app/createmessage', { state: data });\n }else if(data['scheduled-at']){\n const check_hour = dayjs(data['scheduled-at']).diff(new Date(), 'minute');\n if(check_hour < -1){\n navigate('/app/createmessage', { state: data });\n }else{\n enqueueSnackbar('You can only edit message before an hour', { variant: 'info' });\n }\n }else{\n navigate('/app/viewmessage', { state: data });\n }\n }\n\n const onDeleteValidate = (data) => {\n if(data['scheduled-at']){\n const check_hour = dayjs(data['scheduled-at']).diff(new Date(), 'minute');\n if(check_hour < -60){\n setDeleteData(data);\n }else{\n enqueueSnackbar('You can only delete scheduled message before an hour', { variant: 'error' });\n }\n }else if(data.status === 'draft'){\n setDeleteData(data);\n }else{\n enqueueSnackbar('You cannot delete sent message', { variant: 'error' });\n }\n }\n\n const onDeleteMessage = () => {\n const jsonApi = jsonApiInit(accessToken);\n jsonApi.destroy('message', deleteData.id).then((resDel) => {\n setDeleteData('');\n loadMessageList(accessToken, pagination.size, pagination.number);\n enqueueSnackbar('Message delete successfully', { variant: 'success' });\n dispatch({ type: 'BALANCE_UPDATE', data: true });\n }).catch(err => {\n setDeleteData('');\n enqueueSnackbar('Failed to delete message', { variant: 'error' });\n })\n }\n\n const onStatusChange = (e) => {\n if(e){\n const filterQuery = { filter: { status: e.value }, include: 'outbound' };\n loadMessageData(accessToken, filterQuery);\n }else{\n loadMessageList(accessToken, pagination.size, pagination.number);\n }\n setSelectedStatus(e);\n }\n\n const expandContent = (data, index) => {\n if(data.content.length > 70){\n messageList[index].isExpanded = !data.isExpanded;\n setMessageList([...messageList]);\n }\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n setAccessToken(access_token);\n loadMessageList(access_token, 10, 0)\n }else{\n navigate('/login', { replace: true }); \n }\n }, []);\n\n return(\n <Page className={[classes.root]} title=\"Messages\" >\n <Container maxWidth={false} >\n <Box component=\"div\" display=\"flex\" flexDirection=\"column\" >\n <MessageToolbar \n onSearchContent={(e) => onSearchContent(e)}\n statusList={message_status_list}\n onStatusChange={(e) => onStatusChange(e)}\n selectedStatus={selectedStatus}\n />\n <Box display=\"flex\" justifyContent=\"center\" >\n <Grid item xs={12} >\n <Card className={clsx(classes.tableDiv)} elevation={0} >\n <PerfectScrollbar style={{ minWidth: '100%' }} >\n <Box width=\"100%\" component=\"div\" >\n <Table>\n <TableHead>\n <TableRow>\n <TableCell width=\"100\" >Gateway</TableCell>\n <TableCell width=\"300\" >Content</TableCell>\n <TableCell width=\"120\" align=\"center\" >Sent</TableCell>\n <TableCell width=\"120\" align=\"center\" >Failed</TableCell>\n <TableCell width=\"120\" align=\"center\" >\n <TableSortLabel \n active={true} \n direction={sorting['scheduled-at']} \n onClick={() => sortMessage(sorting['scheduled-at'], 'scheduled-at')} \n >\n Scheduled\n </TableSortLabel>\n </TableCell>\n <TableCell width=\"100\" padding=\"none\" align=\"right\" >Cost</TableCell>\n <TableCell width=\"140\" align=\"center\" >Status</TableCell>\n <TableCell width=\"100\" align=\"center\" >Actions</TableCell>\n </TableRow>\n </TableHead>\n {\n loading ?\n <TableHead>\n <TableRow>\n <TableCell></TableCell>\n <TableCell></TableCell>\n <TableCell></TableCell>\n <TableCell align=\"right\" >\n <CircularProgress />\n </TableCell>\n <TableCell></TableCell>\n <TableCell></TableCell>\n <TableCell></TableCell>\n <TableCell></TableCell>\n </TableRow>\n </TableHead>\n : !messageList[0] ?\n <TableBody>\n <TableRow>\n <TableCell colSpan={12}>\n <Box component=\"div\" style={{ display: 'flex', flex: 10, justifyContent: 'center' }} pt={2} pl={2}>\n <Alert onClick={() => navigate('/app/createmessage')} severity=\"info\" style={{ cursor:'pointer' }}>\n <AlertTitle>There are no messages yet, click here to create your first one</AlertTitle>\n </Alert>\n </Box>\n </TableCell>\n </TableRow>\n </TableBody>\n :\n null\n }\n <TableBody>\n {\n messageList.map((message_data, i) => {\n return(\n <TableRow hover key={i} >\n <TableCell padding=\"none\" style={{ padding: 16, paddingLeft: 16, paddingRight: 16 }} >{message_data.gateway}</TableCell> \n <TableCell padding=\"none\" width=\"300\" >\n <Box onClick={() => expandContent(message_data, i)} style={{ cursor: 'pointer' }} >\n {\n !message_data.isExpanded ?\n message_data.content.length > 70 ? \n `${message_data.content.substring(0, 70)}...` : \n message_data.content\n : null\n }\n <Collapse in={message_data.isExpanded}>\n { message_data.content}\n </Collapse> \n </Box>\n </TableCell> \n <TableCell padding=\"none\" align=\"center\" >{message_data.sent}</TableCell> \n <TableCell padding=\"none\" align=\"center\" >{message_data.failed}</TableCell> \n <TableCell padding=\"none\" width=\"160\" align=\"center\" >\n { message_data['scheduled-at'] ? dayjs(message_data['scheduled-at']).format('DD MMM, hh:mm A') : ''}\n </TableCell>\n <TableCell padding=\"none\" width=\"100\" align=\"right\" >${(message_data.cost/100).toFixed(2)}</TableCell>\n <TableCell padding=\"none\" align=\"center\" >\n <Chip \n style={{ color: status_color[message_data.status], backgroundColor: bg_color[message_data.status] }} \n color=\"primary\" \n label={message_data.status} \n size=\"small\" \n />\n </TableCell>\n <TableCell padding=\"none\" align=\"center\" >\n <IconButton onClick={() => onDeleteValidate(message_data)} size=\"small\" style={{ color: '#7465f2' }} >\n <DeleteRounded fontSize=\"small\" />\n </IconButton>\n \n <IconButton onClick={() => handleAction(message_data)} size=\"small\" style={{ color: '#7465f2' }} >\n {\n message_data.status === \"draft\" || message_data['scheduled-at'] ? \n <EditRounded fontSize=\"small\" /> \n : <Message fontSize=\"small\" /> \n }\n </IconButton>\n {\n message_data.files.length > 0 ?\n <IconButton onClick={() => setPhotoData(message_data.files)} size=\"small\" style={{ color: '#7465f2' }} >\n <AttachFileRounded fontSize=\"small\" />\n </IconButton>\n : null\n }\n </TableCell>\n </TableRow>\n )\n })\n }\n </TableBody>\n </Table>\n <TablePagination\n component=\"div\"\n count={pagination.total}\n onChangePage={(e, p) => handlePagination(p, 'page')}\n onChangeRowsPerPage={(e) => handlePagination(e, 'limit')}\n page={pagination.number}\n rowsPerPage={pagination.size}\n rowsPerPageOptions={[5, 10, 25]}\n />\n </Box>\n </PerfectScrollbar>\n </Card>\n </Grid>\n </Box>\n </Box>\n </Container>\n <DeleteWarning \n status={Boolean(deleteData)}\n title=\"Are you sure want to delete\"\n deleteText=\"You message and it logs will be deleted\"\n onClose={() => setDeleteData('')}\n onDelete={onDeleteMessage}\n />\n <PhotoSlider \n status={Boolean(photoData)}\n files={photoData}\n onClose={() => setPhotoData('')}\n />\n </Page>\n )\n}\n\nexport default MessageList;","import React, { useState, useEffect } from 'react';\nimport { \n Table,\n TableHead,\n TableRow,\n TableCell,\n TableBody,\n Checkbox,\n Grid,\n TablePagination,\n TableSortLabel,\n Box,\n CircularProgress\n} from '@material-ui/core';\nimport { jsonApiInit } from 'src/utils/jsonApiConfig';\nimport { validateLogin } from 'src/utils/EmitValidation';\nimport { ListingInput } from 'src/components/AllComponent';\n\nconst loadListPeople = (lists, access_token) => {\n return new Promise((resolve, reject) => {\n const jsonApi = jsonApiInit(access_token);\n let checked_list = [];\n lists.map((list_id, i) => {\n jsonApi.find('listing', list_id, { include: 'people.phones' }).then((resListing) => {\n const { data } = resListing;\n data.people.map((p_data, p_index) => { \n const isPhoneExist = p_data.phones.find(x => x['is-default'] && x.type_def === 'mobile');\n data.people[p_index].phone_number = isPhoneExist ? isPhoneExist.number : '';\n data.people[p_index].selected = true;\n data.people[p_index].peopleType = 'list';\n });\n data.checked = true;\n checked_list.push(data);\n if(lists.length-1 === i){\n setTimeout(() => { resolve(checked_list); }, 50);\n }\n })\n });\n })\n}\n\nconst Listings = ({ accessToken, onTabChecked, isEdit, recipients }) => {\n const [lists, setLists] = useState([]);\n const [checkedList, setCheckedList] = useState([]);\n const [pagination, setPagination] = useState({ size: 10, number: 0, total: 100 });\n const [sorting, setSorting] = useState({ title: 'asc' });\n const [loading, setLoading] = useState(false);\n\n const loadData = (query, access_token, checked_list) => {\n setLoading(true)\n const jsonApi = jsonApiInit(access_token);\n jsonApi.findAll('listing', query).then(resList => {\n const { data, error, meta } = resList;\n if(!error){\n data.map((d, i) => { \n const checkAdded = checked_list.findIndex(x => x.id === d.id);\n data[i].checked = checkAdded > -1 ? true : false; \n });\n setLists(data);\n setLoading(false);\n if(meta){\n setPagination({...pagination, ...{ total: meta.page.total }});\n }\n }\n })\n }\n\n const loadList = (access_token, size, number, checked_list) => {\n const initialQuery = { include: 'people.phones', page: { size, number: number+1 } }\n loadData(initialQuery, access_token, checked_list);\n }\n\n const handlePagination = (e, type) => {\n if(type === 'limit'){\n pagination.size = e.target.value;\n loadList(accessToken, e.target.value, pagination.number, checkedList);\n setPagination({...pagination});\n }else{\n pagination.number = e;\n loadList(accessToken, pagination.size, e, checkedList);\n setPagination({...pagination});\n }\n }\n\n const onListChecked = (data, index) => {\n if(data.checked){\n const deleteIndex = checkedList.findIndex(x => x.id === data.id);\n checkedList.splice(deleteIndex, 1);\n }else{\n checkedList.push(data);\n }\n lists[index].checked = !data.checked;\n setLists([...lists]);\n setCheckedList([...checkedList]);\n onTabChecked(data);\n }\n\n const onSearchList = (text) => {\n if(text.length > 2){\n const filterQuery = { filter: { title: text }, include: 'people.phones' };\n loadData(filterQuery, accessToken, checkedList);\n }else{\n loadList(accessToken, 10, 0, checkedList);\n }\n }\n\n const onSortTitle = () => {\n let sortQuery = { include: 'people.phones' }\n sortQuery.sort = sorting.title === 'asc' ? '-title' : 'title'; \n loadData(sortQuery, accessToken, checkedList);\n setSorting({ title: sorting.title === 'asc' ? 'desc' : 'asc' });\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n if(isEdit && recipients){\n loadListPeople(recipients.lists, access_token).then((resList) => {\n setCheckedList([...checkedList, ...resList]);\n loadList(access_token, 10, 0, resList);\n })\n }else{\n loadList(access_token, 10, 0, checkedList);\n }\n }\n }, [])\n\n return(\n <Grid >\n <Box pl={2} pr={2} pt={2} >\n <ListingInput\n placeholderText=\"Search by title of list\"\n onTextChange={(text) => onSearchList(text, false)}\n />\n </Box>\n <Table style={{ }}>\n <TableHead>\n <TableRow>\n <TableCell padding=\"none\" ></TableCell>\n <TableCell align=\"left\" >\n <TableSortLabel active={true} direction={sorting.title} onClick={onSortTitle} >\n Title\n </TableSortLabel>\n </TableCell>\n <TableCell align=\"center\" width=\"160\" >Number of people</TableCell>\n </TableRow>\n </TableHead>\n {\n loading ?\n <TableHead>\n <TableRow>\n <TableCell></TableCell>\n <TableCell style={{ paddingLeft: 100 }} align=\"center\" >\n <CircularProgress />\n </TableCell>\n <TableCell></TableCell>\n </TableRow>\n </TableHead>\n : null\n }\n <TableBody>\n {\n lists.map((d, i) => {\n return(\n <TableRow key={i}>\n <TableCell padding=\"none\" >\n <Checkbox \n onChange={() => onListChecked(d, i)}\n checked={d.checked}\n />\n </TableCell>\n <TableCell align=\"left\" padding=\"none\" >{d.title}</TableCell>\n <TableCell align=\"center\" >{d.people.length}</TableCell>\n </TableRow>\n )\n })\n }\n </TableBody>\n </Table>\n <TablePagination\n component=\"div\"\n count={pagination.total}\n onChangePage={(e, p) => handlePagination(p, 'page')}\n onChangeRowsPerPage={(e) => handlePagination(e, 'limit')}\n page={pagination.number}\n rowsPerPage={pagination.size}\n rowsPerPageOptions={[5, 10]}\n />\n </Grid> \n );\n};\n\nexport default Listings;","import React, { useState, useEffect } from 'react';\nimport { \n AppBar, \n Tab, \n Card,\n Tabs,\n Table,\n TableHead,\n TableRow,\n TableCell,\n TableBody,\n TablePagination,\n Grid,\n Checkbox,\n Box,\n Avatar,\n Typography,\n TableSortLabel,\n CircularProgress,\n} from '@material-ui/core';\nimport Listings from './Listings';\nimport { BlankAvatar, ListingInput } from 'src/components/AllComponent';\nimport { jsonApiInit } from 'src/utils/jsonApiConfig';\nimport { validateLogin } from 'src/utils/EmitValidation';\n\nfunction TabPanel(props) {\n const { children, value, index, ...other } = props;\n return (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`full-width-tabpanel-${index}`}\n aria-labelledby={`full-width-tab-${index}`}\n {...other}\n >\n {children}\n </div>\n );\n}\n\nfunction a11yProps(index) {\n return {\n id: `full-width-tab-${index}`,\n 'aria-controls': `full-width-tabpanel-${index}`,\n };\n}\n\nfunction buildPeopleList(lists, noListPeople) {\n let new_people_list = [];\n let hash_list = {};\n lists.map((list) => {\n list.people.map(people_data => {\n if(!hash_list[people_data.id]){\n // to identify people \n people_data.peopleType = \"list\";\n // check duplicate of people is already added from search\n noListPeople.map((nl_d, nl_i) => {\n if(nl_d.id === people_data.id){\n noListPeople.splice(nl_i, 1);\n }\n });\n // find default phone and assing to object\n const isPhoneExist = people_data.phones.find(x => x['is-default'] && x.type_def === 'mobile');\n people_data.phone_number = isPhoneExist ? isPhoneExist.number : '';\n new_people_list.push(people_data);\n hash_list[people_data.id] = true;\n }\n })\n });\n return { peopleList: new_people_list, noListPeople };\n}\n\nconst loadPeople = (people, access_token) => {\n return new Promise((resolve, reject) => {\n const jsonApi = jsonApiInit(access_token);\n let no_list_people = [];\n people.map((people_id, i) => {\n jsonApi.find('people', people_id, { include: 'phones' }).then(resPeople => {\n const { data } = resPeople;\n data.selected = true;\n data.peopleType = 'nolist';\n const isPhoneExist = data.phones.find(x => x['is-default'] && x.type_def === 'mobile');\n data.phone_number = isPhoneExist ? isPhoneExist.number : '';\n no_list_people.push(data);\n if(people.length-1 === i){\n setTimeout(() => { resolve(no_list_people); }, 50);\n }\n })\n })\n })\n}\n\nconst loadListPeople = (lists, access_token) => {\n return new Promise((resolve, reject) => {\n const jsonApi = jsonApiInit(access_token);\n let checked_list = [];\n lists.map((list_id, i) => {\n jsonApi.find('listing', list_id, { include: 'people.phones' }).then((resListing) => {\n const { data } = resListing;\n data.people.map((p_data, p_index) => { \n const isPhoneExist = p_data.phones.find(x => x['is-default'] && x.type_def === 'mobile');\n data.people[p_index].phone_number = isPhoneExist ? isPhoneExist.number : '';\n data.people[p_index].selected = true;\n data.people[p_index].peopleType = 'list';\n });\n data.checked = true;\n checked_list.push(data);\n if(lists.length-1 === i){\n setTimeout(() => { resolve(checked_list); }, 50);\n }\n })\n });\n })\n}\n\nconst Recipients = ({ accessToken, onPeopleSelectedChange, recipients, isEdit, enqueueSnackbar }) => {\n const [tabIndex, setTabIndex] = useState(0);\n const [checkedList, setCheckedList] = useState([]);\n const [peopleList, setPeopleList] = useState([]);\n const [noListPeople, setNoListPeople] = useState([]);\n const [searchList, setSearchList] = useState([]);\n const [pagination, setPagination] = useState({ size: 10, number: 0, total: 100 });\n const [sorting, setSorting] = useState({ 'full-name': 'asc', phone_number: 'asc' });\n const [searchText, setSearchText] = useState('');\n const [loading, setLoading] = useState(false);\n\n const tabBarStyle = (i) => { \n if(i === tabIndex){\n return '#dae3ff';\n }else{\n return 'white';\n }\n };\n\n const onTabChecked = (data) => {\n if(data.checked){\n data.people.map((d, i) => data.people[i].selected = true );\n checkedList.push(data);\n }else{\n const deleteIndex = checkedList.findIndex(x => x.id === data.id);\n checkedList.splice(deleteIndex, 1);\n }\n \n const people = buildPeopleList(checkedList, noListPeople);\n setPeopleList([...people.peopleList, ...people.noListPeople]);\n setCheckedList([...checkedList]);\n setNoListPeople([...people.noListPeople]);\n onPeopleSelectedChange(checkedList, [...people.peopleList, ...people.noListPeople], people.noListPeople);\n }\n\n const onPeopleSelected = (data, index) => {\n if(data.peopleType === \"list\"){\n enqueueSnackbar('You cannot change people from list', { variant: 'info' });\n }else if(data.peopleType === 'nolist'){\n if(data.selected){\n const deleteIndex = noListPeople.findIndex(x => x.id === data.id);\n noListPeople.splice(deleteIndex, 1);\n peopleList.splice(index, 1);\n }else{\n const isExistPeople = peopleList.find(x => x.id === data.id);\n if(isExistPeople){\n enqueueSnackbar(`${data['full-name']} already added in the list`, { variant: 'info' });\n }else{\n data.selected = true;\n noListPeople.push(data);\n peopleList.push(data);\n }\n }\n }\n setNoListPeople([...noListPeople]);\n setPeopleList([...peopleList]);\n onPeopleSelectedChange(checkedList, peopleList, noListPeople);\n }\n\n const handlePagination = (e, type) => {\n if(type === 'limit'){\n pagination.size = e.target.value;\n setPagination({...pagination});\n }else{\n pagination.number = e;\n setPagination({...pagination});\n }\n }\n\n const onSearchPeople = (text, sort) => {\n setSearchText(text);\n if(text.length > 2){\n setLoading(true);\n const jsonApi = jsonApiInit(accessToken);\n let searchQuery = { filter: { 'full-name': text }, include: 'phones' }\n if(sort){\n searchQuery.sort = sorting['full-name'] === 'asc' ? '-full-name' : 'full-name';\n }\n jsonApi.findAll('people', searchQuery).then((resPeople) => {\n const { data, error, meta } = resPeople;\n data.map((d, i) => {\n const isPhoneExist = d.phones.find(x => x['is-default'] && x.type_def === 'mobile');\n data[i].phone_number = isPhoneExist ? isPhoneExist.number : '';\n data[i].peopleType = \"nolist\";\n data[i].selected = false;\n })\n if(!error){\n setSearchList(data);\n setLoading(false);\n if(sort){\n setSorting({ ...sorting, ...{ 'full-name': sorting['full-name'] === 'desc' ? 'asc' : 'desc' } })\n }\n }\n })\n }else{\n setSearchList([]);\n }\n }\n\n const onSortFullname = (text, sort_type) => {\n if(text){\n onSearchPeople(text, true);\n }else{\n if(sort_type === 'desc'){\n peopleList.sort((a, b) => a['full-name'].localeCompare(b['full-name']));\n setSorting({ ...sorting, ...{ 'full-name': 'asc' } })\n }else{\n peopleList.sort((a, b) => b['full-name'].localeCompare(a['full-name']));\n setSorting({ ...sorting, ...{ 'full-name': 'desc' } })\n }\n }\n setPeopleList([...peopleList]);\n }\n\n const setEditPeople = (lists, peoples) => {\n const people = buildPeopleList(lists, peoples);\n setPeopleList([...people.peopleList, ...people.noListPeople]);\n setCheckedList([...lists]);\n setNoListPeople([...peoples]);\n onPeopleSelectedChange(lists, [...people.peopleList, ...people.noListPeople], people.noListPeople);\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(recipients && isEdit){\n if(recipients.lists.length > 0){\n loadListPeople(recipients.lists, access_token).then((resList) => {\n if(recipients.people.length > 0){\n loadPeople(recipients.people, access_token).then(resPeople => {\n setEditPeople(resList, resPeople);\n })\n }else{\n setEditPeople(resList, []);\n }\n })\n }else if(recipients.people.length > 0){\n loadPeople(recipients.people, access_token).then(resPeople => {\n setNoListPeople(resPeople);\n setPeopleList(resPeople);\n onPeopleSelectedChange([], resPeople, []);\n })\n }\n }\n }, []);\n\n let newPeopleList;\n if(searchText){\n newPeopleList = searchList.slice(pagination.number*pagination.size, (pagination.number+1)*pagination.size)\n }else{\n newPeopleList = peopleList.slice(pagination.number*pagination.size, (pagination.number+1)*pagination.size)\n }\n\n return(\n <Card elevation={0} >\n <AppBar position=\"static\" color=\"transparent\" elevation={1} >\n <Tabs\n value={tabIndex}\n onChange={(e, newIndex) => {\n setTabIndex(newIndex)\n }}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n variant=\"standard\"\n >\n <Tab style={{ backgroundColor: tabBarStyle(0) }} label=\"Listings\" {...a11yProps(0)} />\n <Tab style={{ backgroundColor: tabBarStyle(1) }} label=\"People\" {...a11yProps(1)} />\n </Tabs>\n </AppBar>\n <TabPanel value={tabIndex} index={0} >\n <Listings \n accessToken={accessToken} \n onTabChecked={(data) => onTabChecked(data)}\n recipients={recipients}\n isEdit={isEdit}\n />\n </TabPanel>\n <TabPanel value={tabIndex} index={1} >\n <Grid>\n <Box pl={2} pr={2} pt={2} >\n <ListingInput\n placeholderText=\"Search people by name to add more\"\n onTextChange={(text) => onSearchPeople(text, false)}\n />\n </Box>\n <Table>\n <TableHead>\n <TableRow>\n <TableCell></TableCell>\n <TableCell>\n <TableSortLabel \n active={true} \n direction={sorting['full-name']} \n onClick={() => onSortFullname(searchText, sorting['full-name'])} \n >\n Fullname\n </TableSortLabel>\n </TableCell>\n <TableCell padding=\"none\" align=\"center\" >Number</TableCell>\n </TableRow>\n </TableHead>\n {\n loading ?\n <TableHead>\n <TableRow>\n <TableCell></TableCell>\n <TableCell style={{ paddingLeft: 100 }} align=\"center\" >\n <CircularProgress />\n </TableCell>\n <TableCell></TableCell>\n </TableRow>\n </TableHead>\n : null\n }\n <TableBody>\n {\n newPeopleList.map((d, i) => {\n return(\n <TableRow key={d.id}>\n <TableCell style={{ }} padding=\"none\" >\n <Checkbox \n checked={d.selected}\n onChange={(e) => onPeopleSelected(d, i)}\n disabled={d.phone_number ? false : true}\n />\n </TableCell>\n <TableCell padding=\"none\" style={{ paddingTop: 8, paddingBottom: 8 }} >\n <Box alignItems=\"center\" display=\"flex\">\n {\n d.avatar ?\n <Box pr={1}>\n <Avatar src={d.avatar} >{d[\"full-name\"]}</Avatar>\n </Box>\n : <BlankAvatar name={d[\"full-name\"]} />\n }\n <Typography color=\"textPrimary\" variant=\"body1\" >\n {d[\"full-name\"]}\n </Typography>\n </Box> \n </TableCell>\n <TableCell padding=\"none\" align=\"center\" >{d.phone_number}</TableCell>\n </TableRow>\n )\n })\n }\n </TableBody>\n </Table>\n <TablePagination\n component=\"div\"\n count={searchList.length > 0 ? searchList.length : peopleList.length}\n onChangePage={(e, p) => handlePagination(p, 'page')}\n onChangeRowsPerPage={(e) => handlePagination(e, 'limit')}\n page={pagination.number}\n rowsPerPage={pagination.size}\n rowsPerPageOptions={[5, 10]}\n />\n </Grid>\n </TabPanel>\n </Card>\n )\n}\n\nexport default Recipients","import React, { useState, useEffect } from 'react';\nimport { Box, GridList, IconButton, makeStyles, colors } from '@material-ui/core'\nimport { DropzoneArea } from 'material-ui-dropzone';\nimport { DeleteRounded, CloudUpload } from '@material-ui/icons';\n\nconst useStyles = makeStyles((theme) => ({\n dropMainArea: {\n backgroundColor: '#dae3ff',\n minHeight: 150,\n borderColor: colors.indigo[400]\n },\n gridList: {\n flexWrap: 'nowrap',\n transform: 'translateZ(0)',\n }, \n dropzoneText: {\n color: colors.indigo[500],\n fontSize: 18\n }\n}));\n\nconst DropPhoto = ({ allFiles, onFileChanges }) => {\n const classes = useStyles();\n const [files, setFiles] = useState([]);\n\n const handleFileChange = (file_list) => {\n if(file_list.length !== 0){\n file_list.map((d, i) => {\n let reader = new FileReader();\n reader.onloadend = () => {\n file_list[i].data = reader.result;\n setFiles([...file_list]);\n onFileChanges(file_list);\n }\n reader.readAsDataURL(d);\n })\n }\n }\n\n const onRemoveImage = (data, index) => {\n files.splice(index, 1);\n setFiles([...files]);\n }\n\n useEffect(() => {\n setFiles(allFiles);\n }, []);\n\n return(\n <Box>\n <Box pt={2} >\n <DropzoneArea\n Icon={() => <CloudUpload style={{ width: 48, height: 48, color: '#7465f2' }} />}\n dropzoneClass={classes.dropMainArea}\n dropzoneParagraphClass={classes.dropzoneText}\n fileObjects={files}\n maxFileSize={512000}\n onChange={handleFileChange}\n acceptedFiles={['image/jpeg', 'image/png', 'image/bmp']}\n filesLimit={10}\n showPreviews={false}\n showPreviewsInDropzone={false}\n />\n </Box>\n <Box pb={1} >\n <GridList className={classes.gridList} cols={2}>\n {\n files.map((d, i) => {\n return(\n <Box key={i} style={{ width: 116, height: 116, paddingTop: 16, paddingBottom: 8, paddingRight: 16 }} >\n <Box style={{ backgroundImage: `url(${d.data})`, backgroundSize: 'cover', width: 100, height: 100 }} >\n <Box style={{ display: 'flex', justifyContent: 'flex-end' }} >\n <IconButton onClick={() => onRemoveImage(d, i)} style={{ color: '#7465f2' }} size=\"small\">\n <DeleteRounded fontSize=\"small\" />\n </IconButton>\n </Box>\n </Box>\n </Box>\n )\n })\n }\n </GridList>\n </Box>\n </Box>\n )\n};\n\nexport default DropPhoto;","import React, { useState, useEffect } from 'react';\nimport { Box, Card, CardContent, Container, makeStyles, Breadcrumbs, Typography, TextField } from '@material-ui/core';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport dayjs from 'dayjs';\nimport { useSnackbar } from 'notistack';\nimport { useDispatch } from 'react-redux';\n\nimport './../../../css/Calendar.css';\nimport { jsonApiInit } from '../../../utils/jsonApiConfig';\nimport Page from 'src/components/Page';\nimport { \n ChooseDateDialog, \n EmitSelect, \n MessageSentDialog, \n PickDateTimeDialog, \n GroupSendButton, \n AppLink, \n PageBreadcrumb \n} from '../../../components/AllComponent';\nimport { validateLogin } from '../../../utils/EmitValidation';\nimport { gateway_list } from 'src/utils/SelectOptions'\nimport Recipients from './Recipient';\nimport DropPhoto from './DropPhoto';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.light,\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3),\n display: 'flex',\n },\n tabs: {\n borderRight: `1px solid ${theme.palette.divider}`,\n },\n sheduleButton: {\n paddingLeft: 24,\n paddingRight: 24,\n paddingTop: 12,\n paddingBottom: 12,\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'flex-start',\n cursor: 'pointer',\n borderRadius: 4,\n \"&:hover\": {\n backgroundColor: '#f1f1f1',\n }\n },\n datePickButton: {\n paddingTop: 16, \n paddingBottom: 16,\n textTransform: 'none',\n \"&:hover\": {\n backgroundColor: '#f1f1f1',\n }\n },\n link: {\n textDecoration: 'none',\n cursor: 'pointer',\n \"&:hover\": {\n textDecoration: 'none',\n }\n }\n}));\n\nconst MessageList = () => {\n let initial_data = {\n content: { value: '', error: '' },\n recipients: { lists: [], people: [] },\n gateway: { value: '', error: '' },\n status: { value: '', error: '' },\n list_name: { value: '', error: '' },\n recipients_numbers: 0\n }\n const classes = useStyles();\n const navigate = useNavigate();\n const dispatch = useDispatch();\n const { enqueueSnackbar } = useSnackbar();\n const [isEdit, setIsEdit] = useState(false);\n const [editData, setEditData] = useState('');\n const [files, setFiles] = useState([]);\n const [accessToken, setAccessToken] = useState('');\n const [hasNonLatinCharacter, setHasNonLatinCharacter] = useState(false);\n const [messageData, setMessageData] = useState(initial_data);\n const [chooseDateTime, setChooseDateTime] = useState(false);\n const [pickupDate, setPickupDate] = useState({ status: false, date: new Date(), time: '', error: '' });\n const [open, setOpen] = React.useState(false);\n const [successPop, setSuccessPop] = useState('');\n const anchorRef = React.useRef(null);\n let { state } = useLocation();\n\n const onTextChange = (event) => {\n messageData[event.target.name].value = event.target.value;\n messageData[event.target.name].error = '';\n setMessageData({...messageData});\n setHasNonLatinCharacter(!isUnicodeSms(event.target.value));\n }\n\n //Checks if message has any non GSM-7/Latin character\n function isUnicodeSms(message) {\n let regexp = new RegExp(\"^[A-Za-z0-9 \\\\r\\\\n@£$¥èéùìòÇØøÅå\\u0394_\\u03A6\\u0393\\u039B\\u03A9\\u03A0\\u03A8\\u03A3\\u0398\\u039EÆæßÉ!\\\"#$%&'()*+,\\\\-./:;<=>?¡ÄÖÑܧ¿äöñüà^{}\\\\\\\\\\\\[~\\\\\\u20AC]*$\");\n return regexp.test(message);;\n }\n\n const onScheduleSend = () => {\n const merge_date_time = `${dayjs(pickupDate.date).format('MM-DD-YYYY')} ${pickupDate.time}`;\n const check_date = dayjs(merge_date_time).isAfter(new Date());\n if(!dayjs(merge_date_time).isValid()){\n setPickupDate({ ...pickupDate, ...{ error: 'Invalid time' } });\n }else if(!check_date){\n setPickupDate({ ...pickupDate, ...{ error: 'Time must be after now' } });\n }else{\n onCreateMessage(\"later\", merge_date_time);\n }\n }\n\n const validateData = (type, schedule_date) => {\n if(type === \"later\" || type === \"draft\"){\n setOpen(false);\n }\n const { gateway, recipients, content } = messageData;\n if(!gateway.value){\n messageData.gateway.error = 'Please choose gateway';\n setMessageData({...messageData});\n }else if(gateway.value === 'mms' && files.length === 0){\n enqueueSnackbar('Please add image for MMS', { variant: 'error' });\n }else if(!content.value){\n messageData.content.error = 'Please enter your message';\n setMessageData({...messageData});\n }else if(content.value.length >= 1600){\n messageData.content.error = 'Message should not be more than 1600';\n setMessageData({...messageData});\n }else if(recipients.people.length === 0 && recipients.lists.length === 0){\n enqueueSnackbar('Please select list', { variant: 'error' });\n }else{\n if(type === \"now\"){\n onCreateMessage(type, schedule_date);\n }else if(type === \"later\"){\n setChooseDateTime(true);\n }else{\n onCreateMessage(type, schedule_date);\n }\n }\n }\n\n const onCreateMessage = (type, schedule_date) => {\n const { gateway, content, recipients } = messageData;\n const jsonApi = jsonApiInit(accessToken);\n \n let message_form_data = {\n gateway: gateway.value,\n content: content.value,\n status: (type === \"now\" || type === \"later\") ? 'send' : \"draft\",\n recipients,\n }\n\n if(type === \"later\"){\n // convert date to GMT and format for DB\n const offset_minutes = new Date().getTimezoneOffset();\n let schedule_at = ''\n if(offset_minutes >= 0){\n schedule_at = dayjs(schedule_date).add(offset_minutes, 'minute').format('YYYY-MM-DD HH:mm:ss');\n }else{\n schedule_at = dayjs(schedule_date).subtract(Math.abs(offset_minutes), 'minute').format('YYYY-MM-DD HH:mm:ss');\n }\n message_form_data = {...message_form_data, ...{ 'scheduled-at': schedule_at }};\n }\n\n if(gateway.value === 'mms'){\n let files_list = [];\n files.map(d => files_list.push(d.data));\n if(isEdit){\n message_form_data.files = files_list.length > 0 ? files_list : state.files;\n }else{\n message_form_data.files = files_list;\n }\n }\n if(isEdit){\n message_form_data.id = editData.id\n jsonApi.one('message', editData.id).patch(message_form_data).then((resMessage) => {\n if(message_form_data.status === 'draft'){\n setSuccessPop(`Your ${message_form_data.gateway} has been drafted to:`);\n }else{\n setSuccessPop(`Your ${message_form_data.gateway} has been scheduled to:`);\n }\n dispatch({ type: 'BALANCE_UPDATE', data: true });\n }).catch(err => handleError(err));\n }else{\n jsonApi.create('message', message_form_data).then((resMessage) => {\n if(message_form_data.status === 'draft'){\n setSuccessPop(`Your ${message_form_data.gateway} has been drafted to:`);\n }else{\n setSuccessPop(`Your ${message_form_data.gateway} has been sent successfully to:`);\n }\n dispatch({ type: 'BALANCE_UPDATE', data: true });\n }).catch((err) => handleError(err));\n }\n setChooseDateTime(false);\n setPickupDate({...pickupDate, ...{ status: false } })\n }\n\n const handleError = (err) => {\n const error_array = Object.values(err);\n enqueueSnackbar(error_array[0].detail, { variant: 'error' });\n }\n\n const onRecipientChange = (list, listPeople, noListPeople) => {\n let list_arr = [];\n let people_arr = [];\n list.map(d => list_arr.push(Number(d.id)));\n noListPeople.map(d => people_arr.push(Number(d.id)));\n messageData.recipients = { people: people_arr, lists: list_arr };\n messageData.recipients_numbers = listPeople.length;\n setMessageData({...messageData});\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n setAccessToken(access_token);\n setPickupDate({ ...pickupDate, ...{ time: dayjs(new Date()).format('hh:mm A') } });\n if(!isEdit && state){\n messageData.content.value = state.content;\n messageData.gateway.value = state.gateway;\n messageData.recipients = state.recipients;\n setIsEdit(true);\n setEditData(state);\n setMessageData({...messageData});\n }\n }else{\n navigate('/login', { replace: true }); \n }\n }, []);\n\n const tomorrow_morning = dayjs().add(1, 'day').startOf('day').add('8', 'hour');\n const tomorrow_afternoon = dayjs().add(1, 'day').startOf('day').add('13', 'hour');\n const monday_morning = dayjs().add(1, 'week').startOf('week').add(1, 'day').add(8, 'hour');\n const after_hour = dayjs().add(1, 'hour');\n\n let totalCharacters = hasNonLatinCharacter ? 70 : 160; \n const message_len = messageData.content.value.length;\n const message_count = message_len%totalCharacters === 0 ? message_len/totalCharacters : parseInt((message_len)/totalCharacters)+1;\n const uploadDivWidth = (window.innerWidth-336)/2;\n return(\n <Page className={classes.root} title={isEdit ? 'Edit Message' : 'Create Message'} >\n <Container maxWidth={false} >\n <Box mb={1}>\n <Breadcrumbs aria-label=\"breadcrumb\">\n <AppLink navigate={navigate} />\n <AppLink title=\"Message\" navigate={navigate} href=\"/app/message\" />\n <PageBreadcrumb title={isEdit ? 'Edit Message' : 'Create Message'} />\n </Breadcrumbs>\n </Box>\n <Box component=\"div\" display=\"flex\" flexDirection=\"row\" >\n <Box component=\"div\" style={{ flex: 8, maxWidth: uploadDivWidth }} >\n <Card elevation={0}>\n <CardContent>\n <Box>\n <EmitSelect \n label=\"Gateway\"\n name=\"gateway\"\n options={gateway_list}\n value={messageData.gateway.value}\n onChange={(e) => onTextChange(e)}\n error={messageData.gateway.error}\n />\n </Box>\n {\n messageData.gateway.value === 'mms' ?\n <DropPhoto allFiles={files} onFileChanges={(e) => setFiles(e)} />\n : null\n }\n <Box >\n <TextField\n error={Boolean(messageData.content.error)}\n fullWidth\n helperText={messageData.content.error}\n label=\"Full message\"\n margin=\"normal\"\n name=\"content\"\n onChange={onTextChange}\n type=\"text\"\n value={messageData.content.value}\n variant=\"outlined\"\n multiline={true}\n rows={9}\n />\n <Box display=\"flex\" justifyContent=\"flex-end\" >\n <Typography>Character: {message_len}/{totalCharacters}</Typography>\n \n <Typography>Message: {message_count}</Typography>\n </Box>\n </Box>\n <Box pt={2} >\n <Box pl={1} pb={2} pt={2} style={{ border: '1px solid #dfdfdf', borderRadius: 4, display: 'flex', flexDirection: 'row' }}>\n <Box style={{ flex: 10, display: 'flex', alignContent: 'flex-end' }}>\n <Typography style={{ fontSize: 20 }} >Number of recepients: </Typography>\n </Box>\n <Box pr={2} >\n <Typography style={{ fontSize: 20 }} >{messageData.recipients_numbers}</Typography>\n </Box>\n </Box>\n </Box>\n <GroupSendButton \n open={open} \n anchorRef={anchorRef} \n validateData={(e) => validateData(e)}\n handleToggle={() => setOpen((prevOpen) => !prevOpen)}\n />\n </CardContent>\n </Card>\n </Box>\n <Box p={2} ></Box>\n <Box component=\"div\" style={{ flex: 8 }} >\n <Recipients \n accessToken={accessToken} \n onPeopleSelectedChange={(list, listPeople, noListPeople) => onRecipientChange(list, listPeople, noListPeople) }\n recipients={state ? state.recipients : null}\n isEdit={state ? true : false}\n enqueueSnackbar={enqueueSnackbar}\n />\n </Box>\n </Box>\n </Container>\n {/* Dialog for select pre determined time and date */}\n <ChooseDateDialog \n status={chooseDateTime}\n onClose={() => { setChooseDateTime(false) }}\n onPickDateTime={() => { \n setChooseDateTime(false); \n setPickupDate({ ...pickupDate, ...{ status: true } });\n }}\n onClickDate={() => onCreateMessage(\"later\", after_hour) }\n after_hour={after_hour}\n tomorrow_morning={tomorrow_morning}\n tomorrow_afternoon={tomorrow_afternoon}\n monday_morning={monday_morning}\n classes={classes}\n />\n {/* Dialog to pick your own time and date */}\n <PickDateTimeDialog \n status={pickupDate.status}\n onClose={() => { setPickupDate({...pickupDate, ...{ status: false } }) }}\n onScheduleSend={onScheduleSend}\n timeError={pickupDate.error}\n onDateChange={((e) => setPickupDate({...pickupDate, ...{ date: new Date(e) } }) )}\n selectedDate={pickupDate.date}\n selectedTime={pickupDate.time}\n onTimeChange={(e) => \n setPickupDate({...pickupDate, ...{ time: e.target.value, error: '' } }) \n }\n />\n {/* Dialog to show message sent successfully */}\n <MessageSentDialog \n status={Boolean(successPop)}\n onClose={() => navigate('/app/message')}\n onGoBack={() => navigate('/app/message')}\n totalPeople={messageData.recipients_numbers}\n title={successPop}\n />\n </Page>\n )\n}\n\nexport default MessageList;","import React, { useState } from 'react';\nimport { Box, Grid, Breadcrumbs, Card, Collapse, Paper } from '@material-ui/core';\n\nimport { AppLink, ListingInput, FilterSelect, FilterButton, PageBreadcrumb } from '../../../components/AllComponent';\nimport { message_log_status_list } from 'src/utils/SelectOptions';\n\nconst LogToolbar = ({ onSearchPhone, navigate, onStatusChange, selectedStatus }) => {\n const [showFilter, setShowFilter] = useState(false);\n\n return(\n <Box display=\"flex\" justifyContent=\"center\" >\n <Grid item xs={12} >\n <Box mb={1}>\n <Breadcrumbs aria-label=\"breadcrumb\">\n <AppLink navigate={navigate} />\n <AppLink title=\"Message\" navigate={navigate} href=\"/app/message\" />\n <PageBreadcrumb title=\"View Message\" />\n </Breadcrumbs>\n </Box>\n <Card elevation={0} >\n <Box component=\"div\" display=\"flex\" pl={2} pt={2} pr={2} pb={1} >\n <Box component=\"div\" style={{ flex: 8 }} >\n <Collapse in={!showFilter}>\n <Paper elevation={0} >\n <ListingInput \n placeholderText=\"Search by phone number\"\n inputHeight={48}\n onTextChange={(text) => onSearchPhone(text)}\n />\n </Paper>\n </Collapse>\n <Collapse in={showFilter}>\n <Paper elevation={0} >\n <FilterSelect \n lists={message_log_status_list}\n onListChange={e => onStatusChange(e)}\n widthSelect={200}\n placeholder=\"Filter by status\" \n />\n </Paper>\n </Collapse>\n </Box>\n <Box component=\"div\" style={{ display: 'flex', flex: 10, justifyContent: 'flex-end' }}>\n <FilterButton onClick={() => setShowFilter(!showFilter)} tooltip=\"View Filter\" />\n </Box>\n </Box>\n </Card>\n </Grid>\n </Box>\n )\n}\n\nexport default LogToolbar;","import React, { useState, useEffect } from 'react';\nimport {\n Grid,\n makeStyles,\n Container,\n Card,\n CardContent,\n Table,\n TableHead,\n TableBody,\n TableRow,\n TableCell,\n TablePagination,\n TableSortLabel,\n Chip\n} from '@material-ui/core';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport dayjs from 'dayjs';\n\nimport Page from 'src/components/Page';\nimport { validateLogin } from 'src/utils/EmitValidation';\nimport { jsonApiInit } from 'src/utils/jsonApiConfig';\nimport LogToolbar from './LogToolbar';\nimport { status_color, bg_color } from 'src/utils/SelectOptions';\nimport api from 'src/utils/api';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.light,\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3),\n display: 'flex',\n },\n tableDiv: {\n backgroundColor: 'white',\n }\n}));\n\nconst ViewMessage = () => {\n const classes = useStyles();\n let { state } = useLocation();\n const navigate = useNavigate();\n const [messageLog, setMessageLog] = useState([]);\n const [messageId, setMessageId] = useState('');\n const [accessToken, setAccessToken] = useState('');\n const [selectedStatus, setSelectedStatus] = useState('');\n const [pagination, setPagination] = useState({ size: 10, number: 0, total: 100 });\n const [sorting, setSorting] = useState({ sort: '', 'created-at': 'asc', 'updated-at': 'asc' });\n const [costData, setCostData] = useState('');\n const [messageData, setMessageData] = useState('');\n\n const loadMessageData = (access_token, query) => {\n const jsonApi = jsonApiInit(access_token);\n jsonApi.findAll('outbound-messages', query).then(resLog => {\n const { data, error, meta } = resLog;\n if(!error){\n setMessageLog(data);\n setPagination({ ...pagination, total: meta ? meta.page.total : data.length });\n }\n })\n }\n\n const loadMessageLog = (access_token, size, number) => {\n const { message_id, id } = state;\n const initialQuery = { filter: { message_id: message_id ? message_id : id }, page: { size, number: number+1 } };\n loadMessageData(access_token, initialQuery);\n }\n\n const handlePagination = (e, type) => {\n if(type === 'limit'){\n pagination.size = e.target.value;\n setPagination({...pagination});\n loadMessageLog(accessToken, e.target.value, pagination.number);\n }else{\n pagination.number = e;\n setPagination({...pagination});\n loadMessageLog(accessToken, pagination.size, e);\n }\n }\n\n const onStatusChange = (e) => {\n if(e){\n const filterQuery = { filter: { status: e.value, message_id: messageId } };\n loadMessageData(accessToken, filterQuery);\n }else{\n loadMessageLog(accessToken, pagination.size, pagination.number);\n }\n setSelectedStatus(e);\n }\n\n const onSearchPhone = (e) => {\n const searchQuery = { filter: { to: e, message_id: messageId } };\n loadMessageData(accessToken, searchQuery);\n }\n\n const sortLog = (sortType, sortName) => {\n const { size, number } = pagination;\n let sortQuery = { sort: sortType === 'asc' ? `${sortName}` : `-${sortName}` };\n sortQuery.page = { size, number: number+1 };\n sorting[sortName] = sortType === 'asc' ? 'desc' : 'asc';\n sorting.sort = sortType === 'asc' ? `${sortName}` : `-${sortName}`;\n setSorting({ ...sorting });\n loadMessageData(accessToken, sortQuery);\n }\n\n const loadConfigData = async (access_token) => {\n const { messaging } = await api.get('/configs', access_token);\n setCostData(messaging);\n }\n\n const loadMessageGateway = (access_token, msg_id) => {\n const jsonApi = jsonApiInit(access_token);\n jsonApi.find('message', msg_id).then(res => {\n const { data } = res;\n setMessageData(data);\n })\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n if(state.message_id){\n setMessageId(state.message_id);\n loadMessageGateway(access_token, state.message_id);\n }else{\n setMessageId(state.id);\n setMessageData(state)\n }\n setAccessToken(access_token);\n loadMessageLog(access_token, 10, 0);\n loadConfigData(access_token);\n }else{\n navigate('/login', { replace: true });\n }\n }, [])\n\n return(\n <Page className={classes.root} title=\"View Message\" >\n <Container maxWidth={false} >\n <Grid item xs={12} >\n <LogToolbar \n onSearchPhone={(e) => onSearchPhone(e)}\n onStatusChange={(e) => onStatusChange(e)}\n selectedStatus={selectedStatus}\n navigate={navigate}\n />\n <Card elevation={0} >\n <CardContent>\n <Table >\n <TableHead>\n <TableRow>\n <TableCell width=\"140\" >To</TableCell>\n <TableCell >Message Sid</TableCell>\n \n <TableCell width=\"180\" align=\"center\" >\n <TableSortLabel \n active={true} \n direction={sorting['created-at']} \n onClick={() => sortLog(sorting['created-at'], 'created-at')} \n >\n Created\n </TableSortLabel>\n </TableCell>\n <TableCell width=\"180\" align=\"center\" >\n <TableSortLabel \n active={true} \n direction={sorting['updated-at']} \n onClick={() => sortLog(sorting['updated-at'], 'updated-at')} \n >\n Updated\n </TableSortLabel>\n </TableCell>\n <TableCell width=\"120\" align=\"center\" >Status</TableCell>\n <TableCell align=\"right\" >Cost</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {\n messageLog.map((d, i) => {\n return(\n <TableRow hover key={i}>\n <TableCell width=\"140\" >{d.to}</TableCell>\n <TableCell>{d.message_sid}</TableCell>\n <TableCell align=\"center\" >{dayjs(d.createdAt).format('DD MMM YYYY hh:mm A')}</TableCell>\n <TableCell align=\"center\" >{dayjs(d.createdAt).format('DD MMM YYYY hh:mm A')}</TableCell>\n <TableCell align=\"center\" >\n <Chip \n style={{ color: status_color[d.status], backgroundColor: bg_color[d.status] }} \n color=\"primary\" \n label={d.status} \n size=\"small\" \n />\n </TableCell>\n <TableCell align=\"right\" >${(costData && messageData) ? costData.costs[messageData.gateway] : ''}</TableCell>\n </TableRow>\n )\n })\n }\n </TableBody>\n </Table>\n <TablePagination\n component=\"div\"\n count={pagination.total}\n onChangePage={(e, p) => handlePagination(p, 'page')}\n onChangeRowsPerPage={(e) => handlePagination(e, 'limit')}\n page={pagination.number}\n rowsPerPage={pagination.size}\n rowsPerPageOptions={[10, 25, 50]}\n />\n </CardContent>\n </Card>\n </Grid>\n </Container>\n </Page>\n )\n}\n\nexport default ViewMessage;","import React, { useEffect, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { \n Box, \n makeStyles, \n Container,\n Breadcrumbs,\n Grid,\n Card,\n Table,\n TableBody,\n TableHead,\n TableRow,\n TableCell,\n TablePagination,\n TableSortLabel,\n Tooltip,\n IconButton,\n CircularProgress\n} from '@material-ui/core';\nimport dayjs from 'dayjs';\nimport { useCardBrand, images } from 'react-card-brand';\nimport DescriptionIcon from '@material-ui/icons/Description';\n\nimport Page from '../../components/Page';\nimport { jsonApiInit } from '../../utils/jsonApiConfig';\nimport { validateLogin } from 'src/utils/EmitValidation';\nimport { AppLink, ListingInput, PageBreadcrumb } from 'src/components/AllComponent';\n\nconst currencyList = {\n 'usd': '$'\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.light,\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3)\n }\n}));\n\nconst Invoice = () => {\n const classes = useStyles();\n const navigate = useNavigate();\n const [accessToken, setAccessToken] = useState('');\n const [invoiceList, setInvoiceList] = useState([]);\n const [pagination, setPagination] = useState({ size: 10, number: 0, total: 100 });\n const [sorting, setSorting] = useState({ sort: '', 'created-at': 'asc', amount: 'asc' });\n const [loading, setLoading] = useState(false);\n const { getSvgProps } = useCardBrand();\n\n const handlePagination = (e, type) => {\n if(type === 'limit'){\n pagination.size = e.target.value;\n loadInvoices(accessToken, e.target.value, pagination.number);\n setPagination({...pagination});\n }else{\n pagination.number = e;\n loadInvoices(accessToken, pagination.size, e);\n setPagination({...pagination});\n }\n }\n\n const loadInvoicesData = (access_token, query) => {\n setLoading(true);\n const jsonApi = jsonApiInit(access_token);\n jsonApi.findAll('invoice', query).then((resInvoice) => {\n const { data, error, meta } = resInvoice;\n if(!error){\n setInvoiceList([...data]);\n setLoading(false);\n setPagination({...pagination, ...{ total: meta ? meta.page.total : data.length }});\n }\n })\n }\n\n const loadInvoices = (access_token, size, number) => {\n let initialQuery = { page: { size, number: number+1 } };\n initialQuery.sort = sorting.sort ? sorting.sort : \"-id\";\n loadInvoicesData(access_token, initialQuery);\n }\n\n const sortInvoice = (sortType, sortName) => {\n const { size, number } = pagination;\n const sortQuery = { page: { size, number: number+1 }, sort: sortType === 'asc' ? `${sortName}` : `-${sortName}` };\n sorting[sortName] = sortType === 'asc' ? 'desc' : 'asc';\n sorting.sort = sortType === 'asc' ? `${sortName}` : `-${sortName}`;\n setSorting({ ...sorting });\n loadInvoicesData(accessToken, sortQuery);\n }\n\n const onSearchInvoice = (e) => {\n const searchQuery = { filter: { \"receipt-id\": `${e}` } };\n loadInvoicesData(accessToken, searchQuery);\n }\n\n const onDonwloadInvoice = (d) => {\n fetch(`${process.env.REACT_APP_APP_API_URL}/invoices/${d.id}/download`, {\n method: 'GET',\n headers: new Headers({\n \"Authorization\": \"Bearer \" + accessToken\n })\n })\n .then(response => response.blob())\n .then(blob => {\n const file = window.URL.createObjectURL(blob);\n window.open(file); \n });\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n setAccessToken(access_token);\n loadInvoices(access_token, 10, 0);\n }else{\n navigate('/login', { replace: true }); \n }\n }, []);\n return(\n <Page className={classes.root} title=\"Invoices\">\n <Container maxWidth={false} >\n <Box mb={1}>\n <Breadcrumbs aria-label=\"breadcrumb\">\n <AppLink navigate={navigate} />\n <PageBreadcrumb title=\"Invoices\" />\n </Breadcrumbs>\n </Box>\n <Grid>\n <Card elevation={0} >\n <Box component=\"div\" display=\"flex\" pl={2} pt={2} pr={2} pb={1} >\n <Box style={{ flex: 6 }} >\n <ListingInput \n placeholderText=\"Search by receipt number ...1120201216091705\"\n inputHeight={48}\n onTextChange={(e) => onSearchInvoice(e)}\n />\n </Box>\n <Box style={{ flex: 7 }} ></Box>\n </Box>\n <Table>\n <TableHead>\n <TableRow>\n <TableCell width=\"140\" align=\"left\" >\n <TableSortLabel \n active={true} \n direction={sorting['created-at']} \n onClick={() => sortInvoice(sorting['created-at'], 'created-at')} \n >\n Date\n </TableSortLabel>\n </TableCell>\n <TableCell width=\"180\" >Receipt No</TableCell>\n <TableCell >Description</TableCell>\n <TableCell width=\"120\" align=\"center\" >Card</TableCell>\n <TableCell width=\"120\" align=\"right\" padding=\"none\" >\n <TableSortLabel \n active={true} \n direction={sorting.amount} \n onClick={() => sortInvoice(sorting.amount, 'amount')} \n >\n Amount\n </TableSortLabel>\n </TableCell>\n <TableCell align=\"right\" width=\"100\" >Action</TableCell>\n </TableRow>\n </TableHead>\n {\n loading ?\n <TableHead>\n <TableRow>\n <TableCell></TableCell>\n <TableCell></TableCell>\n <TableCell style={{ paddingLeft: 64 }} align=\"center\">\n <CircularProgress />\n </TableCell>\n <TableCell></TableCell>\n <TableCell></TableCell>\n <TableCell></TableCell>\n </TableRow>\n </TableHead>\n : null\n }\n <TableBody>\n {\n invoiceList.map((d, i) => {\n return(\n <TableRow hover key={i} >\n <TableCell align=\"left\" >{dayjs(d.createdAt).format('D MMM YYYY')}</TableCell>\n <TableCell>{d.receiptId}</TableCell>\n <TableCell>{d.description}</TableCell>\n <TableCell padding=\"none\" width=\"120\" align=\"center\" >\n <svg fontSize=\"24\" {...getSvgProps({ type: d.cardBrand, images })} />\n </TableCell>\n <TableCell padding=\"none\" align=\"right\" >\n <Box style={{ fontSize: 18, fontFamily: 'Roboto', fontWeight: '500' }}>{currencyList[d.currency]}{(d.amount/100).toFixed(2)}</Box>\n </TableCell>\n <TableCell padding=\"none\" style={{ paddingRight: 8 }} align=\"right\" width=\"100\">\n <Tooltip title={d.type === \"debit\" ? \"View message\" : \"View invoice\"} >\n <IconButton onClick={() => onDonwloadInvoice(d)} style={{ color: '#7465f2' }} >\n <DescriptionIcon />\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n )\n })\n }\n </TableBody>\n </Table>\n <TablePagination\n component=\"div\"\n count={pagination.total}\n onChangePage={(e, p) => handlePagination(p, 'page')}\n onChangeRowsPerPage={(e) => handlePagination(e, 'limit')}\n page={pagination.number}\n rowsPerPage={pagination.size}\n rowsPerPageOptions={[5, 10]}\n />\n </Card>\n </Grid>\n </Container>\n </Page>\n )\n}\n\nexport default Invoice;","import React, { useEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { \n Box, \n makeStyles, \n Container,\n Breadcrumbs,\n Typography,\n Grid,\n Card\n} from '@material-ui/core';\nimport Page from '../../components/Page';\nimport { AppLink, PageBreadcrumb } from 'src/components/AllComponent';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.light,\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3)\n }\n}));\n\nconst ViewInvoice = () => {\n const classes = useStyles();\n const navigate = useNavigate();\n\n useEffect(() => {\n \n }, [])\n return(\n <Page className={classes.root} title=\"View Invoice\">\n <Container maxWidth={false} >\n <Box mb={1}>\n <Breadcrumbs aria-label=\"breadcrumb\">\n <AppLink navigate={navigate} />\n <AppLink title=\"Invoice\" navigate={navigate} href=\"/app/invoice\" />\n <PageBreadcrumb title=\"View Invoice\" />\n </Breadcrumbs>\n </Box>\n <Grid>\n <Card elevation={3} >\n <Typography>ss</Typography>\n </Card>\n </Grid>\n </Container>\n </Page>\n )\n}\n\nexport default ViewInvoice;","import React, { useState } from 'react';\nimport { Box, Grid, Breadcrumbs, Card, Collapse, Paper } from '@material-ui/core';\n\nimport { transaction_type_list } from '../../utils/SelectOptions';\nimport { AppLink, FilterSelect, PlusButton, DownloadReportButton, FilterButton, PageBreadcrumb } from 'src/components/AllComponent';\n\nconst WalletToolbar = ({ selected, onDownloadSOA, onAddDeposit, onSelectedChange, navigate }) => {\n const [showFilter, setShowFilter] = useState(true);\n\n return(\n <Box display=\"flex\" justifyContent=\"center\" >\n <Grid item xs={12} >\n <Box mb={1}>\n <Breadcrumbs aria-label=\"breadcrumb\">\n <AppLink navigate={navigate} />\n <PageBreadcrumb title=\"Wallet\" />\n </Breadcrumbs>\n </Box>\n <Card elevation={0} >\n <Box component=\"div\" display=\"flex\" pl={2} pt={2} pr={2} pb={1} >\n <Box component=\"div\" style={{ flex: 8 }} >\n <Collapse in={showFilter}>\n <Paper elevation={0} >\n <FilterSelect \n lists={transaction_type_list}\n onListChange={e => onSelectedChange(e)}\n widthSelect={260}\n placeholder=\"Filter by transation type\" \n />\n </Paper>\n </Collapse>\n </Box>\n <Box component=\"div\" style={{ display: 'flex', flex: 10, justifyContent: 'flex-end' }}>\n <Box pr={2}>\n <DownloadReportButton onClick={onDownloadSOA} tooltip=\"Create Report\" />\n </Box>\n <Box pr={2} >\n <FilterButton onClick={() => setShowFilter(!showFilter)} tooltip=\"View filter\" />\n </Box>\n <Box>\n <PlusButton onClick={onAddDeposit} tooltip=\"Create Deposit\" />\n </Box>\n </Box>\n </Box>\n </Card>\n </Grid>\n </Box>\n )\n}\n\nexport default WalletToolbar;","import React, { useEffect, useState } from 'react';\nimport {\n Box,\n Card,\n Grid,\n Button,\n makeStyles,\n Container,\n Typography,\n IconButton,\n Table,\n TableHead,\n TableRow,\n TableCell,\n TableBody,\n TablePagination,\n TableSortLabel,\n Dialog,\n colors,\n Tooltip,\n CircularProgress\n} from '@material-ui/core';\nimport { useNavigate } from 'react-router-dom';\nimport dayjs from 'dayjs';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport Calendar from 'react-calendar';\nimport MessageIcon from '@material-ui/icons/Message';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport { useSnackbar } from 'notistack';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport { jsonApiInit } from '../../utils/jsonApiConfig'\nimport { validateLogin } from '../../utils/EmitValidation';\nimport { PopupHeader} from '../../components/AllComponent';\nimport Page from 'src/components/Page';\nimport { currencyList } from '../../utils/SelectOptions';\nimport MakeDeposit from '../settings/MakeDeposit';\nimport WalletToolbar from './WalletToolbar';\n\nString.prototype.capitalize = function() {\n return this.charAt(0).toUpperCase() + this.slice(1);\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.light,\n minHeight: '100%',\n paddingBottom: theme.spacing(3),\n paddingTop: theme.spacing(3),\n display: 'flex',\n }\n}));\n\nconst Wallet = () => {\n const classes = useStyles();\n const navigate = useNavigate();\n const [accessToken, setAccessToken] = useState('');\n const [transaction, setTransaction] = useState([]);\n const [addDeposit, setAddDeposit] = useState(false);\n const [downloadSOA, setDownloadSOA] = useState(false);\n const [reportDates, setReportDates] = useState({ start: '', end: '' });\n const { enqueueSnackbar } = useSnackbar();\n const [pagination, setPagination] = useState({ size: 10, number: 0, total: 100 });\n const [sorting, setSorting] = useState({ sort: '', 'created-at': 'asc' });\n const [selected, setSelected] = useState('');\n const [loading, setLoading] = useState(false);\n\n const loadTransactionData = (access_token, query) => {\n setLoading(true);\n const jsonApi = jsonApiInit(access_token);\n jsonApi.findAll('transaction', query).then(resTrans => {\n const { data, error, meta } = resTrans;\n if(!error){\n setTransaction(data);\n setPagination({ ...pagination, ...{ total: meta ? meta.page.total : data.length } });\n setLoading(false);\n }\n })\n }\n\n const loadTransaction = (access_token) => {\n const initialQuery = { sort: '-id', page: { size: pagination.size, number: pagination.number } };\n loadTransactionData(access_token, initialQuery);\n }\n\n const handlePagination = (e, type) => {\n if(type === 'limit'){\n pagination.size = e.target.value;\n setPagination({...pagination});\n const filterQuery = { sort: '-id', page: { size: e.target.value, number: pagination.number } }\n loadTransactionData(accessToken, filterQuery);\n }else{\n pagination.number = e;\n setPagination({...pagination});\n const filterQuery = { sort: '-id', page: { size: pagination.size, number: e+1 } }\n loadTransactionData(accessToken, filterQuery);\n }\n }\n\n const onDonwloadInvoice = (d) => {\n fetch(`${process.env.REACT_APP_APP_API_URL}/invoices/${d.id}/download`, {\n method: 'GET',\n headers: new Headers({\n \"Authorization\": \"Bearer \" + accessToken\n })\n })\n .then(response => response.blob())\n .then(blob => {\n const file = window.URL.createObjectURL(blob);\n window.open(file); \n });\n }\n\n const onDownloadSOA = (start, end) => {\n if(reportDates.start === '' || reportDates.end === '') return enqueueSnackbar('Please select a date range in the calendar', { variant: 'error' });\n\n let startDate = dayjs(start).format('DD-MM-YYYY');\n let endDate = dayjs(end).format('DD-MM-YYYY');\n let query = \"?date_from=\"+startDate+\"&date_to=\"+endDate;\n fetch(`${process.env.REACT_APP_APP_API_URL}/transactions/generate-report`+query, {\n method: 'GET',\n headers: new Headers({\n \"Authorization\": \"Bearer \" + accessToken\n })\n })\n .then(response => response.blob())\n .then(blob => {\n const file = window.URL.createObjectURL(blob);\n window.open(file); \n });\n }\n\n const onActionClick = (data) => {\n const { transactionType, message_id } = data;\n if(transactionType === 'debit' && message_id){\n navigate('/app/viewmessage', { state: data });\n }else{\n onDonwloadInvoice(data)\n }\n }\n\n const sortTransaction = (sortType, sortName) => {\n const { size, number } = pagination;\n let sortQuery = { sort: sortType === 'asc' ? `${sortName}` : `-${sortName}` };\n sortQuery.page = { size, number: number+1 };\n sorting[sortName] = sortType === 'asc' ? 'desc' : 'asc';\n sorting.sort = sortType === 'asc' ? `${sortName}` : `-${sortName}`;\n setSorting({ ...sorting });\n loadTransactionData(accessToken, sortQuery);\n }\n\n const onTransactionChange = (e) => {\n if(e){\n const filterQuery = { filter: { 'transaction-type': e.value } };\n loadTransactionData(accessToken, filterQuery);\n }else{\n loadTransactionData(accessToken, pagination.size, pagination.number);\n }\n setSelected(e);\n }\n\n useEffect(() => {\n const access_token = validateLogin();\n if(access_token){\n setAccessToken(access_token);\n loadTransaction(access_token);\n }else{\n navigate('/login', { replace: true })\n }\n },[]);\n\n return(\n <Page className={classes.root} title=\"Wallet\" >\n <Container maxWidth={false} >\n <Grid item xs={12} >\n <WalletToolbar \n onDownloadSOA={() => setDownloadSOA(true)}\n onAddDeposit={() => setAddDeposit(true)}\n onSelectedChange={(e) => onTransactionChange(e)}\n selected={selected}\n navigate={navigate}\n />\n <Card elevation={0}>\n <Table>\n <TableHead>\n <TableRow>\n <TableCell padding=\"none\" width=\"120\" style={{ paddingLeft: 16 }}>\n <TableSortLabel \n active={true} \n direction={sorting['created-at']} \n onClick={() => sortTransaction(sorting['created-at'], 'created-at')} \n >\n Date\n </TableSortLabel>\n </TableCell>\n <TableCell >Description</TableCell>\n <TableCell width=\"120\" >Type</TableCell>\n <TableCell width=\"100\" align=\"right\" >Amount</TableCell>\n <TableCell width=\"100\" align=\"center\" >Action</TableCell>\n </TableRow>\n </TableHead>\n {\n loading ? \n <TableHead>\n <TableRow>\n <TableCell></TableCell>\n <TableCell style={{ paddingLeft: 200 }} align=\"center\" >\n <CircularProgress />\n </TableCell>\n <TableCell></TableCell>\n <TableCell></TableCell>\n <TableCell></TableCell>\n </TableRow>\n </TableHead>\n : !transaction[0] ?\n <TableBody>\n <TableRow>\n <TableCell colSpan={12}>\n <Box component=\"div\" style={{ display: 'flex', flex: 10, justifyContent: 'center' }} pt={2} pl={2}>\n <Alert severity=\"info\" onClick={() => setAddDeposit(true)} style={{ cursor:'pointer' }}>\n <AlertTitle>There are no transactions yet. Make your first deposit</AlertTitle>\n </Alert>\n </Box>\n </TableCell>\n </TableRow>\n </TableBody>\n :\n null\n }\n <TableBody>\n {\n transaction.map((d, i) => {\n return(\n <TableRow hover key={i} style={{ cursor: 'pointer' }} >\n <TableCell>{dayjs(d.createdAt).format('DD MMM YYYY')}</TableCell>\n <TableCell>\n <Typography>{d.transactionType === \"debit\" ? \"Payment\" : \"Wallet fill up\"}</Typography>\n </TableCell>\n <TableCell>\n <Typography style={{ fontSize: 16 }} >{d.transactionType.capitalize()}</Typography>\n </TableCell>\n <TableCell align=\"right\" >\n <Typography \n style={{ \n color: d.transactionType === \"debit\" ? colors.red[500] : colors.green[500],\n fontSize: 16,\n fontWeight: '500'\n }}\n >\n {currencyList.usd}{(d.amount/100).toFixed(2)}\n </Typography>\n </TableCell>\n <TableCell padding=\"none\" align=\"center\" >\n <Tooltip title={d.transactionType === \"debit\" ? \"View message\" : \"View invoice\"} >\n <IconButton onClick={() => onActionClick(d)} style={{ color: '#7465f2' }} >\n { d.transactionType === \"debit\" ? <MessageIcon /> : <DescriptionIcon /> }\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n )\n })\n }\n </TableBody>\n </Table>\n <TablePagination\n component=\"div\"\n count={pagination.total}\n onChangePage={(e, p) => handlePagination(p, 'page')}\n onChangeRowsPerPage={(e) => handlePagination(e, 'limit')}\n page={pagination.number}\n rowsPerPage={pagination.size}\n rowsPerPageOptions={[10, 25, 50]}\n />\n </Card>\n </Grid>\n </Container>\n <Dialog open={addDeposit} onClose={() => setAddDeposit(false)} >\n <Box p={4} component=\"div\" style={{ width: 500 }} >\n <PopupHeader title=\"Add deposit\" onClose={() => setAddDeposit(false)} />\n <MakeDeposit \n accessToken={accessToken} \n onClose={() => setAddDeposit(false)} \n onMakeDeposit={(status, data) => {\n if(status){\n loadTransaction(accessToken)\n }\n }}\n />\n </Box>\n </Dialog>\n <Dialog open={downloadSOA} onClose={() => setDownloadSOA(false)} >\n <Box p={4} component=\"div\" style={{ width: 500 }} >\n <PopupHeader title=\"Select range of report\" onClose={() => setDownloadSOA(false)} />\n <Box display=\"flex\" flexDirection=\"row\" justifyContent=\"center\">\n <Calendar\n onChange={((e) => {console.log(e);setReportDates({ start: new Date(e[0]), end: new Date(e[1]) })} )}\n selectRange={true}\n maxDate={new Date()}\n next2Label={null}\n prev2Label={null}\n />\n </Box>\n <Box pt={4} display=\"flex\" flexDirection=\"row\" justifyContent=\"center\">\n <Tooltip title=\"Download report\" >\n <Button size=\"medium\" startIcon={<CloudDownloadIcon />} variant={'outlined'} onClick={() => onDownloadSOA(reportDates.start,reportDates.end)} color={\"#7465f2\"} >\n <Typography>Download</Typography> \n </Button>\n </Tooltip>\n </Box>\n </Box>\n </Dialog>\n </Page>\n )\n}\n\nexport default Wallet;","import React from 'react';\nimport { Navigate } from 'react-router-dom';\nimport DashboardLayout from 'src/layouts/DashboardLayout';\nimport MainLayout from 'src/layouts/MainLayout';\nimport PeopleList from 'src/views/people/PeopleList';\nimport DashboardView from 'src/views/dashboard';\nimport LoginView from 'src/views/auth/LoginView';\nimport SuccessEmailVerified from 'src/views/auth/SuccessEmailVerified';\nimport NewEmailVerified from 'src/views/settings/NewEmailVerified';\nimport NotFoundView from 'src/views/errors/NotFoundView';\nimport RegisterView from 'src/views/auth/RegisterView';\nimport Settings from 'src/views/settings';\nimport ForgotPassword from 'src/views/auth/ForgotPassword';\nimport ResetPassword from 'src/views/auth/ResetPassword';\nimport AddPeople from 'src/views/people/AddPeople/index';\nimport VirtualPhone from 'src/views/VirtualPhone';\nimport Listing from 'src/views/listing';\nimport ManageListing from 'src/views/listing/ManageListing';\nimport MessageList from 'src/views/message/list/MessageList';\nimport CreateMessage from 'src/views/message/create/CreateMessage';\nimport ViewMessage from 'src/views/message/view/ViewMessage';\nimport Invoice from 'src/views/Invoice/';\nimport ViewInvoice from 'src/views/Invoice/ViewInvoice';\nimport Wallet from 'src/views/wallet/Wallet';\n\nconst routes = [\n {\n path: 'app',\n element: <DashboardLayout />,\n children: [\n { path: 'people', element: <PeopleList /> },\n { path: 'managepeople', element: <AddPeople /> },\n { path: 'phones', element: <VirtualPhone /> },\n { path: 'listing', element: <Listing /> },\n { path: 'managelisting', element: <ManageListing /> },\n { path: 'message', element: <MessageList /> },\n { path: 'createmessage', element: <CreateMessage /> },\n { path: 'viewmessage', element: <ViewMessage /> },\n { path: 'dashboard', element: <DashboardView /> },\n { path: 'invoice', element: <Invoice /> },\n { path: 'viewinvoice', element: <ViewInvoice /> },\n { path: 'settings', element: <Settings /> },\n { path: 'wallet', element: <Wallet /> },\n { path: '*', element: <Navigate to=\"/404\" /> }\n ]\n },\n {\n path: '/',\n element: <MainLayout />,\n children: [\n { path: 'login', element: <LoginView /> },\n { path: 'register', element: <RegisterView /> },\n { path: 'forgot-password', element: <ForgotPassword /> },\n { path: 'password/reset', element: <ResetPassword /> },\n { path: 'account/verify', element: <SuccessEmailVerified /> },\n { path: 'account/verifyModifiedEmail', element: <NewEmailVerified /> },\n { path: '404', element: <NotFoundView /> },\n { path: '/', element: <Navigate to=\"/login\" /> },\n { path: '*', element: <Navigate to=\"/404\" /> }\n ]\n }\n];\n\nexport default routes;\n","import { combineReducers } from 'redux';\n\nconst people_initial_data = { people_data: '' };\nconst balance_initial_data = { toBeUpdated: false };\n\nfunction peopleReducer(state = people_initial_data, action) {\n switch (action.type) {\n case 'PEOPLE_DETAILS':\n return { ...state, people_data: action.data };\n default:\n return state;\n }\n}\n\nfunction balanceReducer(state = balance_initial_data, action) {\n switch (action.type) {\n case 'BALANCE_UPDATE':\n return { ...state, toBeUpdated: action.data };\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n people: peopleReducer,\n balance: balanceReducer\n});","import 'react-perfect-scrollbar/dist/css/styles.css';\nimport React from 'react';\nimport { useRoutes } from 'react-router-dom';\nimport { ThemeProvider } from '@material-ui/core';\nimport { Provider } from 'react-redux';\nimport { createStore } from 'redux'\nimport { SnackbarProvider } from 'notistack';\n\nimport GlobalStyles from 'src/components/GlobalStyles';\nimport theme from 'src/theme';\nimport routes from 'src/routes';\nimport reducer from './reducer';\nimport {GoogleReCaptchaProvider} from \"react-google-recaptcha-v3\";\n\nconst App = () => {\n const routing = useRoutes(routes);\n const store = createStore(reducer);\n return (\n <Provider store={store}>\n <SnackbarProvider maxSnack={5}>\n <ThemeProvider theme={theme}>\n <GoogleReCaptchaProvider reCaptchaKey={process.env.REACT_APP_RECAPTCHA_KEY}>\n <GlobalStyles />\n {routing}\n </GoogleReCaptchaProvider>\n </ThemeProvider>\n </SnackbarProvider>\n </Provider>\n );\n};\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter } from 'react-router-dom';\nimport * as serviceWorker from './serviceWorker';\nimport App from './App';\n\nReactDOM.render((\n <BrowserRouter>\n <App />\n </BrowserRouter>\n), document.getElementById('root'));\n\nserviceWorker.unregister();\n"],"sourceRoot":""}