HEX
HEX
Server: Apache/2.4.29 (Ubuntu)
System: Linux 2amigos-php74 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64
User: squarehillcompany.com (1002)
PHP: 7.4.25
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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                &nbsp;  &nbsp;{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>&nbsp;&nbsp;Send later&nbsp;&nbsp;</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&apos;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\" >&nbsp;{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                                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\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":""}