{"version":3,"sources":["dialogs/dialogLoading.js","stateService.js","viewportService.js","constants.js","components/buttonPositive.js","components/buttonNegative.js","services/dialogService.js","apiService.js","components/buttonEdit.js","components/buttonDelete.js","components/clients/clientListing.js","components/buttonNeutral.js","components/fieldCheckboxWithLabel.js","components/fieldText.js","components/clients/clientUsers/clientUserListing.js","components/clients/clientUsers/clientUserAddEdit.js","components/clients/clientUsers/clientUsers.js","components/clients/clientAddEdit.js","components/clients/clients.js","components/users/userListing.js","components/users/userAddEdit.js","components/users/users.js","components/obituaries/obituaryListing.js","components/fieldTextArea.js","components/fieldAutocomplete.js","components/fieldDateTime.js","components/obituaries/obituaryAddEdit.js","components/fieldAutocompleteNonForm.js","components/obituaries/obituaryGridView.js","components/obituaries/obituaries.js","pages/administration.js","pages/index.js","pages/login.js","pages/forgot-password.js","pages/reset-password.js","pages/client.js","App.js","theme.js","index.js"],"names":["DialogLoading","props","theme","useTheme","fullScreen","useMediaQuery","breakpoints","down","Dialog","open","DialogContent","CircularProgress","StateContext","createContext","loading","access","token","update","StateProvider","key","value","callback","setState","state","Provider","this","children","React","Component","ViewportContext","ViewportProvider","useState","window","innerWidth","width","setWidth","innerHeight","height","setHeight","handleWindowResize","useEffect","addEventListener","removeEventListener","useViewport","useContext","LOADING","PAGE_SIZE","ROWS_PER_PAGE_OPTIONS","TABLE_HEIGHT_OPTIONS","rows","PRIMARY_COLOR","OK","YES","NO","DELETE_RECORD","ARE_YOU_SURE_DELETE","OPERATION_SUCCESSFUL","SUCCESSFULLY_DELETED","SUCCESSFULLY_ADDED","SUCCESSFULLY_UPDATED","OPERATION_FAILED","UNSUCCESSFULLY_DELETED","renderTableCheckmark","isChecked","style","color","onRenderBlankFiller","params","dateFormatter","Date","toLocaleDateString","presentDialogSuccess","dialogContext","message","presentDialog","presentDialogFailed","buildSearchQuery","filterModelItems","searchQuery","columns","search","i","length","item","push","columnField","buildTableSort","sortModelItems","sort","field","useAsyncReference","isProp","ref","useRef","forceRender","updateState","newState","Object","is","current","s","Copyright","Typography","variant","align","getFullYear","Link","underline","href","target","formatPhoneNumber","phone_number","substring","ButtonPositive","Button","disabled","backgroundColor","minWidth","marginRight","autoFocus","onClick","label","ButtonNegative","red","DialogContext","DialogProvider","title","content","negativeTitle","onNegativeClick","positiveTitle","onPositiveClick","data","onClose","DialogTitle","DialogContentText","DialogActions","APIService","context","api","axios","create","baseURL","timeout","headers","get","url","error_callback","then","response","handleSuccess","catch","error","handleError","post","remove","delete","str","error_message","console","log","validation_errors","errors","validationError","replace","word","index","toLowerCase","toUpperCase","description","getUsers","query","getUser","id","concat","addEditUser","user","deleteUser","getClients","getClient","addEditClient","client","deleteClient","getClientUsers","getClientUser","addEditClientUser","deleteClientUser","sendNotification","getObituaryColumns","getObituaries","getObituary","addEditObituary","deleteObituary","forgotPassword","resetPassword","authenticate","asyncPost","a","ButtonEdit","IconButton","green","A700","ButtonDelete","ClientListing","tableHeight","setTableHeight","setRows","rowCount","setRowCount","page","setPage","pageSize","setPageSize","gridApi","setGridApi","handlePageChange","onPageChange","refreshClientListing","filter","items","sorting","sortModel","filterable","headerName","disableColumnMenu","disableClickEventBubbling","renderCell","row","onEditClient","onDeleteClientPositive","hide","sortable","flex","headerAlign","is_active","limit","order_by","pagination","currentPage","results","success","height_option","padding","Paper","getRowId","rowsPerPageOptions","paginationMode","onPageSizeChange","filterMode","onFilterModelChange","filterModel","sortingMode","onSortModelChange","disableSelectionOnClick","disableColumnSelector","ButtonNeutral","blueGrey","FieldCheckboxWithLabel","isMobile","classes","makeStyles","root","borderRadius","marginLeft","paddingRight","marginTop","marginBottom","fontWeight","useStyles","FormControlLabel","control","Checkbox","name","size","touched","checked","values","onChange","margin","FieldText","TextField","type","helperText","ClientUserListing","refreshClientUserListing","onEditClientUser","onDeleteClientUserPositive","clientId","valueFormatter","notifications","ClientUserAddEdit","client_id","username","password","email_address","first_name","last_name","office_number","cell_phone_number","app_token","standard_sound","firstcall_sound","clientUser","setClientUser","notificationText","setNotificationText","onCancel","onAddEditComplete","onSendTestNotification","client_user_id","enableReinitialize","initialValues","onSubmit","actions","setSubmitting","setErrors","submitForm","isSubmitting","handleChange","event","ClientUsers","setValue","setId","tabProps","square","Tabs","newValue","Tab","ClientAddEdit","account_number","client_name","setClient","Clients","UserListing","refreshUserListing","onEditUser","onDeleteUserPositive","is_admin","is_supervisor","is_operator","UserAddEdit","setUser","Users","recordID","ObituaryListing","setColumns","searchFieldKey","setSearchFieldKey","fields","setFields","searchText","setSearchText","refreshObituaryListing","paddingTop","paddingBottom","listener","code","preventDefault","blur","onSearch","document","cols","onEditObituary","onDeleteObituaryPositive","columnDefinition","column","column_name","column_width","is_identity","is_visible","column_description","type_name","includes","toLocaleTimeString","timeFormatter","qualifier","buildSearchFilters","filters","operatorValue","Box","Grid","container","spacing","sm","defaultValue","onBlur","e","justifyContent","alignItems","textAlign","componentsProps","labelRowsPerPage","labelDisplayedRows","from","to","count","FieldTextArea","multiline","FieldAutocomplete","form","options","setOptions","currentError","active","url_data","undefined","result","option_key","Autocomplete","display","setFieldValue","getOptionSelected","option","getOptionLabel","option_name","renderInput","Boolean","onError","setFieldError","FieldDateText","moment","MomentUtils","date","styles","startOfDay","utc","add","utcOffset","DatePicker","assign","paddingLeft","format","InputProps","endAdornment","stopPropagation","handleClear","ObituaryAddEdit","obituary","setObituary","scrollTo","renderFormElements","elements","is_editable","display_when","display_rules","split","field_name","field_value","field_hidden","hasOwnProperty","component","field_options","j","trim","max_length","default_value","is_required","setFieldTouched","keys","validateOnChange","validateOnBlur","FieldAutocompleteNonForm","input","transform","ObituaryGridView","obituaries","setObituaries","filteredObituaries","setFilteredObituaries","searchFields","setSearchFields","setFilter","selectedRow","setSelectedRow","setCurrentPage","refreshData","filtered_columns","is_grid_table","search_fields","filter_fields","isPurgeColumn","x","filtered_column","exists","b","nameA","nameB","performObituaryFilter","onNew","grid_columns","new_filter","filtered_obituaries","filter_value","isDateTime","isBoolean","onSearchFieldSelection","TableContainer","Table","TableHead","TableRow","map","TableCell","TableBody","slice","hover","selected","cursor","cell_value","getTableCell","TableFooter","TablePagination","colSpan","rowsPerPage","SelectProps","inputProps","native","onChangePage","onChangeRowsPerPage","parseInt","ActionsComponent","disabledColor","flexShrink","Math","ceil","max","borderLeft","Obituaries","withRouter","drawerWidth","drawer","up","appBar","menuButton","toolbar","mixins","drawerPaper","flexGrow","mobileOpen","setMobileOpen","menuItems","setMenuItems","activeItem","setActiveItem","handleDrawerToggle","body","className","Divider","List","ListItem","button","onMenuItemSelected","ListItemIcon","icon","ListItemText","primary","CssBaseline","AppBar","position","Toolbar","edge","lineHeight","src","process","alt","history","Hidden","smUp","implementation","Drawer","anchor","direction","paper","ModalProps","keepMounted","xsDown","Index","flexDirection","Container","maxWidth","md","xs","DateRangeOutlined","fontSize","RecordVoiceOverOutlined","PhoneCallbackOutlined","ContactPhoneOutlined","mt","formRef","avatar","palette","main","handleSubmit","Avatar","redirect","innerRef","useParams","confirm_password","logoutButton","App","utils","path","createMuiTheme","typography","fontFamily","join","secondary","A400","overrides","MuiInputBase","MuiIconButton","MuiInput","borderBottom","MuiButtonBase","MuiOutlinedInput","notchedOutline","borderColor","MuiFormLabel","MuiFormControlLabel","MuiInputLabel","outlined","animated","zIndex","pointerEvents","formControl","MuiAutocomplete","popupIndicator","clearIndicator","inputRoot","MuiDataGrid","MuiTabs","flexContainer","MuiTab","wrapper","MuiTablePagination","select","MuiSelect","MuiDataGridFilterForm","columnSelect","operatorSelect","filterValueInput","MuiPickersCalendarHeader","iconButton","require","suppressDeprecationWarnings","ReactDOM","render","ThemeProvider","querySelector"],"mappings":"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","file":"static/js/main.cc6464c8.chunk.js","sourcesContent":["import React from \"react\";\nimport { CircularProgress, Dialog, DialogContent, useMediaQuery } from \"@material-ui/core\";\nimport { useTheme } from '@material-ui/core/styles';\n\nconst DialogLoading = props =>\n{\n const theme = useTheme();\n const fullScreen = useMediaQuery( theme.breakpoints.down( 'sm' ) );\n \n return (\n
\n \n \n \n \n \n
\n );\n};\n\nexport default DialogLoading;","import React, { createContext } from 'react';\nimport DialogLoading from \"./dialogs/dialogLoading\";\n\nexport const StateContext = createContext( {\n\n\tloading:\tfalse,\n\taccess:\t\t0,\n\ttoken:\t\tnull,\n\tupdate:\t\t() => {}\n} );\n\nexport class StateProvider extends React.Component\n{\n\tupdate = ( key, value, callback ) =>\n\t{\n\t\tthis.setState\n\t\t(\n\t\t\t{ [key]: value },\n\t\t\tfunction()\n\t\t\t{\n\t\t\t\t// console.log( JSON.stringify( this.state ) );\n\n\t\t\t\tif( callback ){ callback(); }\n\t\t\t}\n\t\t);\n\t};\n\n\tstate = {\n\t\tloading:\tfalse,\n\t\taccess:\t\t0,\n\t\ttoken:\t\tnull,\n\t\tupdate:\t\tthis.update\n\t};\n\n\trender() {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t{ this.props.children }\n\t\t\t\n\t\t);\n\t}\n}","import React, {createContext, useState, useContext} from 'react';\n\nconst ViewportContext = createContext( {} );\n\nexport const ViewportProvider = ( { children } ) => \n{\n const [width, setWidth] = useState( window.innerWidth );\n const [height, setHeight] = useState( window.innerHeight );\n \n const handleWindowResize = () => \n {\n setWidth( window.innerWidth );\n setHeight( window.innerHeight );\n }\n\n React.useEffect(() => {\n \n window.addEventListener( \"resize\", handleWindowResize );\n \n return () => window.removeEventListener( \"resize\", handleWindowResize );\n \n }, [] );\n \n return (\n \n { children }\n \n );\n};\n\nexport const useViewport = () =>\n{\n const { width, height } = useContext( ViewportContext );\n \n return { width, height };\n}","import DoneOutlinedIcon from \"@material-ui/icons/DoneOutlined\";\nimport {useRef, useState} from \"react\";\nimport {Link, Typography} from \"@material-ui/core\";\nimport MomentUtils from '@date-io/moment';\n\nexport const LOADING = 'loading';\nexport const USER = 'user';\nexport const PAGE_SIZE = 15;\nexport const ROWS_PER_PAGE_OPTIONS = [ 5, 15, 25, 50 ];\nexport const TABLE_HEIGHT_OPTIONS = [ { rows: 5, height: 450 }, { rows: 15, height: 950 }, { rows: 25, height: 1500 }, { rows: 50, height: 2800 } ];\nexport const PRIMARY_COLOR = '#1daccc';\n\nexport const OK = 'OK';\nexport const YES = 'Yes';\nexport const NO = 'No';\n\nexport const DELETE_RECORD = 'Delete record';\nexport const ARE_YOU_SURE_DELETE = 'Are you sure you want to delete this record?';\n\nexport const OPERATION_SUCCESSFUL = 'Operation Successful';\nexport const SUCCESSFULLY_DELETED = 'Record successfully deleted.';\nexport const SUCCESSFULLY_ADDED = 'Record successfully added.';\nexport const SUCCESSFULLY_UPDATED = 'Record successfully updated.';\n\nexport const OPERATION_FAILED = 'Operation Failed';\nexport const UNSUCCESSFULLY_DELETED = 'Unable to delete record.';\n\nexport function camelCase( str )\n{\n return str.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, function (word, index) {\n return index === 0 ? word.toLowerCase() : word.toUpperCase();\n }).replace(/\\s+/g, '');\n}\n\nexport function renderTableCheckmark( isChecked )\n{\n if( !isChecked ){ return
; } return ;\n}\n\nexport const onRenderBlankFiller = ( params ) => { return
; };\n\nexport const dateFormatter = ( value ) => \n{\n if( value == null ){ return ''; }\n \n return new Date( value ).toLocaleDateString( \"en-US\" );\n};\n\nexport const timeFormatter = ( value ) => \n{\n if( value == null ){ return ''; }\n \n return new Date( value ).toLocaleTimeString( \"en-US\" );\n};\n\nexport const dateFormatterAlt = ( value ) => \n{\n if( value == null ){ return ''; }\n \n const moment = new MomentUtils();\n const date = moment.date( value );\n \n return moment.format( date, \"yyyy-MM-DD\" );\n};\n\nexport const getToday = () => \n{\n const moment = new MomentUtils();\n \n return moment.date();\n};\n\nexport function presentDialogSuccess( dialogContext, message, callback )\n{\n dialogContext.presentDialog( true, OPERATION_SUCCESSFUL, message, null, null, OK, callback, null, null );\n}\n\nexport function presentDialogFailed( dialogContext, message, callback )\n{\n dialogContext.presentDialog( true, OPERATION_FAILED, message, null, null, OK, callback, null, null );\n}\n\nexport function buildSearchQuery( filterModelItems )\n{\n let searchQuery = { columns: [], search: [] };\n \n for( let i = 0; i < filterModelItems.length; i++ )\n {\n const item = filterModelItems[i];\n \n if( item.value )\n {\n searchQuery.columns.push( item.columnField );\n searchQuery.search.push( item.value );\n }\n }\n \n return searchQuery;\n}\n\nexport function buildTableSort( sortModelItems )\n{\n let sort = [];\n \n for( let i = 0; i < sortModelItems.length; i++ )\n {\n const item = sortModelItems[i];\n\n sort.push( item.field + \" \" + item.sort );\n }\n \n return sort;\n}\n\nexport function useAsyncReference( value, isProp = false )\n{\n const ref = useRef( value );\n const [, forceRender] = useState( false );\n \n function updateState( newState )\n {\n if( !Object.is( ref.current, newState ) )\n {\n ref.current = newState;\n \n forceRender( s => !s );\n }\n }\n \n if( isProp )\n {\n ref.current = value;\n \n return ref;\n }\n\n return [ref, updateState];\n}\n\nexport function Copyright()\n{\n return (\n \n { '©' }\n { new Date().getFullYear() }\n { ' ' }\n Omni Enterprises, Inc\n \n );\n}\n\nexport const formatPhoneNumber = ( phone_number ) =>\n{\n if( ( phone_number === null ) || ( phone_number.length === 0 ) || ( phone_number.length !== 10 ) ){ return ''; }\n\n return `(${ phone_number.substring( 0, 3 ) }) ${ phone_number.substring( 3, 6 ) }-${ phone_number.substring( 6, 10 ) }`;\n};","import {Button} from \"@material-ui/core\";\nimport {PRIMARY_COLOR} from \"../constants\";\n\nconst ButtonPositive = props => {\n return (\n \n )\n}\n\nexport default ButtonPositive;","import {Button} from \"@material-ui/core\";\nimport {red} from \"@material-ui/core/colors\";\n\nconst ButtonNegative = props => {\n return (\n \n )\n}\n\nexport default ButtonNegative;","import React, { createContext } from \"react\";\nimport {Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle} from \"@material-ui/core\";\nimport ButtonPositive from \"../components/buttonPositive\";\nimport ButtonNegative from \"../components/buttonNegative\";\n\nexport const DialogContext = createContext( {\n presentDialog: () => {}\n} );\n\nexport class DialogProvider extends React.Component\n{\n presentDialog = ( open, title, content, negativeTitle, onNegativeClick, positiveTitle, onPositiveClick, data, callback ) =>\n\t{\n\t\tthis.setState\n\t\t(\n\t\t\t{\n open: open,\n title: title,\n content: content,\n negativeTitle: negativeTitle,\n onNegativeClick: onNegativeClick,\n positiveTitle: positiveTitle,\n data: data,\n onPositiveClick: onPositiveClick\n },\n callback\n\t\t);\n\t};\n\n onNegativeClick = () => { this.setState( { open: false }, function(){ this.state.onNegativeClick(); } ); };\n onPositiveClick = () => { this.setState( { open: false }, function(){ this.state.onPositiveClick && this.state.onPositiveClick( this.state.data ); } ); };\n \n state = {\n\t\topen: false,\n\t\ttitle: '',\n content: '',\n negativeTitle: '',\n onNegativeClick: null,\n positiveTitle: '',\n onPositiveClick: null,\n data: null,\n presentDialog: this.presentDialog\n\t};\n \n render() {\n return (\n\t\t\t\n \n { this.state.title }\n \n { this.state.content }\n \n \n { this.state.onNegativeClick !== null && }\n \n \n \n { this.props.children }\n\t\t\t\n\t\t);\n\t}\n}","import axios from 'axios';\nimport {camelCase, LOADING} from \"./constants\";\n\nconst APIService = ( context ) =>\n{\n\tconst DEV_BASE_URL = 'http://192.168.1.50:5000/api/';\n\tconst LIVE_BASE_URL\t= 'https://www.myfuneralcall.com/api/';\n\tconst api\t\t\t= axios.create( { baseURL: LIVE_BASE_URL, timeout: 30000, headers: context.token ? { 'Content-Type': 'application/json', 'Authorization': `Bearer ${ context.token }` } : { 'Content-Type': 'application/json' } } );\n\n\tconst getUsers\t\t\t\t= ( query, callback )\t\t\t\t\t=> { post( 'Employee/query', query, function( data ){ callback( data ); } ); };\n\tconst getUser\t\t\t\t= ( id, callback )\t\t\t\t\t\t=> { get( 'Employee/'.concat( id ), function( data ){ callback( data ); } ); };\n\tconst addEditUser\t\t\t= ( user, callback, error_callback )\t=> { post( 'Employee/addEdit', user, callback, error_callback ); };\n\tconst deleteUser\t\t\t= ( id, callback )\t\t\t\t\t\t=> { remove( 'Employee/delete/'.concat( id ), function( data ){ callback( true ); }, function( data ){ callback( false ); } ); };\n\t\n\tconst getClients\t\t\t= ( query, callback )\t\t\t\t\t=> { post( 'Client/query', query, function( data ){ callback( data ); } ); };\n\tconst getClient\t\t\t\t= ( id, callback )\t\t\t\t\t\t=> { get( 'Client/'.concat( id ), function( data ){ callback( data ); } ); };\n\tconst addEditClient\t\t\t= ( client, callback, error_callback )\t=> { post( 'Client/addEdit', client, callback, error_callback ); };\n\tconst deleteClient\t\t\t= ( id, callback )\t\t\t\t\t\t=> { remove( 'Client/delete/'.concat( id ), function( data ){ callback( true ); }, function( data ){ callback( false ); } ); };\n\t\n\tconst getClientUsers\t\t= ( query, callback )\t\t\t\t\t=> { post( 'ClientUser/query', query, function( data ){ callback( data ); } ); };\n\tconst getClientUser\t\t\t= ( id, callback )\t\t\t\t\t\t=> { get( 'ClientUser/'.concat( id ), function( data ){ callback( data ); } ); };\n\tconst addEditClientUser\t\t= ( user, callback, error_callback )\t=> { post( 'ClientUser/addEdit', user, callback, error_callback ); };\n\tconst deleteClientUser\t\t= ( id, callback )\t\t\t\t\t\t=> { remove( 'ClientUser/delete/'.concat( id ), function( data ){ callback( true ); }, function( data ){ callback( false ); } ); };\n\tconst sendNotification\t\t= ( data, callback, error_callback )\t=> { post( 'ClientUser/sendNotification', data, callback, error_callback ); };\n\t\t\n\tconst getObituaryColumns\t= ( callback )\t\t\t\t\t\t\t=> { get( 'Obituary', function( data ){ callback( data ); } ); };\n\tconst getObituaries\t\t\t= ( query, callback )\t\t\t\t\t=> { post( 'Obituary/query', query, function( data ){ callback( data ); } ); };\n\tconst getObituary\t\t\t= ( id, callback )\t\t\t\t\t\t=> { get( 'Obituary/'.concat( id ), function( data ){ callback( data ); } ); };\n\tconst addEditObituary\t\t= ( user, callback, error_callback )\t=> { post( 'Obituary/addEdit', user, callback, error_callback ); };\n\tconst deleteObituary\t\t= ( id, callback )\t\t\t\t\t\t=> { remove( 'Obituary/delete/'.concat( id ), function( data ){ callback( true ); }, function( data ){ callback( false ); } ); };\n\t\n\tconst forgotPassword\t\t= ( data, callback, error_callback )\t=> { post( 'User/forgot-password', data, callback, error_callback ); };\n\tconst resetPassword\t\t\t= ( data, callback, error_callback )\t=> { post( 'User/reset-password', data, callback, error_callback ); };\n\tconst authenticate\t\t\t= ( data, callback, error_callback )\t=> {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpost\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'User/authenticate', \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata, \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfunction( response )\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.update( 'access', response.access, function(){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.update( 'token', response.token, function(){ callback( response ); } );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\terror_callback\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t};\n\t\n\tconst asyncPost\t\t\t\t= async ( url, data )\t\t\t\t\t=> { return api.post( url, data ); };\n\n\t/* Private Methods */\n\tconst get = ( url, callback, error_callback ) =>\n\t{\n\t\tcontext.update( LOADING, true );\n\n\t\tapi.get( url )\n\t\t\t.then( response =>\n\t\t\t{\n\t\t\t\thandleSuccess( response, callback );\n\t\t\t} )\n\t\t\t.catch( error =>\n\t\t\t{\n\t\t\t\thandleError( error, error_callback );\n\t\t\t} );\n\t};\n\n\tconst post = ( url, data, callback, error_callback ) =>\n\t{\n\t\tcontext.update( LOADING, true );\n\n\t\tapi.post( url, data )\n\t\t\t.then( response =>\n\t\t\t{\n\t\t\t\thandleSuccess( response, callback );\n\t\t\t} )\n\t\t\t.catch( error =>\n\t\t\t{\n\t\t\t\thandleError( error, error_callback );\n\t\t\t} );\n\t};\n\n\tconst remove = ( url, callback, error_callback ) =>\n\t{\n\t\tcontext.update( LOADING, true );\n\n\t\tapi.delete( url )\n\t\t\t.then( response =>\n\t\t\t{\n\t\t\t\thandleSuccess( response, callback );\n\t\t\t} )\n\t\t\t.catch( error =>\n\t\t\t{\n\t\t\t\thandleError( error, error_callback );\n\t\t\t} );\n\t};\n\n\tconst handleSuccess = ( response, callback ) =>\n\t{\n\t\tcontext.update( LOADING, false );\n\n\t\tcallback( response.data.data );\n\t};\n\n\tconst handleError = ( error, error_callback ) =>\n\t{\n\t\tcontext.update( LOADING, false );\n\n\t\tlet error_message = null;\n\n\t\tconsole.log( error.response );\n\n\t\tif( ( error.response ) && ( error.response.data ) )\n\t\t{\n\t\t\tif( error.response.data.data.validation_errors )\n\t\t\t{\n\t\t\t\tconst errors = {};\n\n\t\t\t\tfor( let i = 0; i < error.response.data.data.validation_errors.length; i++ )\n\t\t\t\t{\n\t\t\t\t\tconst validationError = error.response.data.data.validation_errors[i];\n\t\t\t\t\t\n\t\t\t\t\terrors[ camelCase( validationError.field )] = validationError.description;\n\t\t\t\t}\n\n\t\t\t\terror_message = errors;\n\t\t\t}\n\t\t\telse if( error.response.data.data )\n\t\t\t{\n\t\t\t\terror_message = error.response.data.data;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\terror_message = error.message;\n\t\t}\n\n\t\tif( error_callback )\n\t\t{\n\t\t\terror_callback( error_message );\n\t\t}\n\t};\n\n\treturn {\n\t\tgetUsers,\n\t\tgetUser,\n\t\taddEditUser,\n\t\tdeleteUser,\n\n\t\tgetClients,\n\t\tgetClient,\n\t\taddEditClient,\n\t\tdeleteClient,\n\t\t\n\t\tgetClientUsers,\n\t\tgetClientUser,\n\t\taddEditClientUser,\n\t\tdeleteClientUser,\n\t\tsendNotification,\n\n\t\tgetObituaryColumns,\n\t\tgetObituaries,\n\t\tgetObituary,\n\t\taddEditObituary,\n\t\tdeleteObituary,\n\n\t\tforgotPassword,\n\t\tresetPassword,\n\t\tauthenticate,\n\n\t\tasyncPost\n\t};\n};\n\nexport default APIService;","import {IconButton} from \"@material-ui/core\";\nimport EditOutlinedIcon from '@material-ui/icons/EditOutlined';\nimport {green} from \"@material-ui/core/colors\";\n\nconst ButtonEdit = props => {\n return (\n \n \n \n )\n}\n\nexport default ButtonEdit;","import {IconButton} from \"@material-ui/core\";\nimport DeleteForeverOutlinedIcon from '@material-ui/icons/DeleteForeverOutlined';\nimport {red} from \"@material-ui/core/colors\";\n\nconst ButtonDelete = props => {\n return (\n \n \n \n )\n}\n\nexport default ButtonDelete;","import {useRef, useState, useContext, useEffect} from \"react\";\nimport {DataGrid} from \"@material-ui/data-grid\";\nimport {Paper} from \"@material-ui/core\";\nimport {\n ARE_YOU_SURE_DELETE,\n buildSearchQuery, buildTableSort, DELETE_RECORD, NO,\n PAGE_SIZE, presentDialogFailed, presentDialogSuccess,\n renderTableCheckmark,\n ROWS_PER_PAGE_OPTIONS, SUCCESSFULLY_DELETED, TABLE_HEIGHT_OPTIONS, UNSUCCESSFULLY_DELETED, useAsyncReference, YES\n} from \"../../constants\";\nimport {DialogContext} from \"../../services/dialogService\";\nimport {StateContext} from \"../../stateService\";\nimport APIService from \"../../apiService\";\nimport ButtonEdit from \"../buttonEdit\";\nimport ButtonDelete from \"../buttonDelete\";\n\nconst ClientListing = props => {\n const [tableHeight, setTableHeight] = useState( 950 );\n const [rows, setRows] = useState( [] );\n const [rowCount, setRowCount] = useState( 0 );\n const [page, setPage] = useAsyncReference( 0 );\n const [pageSize, setPageSize] = useAsyncReference( 0 );\n const [gridApi, setGridApi] = useAsyncReference( null );\n const context = useRef( useContext( StateContext ) );\n const dialogContext = useContext( DialogContext );\n const onRenderIsActive = ( params ) => { return renderTableCheckmark( params.row.is_active ); };\n const handlePageChange = ( params ) => { onPageChange( params ); refreshClientListing( params, gridApi.current ? gridApi.current.state.filter.items : null, gridApi.current ? gridApi.current.state.sorting.sortModel : null ); };\n const handleFilterModelChange = ( params ) => { refreshClientListing( params.api.state.pagination, params.filterModel.items, params.api.state.sorting.sortModel, params.api ); };\n const handleSortModelChange = ( params ) => { refreshClientListing( params.api.state.pagination, params.api.state.filter.items, params.sortModel, params.api ); };\n const onEditClient = ( row ) => { props.onEditClient( row.id ); };\n const onDeleteClient = ( row ) => { dialogContext.presentDialog( true, DELETE_RECORD, ARE_YOU_SURE_DELETE, NO, () => {}, YES, onDeleteClientPositive, { id: row.id }, null ); };\n \n const columns = [\n { field: \"edit\", filterable: false, headerName: ' ', width: 60, align: 'center', disableColumnMenu: true, disableClickEventBubbling: true, renderCell: ( params ) => { return onEditClient( params.row ) } /> ; } },\n { field: \"delete\", filterable: false, headerName: ' ', width: 60, align: 'center', disableColumnMenu: true, disableClickEventBubbling: true, renderCell: ( params ) => { return onDeleteClient( params.row ) } /> ; } },\n { field: 'id', hide: true, filterable: false, sortable: false },\n { field: 'account_number', headerName: 'Account Number', width: 200 },\n { field: 'client_name', headerName: 'Client Name', flex: 1 },\n { field: 'is_active', headerName: 'Active', headerAlign: 'center', width: 100, align: 'center', renderCell: onRenderIsActive }\n ];\n\n const refreshClientListing = ( params, filter, sort, api ) => {\n \n let query = { page: ( params.page + 1 ), limit: params.pageSize };\n \n setPage( page.current = params.page );\n setPageSize( pageSize.current = params.pageSize );\n \n if( !gridApi.current )\n {\n setGridApi( gridApi.current = api );\n }\n \n if( filter )\n {\n query = { ...query, ...buildSearchQuery( filter ) };\n }\n \n if( sort )\n {\n query = { ...query, ...{ order_by: buildTableSort( sort ) } };\n }\n \n APIService( context.current )\n .getClients\n (\n query, \n function( data )\n {\n if( filter && api )\n {\n api.state.pagination.page = ( data.currentPage - 1 );\n }\n \n setRowCount( data.rowCount );\n setRows( data.results );\n }\n );\n };\n \n const onDeleteClientPositive = ( data ) => {\n \n APIService( context.current ).deleteClient( data.id, function( success )\n {\n if( success )\n {\n presentDialogSuccess( dialogContext, SUCCESSFULLY_DELETED, () => { refreshClientListing( { page: page.current, pageSize: pageSize.current } ); } );\n }\n else\n {\n presentDialogFailed( dialogContext, UNSUCCESSFULLY_DELETED, null );\n }\n } );\n };\n \n useEffect( () =>\n\t{\n\t refreshClientListing( { page: 0, pageSize: PAGE_SIZE }, null, null );\n\t}, [] )\n \n const onPageChange = ( params ) =>\n {\n for( let i = 0; i < TABLE_HEIGHT_OPTIONS.length; i++ )\n {\n const height_option = TABLE_HEIGHT_OPTIONS[i];\n \n if( height_option.rows === params.pageSize )\n {\n setTableHeight( height_option.height );\n break;\n }\n }\n };\n \n return (\n
\n \n row.id } \n pagination \n pageSize={ PAGE_SIZE } \n rowCount={ rowCount } \n rowsPerPageOptions={ ROWS_PER_PAGE_OPTIONS } \n paginationMode=\"server\" \n onPageChange={ handlePageChange } \n onPageSizeChange={ handlePageChange }\n filterMode=\"server\" \n onFilterModelChange={ handleFilterModelChange }\n sortingMode=\"server\"\n onSortModelChange={ handleSortModelChange }\n disableSelectionOnClick\n disableColumnSelector/>\n \n
\n );\n};\n\nexport default ClientListing;","import {Button} from \"@material-ui/core\";\nimport {blueGrey} from \"@material-ui/core/colors\";\n\nconst ButtonNeutral = props => {\n return (\n \n )\n}\n\nexport default ButtonNeutral;","import Checkbox from '@material-ui/core/Checkbox';\nimport {FormControlLabel} from \"@material-ui/core\";\nimport {makeStyles} from \"@material-ui/core/styles\";\nimport {useViewport} from \"../viewportService\";\n\nconst FieldCheckboxWithLabel = props => {\n const isMobile = useViewport().width < 640;\n const useStyles = makeStyles(theme => ( {\n root: {\n backgroundColor: 'white',\n borderRadius: 4,\n marginLeft: 5,\n paddingRight: 10,\n width: isMobile ? 250 : '100%',\n marginTop: 4,\n marginBottom: 4,\n color: '#424242',\n \"& .MuiIconButton-label\": {\n color: '#424242',\n },\n \"& .MuiTypography-body1\": {\n fontWeight: '700 !important'\n }\n }\n } ) );\n\n const classes = useStyles();\n \n return (\n }\n label={ props.label }\n size={ props.size ? props.size : 'medium' }\n classes={ classes }\n />\n )\n}\n\nexport default FieldCheckboxWithLabel;","import { TextField } from \"@material-ui/core\";\n\nconst FieldText = props => {\n return (\n \n )\n}\n\nexport default FieldText;","import {useRef, useState, useContext, useEffect} from \"react\";\nimport {DataGrid} from \"@material-ui/data-grid\";\nimport {Paper} from \"@material-ui/core\";\nimport {\n ARE_YOU_SURE_DELETE,\n buildSearchQuery, buildTableSort, DELETE_RECORD, formatPhoneNumber, NO,\n onRenderBlankFiller,\n PAGE_SIZE, presentDialogFailed, presentDialogSuccess,\n renderTableCheckmark,\n ROWS_PER_PAGE_OPTIONS, SUCCESSFULLY_DELETED, TABLE_HEIGHT_OPTIONS, UNSUCCESSFULLY_DELETED, useAsyncReference, YES\n} from \"../../../constants\";\nimport {DialogContext} from \"../../../services/dialogService\";\nimport {StateContext} from \"../../../stateService\";\nimport APIService from \"../../../apiService\";\nimport ButtonEdit from \"../../buttonEdit\";\nimport ButtonDelete from \"../../buttonDelete\";\n\nconst ClientUserListing = props => {\n const [tableHeight, setTableHeight] = useState( 950 );\n const [rows, setRows] = useState( [] );\n const [rowCount, setRowCount] = useState( 0 );\n const [page, setPage] = useAsyncReference( 0 );\n const [pageSize, setPageSize] = useAsyncReference( 0 );\n const [gridApi, setGridApi] = useAsyncReference( null );\n const context = useRef( useContext( StateContext ) );\n const dialogContext = useContext( DialogContext );\n const onRenderIsActive = ( params ) => { return renderTableCheckmark( params.row.is_active ); };\n const onRenderIsNotifications = ( params ) => { return renderTableCheckmark( params.row.notifications ); };\n const handlePageChange = ( params ) => { onPageChange( params ); refreshClientUserListing( params, gridApi.current ? gridApi.current.state.filter.items : null, gridApi.current ? gridApi.current.state.sorting.sortModel : null ); };\n const handleFilterModelChange = ( params ) => { refreshClientUserListing( params.api.state.pagination, params.filterModel.items, params.api.state.sorting.sortModel, params.api ); };\n const handleSortModelChange = ( params ) => { refreshClientUserListing( params.api.state.pagination, params.api.state.filter.items, params.sortModel, params.api ); };\n const onEditClientUser = ( row ) => { props.onEditClientUser( row.id ); };\n const onDeleteClientUser = ( row ) => { dialogContext.presentDialog( true, DELETE_RECORD, ARE_YOU_SURE_DELETE, NO, () => {}, YES, onDeleteClientUserPositive, { id: row.id }, null ); };\n \n const columns = [\n { field: \"edit\", headerName: ' ', width: 60, align: 'center', disableColumnMenu: true, disableClickEventBubbling: true, renderCell: ( params ) => { return onEditClientUser( params.row ) } /> ; } },\n { field: \"delete\", headerName: ' ', width: 60, align: 'center', disableColumnMenu: true, disableClickEventBubbling: true, renderCell: ( params ) => { return onDeleteClientUser( params.row ) } /> ; } },\n { field: 'id', hide: true, filterable: false, sortable: false },\n { field: 'account_number', headerName: 'Account #', width: 150, hide: props.clientId },\n { field: 'client_name', headerName: 'Client', width: 300, hide: props.clientId },\n { field: 'username', headerName: 'Username', width: 150 },\n { field: 'first_name', headerName: 'First Name', width: 250 },\n { field: 'last_name', headerName: 'Last name', width: 250 },\n { field: 'email_address', headerName: 'Email Address', width: 250 },\n { field: 'office_number', headerName: 'Office Number', width: 200, valueFormatter: ( { value } ) => { return formatPhoneNumber( value ); } },\n { field: 'cell_phone_number', headerName: 'Cell Phone Number', width: 250, valueFormatter: ( { value } ) => { return formatPhoneNumber( value ); } },\n { field: 'is_active', headerName: 'Active', headerAlign: 'center', width: 150, align: 'center', renderCell: onRenderIsActive },\n { field: 'app_token', headerName: 'Notification Token', width: 250 },\n { field: 'notifications', headerName: 'Notifications', headerAlign: 'center', width: 150, align: 'center', renderCell: onRenderIsNotifications },\n { field: 'standard_sound', headerName: 'Standard Sound', width: 200 },\n { field: 'firstcall_sound', headerName: 'FirstCall Sound', width: 200 }\n ];\n\n const refreshClientUserListing = ( params, filter, sort, api ) => {\n \n let query = { page: ( params.page + 1 ), limit: params.pageSize, columns: [ 'client_id' ], search: [ props.clientId ] };\n \n setPage( page.current = params.page );\n setPageSize( pageSize.current = params.pageSize );\n \n if( !gridApi.current )\n {\n setGridApi( gridApi.current = api );\n }\n \n if( filter )\n {\n query = { ...query, ...buildSearchQuery( filter ) };\n }\n \n if( sort )\n {\n query = { ...query, ...{ order_by: buildTableSort( sort ) } };\n }\n \n APIService( context.current )\n .getClientUsers\n (\n query, \n function( data )\n {\n if( filter && api )\n {\n api.state.pagination.page = ( data.currentPage - 1 );\n }\n \n setRowCount( data.rowCount );\n setRows( data.results );\n }\n );\n };\n \n const onDeleteClientUserPositive = ( data ) => {\n \n APIService( context.current ).deleteClientUser( data.id, function( success )\n {\n if( success )\n {\n presentDialogSuccess( dialogContext, SUCCESSFULLY_DELETED, () => { refreshClientUserListing( { page: page.current, pageSize: pageSize.current } ); } );\n }\n else\n {\n presentDialogFailed( dialogContext, UNSUCCESSFULLY_DELETED, null );\n }\n } );\n };\n \n useEffect( () =>\n\t{\n refreshClientUserListing( { page: 0, pageSize: PAGE_SIZE }, null, null, null );\n\t}, [] )\n \n const onPageChange = ( params ) =>\n {\n for( let i = 0; i < TABLE_HEIGHT_OPTIONS.length; i++ )\n {\n const height_option = TABLE_HEIGHT_OPTIONS[i];\n \n if( height_option.rows === params.pageSize )\n {\n setTableHeight( height_option.height );\n break;\n }\n }\n };\n \n return (\n
\n \n row.id } \n pagination \n pageSize={ PAGE_SIZE } \n rowCount={ rowCount } \n rowsPerPageOptions={ ROWS_PER_PAGE_OPTIONS } \n paginationMode=\"server\" \n onPageChange={ handlePageChange } \n onPageSizeChange={ handlePageChange }\n filterMode=\"server\" \n onFilterModelChange={ handleFilterModelChange }\n sortingMode=\"server\"\n onSortModelChange={ handleSortModelChange }\n disableSelectionOnClick\n disableColumnSelector/>\n \n
\n );\n};\n\nexport default ClientUserListing;","import {useRef, useContext, useState, useEffect} from \"react\";\nimport {StateContext} from \"../../../stateService\";\nimport {DialogContext} from \"../../../services/dialogService\";\nimport APIService from \"../../../apiService\";\nimport {Paper, TextField} from \"@material-ui/core\";\nimport {Formik, Form} from 'formik';\nimport ButtonNeutral from \"../../buttonNeutral\";\nimport ButtonPositive from \"../../buttonPositive\";\nimport FieldCheckboxWithLabel from \"../../fieldCheckboxWithLabel\";\nimport FieldText from \"../../fieldText\";\nimport {OK, OPERATION_FAILED, OPERATION_SUCCESSFUL, SUCCESSFULLY_ADDED, SUCCESSFULLY_UPDATED} from \"../../../constants\";\n\nconst ClientUserAddEdit = props =>\n{\n const context = useRef( useContext( StateContext ) );\n const dialogContext = useContext( DialogContext );\n const [clientUser, setClientUser] = useState( { id: null, client_id: props.clientId, username: null, password: null, email_address: null, first_name: null, last_name: null, office_number: null, cell_phone_number: null, is_active: false, app_token: null, notifications: false, standard_sound: null, firstcall_sound: null } );\n const [notificationText, setNotificationText] = useState( '' );\n \n useEffect( () =>\n\t{\n\t if( !props.id ){ return; }\n\t \n\t\tAPIService( context.current ).getClientUser( props.id, function( data ) {\n\n setClientUser( { id: data.id, client_id: data.client_id, username: data.username, password: null, email_address: data.email_address, first_name: data.first_name, last_name: data.last_name, office_number: data.office_number, cell_phone_number: data.cell_phone_number, is_active: data.is_active, app_token: data.app_token, notifications: data.notifications, standard_sound: data.standard_sound, firstcall_sound: data.firstcall_sound } );\n\t \n } );\n\t\t\n\t}, [ props.id ] )\n \n const onCancel = () => { props.onAddEditComplete(); };\n \n const onSubmit = ( values, actions ) => \n {\n APIService( context.current )\n .addEditClientUser(\n values, \n function( data ){\n actions.setSubmitting( false );\n \n let message = SUCCESSFULLY_ADDED;\n \n if( props.id )\n {\n message = SUCCESSFULLY_UPDATED;\n }\n \n dialogContext.presentDialog( true, OPERATION_SUCCESSFUL, message, null, null, OK, () => { props.onAddEditComplete(); }, null, null );\n },\n function( errors ){\n \n actions.setSubmitting( false );\n actions.setErrors( errors );\n }\n );\n };\n \n const onSendTestNotification = () =>\n {\n APIService( context.current )\n .sendNotification(\n { client_user_id: clientUser.id, message: notificationText },\n function( response )\n {\n dialogContext.presentDialog( true, OPERATION_SUCCESSFUL, response, null, null, OK, () => { setNotificationText( '' ); }, null, null );\n },\n function( error )\n {\n dialogContext.presentDialog( true, OPERATION_FAILED, error, null, null, OK, () => { setNotificationText( '' ); }, null, null );\n }\n );\n };\n \n return (\n
\n \n \n { ( { values, submitForm, isSubmitting, touched, errors, handleChange } ) => (\n
\n \n \n
\n \n
\n \n \n
\n \n \n
\n \n
\n
\n \n \n
\n
\n \n \n \n \n
\n
\n setNotificationText( event.target.value ) }\n style={ { margin: 5, width: '100%' } }\n variant=\"outlined\"/>\n
\n
\n \n \n ) }\n
\n
\n
\n );\n}\n\nexport default ClientUserAddEdit;","import React from \"react\";\nimport {Paper, Tab, Tabs} from \"@material-ui/core\";\nimport ClientUserListing from \"./clientUserListing\";\nimport ClientUserAddEdit from \"./clientUserAddEdit\";\n\nconst ClientUsers = props =>\n{\n const [value, setValue] = React.useState( 0 );\n const [id, setId] = React.useState( null );\n const handleChange = ( event, newValue ) => { setId( null ); setValue( newValue ); };\n \n function tabProps( index )\n {\n return { id: `tab-client-user-${ index }` };\n }\n \n function onEditClientUser( id )\n {\n setId( id );\n setValue( 1 );\n }\n \n function onAddEditComplete()\n {\n setId( null );\n setValue( 0 );\n }\n \n return (\n \n \n \n { props.clientId && }\n { !props.clientId && }\n \n { value === 0 && }\n { value === 1 && }\n \n );\n}\n\nexport default ClientUsers;","import {useRef, useContext, useState, useEffect} from \"react\";\nimport {StateContext} from \"../../stateService\";\nimport {DialogContext} from \"../../services/dialogService\";\nimport APIService from \"../../apiService\";\nimport {Paper} from \"@material-ui/core\";\nimport {Formik, Form} from 'formik';\nimport ButtonNeutral from \"../buttonNeutral\";\nimport ButtonPositive from \"../buttonPositive\";\nimport FieldCheckboxWithLabel from \"../fieldCheckboxWithLabel\";\nimport FieldText from \"../fieldText\";\nimport {OK, OPERATION_SUCCESSFUL, SUCCESSFULLY_ADDED, SUCCESSFULLY_UPDATED} from \"../../constants\";\nimport ClientUsers from \"./clientUsers/clientUsers\";\n\nconst ClientAddEdit = props =>\n{\n const context = useRef( useContext( StateContext ) );\n const dialogContext = useContext( DialogContext );\n const [client, setClient] = useState( { id: null, account_number: null, client_name: null, is_active: false } );\n \n useEffect( () =>\n\t{\n\t if( !props.id ){ return; }\n\n getClient( props.id );\n\t\t\n\t}, [ props.id ] )\n \n const getClient = ( id ) => {\n APIService( context.current ).getClient( id, function( data ) {\n\n setClient( { id: data.id, account_number: data.account_number, client_name: data.client_name, is_active: data.is_active } );\n\t \n } );\n };\n \n const onCancel = () => { props.onAddEditComplete(); };\n \n const onSubmit = ( values, actions ) => \n {\n APIService( context.current )\n .addEditClient(\n values, \n function( data ){\n actions.setSubmitting( false );\n \n let message = SUCCESSFULLY_ADDED;\n \n if( client.id )\n {\n message = SUCCESSFULLY_UPDATED;\n }\n \n dialogContext.presentDialog( true, OPERATION_SUCCESSFUL, message, null, null, OK, () => { getClient( data.id ); }, null, null );\n },\n function( errors ){\n \n actions.setSubmitting( false );\n actions.setErrors( errors );\n }\n );\n };\n \n return (\n
\n \n \n { ( { values, submitForm, isSubmitting, touched, errors, handleChange } ) => (\n
\n \n
\n \n
\n \n
\n
\n \n \n \n ) }\n
\n { client.id && \n
\n \n
\n }\n
\n
\n );\n}\n\nexport default ClientAddEdit;","import React from \"react\";\nimport {Paper, Tab, Tabs} from \"@material-ui/core\";\nimport ClientListing from \"./clientListing\";\nimport ClientAddEdit from \"./clientAddEdit\";\n\nexport default function Clients()\n{\n const [value, setValue] = React.useState( 0 );\n const [id, setId] = React.useState( null );\n const handleChange = ( event, newValue ) => { setId( null ); setValue( newValue ); };\n \n function tabProps( index )\n {\n return { id: `tab-${ index }` };\n }\n \n function onEditClient( id )\n {\n setId( id );\n setValue( 1 );\n }\n \n function onAddEditComplete()\n {\n setId( null );\n setValue( 0 );\n }\n\n return (\n \n \n \n \n \n { value === 0 && }\n { value === 1 && }\n \n );\n}","import {useContext, useEffect, useRef, useState} from \"react\";\nimport {Paper} from \"@material-ui/core\";\nimport {DataGrid} from \"@material-ui/data-grid\";\nimport {StateContext} from \"../../stateService\";\nimport APIService from \"../../apiService\";\nimport {\n ARE_YOU_SURE_DELETE, buildSearchQuery, buildTableSort,\n DELETE_RECORD,\n NO,\n onRenderBlankFiller,\n PAGE_SIZE,\n presentDialogFailed,\n presentDialogSuccess,\n renderTableCheckmark, ROWS_PER_PAGE_OPTIONS,\n SUCCESSFULLY_DELETED, TABLE_HEIGHT_OPTIONS,\n UNSUCCESSFULLY_DELETED, useAsyncReference,\n YES\n} from \"../../constants\";\nimport ButtonDelete from \"../buttonDelete\";\nimport ButtonEdit from \"../buttonEdit\";\nimport {DialogContext} from \"../../services/dialogService\";\n\nconst UserListing = props =>\n{\n const [tableHeight, setTableHeight] = useState( 950 );\n const [rows, setRows] = useState( [] );\n const [rowCount, setRowCount] = useState( 0 );\n const [page, setPage] = useAsyncReference( 0 );\n const [pageSize, setPageSize] = useAsyncReference( 0 );\n const [gridApi, setGridApi] = useAsyncReference( null );\n const context = useRef( useContext( StateContext ) );\n const dialogContext = useContext( DialogContext );\n const onRenderIsActive = ( params ) => { return renderTableCheckmark( params.row.is_active ); };\n const onRenderIsAdmin = ( params ) => { return renderTableCheckmark( params.row.is_admin ); };\n const onRenderIsSupervisor = ( params ) => { return renderTableCheckmark( params.row.is_supervisor ); };\n const onRenderIsOperator = ( params ) => { return renderTableCheckmark( params.row.is_operator ); };\n const handlePageChange = ( params ) => { onPageChange( params ); refreshUserListing( params, gridApi.current ? gridApi.current.state.filter.items : null, gridApi.current ? gridApi.current.state.sorting.sortModel : null ); };\n const handleFilterModelChange = ( params ) => { refreshUserListing( params.api.state.pagination, params.filterModel.items, params.api.state.sorting.sortModel, params.api ); };\n const handleSortModelChange = ( params ) => { refreshUserListing( params.api.state.pagination, params.api.state.filter.items, params.sortModel, params.api ); };\n const onEditUser = ( row ) => { props.onEditUser( row.id ); };\n const onDeleteUser = ( row ) => { dialogContext.presentDialog( true, DELETE_RECORD, ARE_YOU_SURE_DELETE, NO, () => {}, YES, onDeleteUserPositive, { id: row.id }, null ); };\n const columns = [\n { field: \"edit\", filterable: false, headerName: ' ', width: 60, align: 'center', disableColumnMenu: true, disableClickEventBubbling: true, renderCell: ( params ) => { return onEditUser( params.row ) } /> ; } },\n { field: \"delete\", filterable: false, headerName: ' ', width: 60, align: 'center', disableColumnMenu: true, disableClickEventBubbling: true, renderCell: ( params ) => { return onDeleteUser( params.row ) } /> ; } },\n { field: 'id', filterable: false, hide: true },\n { field: 'username', headerName: 'Username', width: 200 },\n { field: 'first_name', headerName: 'First Name', width: 200 },\n { field: 'last_name', headerName: 'Last Name', width: 200 }, \n { field: 'is_active', headerName: 'Active', headerAlign: 'center', width: 150, align: 'center', renderCell: onRenderIsActive }, \n { field: 'is_admin', headerName: 'Admin', headerAlign: 'center', width: 150, align: 'center', renderCell: onRenderIsAdmin },\n { field: 'is_supervisor', headerName: 'Supervisor', headerAlign: 'center', width: 150, align: 'center', renderCell: onRenderIsSupervisor },\n { field: 'is_operator', headerName: 'Operator', headerAlign: 'center', width: 150, align: 'center', renderCell: onRenderIsOperator },\n { field: '__BLANK__', filterable: false, headerName: ' ', flex: 1, renderCell: onRenderBlankFiller }\n ];\n\n const refreshUserListing = ( params, filter, sort, api ) =>\n {\n let query = { page: ( params.page + 1 ), limit: params.pageSize };\n \n setPage( page.current = params.page );\n setPageSize( pageSize.current = params.pageSize );\n \n if( !gridApi.current )\n {\n setGridApi( gridApi.current = api );\n }\n \n if( filter )\n {\n query = { ...query, ...buildSearchQuery( filter ) };\n }\n \n if( sort )\n {\n query = { ...query, ...{ order_by: buildTableSort( sort ) } };\n }\n \n APIService( context.current )\n .getUsers\n (\n query, \n function( data )\n {\n if( filter && api )\n {\n api.state.pagination.page = ( data.currentPage - 1 );\n }\n \n setRowCount( data.rowCount );\n setRows( data.results );\n } );\n };\n \n useEffect( () =>\n\t{\n refreshUserListing( { page: 0, pageSize: PAGE_SIZE }, null, null );\n\t}, [] )\n \n const onDeleteUserPositive = ( data ) => {\n \n APIService( context.current ).deleteUser( data.id, function( success )\n {\n if( success )\n {\n presentDialogSuccess( dialogContext, SUCCESSFULLY_DELETED, () => { refreshUserListing( { page: page.current, pageSize: pageSize.current } ); } );\n }\n else\n {\n presentDialogFailed( dialogContext, UNSUCCESSFULLY_DELETED, null );\n }\n } );\n };\n \n const onPageChange = ( params ) =>\n {\n for( let i = 0; i < TABLE_HEIGHT_OPTIONS.length; i++ )\n {\n const height_option = TABLE_HEIGHT_OPTIONS[i];\n \n if( height_option.rows === params.pageSize )\n {\n setTableHeight( height_option.height );\n break;\n }\n }\n };\n \n return (\n
\n \n row.id } \n pagination \n pageSize={ PAGE_SIZE } \n rowCount={ rowCount } \n rowsPerPageOptions={ ROWS_PER_PAGE_OPTIONS } \n paginationMode=\"server\" \n onPageChange={ handlePageChange } \n onPageSizeChange={ handlePageChange }\n filterMode=\"server\" \n onFilterModelChange={ handleFilterModelChange }\n sortingMode=\"server\"\n onSortModelChange={ handleSortModelChange }\n disableSelectionOnClick\n disableColumnSelector/>\n \n
\n );\n}\n\nexport default UserListing;","import {useContext, useEffect, useRef, useState} from \"react\";\nimport {Paper} from \"@material-ui/core\";\nimport {Formik, Form} from 'formik';\nimport {StateContext} from \"../../stateService\";\nimport APIService from \"../../apiService\";\nimport FieldText from \"../fieldText\";\nimport FieldCheckboxWithLabel from \"../fieldCheckboxWithLabel\";\nimport ButtonPositive from \"../buttonPositive\";\nimport ButtonNeutral from \"../buttonNeutral\";\nimport {DialogContext} from \"../../services/dialogService\";\nimport {OK, OPERATION_FAILED, OPERATION_SUCCESSFUL, SUCCESSFULLY_ADDED, SUCCESSFULLY_UPDATED} from \"../../constants\";\n\nconst UserAddEdit = props =>\n{\n const context = useRef( useContext( StateContext ) );\n const dialogContext = useContext( DialogContext );\n const [user, setUser] = useState( { id: null, username: null, password: null, first_name: null, last_name: null, is_active: false, is_admin: false, is_supervisor: false, is_operator: false } );\n \n useEffect( () =>\n\t{\n\t if( !props.id ){ return; }\n\t \n\t\tAPIService( context.current ).getUser( props.id, function( data ) {\n\n setUser( { id: data.id, username: data.username, password: null, first_name: data.first_name, last_name: data.last_name, is_active: data.is_active, is_admin: data.is_admin, is_supervisor: data.is_supervisor, is_operator: data.is_operator } );\n\t \n } );\n\t\t\n\t}, [ props.id ] )\n \n const onCancel = () => { props.onAddEditComplete(); };\n \n const onSubmit = ( values, actions ) =>\n {\n APIService( context.current )\n .addEditUser(\n values, \n function( data ){\n actions.setSubmitting( false );\n \n let message = SUCCESSFULLY_ADDED;\n \n if( props.id )\n {\n message = SUCCESSFULLY_UPDATED;\n }\n \n dialogContext.presentDialog( true, OPERATION_SUCCESSFUL, message, null, null, OK, () => { props.onAddEditComplete(); }, null, null );\n },\n function( errors ){\n actions.setSubmitting( false );\n \n if( errors.validation_errors )\n {\n actions.setErrors( errors );\n }\n else\n {\n dialogContext.presentDialog( true, OPERATION_FAILED, errors, null, null, OK, null, null, null );\n }\n }\n );\n };\n \n return (\n
\n \n \n { ( { values, submitForm, isSubmitting, touched, errors, handleChange } ) => (\n
\n \n \n
\n \n \n
\n \n
\n \n
\n \n
\n \n
\n
\n \n \n \n ) }\n
\n
\n
\n );\n}\n\nexport default UserAddEdit;","import React from \"react\";\nimport {Paper, Tab, Tabs} from \"@material-ui/core\";\nimport UserListing from \"./userListing\";\nimport UserAddEdit from \"./userAddEdit\";\n\nexport default function Users()\n{\n const [value, setValue] = React.useState( 0 );\n const [id, setId] = React.useState( null );\n const handleChange = ( event, newValue ) => { setId( null ); setValue( newValue ); };\n\n function tabProps( index )\n {\n return { id: `tab-${ index }` };\n }\n \n function onEditUser( recordID )\n {\n setId( recordID );\n setValue( 1 );\n }\n \n function onAddEditComplete()\n {\n setId( null );\n setValue( 0 );\n }\n\n return (\n \n \n \n \n \n { value === 0 && }\n { value === 1 && }\n \n );\n}","import {Box, Grid, Paper, TextField} from \"@material-ui/core\";\nimport {DataGrid} from \"@material-ui/data-grid\";\nimport {\n ARE_YOU_SURE_DELETE,\n buildSearchQuery,\n buildTableSort,\n dateFormatter,\n DELETE_RECORD,\n NO,\n PAGE_SIZE,\n presentDialogFailed,\n presentDialogSuccess,\n renderTableCheckmark,\n ROWS_PER_PAGE_OPTIONS,\n SUCCESSFULLY_DELETED, TABLE_HEIGHT_OPTIONS,\n timeFormatter,\n UNSUCCESSFULLY_DELETED,\n useAsyncReference,\n YES\n} from \"../../constants\";\nimport {useContext, useEffect, useRef, useState} from \"react\";\nimport {StateContext} from \"../../stateService\";\nimport {DialogContext} from \"../../services/dialogService\";\nimport APIService from \"../../apiService\";\nimport ButtonEdit from \"../buttonEdit\";\nimport ButtonDelete from \"../buttonDelete\";\nimport ButtonPositive from \"../buttonPositive\";\nimport ButtonNeutral from \"../buttonNeutral\";\nimport {makeStyles} from \"@material-ui/core/styles\";\n\nconst ObituaryListing = props =>\n{\n const [tableHeight, setTableHeight] = useState( 950 );\n const [rows, setRows] = useState( [] );\n const [columns, setColumns] = useState( [] );\n const [rowCount, setRowCount] = useState( 0 );\n const [searchFieldKey, setSearchFieldKey] = useState( 0 );\n const [fields, setFields] = useAsyncReference( [] );\n const [searchText, setSearchText] = useAsyncReference( '' );\n const [page, setPage] = useAsyncReference( 0 );\n const [pageSize, setPageSize] = useAsyncReference( 0 );\n const [gridApi, setGridApi] = useAsyncReference( null );\n const context = useRef( useContext( StateContext ) );\n const dialogContext = useContext( DialogContext );\n const handlePageChange = ( params ) => { onPageChange( params ); refreshObituaryListing( params, gridApi.current ? gridApi.current.state.filter.items : null, gridApi.current ? gridApi.current.state.sorting.sortModel : null ); };\n const handleFilterModelChange = ( params ) => { refreshObituaryListing( params.api.state.pagination, params.filterModel.items, params.api.state.sorting.sortModel, params.api ); };\n const handleSortModelChange = ( params ) => { refreshObituaryListing( params.api.state.pagination, params.api.state.filter.items, params.sortModel, params.api ); };\n const onEditObituary = ( row ) => { props.onEditObituary( row.id ); };\n const onDeleteObituary = ( row ) => { dialogContext.presentDialog( true, DELETE_RECORD, ARE_YOU_SURE_DELETE, NO, () => {}, YES, onDeleteObituaryPositive, { id: row.id }, null ); };\n \n const useStyles = makeStyles( {\n root: {\n \"& .MuiOutlinedInput-inputMarginDense\": {\n paddingTop: '8px',\n paddingBottom: '9px'\n }\n }\n } );\n \n useEffect( () =>\n\t{\n\t const listener = event => \n {\n if( event.code === \"Enter\" || event.code === \"NumpadEnter\" )\n {\n event.preventDefault();\n \n event.target.blur();\n \n onSearch();\n }\n };\n\t \n\t\tdocument.addEventListener( \"keydown\", listener );\n\t\t\n getObituaryColumns();\n \n return () => { document.removeEventListener( \"keydown\", listener ); };\n \n\t}, [] )\n \n const getObituaryColumns = () => {\n \n APIService( context.current ).getObituaryColumns\n (\n function( data )\n {\n let cols = [\n { field: \"edit\", filterable: false, headerName: ' ', width: 60, align: 'center', disableColumnMenu: true, disableClickEventBubbling: true, renderCell: ( params ) => { if( !gridApi.current ){ setGridApi( gridApi.current = params.api ); } return onEditObituary( params.row ) } /> ; } }, \n { field: \"delete\", filterable: false, headerName: ' ', width: 60, align: 'center', disableColumnMenu: true, disableClickEventBubbling: true, renderCell: ( params ) => { return onDeleteObituary( params.row ) } /> ; } }\n ];\n \n for( let i = 0; i < data.length; i++ )\n {\n let columnDefinition = data[i];\n let column = { field: columnDefinition.column_name, headerName: columnDefinition.column_name, width: columnDefinition.column_width, hide: columnDefinition.is_identity };\n \n if( columnDefinition.is_visible !== true ){ continue; }\n \n if( ( columnDefinition.column_description ) && ( columnDefinition.column_description.length > 0 ) ){ column[\"headerName\"] = columnDefinition.column_description; }\n \n if( columnDefinition.type_name === 'datetime' )\n {\n if( column[\"headerName\"].toLowerCase().includes( 'stamp' ) )\n {\n column[\"valueFormatter\"] = ( { value } ) => { return dateFormatter( value ) + ' ' + timeFormatter( value ); }\n }\n else\n {\n column[\"valueFormatter\"] = ( { value } ) => { return dateFormatter( value ); }\n }\n }\n\n if( columnDefinition.type_name === 'bit' )\n {\n column[\"headerAlign\"] = 'center';\n column[\"align\"] = 'center';\n column[\"renderCell\"] = ( params ) => { return renderTableCheckmark( params.row[columnDefinition.column_name] ); }\n column[\"type\"] = 'boolean';\n }\n\n cols.push( column );\n }\n \n setColumns( cols );\n setFields( fields.current = data );\n\n refreshObituaryListing( { page: 0, pageSize: PAGE_SIZE }, null, null );\n }\n );\n }\n \n const refreshObituaryListing = ( params, filter, sort, api ) => {\n \n let query = { page: ( params.page + 1 ), limit: params.pageSize };\n \n setPage( page.current = params.page );\n setPageSize( pageSize.current = params.pageSize );\n \n if( !gridApi.current )\n {\n setGridApi( gridApi.current = api );\n }\n \n if( searchText.current )\n {\n query = { ...query, ...{ qualifier: 'OR' }, ...buildSearchQuery( buildSearchFilters() ) };\n }\n else\n {\n if( filter )\n {\n query = { ...query, ...buildSearchQuery( filter ) };\n }\n }\n \n if( sort )\n {\n query = { ...query, ...{ order_by: buildTableSort( sort ) } };\n }\n \n APIService( context.current )\n .getObituaries\n (\n query, \n function( data )\n {\n if( filter && api )\n {\n api.state.pagination.page = ( data.currentPage - 1 );\n }\n \n setRowCount( data.rowCount );\n setRows( data.results );\n }\n );\n };\n \n const onDeleteObituaryPositive = ( data ) => {\n \n APIService( context.current ).deleteObituary( data.id, function( success )\n {\n if( success )\n {\n presentDialogSuccess( dialogContext, SUCCESSFULLY_DELETED, () => { refreshObituaryListing( { page: page.current, pageSize: pageSize.current } ); } );\n }\n else\n {\n presentDialogFailed( dialogContext, UNSUCCESSFULLY_DELETED, null );\n }\n } );\n };\n \n const buildSearchFilters = () => {\n let filters = [];\n\n for( let i = 0; i < fields.current.length; i++ )\n {\n const field = fields.current[i];\n const filter = { columnField: field.column_name, operatorValue: \"contains\", value: searchText.current };\n \n if( field.type_name !== 'varchar' ){ continue; }\n\n filters.push( filter );\n }\n \n return filters;\n };\n \n const onSearch = () => {\n \n if( ( !searchText.current ) || ( searchText.current.length === 0 ) ){ return; }\n \n refreshObituaryListing( gridApi.current.state.pagination, null, gridApi.current.state.sorting.sortModel );\n };\n \n const onSearchReset = () => {\n setSearchText( searchText.current = '' );\n \n let key = searchFieldKey + 1;\n \n console.log( key );\n\n setSearchFieldKey( key );\n \n refreshObituaryListing( gridApi.current.state.pagination, null, gridApi.current.state.sorting.sortModel );\n };\n \n const onPageChange = ( params ) =>\n {\n for( let i = 0; i < TABLE_HEIGHT_OPTIONS.length; i++ )\n {\n const height_option = TABLE_HEIGHT_OPTIONS[i];\n \n if( height_option.rows === params.pageSize )\n {\n setTableHeight( height_option.height );\n break;\n }\n }\n };\n \n return (\n \n \n \n setSearchText( searchText.current = e.target.value ) } variant=\"outlined\" style={ { width: '100%' } }/>\n \n \n \n \n \n \n \n \n row.id }\n pagination\n pageSize={ PAGE_SIZE }\n rowCount={ rowCount }\n rowsPerPageOptions={ ROWS_PER_PAGE_OPTIONS }\n paginationMode=\"server\"\n onPageChange={ handlePageChange }\n onPageSizeChange={ handlePageChange }\n filterMode=\"server\"\n onFilterModelChange={ handleFilterModelChange }\n sortingMode=\"server\"\n onSortModelChange={ handleSortModelChange }\n disableSelectionOnClick\n disableColumnSelector\n componentsProps={ \n {\n pagination: \n {\n labelRowsPerPage: 'records per page',\n labelDisplayedRows: ( { from, to, count } ) => `records ${from}-${to} of total ${count} records`\n }\n } }/>\n \n \n );\n}\n\nexport default ObituaryListing;","import { TextField } from \"@material-ui/core\";\n\nconst FieldTextArea = props => {\n return (\n \n )\n}\n\nexport default FieldTextArea;","import React, {useContext, useEffect, useRef, useState} from 'react';\nimport TextField from '@material-ui/core/TextField';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport APIService from \"../apiService\";\nimport {StateContext} from \"../stateService\";\n\nconst FieldAutocomplete = ( { field, form, ...props } ) =>\n{\n const context = useRef( useContext( StateContext ) );\n const [options, setOptions] = useState( [] );\n const [value, setValue] = useState( null );\n const currentError = form.errors[field.name];\n\n useEffect( () => \n {\n let active = true;\n\n ( async () => {\n \n let results = null;\n \n if( props.url )\n {\n const response = await APIService( context.current ).asyncPost( props.url, props.url_data );\n \n if( ( !response.data ) && ( !response.data.data ) && ( !response.data.data.results ) )\n {\n return undefined;\n }\n \n results = response.data.data.results;\n }\n else\n {\n results = props.options;\n }\n \n if( field.value )\n {\n for( let i = 0; i < results.length; i++ )\n {\n const result = results[i];\n \n if( field.value === result[props.option_key] )\n {\n setValue( result );\n break;\n }\n }\n }\n \n if( active )\n {\n setOptions( results );\n }\n } )();\n\n return () => { active = false; };\n \n }, [field.value] );\n \n const onChange = ( event, newValue ) =>\n {\n if( newValue === null )\n {\n form.setFieldValue( field.name, null, false );\n }\n else\n {\n form.setFieldValue( field.name, newValue[props.option_key], false );\n }\n \n setValue( newValue );\n };\n\n return (\n option[props.option_key] === value[props.option_key] }\n getOptionLabel={ ( option ) => option[props.option_name] }\n options={ options }\n renderInput={ ( params ) => (\n { if( error !== currentError ){ form.setFieldError( field.name, error ); } } }\n helperText={ currentError }\n />\n )}\n />\n );\n}\n\nexport default FieldAutocomplete;","import {DatePicker} from \"@material-ui/pickers\";\nimport {IconButton} from \"@material-ui/core\";\nimport ClearIcon from \"@material-ui/icons/Clear\";\nimport {useEffect, useState} from \"react\";\nimport MomentUtils from \"@date-io/moment\";\n\nconst FieldDateText = ( { field, form, ...props } ) =>\n{\n const [value, setValue] = useState( null );\n \n const augmentStyle = ( styles ) =>\n {\n return Object.assign\n (\n {\n backgroundColor: '#fff',\n borderRadius: '3px',\n paddingLeft: '12px',\n paddingBottom: '7px',\n paddingRight: '12px'\n },\n styles\n );\n };\n \n useEffect( () => \n {\n if( field.value )\n {\n const moment = new MomentUtils();\n \n setValue( moment.date( field.value ) );\n }\n else\n {\n onChange( null );\n }\n \n }, [field.value] );\n\n const handleClear = ( e ) =>\n {\n e.stopPropagation();\n\n onChange( null );\n };\n \n const onChange = ( date ) =>\n {\n const moment = new MomentUtils();\n \n if( date )\n {\n date = moment.startOfDay( date ).utc().add( date.utcOffset(), 'm' );\n }\n \n form.setFieldValue( field.name, date, false );\n\n setValue( date );\n };\n \n return (\n onChange( date ) } \n style={ props.style ? augmentStyle( props.style ) : { margin: 5, width: '100%' } }\n format=\"MM/DD/yyyy\"\n variant=\"outlined\"\n InputProps={ {\n endAdornment: (\n handleClear( e ) }>\n \n \n )\n }}/>\n )\n}\n\nexport default FieldDateText;","import {useContext, useEffect, useRef, useState} from \"react\";\nimport APIService from \"../../apiService\";\nimport {StateContext} from \"../../stateService\";\nimport {DialogContext} from \"../../services/dialogService\";\nimport {Formik, Form, Field} from \"formik\";\nimport ButtonNeutral from \"../buttonNeutral\";\nimport ButtonPositive from \"../buttonPositive\";\nimport {Paper} from \"@material-ui/core\";\nimport FieldText from \"../fieldText\";\nimport FieldCheckboxWithLabel from \"../fieldCheckboxWithLabel\";\nimport {\n dateFormatterAlt, getToday,\n OK,\n OPERATION_FAILED,\n OPERATION_SUCCESSFUL,\n SUCCESSFULLY_ADDED,\n SUCCESSFULLY_UPDATED\n} from \"../../constants\";\nimport FieldTextArea from \"../fieldTextArea\";\nimport FieldAutocomplete from \"../fieldAutocomplete\";\nimport {useViewport} from \"../../viewportService\";\nimport FieldDateText from \"../fieldDateTime\";\n\nconst ObituaryAddEdit = props =>\n{\n const isMobile\t = useViewport().width < 640;\n const context = useRef( useContext( StateContext ) );\n const dialogContext = useContext( DialogContext );\n const [fields, setFields] = useState( [] );\n const [obituary, setObituary] = useState( {} );\n \n useEffect( () =>\n\t{\n\t APIService( context.current ).getObituaryColumns( function( data ) {\n\t setFields( data );\n\t \n\t if( !props.id ){ return; }\n\t \n\t APIService( context.current ).getObituary( props.id, function( data ) { setObituary( data ); window.scrollTo( 0, 0 ) } );\n\t } );\n\t\t\n\t}, [ props.id ] )\n \n const onCancel = () => { props.onAddEditComplete(); };\n \n const onSubmit = ( values, actions ) => \n {\n const errors = {};\n \n // Check for any required fields prior to submission ...\n for( let i = 0; i < fields.length; i++ )\n {\n const field = fields[i];\n \n if( field.is_identity === true ){ continue; }\n if( field.is_editable !== true ){ continue; }\n if( field.is_required !== true ){ continue; }\n \n if( !values.hasOwnProperty( field.column_name ) )\n {\n errors[field.column_name] = 'Required';\n \n actions.setFieldTouched( field.column_name, true );\n }\n }\n \n if( Object.keys( errors ).length > 0 )\n {\n actions.setSubmitting( false );\n actions.setErrors( errors );\n \n dialogContext.presentDialog( true, OPERATION_FAILED, 'Please check your submission for errors.', null, null, OK, null, null, null );\n \n return;\n }\n \n APIService( context.current )\n .addEditObituary(\n values, \n function( data ){\n actions.setSubmitting( false );\n \n let message = SUCCESSFULLY_ADDED;\n \n if( props.id )\n {\n message = SUCCESSFULLY_UPDATED;\n }\n \n dialogContext.presentDialog( true, OPERATION_SUCCESSFUL, message, null, null, OK, () => { props.onAddEditComplete(); }, null, null );\n },\n function( errors ){\n \n actions.setSubmitting( false );\n actions.setErrors( errors );\n }\n );\n\t};\n \n const renderFormElements = ( values, errors, touched, handleChange ) => {\n\n let elements = [];\n \n for( let i = 0; i < fields.length; i++ )\n {\n const field = fields[i];\n let label = field.column_name;\n const width = isMobile ? 250 : '100%';\n \n if( field.is_identity === true ){ continue; }\n if( field.is_editable !== true ){ continue; }\n \n if( ( field.column_description ) && ( field.column_description.length > 0 ) )\n {\n label = field.column_description;\n }\n \n // Is this field conditionally displayed ...\n if( ( field.display_when ) && ( field.display_when.length > 0 ) )\n {\n const display_rules = field.display_when.split( '=' );\n const field_name = display_rules[0];\n const field_value = display_rules[1];\n let field_hidden = true;\n \n if( values.hasOwnProperty( field_name ) === true )\n {\n if( values[field_name] !== null )\n {\n if( field_value.toLowerCase() === values[field_name].toLowerCase() )\n {\n field_hidden = false;\n }\n }\n }\n \n if( field_hidden === true )\n {\n continue;\n }\n }\n \n if( field.column_name === 'client_id' )\n {\n elements.push(
);\n }\n else if( ( field.options ) && ( field.options.length > 0 ) )\n {\n const field_options = field.options.split( ',' );\n let options = [];\n\n for( let j = 0; j < field_options.length; j++ )\n {\n const option = field_options[j].trim();\n \n options.push( { id: option, name: option } );\n }\n \n elements.push(
);\n }\n else if( field.type_name === 'varchar' )\n {\n if( ( field.max_length >= 200 ) || ( field.max_length < 0 ) )\n {\n elements.push(

);\n }\n else\n {\n elements.push(

);\n }\n }\n else if( field.type_name === 'bit' )\n {\n if( field.default_value )\n {\n if( field.default_value === '1' )\n {\n values[field.column_name] = true;\n }\n else\n {\n values[field.column_name] = false;\n }\n }\n \n elements.push(

);\n }\n else if( field.type_name === 'datetime' )\n {\n elements.push(

);\n }\n }\n \n return elements;\n }\n \n return (\n
\n \n \n { ( { values, submitForm, isSubmitting, touched, errors, handleChange } ) => (\n
\n \n \n
\n
\n { renderFormElements( values, errors, touched, handleChange ) }\n
\n
\n \n \n
\n
\n \n ) }\n
\n
\n
\n );\n}\n\nexport default ObituaryAddEdit;","import React from 'react';\nimport TextField from '@material-ui/core/TextField';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport {makeStyles} from \"@material-ui/core/styles\";\n\nconst FieldAutocompleteNonForm = ( props ) =>\n{\n const useStyles = makeStyles(theme => ( {\n input: {\n paddingTop: '2px',\n paddingBottom: '2px'\n },\n root: {\n \"& .MuiFormControl-fullWidth\": {\n marginTop: '20px'\n },\n \"& .MuiFormControl-fullWidth .MuiFormLabel-root\": {\n color: '#424242',\n fontWeight: 700,\n transform: 'translate(14px, 16px)',\n backgroundColor: 'rgba(0,0,0,0)'\n },\n \"& .MuiFormControl-fullWidth .MuiInputLabel-shrink\": {\n color: '#fff',\n fontWeight: 700,\n transform: 'translate(14px, -20px)',\n backgroundColor: 'rgba(0,0,0,0)'\n },\n \"& .MuiFormControl-fullWidth .MuiInputBase-input\": {\n paddingTop: '14px !important'\n }\n }\n } ) );\n \n const onChange = ( event, newValue ) =>\n {\n if( props.onChange )\n {\n props.onChange( props.id, newValue );\n }\n };\n \n const classes = useStyles();\n\n return (\n option[props.option_key] === value[props.option_key] }\n getOptionLabel={ ( option ) => option[props.option_name] }\n options={ props.options }\n classes={ classes }\n renderInput={ ( params ) => (\n \n )}\n />\n );\n}\n\nexport default FieldAutocompleteNonForm;","import {\n Grid,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableContainer, TableFooter,\n TableHead, TablePagination,\n TableRow\n} from \"@material-ui/core\";\nimport {Formik, Form, Field} from \"formik\";\nimport ButtonNeutral from \"../buttonNeutral\";\nimport ButtonPositive from \"../buttonPositive\";\nimport {useViewport} from \"../../viewportService\";\nimport {useContext, useEffect, useRef, useState} from \"react\";\nimport {DialogContext} from \"../../services/dialogService\";\nimport {StateContext} from \"../../stateService\";\nimport APIService from \"../../apiService\";\nimport {\n camelCase,\n dateFormatter, dateFormatterAlt, getToday,\n OK, OPERATION_FAILED,\n OPERATION_SUCCESSFUL,\n ROWS_PER_PAGE_OPTIONS,\n SUCCESSFULLY_ADDED,\n SUCCESSFULLY_UPDATED\n} from \"../../constants\";\nimport FieldAutocomplete from \"../fieldAutocomplete\";\nimport FieldTextArea from \"../fieldTextArea\";\nimport FieldText from \"../fieldText\";\nimport FieldCheckboxWithLabel from \"../fieldCheckboxWithLabel\";\nimport FieldAutocompleteNonForm from \"../fieldAutocompleteNonForm\";\nimport FieldDateText from \"../fieldDateTime\";\nimport IconButton from '@material-ui/core/IconButton';\nimport FirstPageIcon from '@material-ui/icons/FirstPage';\nimport KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft';\nimport KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight';\nimport LastPageIcon from '@material-ui/icons/LastPage';\n\nconst ObituaryGridView = props => \n{\n const isMobile\t = useViewport().width < 640;\n const context = useRef( useContext( StateContext ) );\n const dialogContext = useContext( DialogContext );\n const [fields, setFields] = useState( [] );\n const [columns, setColumns] = useState( [] );\n const [obituary, setObituary] = useState( {} );\n const [obituaries, setObituaries] = useState( [] );\n const [filteredObituaries, setFilteredObituaries] = useState( [] );\n const [searchFields, setSearchFields] = useState( null );\n const [filter, setFilter] = useState( null );\n const [selectedRow, setSelectedRow] = useState( null );\n\n const [currentPage, setCurrentPage] = useState( 0 );\n const [pageSize, setPageSize] = useState( 15 );\n const [rowCount, setRowCount] = useState( 0 );\n \n useEffect( () => { refreshData(); }, [] )\n \n const refreshData = ( params ) => {\n APIService( context.current ).getObituaryColumns( function( response ) {\n\t \n\t setFields( response );\n\t \n\t const filtered_columns = response.filter( function( row ) { return row.is_grid_table === true; } );\n\n setColumns( filtered_columns );\n\n APIService( context.current ).getObituaries( { page: 1, limit: 9999 }, function( data ) { \n \n const results = data.results;\n let search_fields = {};\n let filter_fields = {};\n let isPurgeColumn = false;\n \n // Need to build up autocomplete selectors ...\n for( let x = 0; x < filtered_columns.length; x++ )\n {\n const filtered_column = filtered_columns[x];\n\n search_fields[filtered_column.column_name] = [];\n filter_fields[filtered_column.column_name] = null;\n \n for( let i = 0; i < results.length; i++ )\n {\n const result = results[i];\n let name = result[filtered_column.column_name];\n \n if( filtered_column.type_name === 'datetime' )\n {\n name = dateFormatter( name );\n }\n else if( filtered_column.type_name === 'bit' )\n {\n if( name === true )\n {\n name = 'Yes';\n }\n else\n {\n name = 'No';\n }\n }\n \n if( !name ){ continue; }\n \n // Is there any selected column with \"purge\" in the name ...\n if( filtered_column.column_name.toLowerCase().includes( 'purge' ) === true )\n {\n // ... default to show non-purged ...\n isPurgeColumn = true;\n \n filter_fields[filtered_column.column_name] = 'No';\n }\n \n // Do not add duplicates ...\n const exists = search_fields[filtered_column.column_name].filter( function( row ){ return row.name === name; } );\n \n if( ( exists === null ) || ( exists.length === 0 ) )\n {\n search_fields[filtered_column.column_name].push( { id: i, name: name } );\n }\n }\n\n search_fields[filtered_column.column_name].sort\n (\n function( a, b )\n {\n const nameA = a.name.toUpperCase();\n const nameB = b.name.toUpperCase();\n \n if( nameA < nameB ){ return -1; }\n if( nameA > nameB ){ return 1; }\n \n return 0;\n }\n );\n }\n \n if( isPurgeColumn === true )\n {\n performObituaryFilter( filtered_columns, filter_fields, data.results );\n }\n else\n {\n setFilteredObituaries( data.results );\n }\n\n setSearchFields( search_fields );\n setFilter( filter_fields );\n setObituaries( data.results );\n \n setRowCount( data.rowCount );\n \n window.scrollTo( 0, 0 ); \n } );\n\t } );\n };\n \n const onNew = () => { setSelectedRow( null ); setObituary( {} ) };\n \n const onSubmit = ( values, actions ) => \n {\n const errors = {};\n \n // Check for any required fields prior to submission ...\n for( let i = 0; i < fields.length; i++ )\n {\n const field = fields[i];\n \n if( field.is_identity === true ){ continue; }\n if( field.is_editable !== true ){ continue; }\n if( field.is_required !== true ){ continue; }\n \n if( !values.hasOwnProperty( field.column_name ) )\n {\n errors[field.column_name] = 'Required';\n \n actions.setFieldTouched( field.column_name, true );\n }\n }\n \n if( Object.keys( errors ).length > 0 )\n {\n actions.setSubmitting( false );\n actions.setErrors( errors );\n \n dialogContext.presentDialog( true, OPERATION_FAILED, 'Please check your submission for errors.', null, null, OK, null, null, null );\n \n return;\n }\n \n APIService( context.current )\n .addEditObituary(\n values, \n function( data ){\n actions.setSubmitting( false );\n \n let message = SUCCESSFULLY_ADDED;\n \n if( selectedRow )\n {\n message = SUCCESSFULLY_UPDATED;\n }\n \n dialogContext.presentDialog( true, OPERATION_SUCCESSFUL, message, null, null, OK, () => { onNew(); refreshData(); }, null, null );\n },\n function( errors ){\n \n actions.setSubmitting( false );\n actions.setErrors( errors );\n }\n );\n\t};\n \n const renderFormElements = ( values, errors, touched, handleChange ) => {\n\n let elements = [];\n \n for( let i = 0; i < fields.length; i++ )\n {\n const field = fields[i];\n let label = field.column_name;\n const width = isMobile ? 250 : '100%';\n \n if( field.is_identity === true ){ continue; }\n if( field.is_editable !== true ){ continue; }\n \n if( ( field.column_description ) && ( field.column_description.length > 0 ) )\n {\n label = field.column_description;\n }\n \n // Is this field conditionally displayed ...\n if( ( field.display_when ) && ( field.display_when.length > 0 ) )\n {\n const display_rules = field.display_when.split( '=' );\n const field_name = display_rules[0];\n const field_value = display_rules[1];\n let field_hidden = true;\n \n if( values.hasOwnProperty( field_name ) === true )\n {\n if( values[field_name] !== null )\n {\n if( field_value.toLowerCase() === values[field_name].toLowerCase() )\n {\n field_hidden = false;\n }\n }\n }\n \n if( field_hidden === true )\n {\n continue;\n }\n }\n \n if( field.column_name === 'client_id' )\n {\n elements.push(
);\n }\n else if( ( field.options ) && ( field.options.length > 0 ) )\n {\n const field_options = field.options.split( ',' );\n let options = [];\n\n for( let j = 0; j < field_options.length; j++ )\n {\n const option = field_options[j].trim();\n \n options.push( { id: option, name: option } );\n }\n \n elements.push(
);\n }\n else if( field.type_name === 'varchar' )\n {\n if( ( field.max_length >= 200 ) || ( field.max_length < 0 ) )\n {\n elements.push(

);\n }\n else\n {\n elements.push(

);\n }\n }\n else if( field.type_name === 'bit' )\n {\n if( field.default_value )\n {\n if( field.default_value === '1' )\n {\n values[field.column_name] = true;\n }\n else\n {\n values[field.column_name] = false;\n }\n }\n \n elements.push(

);\n }\n else if( field.type_name === 'datetime' )\n { \n elements.push(

);\n }\n }\n\n return elements;\n };\n\n const onTableRowClick = ( event, data ) => { setSelectedRow( data.id ); setObituary( data ); };\n \n const performObituaryFilter = ( grid_columns, new_filter, filtered_obituaries ) => {\n \n for( let i = 0; i < grid_columns.length; i++ )\n {\n const column_name = grid_columns[i].column_name;\n let filter_value = new_filter[column_name];\n let isDateTime = false;\n let isBoolean = false;\n \n if( filter_value === null ){ continue; }\n \n if( grid_columns[i].type_name === 'datetime' )\n {\n filter_value = dateFormatter( filter_value );\n isDateTime = true;\n }\n else if( grid_columns[i].type_name === 'bit' )\n {\n isBoolean = true;\n }\n \n filtered_obituaries = filtered_obituaries.filter\n (\n function( row )\n {\n if( isDateTime === true )\n {\n return dateFormatter( row[column_name] ) === filter_value;\n }\n else if( isBoolean === true )\n {\n if( row[column_name] === true )\n {\n return filter_value === 'Yes';\n }\n else\n {\n return filter_value === 'No';\n }\n }\n \n return row[column_name] === filter_value;\n }\n );\n }\n\n setCurrentPage( 0 );\n setRowCount( filtered_obituaries.length );\n setFilteredObituaries( filtered_obituaries );\n };\n \n const onSearchFieldSelection = ( id, value ) => {\n \n let new_filter = { ...filter };\n let filtered_obituaries = obituaries;\n\n if( value == null )\n {\n new_filter[id] = null;\n }\n else\n {\n new_filter[id] = value.name;\n }\n\n performObituaryFilter( columns, new_filter, filtered_obituaries );\n \n setFilter( new_filter );\n };\n \n const getTableCell = ( row, column ) => {\n \n let cell_value = row[column.column_name];\n \n if( column.type_name === 'datetime' )\n {\n cell_value = dateFormatter( cell_value );\n }\n else if( column.type_name === 'bit' )\n {\n if( cell_value === true )\n {\n cell_value = 'Yes';\n }\n else\n {\n cell_value = 'No';\n }\n }\n \n return { cell_value };\n };\n \n const TablePaginationActions = ( props ) =>\n {\n const { count, page, rowsPerPage, onChangePage } = props;\n\n const handleFirstPageButtonClick = ( event ) => { onChangePage( event, 0 ); };\n const handleBackButtonClick = ( event ) => { onChangePage( event, page - 1 ); };\n const handleNextButtonClick = ( event ) => { onChangePage( event, page + 1 ); };\n const handleLastPageButtonClick = ( event ) => { onChangePage( event, Math.max( 0, Math.ceil( count / rowsPerPage ) - 1 ) ); };\n const disabledColor = 'rgba( 255, 255, 255, 0.3 )';\n \n return (\n
\n \n \n = Math.ceil(count / rowsPerPage) - 1 ) ? disabledColor : 'inherit' } } onClick={ handleNextButtonClick } disabled={ page >= Math.ceil( count / rowsPerPage ) - 1 }>\n = Math.ceil( count / rowsPerPage ) - 1 ) ? disabledColor : 'inherit' } } onClick={ handleLastPageButtonClick } disabled={ page >= Math.ceil( count / rowsPerPage ) - 1 }>\n
\n );\n };\n \n const onChangePage = ( event, page ) =>\n {\n setCurrentPage( page );\n };\n \n const onChangeRowsPerPage = ( event ) =>\n {\n setPageSize( parseInt( event.target.value, 10 ) );\n };\n \n return (\n
\n \n \n \n \n { searchFields &&\n \n \n \n \n { columns.map( ( column ) => (\n \n \n \n ) ) }\n \n \n \n {\n filteredObituaries.slice( ( currentPage * pageSize ), ( ( currentPage * pageSize ) + pageSize ) ).map( ( row ) => (\n onTableRowClick( event, row ) } style={ { cursor: \"pointer\" } }>\n { columns.map( ( column ) => (\n getTableCell( row, column )\n ) ) }\n \n ) ) }\n \n \n \n \n \n \n
\n
\n }\n
\n
\n \n \n { ( { values, submitForm, isSubmitting, touched, errors, handleChange } ) => (\n
\n \n \n
\n
\n { renderFormElements( values, errors, touched, handleChange ) }\n
\n \n
\n \n ) }\n
\n
\n
\n
\n
\n );\n}\n\nexport default ObituaryGridView;","import React from \"react\";\nimport {Paper, Tab, Tabs} from \"@material-ui/core\";\nimport ObituaryListing from \"./obituaryListing\";\nimport ObituaryAddEdit from \"./obituaryAddEdit\";\nimport ObituaryGridView from \"./obituaryGridView\";\n\nexport default function Obituaries()\n{\n const [value, setValue] = React.useState( 0 );\n const [id, setId] = React.useState( null );\n const handleChange = ( event, newValue ) => { setId( null ); setValue( newValue ); };\n\n function tabProps( index )\n {\n return { id: `tab-${ index }` };\n }\n \n function onEditObituary( recordID )\n {\n setId( recordID );\n setValue( 2 );\n }\n \n function onAddEditComplete()\n {\n setId( null );\n setValue( 1 );\n }\n\n return (\n \n \n \n \n \n \n { value === 0 && }\n { value === 1 && }\n { value === 2 && }\n \n );\n}","import React, {useContext, useEffect, useRef} from \"react\";\nimport {\n\tAppBar, Box,\n\tCssBaseline,\n\tDivider,\n\tDrawer,\n\tHidden,\n\tIconButton, List, ListItem, ListItemIcon, ListItemText,\n\tToolbar\n} from \"@material-ui/core\";\nimport MenuIcon from '@material-ui/icons/Menu';\nimport InboxIcon from '@material-ui/icons/MoveToInbox';\nimport {makeStyles, useTheme} from '@material-ui/core/styles';\nimport Clients from \"../components/clients/clients\";\nimport Users from \"../components/users/users\";\nimport Obituaries from \"../components/obituaries/obituaries\";\nimport ButtonNeutral from \"../components/buttonNeutral\";\nimport {StateContext} from \"../stateService\";\nimport {withRouter} from \"react-router-dom\";\nimport ClientUsers from \"../components/clients/clientUsers/clientUsers\";\n\nconst Administration = props =>\n{\n\tconst drawerWidth = 240;\n\n\tconst useStyles = makeStyles( ( theme ) => ( {\n\t\troot: {\n\t\t\tdisplay: 'flex',\n\t\t},\n\t\tdrawer: {\n\t\t\t[theme.breakpoints.up('sm')]: {\n\t\t\t\twidth: drawerWidth,\n\t\t\t\tflexShrink: 0,\n\t\t\t},\n\t\t},\n\t\tappBar: {\n\t\t\t[theme.breakpoints.up('sm')]: {\n\t\t\t\twidth: `calc(100% - ${drawerWidth}px)`,\n\t\t\t\tmarginLeft: drawerWidth,\n\t\t\t},\n\t\t\tbackgroundColor: '#424242'\n\t\t},\n\t\tmenuButton: {\n\t\t\tmarginRight: theme.spacing(2),\n\t\t\t[theme.breakpoints.up('sm')]: {\n\t\t\t\tdisplay: 'none',\n\t\t\t},\n\t\t},\n\t\ttoolbar: theme.mixins.toolbar,\n\t\tdrawerPaper: {\n\t\t\twidth: drawerWidth,\n\t\t},\n\t\tcontent: {\n\t\t\tflexGrow: 1,\n\t\t\tpadding: theme.spacing(3),\n\t\t},\n\t}));\n\n\tconst context \t\t\t= useRef( useContext( StateContext ) );\n\tconst classes\t\t\t\t\t\t= useStyles();\n\tconst theme\t\t\t\t\t\t\t= useTheme();\n\tconst [mobileOpen, setMobileOpen]\t= React.useState( false );\n\tconst [menuItems, setMenuItems]\t\t= React.useState( [] );\n\tconst [activeItem, setActiveItem]\t= React.useState( null );\n\tconst handleDrawerToggle\t\t\t= () => { setMobileOpen( !mobileOpen ); };\n\tconst container\t\t\t\t\t\t= window !== undefined ? () => window.document.body : undefined;\n\n\tuseEffect( () =>\n\t{\n\t\tswitch( context.current.access )\n\t\t{\n\t\t\tcase 99:\n\t\t\t{\n\t\t\t\tsetMenuItems( [ { 'name': 'Users', 'component': , 'icon': }, { 'name': 'Clients', 'component': , 'icon': }, { 'name': 'Client Users', 'component': , 'icon': }, { 'name': 'Obituaries', 'component': , 'icon': } ] );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 2:\n\t\t\t{\n\t\t\t\tsetMenuItems( [ { 'name': 'Clients', 'component': , 'icon': }, { 'name': 'Client Users', 'component': , 'icon': }, { 'name': 'Obituaries', 'component': , 'icon': } ] );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 1:\n\t\t\t{\n\t\t\t\tsetMenuItems( [ { 'name': 'Obituaries', 'component': , 'icon': } ] );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t}, [] );\n\n\tconst drawer = (\n\t\t
\n\t\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\t{ menuItems.map( ( item, index ) => (\n\t\t\t\t\t onMenuItemSelected( index ) } selected={ !!( activeItem && activeItem.name === item.name ) } >\n\t\t\t\t\t\t{ item.icon }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) ) }\n\t\t\t\n\t\t
\n\t);\n\n\tconst onMenuItemSelected = ( index ) =>\n\t{\n\t\tsetActiveItem( menuItems[index] );\n\t}\n\t\n\tconst onLogout = () =>\n {\n context.current.update( 'token', null );\n \n props.history.push( \"/\" )\n };\n\t\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\"\"\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t{ activeItem && activeItem.component }\n\t\t\t
\n\t\t
\n\t);\n}\n\nexport default withRouter( Administration );","import React from \"react\";\nimport {makeStyles} from '@material-ui/core/styles';\nimport {Box, Container, CssBaseline, Grid, Link, Paper, Typography} from \"@material-ui/core\";\nimport {Copyright} from \"../constants\";\nimport { ContactPhoneOutlined, DateRangeOutlined, PhoneCallbackOutlined, RecordVoiceOverOutlined } from \"@material-ui/icons\";\nimport {useViewport} from \"../viewportService\";\n\nexport default function Index()\n{\n\tconst isMobile\t= useViewport().width < 640;\n const useStyles = makeStyles( ( theme ) => ( {\n\t\troot: {\n\t\t\tmarginTop:\t\ttheme.spacing( 4 ),\n\t\t\tdisplay:\t\t'flex',\n\t\t\tflexDirection:\t'column',\n\t\t\talignItems:\t\t'center'\n\t\t},\n\t\tpaper: {\n\t\t\tpadding:\t\t30,\n\t\t\twidth:\t\t\t250,\n\t\t\theight:\t\t\t200,\n\t\t\tdisplay:\t\t'flex',\n\t\t\tflexDirection:\t'column',\n\t\t\talignItems:\t\t'center',\n\t\t\ttextAlign:\t\t'center'\n\t\t}\n\t} ) );\n \n const classes = useStyles();\n\t\n return (\n\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\"\"\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tService Arrangements\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tOn Call Personnel\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tMessages / Call Monitoring\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tContact Us\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t);\n}","import {Avatar, Box, Container, CssBaseline, Link, makeStyles, Typography} from \"@material-ui/core\";\nimport {withRouter} from 'react-router-dom'\nimport {Copyright} from \"../constants\";\nimport LockOpenOutlinedIcon from '@material-ui/icons/LockOpenOutlined';\nimport {Formik, Form} from 'formik';\nimport {useContext, useEffect, useRef, useState} from \"react\";\nimport FieldText from \"../components/fieldText\";\nimport ButtonNeutral from \"../components/buttonNeutral\";\nimport ButtonPositive from \"../components/buttonPositive\";\nimport APIService from \"../apiService\";\nimport {StateContext} from \"../stateService\";\n\nconst Login = props => {\n\tconst [user]\t= useState( { username: null, password: null } );\n\tconst context\t= useRef( useContext( StateContext ) );\n\tconst formRef\t= useRef();\n\t\n const useStyles = makeStyles( ( theme ) => ( {\n\t\troot: {\n\t\t\tmarginTop:\t\ttheme.spacing( 4 ),\n\t\t\tdisplay:\t\t'flex',\n\t\t\tflexDirection:\t'column',\n\t\t\talignItems:\t\t'center'\n\t\t},\n\t\tavatar: {\n\t\t\tmargin:\t\t\t\ttheme.spacing( 1 ),\n\t\t\tbackgroundColor:\ttheme.palette.primary.main\n\t\t}\n\t} ) );\n \n const classes = useStyles();\n\n\tuseEffect( () => {\n\t\tconst listener = event => {\n\t\t\tif( event.code === \"Enter\" || event.code === \"NumpadEnter\" )\n\t\t\t{\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif( formRef.current ){ formRef.current.handleSubmit(); }\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener( \"keydown\", listener );\n\t\t\n\t\treturn () => { document.removeEventListener( \"keydown\", listener ); };\n\t}, [] );\n\n\tconst onCancel = () => { props.history.push( \"/\" ); };\n\n\tconst onSubmit = ( values, actions ) => {\n\t\tAPIService( context.current )\n .authenticate(\n values, \n function( data ){\n actions.setSubmitting( false );\n \n props.history.push( data.redirect );\n },\n function( errors ){\n \t\n actions.setSubmitting( false );\n actions.setErrors( errors );\n }\n );\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\"\"/\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tSign In\n\t\t\t\t\n { ( { values, submitForm, isSubmitting, touched, errors, handleChange } ) => (\n
\n\t\t\t\t\t\t\n\t\t\t\t\t\t
\n \n\t\t\t\t\t\t
\n \t\n \t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tForgot Password?\n\t\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t);\n}\n\nexport default withRouter( Login );","import {Avatar, Box, Container, CssBaseline, makeStyles, Typography} from \"@material-ui/core\";\nimport {withRouter} from 'react-router-dom'\nimport {Copyright, OK, OPERATION_SUCCESSFUL} from \"../constants\";\nimport VpnKeyOutlinedIcon from '@material-ui/icons/VpnKeyOutlined';\nimport {Formik, Form} from 'formik';\nimport {useContext, useEffect, useRef, useState} from \"react\";\nimport FieldText from \"../components/fieldText\";\nimport ButtonNeutral from \"../components/buttonNeutral\";\nimport ButtonPositive from \"../components/buttonPositive\";\nimport APIService from \"../apiService\";\nimport {StateContext} from \"../stateService\";\nimport {DialogContext} from \"../services/dialogService\";\n\nconst ForgotPassword = props => {\n\tconst [user]\t\t= useState( { username: null } );\n\tconst context\t\t= useRef( useContext( StateContext ) );\n const dialogContext\t= useContext( DialogContext );\n\tconst formRef\t\t= useRef();\n\t\n const useStyles = makeStyles( ( theme ) => ( {\n\t\troot: {\n\t\t\tmarginTop:\t\ttheme.spacing( 4 ),\n\t\t\tdisplay:\t\t'flex',\n\t\t\tflexDirection:\t'column',\n\t\t\talignItems:\t\t'center'\n\t\t},\n\t\tavatar: {\n\t\t\tmargin:\t\t\t\ttheme.spacing( 1 ),\n\t\t\tbackgroundColor:\ttheme.palette.primary.main,\n\t\t}\n\t} ) );\n \n const classes = useStyles();\n \n useEffect( () => {\n\t\tconst listener = event => {\n\t\t\tif( event.code === \"Enter\" || event.code === \"NumpadEnter\" )\n\t\t\t{\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif( formRef.current ){ formRef.current.handleSubmit(); }\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener( \"keydown\", listener );\n\t\t\n\t\treturn () => { document.removeEventListener( \"keydown\", listener ); };\n\t}, [] );\n\n\tconst onCancel = () => { props.history.push( \"/login\" ) };\n\n\tconst onSubmit = ( values, actions ) => {\n\t\tAPIService( context.current )\n .forgotPassword(\n values, \n function( data ){\n actions.setSubmitting( false );\n \n dialogContext.presentDialog( true, OPERATION_SUCCESSFUL, \"A password request has been sent to the email address on file.\", null, null, OK, () => { onCancel(); }, null, null );\n },\n function( errors ){\n \t\n actions.setSubmitting( false );\n actions.setErrors( errors );\n }\n );\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\"\"\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tForgot Password\n\t\t\t\tEnter the username your account
and we'll send you an email with a link to reset your password.
\n\t\t\t\t\n { ( { values, submitForm, isSubmitting, touched, errors, handleChange } ) => (\n
\n\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n \t\n \t\n\t\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t);\n}\n\nexport default withRouter( ForgotPassword );","import {Avatar, Box, Container, CssBaseline, makeStyles, Typography} from \"@material-ui/core\";\nimport {withRouter, useParams} from 'react-router-dom'\nimport {Copyright, OK, OPERATION_SUCCESSFUL} from \"../constants\";\nimport VpnKeyOutlinedIcon from '@material-ui/icons/VpnKeyOutlined';\nimport {Formik, Form} from 'formik';\nimport {useContext, useRef, useState} from \"react\";\nimport FieldText from \"../components/fieldText\";\nimport ButtonNeutral from \"../components/buttonNeutral\";\nimport ButtonPositive from \"../components/buttonPositive\";\nimport APIService from \"../apiService\";\nimport {StateContext} from \"../stateService\";\nimport {DialogContext} from \"../services/dialogService\";\n\nconst ResetPassword = props => {\n\tconst { token }\t\t= useParams();\n\tconst [user]\t\t= useState( { password: null, confirm_password: null, token: null } );\n\tconst context\t\t= useRef( useContext( StateContext ) );\n const dialogContext\t= useContext( DialogContext );\n\t\n const useStyles = makeStyles( ( theme ) => ( {\n\t\troot: {\n\t\t\tmarginTop:\t\ttheme.spacing( 4 ),\n\t\t\tdisplay:\t\t'flex',\n\t\t\tflexDirection:\t'column',\n\t\t\talignItems:\t\t'center'\n\t\t},\n\t\tavatar: {\n\t\t\tmargin:\t\t\t\ttheme.spacing( 1 ),\n\t\t\tbackgroundColor:\ttheme.palette.primary.main,\n\t\t}\n\t} ) );\n \n const classes = useStyles();\n\n\tconst onCancel = () => { props.history.push( \"/login\" ) };\n\n\tconst onSubmit = ( values, actions ) => {\n\t\t\n\t\tvalues.token = token;\n\t\t\n\t\tAPIService( context.current )\n .resetPassword(\n values, \n function( data ){\n actions.setSubmitting( false );\n \n dialogContext.presentDialog( true, OPERATION_SUCCESSFUL, \"Password successfully changed.\", null, null, OK, () => { onCancel(); }, null, null );\n },\n function( errors ){\n \t\n actions.setSubmitting( false );\n actions.setErrors( errors );\n }\n );\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\"\"\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tReset Password\n\t\t\t\tPlease enter your new password.\n\t\t\t\t\n { ( { values, submitForm, isSubmitting, touched, errors, handleChange } ) => (\n
\n \n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n \t\n \t\n\t\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t);\n}\n\nexport default withRouter( ResetPassword );","import React, {useContext, useEffect, useRef} from \"react\";\nimport {makeStyles} from '@material-ui/core/styles';\nimport {Box, CssBaseline, Paper, Tab, Tabs} from \"@material-ui/core\";\nimport {Copyright} from \"../constants\";\nimport ObituaryListing from \"../components/obituaries/obituaryListing\";\nimport {StateContext} from \"../stateService\";\nimport {withRouter} from \"react-router-dom\";\nimport ButtonNeutral from \"../components/buttonNeutral\";\nimport ObituaryGridView from \"../components/obituaries/obituaryGridView\";\nimport ObituaryAddEdit from \"../components/obituaries/obituaryAddEdit\";\n\nconst Client = props =>\n{\n const useStyles = makeStyles( ( theme ) => ( {\n\t\troot: {\n\t\t\tdisplay: 'flex',\n\t\t},\n\t\tcontent: {\n\t\t\tflexGrow:\t1,\n\t\t\tpadding:\ttheme.spacing( 2 ),\n textAlign: 'center'\n\t\t},\n logoutButton: {\n\t\t textAlign: 'center',\n marginBottom: theme.spacing( 2 )\n }\n\t} ) );\n\n const context = useRef( useContext( StateContext ) );\n const [value, setValue] = React.useState( 0 );\n const [id, setId] = React.useState( null );\n const handleChange = ( event, newValue ) => { setId( null ); setValue( newValue ); };\n const classes = useStyles();\n \n useEffect( () =>\n\t{\n\t if( ( context.current.token === null ) || ( context.current.token.length === 0) )\n {\n props.history.push( \"/\" );\n }\n\t}, [ context ] )\n \n function tabProps( index )\n {\n return { id: `tab-${ index }` };\n }\n \n function onEditObituary( recordID )\n {\n setId( recordID );\n setValue( 2 );\n }\n \n function onAddEditComplete()\n {\n setId( null );\n setValue( 1 );\n }\n\n const onLogout = () =>\n {\n context.current.update( 'token', null );\n \n props.history.push( \"/\" )\n };\n \n return (\n\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\"\"\n\t\t\t\t\n \n \n \n \n \n \n \n { value === 0 && }\n { value === 1 && }\n { value === 2 && }\n \n \n \n \n\t\t\t
\n\t\t
\n\t);\n}\n\nexport default withRouter( Client );","import { BrowserRouter, Switch, Route } from \"react-router-dom\";\nimport { StateProvider } from \"./stateService\";\nimport {ViewportProvider} from \"./viewportService\";\nimport {DialogProvider} from \"./services/dialogService\";\nimport Administration from \"./pages/administration\";\nimport Index from \"./pages\";\nimport Login from \"./pages/login\";\nimport ForgotPassword from \"./pages/forgot-password\";\nimport ResetPassword from \"./pages/reset-password\";\nimport Client from \"./pages/client\";\nimport {MuiPickersUtilsProvider} from \"@material-ui/pickers\";\nimport MomentUtils from \"@date-io/moment\";\n\nexport default function App()\n{\n return (\n \n \n \n \n \n \n }/>\n }/>\n }/>\n }/>\n }/>\n }/>\n \n \n \n \n \n \n );\n}","import {red} from '@material-ui/core/colors';\nimport {createMuiTheme} from '@material-ui/core/styles';\nimport {PRIMARY_COLOR} from \"./constants\";\n\nconst theme = createMuiTheme( {\n typography: {\n fontFamily: [\n 'Open Sans'\n ].join(','),\n },\n palette: {\n type: 'dark',\n primary: {\n main: PRIMARY_COLOR,\n },\n secondary: {\n main: '#19857b',\n },\n error: {\n main: red.A400,\n }\n },\n overrides: {\n MuiInputBase: {\n root: {\n fontWeight: 700,\n backgroundColor: '#fff',\n color: '#424242',\n \"&.Mui-disabled\": {\n color: '#424242'\n }\n }\n },\n MuiIconButton: {\n root: {\n color: '#424242'\n }\n },\n MuiInput: {\n root: {\n \"&.MuiInput-underline::after\": {\n borderBottom: 'none'\n }\n }\n },\n MuiButtonBase: {\n root: {\n paddingTop: 8,\n paddingBottom: 8,\n paddingLeft: 16,\n paddingRight: 16\n } \n },\n MuiOutlinedInput: {\n input: {\n paddingTop: '22px !important',\n paddingBottom: '14px !important',\n paddingLeft: '14px !important',\n paddingRight: '14px !important',\n },\n notchedOutline: {\n borderColor: '#fff',\n color: '#424242'\n },\n root: {\n \"&.Mui-focused .MuiOutlinedInput-notchedOutline\": {\n borderColor: 'rgba(0,0,0,0)',\n fontWeight: 700,\n color: '#424242'\n }\n }\n },\n MuiFormLabel: {\n root: {\n color: '#424242',\n fontWeight: 700,\n \"&.Mui-focused\": {\n color: '#fff',\n fontWeight: 700\n },\n \"&.MuiInputLabel-shrink\": {\n color: '#424242',\n fontWeight: 700,\n transform: 'translate(14px, 1px) scale(0.75)',\n backgroundColor: 'rgba(0,0,0,0)'\n },\n \"&.Mui-disabled\": {\n color: '#424242'\n }\n }\n },\n MuiFormControlLabel: {\n label: {\n \"&.Mui-disabled\": {\n color: '#424242'\n }\n }\n },\n MuiInputLabel: {\n outlined: {\n \"&.MuiInputLabel-shrink\": {\n color: '#424242',\n fontWeight: 700,\n transform: 'translate(14px, 1px) scale(0.75)',\n backgroundColor: 'rgba(0,0,0,0)'\n }\n },\n animated: {\n zIndex: 1,\n transform: 'translate(14px, 20px) scale(1)',\n pointerEvents: 'none'\n },\n formControl: {\n color: '#424242',\n fontWeight: 700\n }\n },\n MuiAutocomplete: {\n popupIndicator: {\n color: '#424242'\n },\n clearIndicator: {\n color: '#424242'\n },\n inputRoot: {\n padding: '0px !important'\n }\n },\n MuiDataGrid: {\n root: {\n '& .MuiDataGrid-colCellTitle': {\n fontWeight: 700\n }\n }\n },\n MuiTabs: {\n flexContainer: {\n backgroundColor: PRIMARY_COLOR\n }\n },\n MuiTab: {\n wrapper: {\n fontWeight: 700\n }\n },\n MuiTablePagination: {\n select: {\n backgroundColor: '#424242'\n },\n input: {\n backgroundColor: '#424242'\n }\n },\n MuiSelect: {\n select: {\n fontWeight: 400,\n \"&:not([multiple]) option\": {\n backgroundColor: '#424242',\n fontWeight: 400,\n color: '#fff'\n },\n \"&:not([multiple]) option:checked\": {\n backgroundColor: '#424242 !important'\n }\n }\n },\n MuiDataGridFilterForm: {\n columnSelect: {\n \"& label\": {\n color: '#fff',\n fontWeight: 400\n },\n \"& select\": {\n fontSize: 14\n }\n },\n operatorSelect: {\n display: 'none'\n },\n filterValueInput: {\n marginLeft: 5,\n \"& label\": {\n color: '#fff',\n fontWeight: 400,\n },\n \"& input\": {\n fontWeight: 400,\n paddingLeft: 5,\n fontSize: 14\n },\n \"& select\": {\n fontSize: 14\n },\n \"& select option:nth-child(1)\": {\n display: 'none'\n }\n }\n },\n MuiPickersCalendarHeader: {\n iconButton: {\n color: '#fff'\n }\n }\n }\n} );\n\nexport default theme;","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport {ThemeProvider} from '@material-ui/core/styles';\nimport App from './App';\nimport theme from './theme';\n\nconst moment = require( 'moment' );\n\nmoment.suppressDeprecationWarnings = true;\n\nReactDOM.render(\n \n \n \n ,\n document.querySelector('#root'),\n);"],"sourceRoot":""}