{"version":3,"sources":["cityseal_106.png","constants/userConstants.js","constants/appointmentConstants.js","constants/treasurerAppointmentConstants.js","constants/CORAppointmentConstants.js","constants/alertConstants.js","helpers/auth-header.js","reducers/userReducer.js","reducers/index.js","reducers/alertReducer.js","reducers/appointmentReducer.js","reducers/CORappointmentReducer.js","reducers/treasurerAppointmentReducer.js","helpers/store.js","helpers/history.js","services/userService.js","actions/alertActions.js","actions/userActions.js","services/appointmentService.js","actions/appointmentActions.js","actions/treasurerAppointmentActions.js","actions/CORAppointmentActions.js","components/NavMenu.js","components/Layout.js","components/Calendar/RegistrationForm.js","components/Calendar/Calendar.js","components/Home.js","components/EditAppointment.js","components/Calendar/AppointmentReview.js","components/BlackoutReview.js","components/Calendar/AdminCalendarDisplay.js","components/Calendar/AdminCalendar.js","components/COR/RegistrationForm.js","components/COR/AppointmentReview.js","components/COR/AdminCalendarDisplay.js","components/COR/AdminCalendar.js","components/CityTreasurer/AppointmentReview.js","components/CityTreasurer/AdminCalendarDisplay.js","components/CityTreasurer/AdminCalendar.js","components/Calendar/CalendarContainer.js","components/CityTreasurer/RegistrationForm.js","components/CityTreasurer/Calendar.js","components/CityTreasurer/CalendarContainer.js","components/COR/Calendar.js","components/COR/CalendarContainer.js","components/AdminNewAppointment.js","components/BlackoutDates.js","components/Search.js","registerServiceWorker.js","index.js","App.js"],"names":["module","exports","__webpack_require__","p","userConstants","LOGIN_REQUEST","LOGIN_SUCCESS","LOGIN_FAILURE","LOGOUT","appointmentConstants","APPOINTMENT_REQUEST","APPOINTMENT_SUCCESS","APPOINTMENT_FAILURE","GET_APPOINTMENT_SUCCESS","GET_APPOINTMENTS_SUCCESS","GET_CONFLICTS_SUCCESS","GET_BLACKOUTS_SUCCESS","GET_BLACKOUT_SUCCESS","SUBMITTING","SUBMITTED","APPOINTMENT_SEARCH_SUCCESS","SEND_EMAIL_REQUEST","SEND_EMAIL_SUCCESS","SEND_EMAIL_FAILURE","treasurerAppointmentConstants","TREASURER_APPOINTMENT_REQUEST","TREASURER_APPOINTMENT_SUCCESS","TREASURER_APPOINTMENT_FAILURE","TREASURER_GET_APPOINTMENT_SUCCESS","TREASURER_GET_APPOINTMENTS_SUCCESS","TREASURER_GET_CONFLICTS_SUCCESS","TREASURER_SUBMITTING","TREASURER_SUBMITTED","corAppointmentConstants","COR_APPOINTMENT_REQUEST","COR_APPOINTMENT_SUCCESS","COR_APPOINTMENT_FAILURE","COR_GET_APPOINTMENT_SUCCESS","COR_GET_APPOINTMENTS_SUCCESS","COR_GET_CONFLICTS_SUCCESS","COR_SUBMITTING","COR_SUBMITTED","alertConstants","ALERT_SUCCESS","ALERT_ERROR","ALERT_CLEAR","authHeader","user","Cookies","get","undefined","Authorization","token","Content-Type","user_token","initialState","department","loggedIn","rootReducer","combineReducers","authentication","state","arguments","length","action","type","loggingIn","alert","message","appointments","conflicts","appointment","appointmentsFromSearch","complete","submitting","submitted","blackouts","blackout","Object","objectSpread","data","corAppointments","treasurerAppointments","store","createStore","applyMiddleware","thunkMiddleware","history","createBrowserHistory","userService","login","username","password","cookies","requestOptions","method","headers","body","JSON","stringify","fetch","then","text","json","set","path","expires","Date","setFullYear","getFullYear","sameSite","secure","catch","error","console","logout","remove","validate","alertActions","success","clear","userActions","dispatch","push","failure","toString","appointmentService","getAll","handleResponse","getAllCOR","getAllTreas","getConflicts","getAllDMVConflicts","getTreasurerConflicts","getCORConflicts","id","concat","submit","values","submitAdmin","updateStaffNotes","update","cancel","getBlackoutDates","getBlackoutDate","newBlackoutDate","deleteBlackout","getAllForSearch","sendNextDayAppointments","response","parse","ok","indexOf","status","statusText","Promise","reject","appointmentActions","treasurerAppointmentActions","getAllDMV","corAppointmentActions","NavMenu","useSelector","useDispatch","_useState","useState","_useState2","slicedToArray","collapsed","setCollapsed","_useState3","_useState4","dropdownOpen","setDropdownOpen","_useState5","_useState6","dropdownViewOpen","setDropdownViewOpen","_useState7","_useState8","dropdownNewOpen","setDropdownNewOpen","toggleNavbar","_useState9","_useState10","inputs","setInputs","_useState11","_useState12","setSubmitted","handleChange","e","_e$target","target","name","value","defineProperty","useEffect","react_default","a","createElement","reactstrap_es","className","light","tag","RRLink","to","src","cityseal_106","alt","width","height","style","marginRight","onClick","isOpen","navbar","activeClassName","exact","Fragment","toggle","nav","inNavbar","caret","right","href","padding","onSubmit","preventDefault","marginBottom","onChange","Layout","_Component","classCallCheck","this","possibleConstructorReturn","getPrototypeOf","apply","inherits","createClass","key","NavMenu_NavMenu","props","children","Component","displayName","RegistrationForm","buttonLabel","open","startTime","firstName","lastName","reason","streetAddress","aptNumber","city","zipCode","phoneNumber","email","stationNumber","reasonSpecified","validEmail","setValidEmail","window","setTimeout","regexp","test","size","moment","format","clone","add","reasonToSubmit","stationToSubmit","AppointmentDateTime","row","sm","class","for","color","placeholder","autoComplete","disabled","outline","Calendar","setOpen","eventStart","setEventStart","parseDate","input","parts","match","workingDaysBetweenDates","d0","d1","startDate","endDate","setHours","diff","days","Math","ceil","floor","startDay","getDay","endDay","initialDate","main","plugins","dayGridPlugin","interactionPlugin","momentPlugin","timeGridPlugin","initialView","slotMinTime","slotMaxTime","weekends","initialEvents","title","description","endTime","daysOfWeek","allDay","eventClick","arg","el","innerHTML","event","start","headerToolbar","left","center","titleFormat","marker","end","eventTimeFormat","validRange","nowDate","today","expandRows","eventContent","eventInfo","diffDay","flag","cur","curMonth","getMonth","curDay","getDate","curYear","tempDate","tempMonth","tempDay","tempYear","backgroundColor","borderColor","display","recurringDef","typeData","time","date","map","j","i","appointmentDateTime","split","parseInt","isSameOrBefore","isBefore","readOnlyError","timeText","slotDuration","eventColor","RegistrationForm_RegistrationForm","Home","Link","EditAppointment","appointmentID","staffNotes","dateOpen","setDateOpen","step","AppointmentID","list","lib","dropUp","containerClassName","onBlur","onFocus","AppointmentReview","editFormOpen","setEditFormOpen","toggleEdit","showForm","setShowForm","setInput","EditAppointment_EditAppointment","ID","float","BlackoutReview","setSubmitting","blackoutStartDate","blackoutEndDate","blackoutDescription","blackoutID","AdminCalendarDisplay","calendar","useRef","events","setEvents","setBlackouts","loaded","setLoaded","blackoutOpen","setBlackoutOpen","times","blackoutTimes","filter","f","ref","eventSources","extendedProps","fontSize","AppointmentReview_AppointmentReview","BlackoutReview_BlackoutReview","AdminCalendar","AdminCalendarDisplay_AdminCalendarDisplay","reservedReason","validReason","setValidReason","listReasons","reasonsToMap","reasons1","reasons2","reservedReasonFoundInList","toLowerCase","mapReason","valid","AA","COR_AppointmentReview_AppointmentReview","COR_AdminCalendarDisplay_AdminCalendarDisplay","CityTreasurer_AppointmentReview_AppointmentReview","CityTreasurer_AdminCalendarDisplay_AdminCalendarDisplay","CalendarContainer","Calendar_Calendar","location","reload","replace","conflictMapping","log","CityTreasurer_RegistrationForm_RegistrationForm","CityTreasurer_Calendar_Calendar","setReservedReason","selectedEventStart","bufferDate","COR_RegistrationForm_RegistrationForm","COR_Calendar_Calendar","AdminNewAppointment","showStation","setShowStation","reasonList","setReasonList","_useState13","_useState14","setStep","timeToValidate","hours","getHours","minutes","getMinutes","strTimeToValidate","validTime","BlackoutDates","dept","endDateOpen","setEndDateOpen","defaultValue","Search","setAppointmentsFromSearch","htmlFor","n","apts","trim","sort","b","nameB","localeCompare","isCanceled","Boolean","hostname","rootElement","document","getElementsByTagName","getAttribute","getElementById","Moment","locale","momentLocalizer","ReactDOM","render","es","visible","setVisible","Router","Layout_Layout","Switch","Route","component","TreasurerCalendarContainer","CORCalendarContainer","CorCalendar","TreasCalendar","Redirect","from"],"mappings":"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","file":"static/js/main.357bf5d0.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/cityseal_106.fcd5a6de.png\";","export const userConstants = {\r\n LOGIN_REQUEST: 'LOGIN_REQUEST',\r\n LOGIN_SUCCESS: 'LOGIN_SUCCESS',\r\n LOGIN_FAILURE: 'LOGIN_FAILURE',\r\n\r\n LOGOUT: 'LOGOUT'\r\n\r\n};","export const appointmentConstants = {\r\n APPOINTMENT_REQUEST: 'APPOINTMENT_REQUEST',\r\n APPOINTMENT_SUCCESS: 'APPOINTMENT_SUCCESS',\r\n APPOINTMENT_FAILURE: 'APPOINTMENT_FAILURE',\r\n GET_APPOINTMENT_SUCCESS: 'GET_APPOINTMENT_SUCCESS',\r\n GET_APPOINTMENTS_SUCCESS: 'GET_APPOINTMENTS_SUCCESS',\r\n GET_CONFLICTS_SUCCESS: 'GET_CONFLICTS_SUCCESS',\r\n GET_BLACKOUTS_SUCCESS: 'GET_BLACKOUTS_SUCCESS',\r\n GET_BLACKOUT_SUCCESS: 'GET_BLACKOUT_SUCCESS',\r\n SUBMITTING: 'SUBMITTING',\r\n SUBMITTED: 'SUBMITTED',\r\n APPOINTMENT_SEARCH_SUCCESS: 'APPOINTMENT_SEARCH_SUCCESS',\r\n SEND_EMAIL_REQUEST: 'SEND_EMAIL_REQUEST',\r\n SEND_EMAIL_SUCCESS: 'SEND_EMAIL_SUCCESS',\r\n SEND_EMAIL_FAILURE: 'SEND_EMAIL_FAILURE'\r\n};","export const treasurerAppointmentConstants = {\r\n TREASURER_APPOINTMENT_REQUEST: 'TREASURER_APPOINTMENT_REQUEST',\r\n TREASURER_APPOINTMENT_SUCCESS: 'TREASURER_APPOINTMENT_SUCCESS',\r\n TREASURER_APPOINTMENT_FAILURE: 'TREASURER_APPOINTMENT_FAILURE',\r\n TREASURER_GET_APPOINTMENT_SUCCESS: 'TREASURER_GET_APPOINTMENT_SUCCESS',\r\n TREASURER_GET_APPOINTMENTS_SUCCESS: 'TREASURER_GET_APPOINTMENTS_SUCCESS',\r\n TREASURER_GET_CONFLICTS_SUCCESS: 'TREASURER_GET_CONFLICTS_SUCCESS',\r\n TREASURER_SUBMITTING: 'TREASURER_SUBMITTING',\r\n TREASURER_SUBMITTED: 'TREASURER_SUBMITTED'\r\n};","export const corAppointmentConstants = {\r\n COR_APPOINTMENT_REQUEST: 'COR_APPOINTMENT_REQUEST',\r\n COR_APPOINTMENT_SUCCESS: 'COR_APPOINTMENT_SUCCESS',\r\n COR_APPOINTMENT_FAILURE: 'COR_APPOINTMENT_FAILURE',\r\n COR_GET_APPOINTMENT_SUCCESS: 'COR_GET_APPOINTMENT_SUCCESS',\r\n COR_GET_APPOINTMENTS_SUCCESS: 'COR_GET_APPOINTMENTS_SUCCESS',\r\n COR_GET_CONFLICTS_SUCCESS: 'COR_GET_CONFLICTS_SUCCESS',\r\n COR_SUBMITTING: 'COR_SUBMITTING',\r\n COR_SUBMITTED: 'COR_SUBMITTED'\r\n};","export const alertConstants = {\r\n ALERT_SUCCESS: 'alert-success',\r\n ALERT_ERROR: 'alert-danger',\r\n ALERT_CLEAR: 'ALERT_CLEAR'\r\n};","import Cookies from 'universal-cookie';\r\nexport function authHeader() {\r\n // return auth with jwt token\r\n var cookies = new Cookies();\r\n let user = cookies.get(\"user\");\r\n if (user !== undefined) {\r\n return { \"Authorization\": \"Bearer \" + user.token, \"Content-Type\": 'application/json' };\r\n }\r\n return {};\r\n}","import { userConstants } from '../constants/index';\r\nimport Cookies from 'universal-cookie';\r\n\r\nvar cookies = new Cookies();\r\nlet user_token = cookies.get(\"user\");\r\nconst initialState = user_token !== undefined && user_token.token !== undefined && user_token.department ? { loggedIn: true, department: user_token.department } : {};\r\n\r\nexport function authentication(state = initialState, action) {\r\n switch (action.type) {\r\n case userConstants.LOGIN_REQUEST:\r\n return {\r\n loggingIn: true\r\n };\r\n case userConstants.LOGIN_SUCCESS: {\r\n return {\r\n loggedIn: true,\r\n department: action.user.department\r\n };\r\n }\r\n case userConstants.LOGIN_FAILURE:\r\n return { loggingIn: false, loggedIn: false };\r\n case userConstants.LOGOUT:\r\n return { loggedIn: false };\r\n default:\r\n return state;\r\n }\r\n}","import { combineReducers } from 'redux';\r\nimport { authentication } from './userReducer';\r\nimport { alert } from './alertReducer';\r\nimport { appointments } from './appointmentReducer';\r\nimport { corAppointments } from './CORappointmentReducer';\r\nimport { treasurerAppointments } from './treasurerAppointmentReducer';\r\nconst rootReducer = combineReducers({\r\n authentication: authentication,\r\n alert: alert,\r\n appointments: appointments,\r\n corAppointments: corAppointments,\r\n treasurerAppointments: treasurerAppointments\r\n});\r\nexport default rootReducer;","import { alertConstants } from '../constants';\r\n\r\nexport function alert(state = {}, action) {\r\n switch (action.type) {\r\n case alertConstants.ALERT_SUCCESS:\r\n return {\r\n type: 'alert-success',\r\n message: action.message\r\n };\r\n case alertConstants.ALERT_ERROR:\r\n return {\r\n type: 'alert-danger',\r\n message: action.message\r\n };\r\n case alertConstants.ALERT_CLEAR:\r\n return {};\r\n default:\r\n return state;\r\n }\r\n}","import { appointmentConstants } from '../constants';\r\n\r\n\r\nexport function appointments(state = { appointments: [], conflicts: [], appointment: {}, appointmentsFromSearch: [], complete: false, submitting: false, submitted: false, blackouts: null, blackout: {} }, action) {\r\n switch (action.type) {\r\n case appointmentConstants.APPOINTMENT_REQUEST:\r\n return {\r\n ...state,\r\n submitting: true,\r\n submitted: false\r\n };\r\n case appointmentConstants.GET_APPOINTMENTS_SUCCESS:\r\n return {\r\n ...state,\r\n appointments: action.data,\r\n submitting: false,\r\n submitted: true\r\n };\r\n case appointmentConstants.GET_APPOINTMENT_SUCCESS:\r\n return {\r\n ...state,\r\n appointment: action.data,\r\n submitting: false,\r\n submitted: true\r\n };\r\n case appointmentConstants.GET_CONFLICTS_SUCCESS:\r\n return {\r\n ...state,\r\n conflicts: action.data,\r\n submitting: false,\r\n submitted: true\r\n };\r\n case appointmentConstants.GET_BLACKOUTS_SUCCESS:\r\n return {\r\n ...state,\r\n blackouts: action.data,\r\n submitting: false,\r\n submitted: true\r\n };\r\n case appointmentConstants.GET_BLACKOUT_SUCCESS:\r\n return {\r\n ...state,\r\n blackout: action.data,\r\n submitting: false,\r\n submitted: true\r\n };\r\n case appointmentConstants.APPOINTMENT_SUCCESS:\r\n return {\r\n ...state,\r\n appointment: {},\r\n blackout: {},\r\n complete: true,\r\n submitted: true,\r\n submitting: false\r\n };\r\n case appointmentConstants.APPOINTMENT_SEARCH_SUCCESS:\r\n return {\r\n ...state,\r\n appointmentsFromSearch: action.data\r\n };\r\n case appointmentConstants.APPOINTMENT_FAILURE:\r\n return { ...state, submitting: false, submitted: false };\r\n default:\r\n return state;\r\n }\r\n}","import { corAppointmentConstants as appointmentConstants } from '../constants';\r\n\r\n\r\nexport function corAppointments(state = { appointments: [], conflicts: [], appointment: {}, complete: false, submitting: false, submitted: false }, action) {\r\n switch (action.type) {\r\n case appointmentConstants.COR_APPOINTMENT_REQUEST:\r\n return {\r\n ...state,\r\n submitting: true,\r\n submitted: false\r\n };\r\n case appointmentConstants.COR_GET_APPOINTMENTS_SUCCESS:\r\n return {\r\n ...state,\r\n appointments: action.data,\r\n submitting: false,\r\n submitted: true\r\n };\r\n case appointmentConstants.COR_GET_APPOINTMENT_SUCCESS:\r\n return {\r\n ...state,\r\n appointment: action.data,\r\n submitting: false,\r\n submitted: true\r\n };\r\n case appointmentConstants.COR_GET_CONFLICTS_SUCCESS:\r\n return {\r\n ...state,\r\n conflicts: action.data,\r\n submitting: false,\r\n submitted: true\r\n };\r\n case appointmentConstants.COR_APPOINTMENT_SUCCESS:\r\n return {\r\n ...state,\r\n appointment: {},\r\n complete: true,\r\n submitted: true,\r\n submitting: false\r\n };\r\n case appointmentConstants.COR_APPOINTMENT_FAILURE:\r\n return { ...state, submitting: false, submitted: false };\r\n default:\r\n return state;\r\n }\r\n}","import { treasurerAppointmentConstants as appointmentConstants } from '../constants';\r\n\r\n\r\nexport function treasurerAppointments(state = { appointments: [], conflicts: [], appointment: {}, complete: false, submitting: false, submitted: false }, action) {\r\n switch (action.type) {\r\n case appointmentConstants.TREASURER_APPOINTMENT_REQUEST:\r\n return {\r\n ...state,\r\n submitting: true,\r\n submitted: false\r\n };\r\n case appointmentConstants.TREASURER_GET_APPOINTMENTS_SUCCESS:\r\n return {\r\n ...state,\r\n appointments: action.data,\r\n submitting: false,\r\n submitted: true\r\n };\r\n case appointmentConstants.TREASURER_GET_APPOINTMENT_SUCCESS:\r\n return {\r\n ...state,\r\n appointment: action.data,\r\n submitting: false,\r\n submitted: true\r\n };\r\n case appointmentConstants.TREASURER_GET_CONFLICTS_SUCCESS:\r\n return {\r\n ...state,\r\n conflicts: action.data,\r\n submitting: false,\r\n submitted: true\r\n };\r\n case appointmentConstants.TREASURER_APPOINTMENT_SUCCESS:\r\n return {\r\n ...state,\r\n appointment: {},\r\n complete: true,\r\n submitted: true,\r\n submitting: false\r\n };\r\n case appointmentConstants.TREASURER_APPOINTMENT_FAILURE:\r\n return { ...state, submitting: false, submitted: false };\r\n default:\r\n return state;\r\n }\r\n}","import { createStore, applyMiddleware } from 'redux';\r\nimport thunkMiddleware from 'redux-thunk';\r\nimport rootReducer from '../reducers';\r\nconst store = createStore(\r\n rootReducer,\r\n applyMiddleware(\r\n thunkMiddleware\r\n )\r\n);\r\n//const persistor = persistStore(store);\r\nexport { store };","import { createBrowserHistory } from 'history';\r\n\r\nexport const history = createBrowserHistory();","import { authHeader } from '../helpers';\r\nimport Cookies from 'universal-cookie';\r\nexport const userService = {\r\n login,\r\n logout,\r\n validate\r\n};\r\n\r\nfunction login(username, password) {\r\n var cookies = new Cookies();\r\n const requestOptions = {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": 'application/json' },\r\n body: JSON.stringify({ username, password })\r\n };\r\n\r\n return fetch(`Users/Authenticate`, requestOptions)\r\n .then(text => text.json())\r\n .then(user => {\r\n if (user && user.token.length > 0) {\r\n cookies.set(\"user\", JSON.stringify(user), {\r\n path: \"/\", expires: new Date().setFullYear(new Date().getFullYear + 1), sameSite: \"strict\", secure: true\r\n });\r\n return user;\r\n }\r\n return null;\r\n })\r\n .catch(error => {\r\n console.error(\"Login error\", error);\r\n return null;\r\n });\r\n}\r\n\r\nfunction logout() {\r\n var cookies = new Cookies();\r\n cookies.remove(\"user\");\r\n return true;\r\n}\r\n\r\nfunction validate() {\r\n const requestOptions = {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" }\r\n };\r\n\r\n return fetch(`Users/Validate`, requestOptions)\r\n .then(text => text.json())\r\n .then(user => {\r\n //console.log(\"USER DATA\", user);\r\n return user;\r\n })\r\n .catch(error => {\r\n console.error(\"Login error\", error);\r\n return null;\r\n });\r\n}","import { alertConstants } from '../constants';\r\n\r\nexport const alertActions = {\r\n success,\r\n error,\r\n clear\r\n};\r\n\r\nfunction success(message) {\r\n return { type: alertConstants.ALERT_SUCCESS, message };\r\n}\r\n\r\nfunction error(message) {\r\n return { type: alertConstants.ALERT_ERROR, message };\r\n}\r\n\r\nfunction clear() {\r\n return { type: alertConstants.ALERT_CLEAR };\r\n}","import { userConstants } from '../constants';\r\nimport { userService } from '../services/userService';\r\nimport { alertActions } from './alertActions';\r\nimport { history } from '../helpers';\r\n\r\nexport const userActions = {\r\n login,\r\n logout,\r\n validate\r\n};\r\n\r\nfunction login(username, password) {\r\n return dispatch => {\r\n dispatch(request({ username }));\r\n userService.login(username, password)\r\n .then(\r\n user => {\r\n if (user !== null) {\r\n dispatch(success(user));\r\n history.push('/');\r\n } else {\r\n dispatch(alertActions.error(\"Invalid username/password\"));\r\n dispatch(failure(\"Incorrect username/password\"));\r\n\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request(user) { return { type: userConstants.LOGIN_REQUEST, user } };\r\n function success(user) { return { type: userConstants.LOGIN_SUCCESS, user } };\r\n function failure(error) { return { type: userConstants.LOGIN_FAILURE, error } };\r\n\r\n}\r\n\r\nfunction logout() {\r\n userService.logout();\r\n return dispatch => {\r\n dispatch(success());\r\n history.push('/');\r\n }\r\n function success() { return { type: userConstants.LOGOUT } };\r\n}\r\n\r\nfunction validate() {\r\n return dispatch => {\r\n userService.validate()\r\n .then(\r\n user => {\r\n if (user === true) {\r\n dispatch(success(user));\r\n history.push('/');\r\n } else {\r\n dispatch(failure(\"Not logged in\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function success(user) { return { type: userConstants.LOGIN_SUCCESS, user } };\r\n function failure(error) { return { type: userConstants.LOGIN_FAILURE, error } };\r\n}","import { userConstants } from '../constants';\r\nimport { history, authHeader } from '../helpers';\r\nimport { userService } from '../services/userService';\r\n\r\nexport const appointmentService = {\r\n getAll,\r\n getAllCOR,\r\n getAllTreas,\r\n getConflicts,\r\n getAllDMVConflicts,\r\n getTreasurerConflicts,\r\n getCORConflicts,\r\n get, \r\n submit,\r\n submitAdmin,\r\n updateStaffNotes,\r\n update,\r\n cancel,\r\n getBlackoutDates,\r\n getBlackoutDate,\r\n newBlackoutDate,\r\n deleteBlackout,\r\n getAllForSearch,\r\n sendNextDayAppointments\r\n}\r\n\r\nfunction handleResponse(response) {\r\n return response.text().then(text => {\r\n const data = text && JSON.parse(text);\r\n if (!response.ok) {\r\n if ([401, 403].indexOf(response.status) !== -1) { // not logged in\r\n userService.logout();\r\n return dispatch => {\r\n dispatch(success());\r\n history.push('/');\r\n }\r\n }\r\n const error = (data && data.message) || response.statusText;\r\n return Promise.reject(error);\r\n }\r\n return data;\r\n });\r\n function success() { return { type: userConstants.LOGOUT } };\r\n}\r\n\r\nfunction getAll() {\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: authHeader()\r\n };\r\n return fetch('appointments/DMV', requestOptions).then(handleResponse);\r\n}\r\nfunction getAllForSearch() {\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: authHeader()\r\n };\r\n return fetch('appointments/GetAllForSearch', requestOptions).then(handleResponse);\r\n}\r\n\r\nfunction getAllCOR() {\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: authHeader()\r\n };\r\n return fetch('appointments/COR', requestOptions).then(handleResponse);\r\n}\r\nfunction getAllTreas() {\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: authHeader()\r\n };\r\n return fetch('appointments/Treasurer', requestOptions).then(handleResponse);\r\n}\r\nfunction getConflicts(loggedIn) {\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: { \"Content-Type\": \"application/json\" }\r\n };\r\n //NDN20210406: If the user is logged in, get all the conflicts for the administrator's calendar. This includes the public (5) and the admin (3) stations.\r\n if (loggedIn) {\r\n return fetch('appointments/conflicts/DMV/BothStations', requestOptions).then(handleResponse);\r\n }\r\n else {\r\n return fetch('appointments/conflicts/DMV', requestOptions).then(handleResponse);\r\n }\r\n //return fetch('appointments/conflicts/DMV', requestOptions).then(handleResponse);\r\n}\r\n\r\nfunction getAllDMVConflicts() {\r\n //NDN20210406: This gets all the conflicts for the administrator's calendar. This includes the public (5) and the admin (3) stations.\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: { \"Content-Type\": \"application/json\" }\r\n };\r\n return fetch('appointments/conflicts/AllDMV', requestOptions).then(handleResponse);\r\n}\r\n\r\nfunction getTreasurerConflicts() {\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: { \"Content-Type\": \"application/json\" }\r\n };\r\n return fetch('appointments/conflicts/Treasurer', requestOptions).then(handleResponse);\r\n}\r\n\r\nfunction getCORConflicts() {\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: { \"Content-Type\": \"application/json\" }\r\n };\r\n return fetch('appointments/conflicts/COR', requestOptions).then(handleResponse);\r\n}\r\n\r\n//function getCORByDateTime(thisDateTime) {\r\n// const requestOptions = {\r\n// method: \"GET\",\r\n// headers: authHeader()\r\n// };\r\n// return fetch(`appointments/COR/ByDateTime/${thisDateTime}`, requestOptions).then(handleResponse);\r\n//}\r\n\r\nfunction getBlackoutDates() {\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: { \"Content-Type\": \"application/json\" }\r\n };\r\n return fetch('appointments/Blackout', requestOptions).then(handleResponse);\r\n}\r\nfunction getBlackoutDate(id) {\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: authHeader()\r\n };\r\n return fetch(`appointments/Blackout/${id}`, requestOptions).then(handleResponse);\r\n}\r\nfunction newBlackoutDate(values) {\r\n const requestOptions = {\r\n method: \"POST\",\r\n headers: authHeader(),\r\n body: JSON.stringify(values)\r\n };\r\n return fetch('appointments/Blackout', requestOptions).then(handleResponse);\r\n}\r\nfunction get(id) {\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: authHeader()\r\n };\r\n return fetch(`appointments/${id}`, requestOptions).then(handleResponse);\r\n}\r\n\r\nfunction submit(values) {\r\n const requestOptions = {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify(values)\r\n };\r\n return fetch('appointments', requestOptions).then(handleResponse);\r\n}\r\nfunction update(values) {\r\n const requestOptions = {\r\n method: \"POST\",\r\n headers: authHeader(),\r\n body: JSON.stringify(values)\r\n };\r\n return fetch('appointments/Edit', requestOptions).then(handleResponse);\r\n}\r\nfunction submitAdmin(values) {\r\n const requestOptions = {\r\n method: \"POST\",\r\n headers: authHeader(),\r\n body: JSON.stringify(values)\r\n };\r\n return fetch('appointments/Admin', requestOptions).then(handleResponse);\r\n}\r\n\r\nfunction updateStaffNotes(values) {\r\n const requestOptions = {\r\n method: \"POST\",\r\n headers: authHeader(),\r\n body: JSON.stringify(values)\r\n };\r\n return fetch('appointments/UpdateStaffNotes', requestOptions).then(handleResponse);\r\n}\r\nfunction cancel(id) {\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: authHeader()\r\n };\r\n return fetch(`appointments/cancel/${id}`, requestOptions).then(handleResponse);\r\n}\r\nfunction deleteBlackout(id) {\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: authHeader()\r\n };\r\n return fetch(`appointments/deleteBlackout/${id}`, requestOptions).then(handleResponse);\r\n}\r\nfunction sendNextDayAppointments() { //NDN20210311\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: authHeader()\r\n };\r\n return fetch('appointments/nextday', requestOptions);\r\n}","import { appointmentConstants } from '../constants';\r\nimport { appointmentService } from '../services/appointmentService';\r\nimport { alertActions } from './alertActions';\r\nimport { history } from '../helpers';\r\n\r\nexport const appointmentActions = {\r\n getAll,\r\n getAllDMVConflicts,\r\n getConflicts,\r\n get,\r\n submit,\r\n submitAdmin,\r\n updateStaffNotes,\r\n cancel,\r\n update,\r\n getBlackoutDates,\r\n getBlackoutDate,\r\n newBlackoutDate,\r\n deleteBlackout,\r\n getAllForSearch,\r\n sendNextDayAppointments\r\n};\r\n\r\nfunction getAll() {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.getAll()\r\n .then(\r\n data => {\r\n if (data != null) {\r\n dispatch(success(data));\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.GET_APPOINTMENTS_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.APPOINTMENT_FAILURE, error } };\r\n}\r\n\r\nfunction getConflicts(loggedIn) { //NDN20210406: Added loggedIn parameter.\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.getConflicts(loggedIn)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n //TODO: The system appears to be adding conflicts together.\r\n dispatch(success(data));\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.GET_CONFLICTS_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.APPOINTMENT_FAILURE, error } };\r\n}\r\n\r\nfunction getAllDMVConflicts() {\r\n //NDN20210406: This gets all the conflicts for the administrator's calendar. This includes the public (5) and the admin (3) stations.\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.getAllDMVConflicts()\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(success(data));\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.GET_CONFLICTS_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.APPOINTMENT_FAILURE, error } };\r\n}\r\n\r\nfunction getAllForSearch() {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.getAllForSearch()\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(success(data));\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.APPOINTMENT_SEARCH_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction getBlackoutDates() {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.getBlackoutDates()\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(success(data));\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.GET_BLACKOUTS_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction getBlackoutDate(id) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.getBlackoutDate(id)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(success(data));\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.GET_BLACKOUT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction newBlackoutDate(values) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.newBlackoutDate(values)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(alertActions.success(\"Successfully created blackout date!\"));\r\n dispatch(success(data));\r\n history.push(\"/\");\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.APPOINTMENT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction get(id) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.get(id)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(success(data));\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.GET_APPOINTMENT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction submit(values) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.submit(values)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n if (data.success) { //NDN20210405: Catch if there are any errors.\r\n dispatch(alertActions.success(\"You have successfully registered for a DMV appointment!\"));\r\n dispatch(success(data));\r\n history.push(\"/\");\r\n }\r\n else {\r\n dispatch(alertActions.error(data.message));\r\n dispatch(success(data));\r\n }\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.APPOINTMENT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction update(values) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.update(values)\r\n .then(\r\n data => {\r\n if (data != null) {\r\n if (data.success) { //NDN20210405: Catch if there are any errors.\r\n dispatch(alertActions.success(\"You have successfully updated the appointment!\"));\r\n dispatch(success(data));\r\n history.push(\"/\");\r\n }\r\n else {\r\n dispatch(alertActions.error(data.message));\r\n dispatch(success(data));\r\n history.push(\"/\");\r\n }\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.APPOINTMENT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction submitAdmin(values) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.submitAdmin(values)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n if (data.success) {\r\n dispatch(alertActions.success(\"Successfully booked appointment!\"));\r\n dispatch(success(data));\r\n history.push(\"/\");\r\n }\r\n else {\r\n dispatch(alertActions.error(data.message));\r\n dispatch(success(data));\r\n history.push(\"/\");\r\n }\r\n } else {\r\n dispatch(alertActions.error(data.message));\r\n dispatch(failure(data.message));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.APPOINTMENT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction updateStaffNotes(values) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.updateStaffNotes(values)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(alertActions.success(\"Successfully updated notes!\"));\r\n dispatch(success(data));\r\n history.push(\"/\");\r\n } else {\r\n dispatch(alertActions.error(\"Error updating appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.APPOINTMENT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction cancel(id) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.cancel(id)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(alertActions.success(\"Successfully canceled appointment!\"));\r\n dispatch(success(data));\r\n history.push(\"/\");\r\n } else {\r\n dispatch(alertActions.error(\"Error updating appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.APPOINTMENT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction deleteBlackout(id) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.deleteBlackout(id)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(alertActions.success(\"Successfully deleted blackout!\"));\r\n dispatch(success(data));\r\n history.push(\"/\");\r\n } else {\r\n dispatch(alertActions.error(\"Error updating appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.APPOINTMENT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.APPOINTMENT_FAILURE, error } };\r\n}\r\n\r\nfunction sendNextDayAppointments() { //NDN20210311\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.sendNextDayAppointments()\r\n .then(\r\n data => {\r\n if (data != null) {\r\n dispatch(alertActions.success(\"Successfully sent email.\"));\r\n dispatch(success(data));\r\n } else {\r\n dispatch(alertActions.error(\"Error sending appointment email.\"));\r\n dispatch(failure(\"Error sending appointment email.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.SEND_EMAIL_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.SEND_EMAIL_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.SEND_EMAIL_FAILURE, error } };\r\n}","import { treasurerAppointmentConstants as appointmentConstants } from '../constants';\r\nimport { appointmentService } from '../services/appointmentService';\r\nimport { alertActions } from './alertActions';\r\nimport { history } from '../helpers';\r\n\r\nexport const treasurerAppointmentActions = {\r\n getAll,\r\n getAllDMV,\r\n getConflicts,\r\n get,\r\n submit,\r\n submitAdmin,\r\n updateStaffNotes,\r\n cancel\r\n};\r\n\r\nfunction getAll() {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.getAllTreas()\r\n .then(\r\n data => {\r\n if (data != null) {\r\n dispatch(success(data));\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.TREASURER_APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.TREASURER_GET_APPOINTMENTS_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.TREASURER_APPOINTMENT_FAILURE, error } };\r\n}\r\n\r\nfunction getAllDMV() {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.getAllDMV\r\n .then(\r\n data => {\r\n if (data != null) {\r\n dispatch(success(data));\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.TREASURER_APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.TREASURER_GET_APPOINTMENTS_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.TREASURER_APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction getConflicts() {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.getTreasurerConflicts()\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(success(data));\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.TREASURER_APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.TREASURER_GET_CONFLICTS_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.TREASURER_APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction get(id) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.get(id)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(success(data));\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.TREASURER_APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.TREASURER_GET_APPOINTMENT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.TREASURER_APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction submit(values) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.submit(values)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n if (data.success) { //NDN20210405: Catch if there are any errors.\r\n dispatch(alertActions.success(\"You have successfully registered for a Treasurer appointment!\"));\r\n dispatch(success(data));\r\n history.push(\"/\");\r\n }\r\n else { \r\n dispatch(alertActions.error(data.message));\r\n dispatch(success(data));\r\n }\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.TREASURER_APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.TREASURER_APPOINTMENT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.TREASURER_APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction submitAdmin(values) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.submitAdmin(values)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(alertActions.success(\"Successfully booked appointment!\"));\r\n dispatch(success(data));\r\n history.push(\"/\");\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.TREASURER_APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.TREASURER_APPOINTMENT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.TREASURER_APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction updateStaffNotes(values) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.updateStaffNotes(values)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(alertActions.success(\"Successfully updated notes!\"));\r\n dispatch(success(data));\r\n history.push(\"/\");\r\n } else {\r\n dispatch(alertActions.error(\"Error updating appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.TREASURER_APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.TREASURER_APPOINTMENT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.TREASURER_APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction cancel(id) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.cancel(id)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(alertActions.success(\"Successfully canceled appointment!\"));\r\n dispatch(success(data));\r\n history.push(\"/\");\r\n } else {\r\n dispatch(alertActions.error(\"Error updating appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.TREASURER_APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.TREASURER_APPOINTMENT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.TREASURER_APPOINTMENT_FAILURE, error } };\r\n}","import { corAppointmentConstants as appointmentConstants } from '../constants';\r\nimport { appointmentService } from '../services/appointmentService';\r\nimport { alertActions } from './alertActions';\r\nimport { history } from '../helpers';\r\n\r\nexport const corAppointmentActions = {\r\n getAll,\r\n getConflicts,\r\n get,\r\n submit,\r\n submitAdmin,\r\n updateStaffNotes,\r\n cancel\r\n};\r\n\r\nfunction getAll() {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.getAllCOR()\r\n .then(\r\n data => {\r\n if (data != null) {\r\n dispatch(success(data));\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.COR_APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.COR_GET_APPOINTMENTS_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.COR_APPOINTMENT_FAILURE, error } };\r\n}\r\n\r\nfunction getConflicts() {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.getCORConflicts()\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(success(data));\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.COR_APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.COR_GET_CONFLICTS_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.COR_APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction get(id) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.get(id)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(success(data));\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.COR_APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.COR_GET_APPOINTMENT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.COR_APPOINTMENT_FAILURE, error } };\r\n}\r\n\r\n//function getByDateTime(thisDateTime) {\r\n// return dispatch => {\r\n// dispatch(request());\r\n// appointmentService.getCORByDateTime(thisDateTime)\r\n// .then(\r\n// data => {\r\n// //console.log(\"DATA\", data);\r\n// if (data != null) {\r\n// dispatch(success(data));\r\n// } else {\r\n// dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n// dispatch(failure(\"Error loading appointment data.\"));\r\n// }\r\n// },\r\n// error => {\r\n// dispatch(failure(error.toString()));\r\n// dispatch(alertActions.error(error.toString()));\r\n// }\r\n// );\r\n// };\r\n// function request() { return { type: appointmentConstants.COR_APPOINTMENT_REQUEST } };\r\n// function success(data) { return { type: appointmentConstants.COR_GET_APPOINTMENT_SUCCESS, data } };\r\n// function failure(error) { return { type: appointmentConstants.COR_APPOINTMENT_FAILURE, error } };\r\n//}\r\n\r\nfunction submit(values) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.submit(values)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n if (data.success) { //NDN20210405: Catch if there are any errors.\r\n dispatch(alertActions.success(\"You have successfully registered for a COR appointment!\"));\r\n dispatch(success(data));\r\n history.push(\"/\");\r\n }\r\n else {\r\n dispatch(alertActions.error(data.message));\r\n dispatch(success(data));\r\n }\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.COR_APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.COR_APPOINTMENT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.COR_APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction submitAdmin(values) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.submitAdmin(values)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(alertActions.success(\"Successfully booked appointment!\"));\r\n dispatch(success(data));\r\n history.push(\"/\");\r\n } else {\r\n dispatch(alertActions.error(\"Error loading appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.COR_APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.COR_APPOINTMENT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.COR_APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction updateStaffNotes(values) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.updateStaffNotes(values)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(alertActions.success(\"Successfully updated notes!\"));\r\n dispatch(success(data));\r\n history.push(\"/\");\r\n } else {\r\n dispatch(alertActions.error(\"Error updating appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.COR_APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.COR_APPOINTMENT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.COR_APPOINTMENT_FAILURE, error } };\r\n}\r\nfunction cancel(id) {\r\n return dispatch => {\r\n dispatch(request());\r\n appointmentService.cancel(id)\r\n .then(\r\n data => {\r\n //console.log(\"DATA\", data);\r\n if (data != null) {\r\n dispatch(alertActions.success(\"Successfully canceled appointment!\"));\r\n dispatch(success(data));\r\n history.push(\"/\");\r\n } else {\r\n dispatch(alertActions.error(\"Error updating appointment data.\"));\r\n dispatch(failure(\"Error loading appointment data.\"));\r\n }\r\n },\r\n error => {\r\n dispatch(failure(error.toString()));\r\n dispatch(alertActions.error(error.toString()));\r\n }\r\n );\r\n };\r\n function request() { return { type: appointmentConstants.COR_APPOINTMENT_REQUEST } };\r\n function success(data) { return { type: appointmentConstants.COR_APPOINTMENT_SUCCESS, data } };\r\n function failure(error) { return { type: appointmentConstants.COR_APPOINTMENT_FAILURE, error } };\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { Collapse, Container, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink, Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';\r\nimport { NavLink as RRLink } from 'react-router-dom';\r\nimport './NavMenu.css';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { userActions } from '../actions';\r\nimport cityseal_106 from '../cityseal_106.png';\r\n\r\nexport function NavMenu() {\r\n const loggedIn = useSelector(state => state.authentication.loggedIn);\r\n const department = useSelector(state => state.authentication.department);\r\n const dispatch = useDispatch();\r\n const [collapsed, setCollapsed] = useState(true);\r\n const [dropdownOpen, setDropdownOpen] = useState(false);\r\n const [dropdownViewOpen, setDropdownViewOpen] = useState(false);\r\n const [dropdownNewOpen, setDropdownNewOpen] = useState(false);\r\n const toggleNavbar = () => {\r\n setCollapsed(!collapsed);\r\n }\r\n const logout = () => {\r\n dispatch(userActions.logout());\r\n toggleNavbar();\r\n }\r\n\r\n const [inputs, setInputs] = useState(\r\n {\r\n username: '',\r\n password: ''\r\n }\r\n );\r\n\r\n const [submitted, setSubmitted] = useState(false);\r\n const { username, password } = inputs;\r\n const loggingIn = useSelector(state => state.authentication.loggingIn);\r\n\r\n\r\n const handleChange = (e) => {\r\n const { name, value } = e.target;\r\n setInputs(inputs => ({ ...inputs, [name]: value }));\r\n }\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n\r\n setSubmitted(true);\r\n if (username && password) {\r\n dispatch(userActions.login(username, password));\r\n setDropdownOpen(false);\r\n }\r\n }\r\n\r\n const updateStatus = () => {\r\n setSubmitted(false);\r\n setCollapsed(true);\r\n setInputs({\r\n username: '',\r\n password: ''\r\n });\r\n }\r\n useEffect(() => {\r\n loggedIn && updateStatus();\r\n }, [loggedIn]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \"CityCity Scheduler\r\n \r\n \r\n \r\n
    \r\n \r\n Home\r\n \r\n {loggedIn ? (<>\r\n {/* NDN20210405: Adding view appointment selections */}\r\n setDropdownViewOpen(!dropdownViewOpen)} nav inNavbar>\r\n Registered Appointments\r\n \r\n COR\r\n DMV\r\n Treasurer\r\n \r\n \r\n {/* NDN20210405: Changing up the new appointment links */}\r\n setDropdownNewOpen(!dropdownNewOpen)} nav inNavbar>\r\n New Appointment\r\n \r\n COR\r\n DMV\r\n Treasurer\r\n {/*
    \r\n New appt from scratch*/}\r\n
    \r\n
    \r\n {/*\r\n New Appointment\r\n */}\r\n \r\n New Blackout Event\r\n \r\n \r\n Search\r\n \r\n \r\n \r\n \r\n ) : (<>\r\n \r\n DMV Select\r\n \r\n {/*\r\n Treasurer\r\n */}\r\n {/*\r\n COR\r\n */}\r\n setDropdownOpen(!dropdownOpen)} nav inNavbar>\r\n Login\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n {submitted && !username &&\r\n
    Username is required
    \r\n }\r\n
    \r\n
    \r\n \r\n \r\n {submitted && !password &&\r\n
    Password is required
    \r\n }\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\n","import React, { Component } from 'react';\r\nimport { Container } from 'reactstrap';\r\nimport { NavMenu } from './NavMenu';\r\n\r\nexport class Layout extends Component {\r\n static displayName = Layout.name;\r\n\r\n render () {\r\n return (\r\n
\r\n \r\n \r\n {this.props.children}\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Button, Col, Form, FormGroup, FormText, Input, Label, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\r\nimport moment from 'moment';\r\nimport { history } from '../../helpers/history';\r\nimport { appointmentActions } from '../../actions';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n\r\nexport const RegistrationForm = (props) => {\r\n const {\r\n buttonLabel,\r\n className,\r\n open,\r\n toggle,\r\n startTime\r\n } = props;\r\n\r\n const [inputs, setInputs] = useState({\r\n firstName: '',\r\n lastName: '',\r\n reason: '',\r\n streetAddress: '',\r\n aptNumber: '',\r\n city: '',\r\n state: 'VA',\r\n zipCode: '',\r\n phoneNumber: '',\r\n email: '',\r\n department: 'DMV',\r\n stationNumber: '5',\r\n reasonSpecified:''\r\n });\r\n const [submitted, setSubmitted] = useState(false);\r\n const submitting = useSelector(state => state.appointments.submitting);\r\n const complete = useSelector(state => state.appointments.complete);\r\n const [validEmail, setValidEmail] = useState(false);\r\n\r\n //NDN20210406: Show the station drop down if the user is logged in.\r\n const loggedIn = useSelector(state => state.authentication.loggedIn);\r\n\r\n useEffect(() => {\r\n //Default to station number 3 for admins. \r\n if (loggedIn) {\r\n setInputs(inputs => ({ ...inputs, stationNumber: '3' }));\r\n }\r\n\r\n if (complete == true) {\r\n window.setTimeout(() => {\r\n //NDN20210506: Commented this out; it was causing too many reloads.\r\n //window.location.reload();\r\n });\r\n }\r\n }, [complete]);\r\n\r\n const { firstName, lastName, reason, streetAddress, aptNumber, city, state, zipCode, phoneNumber, email, department, stationNumber, reasonSpecified } = inputs;\r\n const regexp = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n const handleChange = (e) => {\r\n const { name, value } = e.target;\r\n setInputs(inputs => ({ ...inputs, [name]: value }));\r\n name === 'email' && setValidEmail(regexp.test(value));\r\n }\r\n const dispatch = useDispatch();\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n setSubmitted(true);\r\n if (!(reason === 'Other' && reasonSpecified === '')) { //NDN20210602: If Other is chosen, they have to specify a reason.\r\n if (firstName && lastName && reason && phoneNumber && email) {\r\n //If the reason is Other, add on the specified reason.\r\n var reasonToSubmit = reason;\r\n if (reason === 'Other') {\r\n reasonToSubmit += ': ' + reasonSpecified;\r\n }\r\n\r\n //Friday should always be the public station (5) because only one station is available.\r\n var stationToSubmit = stationNumber;\r\n if (moment(startTime).format(\"ddd\") == \"Fri\") {\r\n stationToSubmit = '5';\r\n }\r\n\r\n dispatch(appointmentActions.submit({ firstName, lastName, reason: reasonToSubmit, streetAddress, aptNumber, city, state, zipCode, phoneNumber, email, AppointmentDateTime: moment(startTime).format(\"YYYY-MM-DD HH:mm:ss\"), department, stationNumber: stationToSubmit }));\r\n toggle(); //NDN20210405\r\n }\r\n }\r\n\r\n }\r\n return (\r\n <>\r\n \r\n Register for an appointment
{moment(startTime).format(\"dddd, MMM Do, YYYY - h:mm A\")} to {moment(startTime).clone().add(15, 'minutes').format(\"h:mm A\")}
\r\n \r\n
\r\n \r\n \r\n
\r\n Note: This location cannot process license or ID transactions.\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !firstName &&\r\n
First name is required
\r\n }\r\n \r\n \r\n \r\n \r\n {submitted && !lastName &&\r\n
Last name is required
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !validEmail &&\r\n
Valid email address is required
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !phoneNumber &&\r\n
Phone number is required
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {/* NDN20210405: Changed from input type to select list to force users to select from the list. */}\r\n \r\n {/*NDN20210528: If the reason is Other, show the text box for specifying the reason.*/}\r\n {reason && (reason == 'Other') &&\r\n \r\n }\r\n {submitted && !reason && \r\n
Reason is required
\r\n }\r\n {submitted && (reason == 'Other') && (reasonSpecified == '') &&\r\n
A specified reason is required
\r\n }\r\n

If you are conducting a transaction for more than one vehicle, please schedule a separate appointment time for each vehicle

\r\n \r\n
\r\n\r\n {/* NDN20210406: If the user is an administrator, show the station number. Else, load a hidden input with the default station number (5). */}\r\n {/* NDN20220104: Administrators can't make call-in registrations on Fridays. */}\r\n {(loggedIn && (moment(startTime).format(\"ddd\") != \"Fri\")) ? (\r\n \r\n \r\n \r\n \r\n {submitted && !stationNumber &&\r\n
Station is required
\r\n }\r\n\r\n

Selecting Station 5 will remove this appointment time from the public calendar. Only two appointments are allowed at one time, regardless of Station.

\r\n \r\n
\r\n ) : (\r\n \r\n )}\r\n\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport FullCalendar from '@fullcalendar/react';\r\nimport dayGridPlugin from '@fullcalendar/daygrid';\r\nimport timeGridPlugin from '@fullcalendar/timegrid';\r\nimport interactionPlugin from '@fullcalendar/interaction';\r\nimport momentPlugin, { toMoment } from '@fullcalendar/moment';\r\nimport moment from 'moment';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RegistrationForm } from './RegistrationForm';\r\nimport { appointmentActions } from '../../actions';\r\n\r\n\r\nexport const Calendar = (props) => {\r\n const [open, setOpen] = useState(false);\r\n const [eventStart, setEventStart] = useState(null);\r\n const { conflicts, blackouts } = props;\r\n\r\n //NDN20210621: If the user is logged in as an admin, don't restrict blackout dates to just Station 5 (Public Website Registration).\r\n const loggedIn = useSelector(state => state.authentication.loggedIn);\r\n\r\n const valid = (nowDate) => {\r\n var today = new Date();\r\n var now = moment(today);\r\n return {\r\n start: '2020-07-20',\r\n end: now.clone().add(6, 'weeks').format(\"YYYY-MM-DD\")\r\n };\r\n }\r\n const toggle = () => setOpen(!open);\r\n const handleEventClick = (arg) => {\r\n if (arg.el.children[0].children && arg.el.children[0].children[0].innerHTML.indexOf(\"Available\") !== -1) {\r\n setEventStart(arg.event.start);\r\n setOpen(true);\r\n \r\n }\r\n };\r\n const dispatch = useDispatch();\r\n const handleDateClick = (arg) => {\r\n };\r\n const eventContent = (eventInfo) => {\r\n const diffDay = 2;\r\n var titleCSS = '';\r\n var borderCSS = '#c2e9d7';\r\n var backgroundCSS = '';\r\n var titleText = 'Available';\r\n var flag = true;\r\n var cur = new Date();\r\n var curMonth = cur.getMonth() + 1;\r\n var curDay = cur.getDate();\r\n var curYear = cur.getFullYear();\r\n cur = curYear + \"-\" + curMonth + \"-\" + curDay;\r\n var tempDate = new Date(eventInfo.event.start);\r\n var tempMonth = tempDate.getMonth() + 1;\r\n var tempDay = tempDate.getDate();\r\n var tempYear = tempDate.getFullYear();\r\n tempDate = tempYear + \"-\" + tempMonth + \"-\" + tempDay;\r\n var diff = workingDaysBetweenDates(cur, tempDate);\r\n if (diff < 1) {\r\n //eventInfo.event.setProp(\"display\", \"none\");\r\n eventInfo.backgroundColor = 'transparent';\r\n eventInfo.borderColor = 'transparent';\r\n return (
);\r\n }\r\n \r\n if (typeof eventInfo.event[\"_def\"].recurringDef.typeData.daysOfWeek !== 'undefined') {\r\n var time = moment(eventInfo.event.start).format(\"HH:mm\");\r\n var date = moment(eventInfo.event.start).format(\"MM DD YYYY\");\r\n conflicts.map((j, i) => {\r\n if (moment(j.appointmentDateTime).format(\"HH:mm\") === time && moment(j.appointmentDateTime).format(\"MM DD YYYY\") === date) {\r\n titleCSS = '#fccbbc';\r\n flag = false;\r\n }\r\n //if ((moment(j.start).format(\"MM DD YYYY\") === date) && j.allDay === true) {\r\n // flag = false;\r\n //}\r\n });\r\n blackouts.map((j, i) => {\r\n var department = j.description.split('$')[0];\r\n var stationNumber = parseInt(j.description.split('$')[1]);\r\n //if (moment(j.start).isSameOrBefore(moment(eventInfo.event.start))\r\n // && moment(eventInfo.event.start).isBefore(moment(j.end))\r\n // && department === \"DMV\"\r\n // && stationNumber !== 3) {\r\n // flag = false;\r\n //}\r\n if (moment(j.start).isSameOrBefore(moment(eventInfo.event.start))\r\n && moment(eventInfo.event.start).isBefore(moment(j.end))\r\n && department === \"DMV\") {\r\n if (loggedIn) {\r\n //NDN20210621: Administrators - Flag the time as blocked off if it's Station 0 (which indicates both stations are blocked off).\r\n if (stationNumber == 0) {\r\n flag = false;\r\n }\r\n //NDN20220104: Flag the time as blocked off if it's Station 5 (Public Website Registration) on Fridays. Only the public calendar is open for registrations on Fridays.\r\n if ((stationNumber == 5) && (moment(eventInfo.event.start).format(\"ddd\") === \"Fri\")) {\r\n flag = false;\r\n }\r\n }\r\n else {\r\n //NDN20210621: Public - Flag the time as blocked off if it's Station 5 (Public Website Registration) or Station 0 (which indicates both stations).\r\n if (stationNumber !== 3) {\r\n flag = false;\r\n }\r\n }\r\n }\r\n });\r\n if (!flag) {\r\n //eventInfo.event.setProp(\"display\", \"none\");\r\n eventInfo.backgroundColor = 'transparent';\r\n eventInfo.borderColor = 'transparent';\r\n return (
);\r\n }\r\n }\r\n if (diff < diffDay && eventInfo.event.description === 'Blackout') {\r\n diffDay++;\r\n }\r\n if ((diff < diffDay && eventInfo.event.allDay === false) || (diff < diffDay && eventInfo.event.title === \"Available\")) {\r\n //eventInfo.event.setProp(\"display\", \"none\");\r\n eventInfo.backgroundColor = 'transparent';\r\n eventInfo.borderColor = 'transparent';\r\n return (
);\r\n } if (eventInfo.event.title === \"Not Available\") {\r\n eventInfo.backgroundColor = 'transparent';\r\n eventInfo.borderColor = 'transparent';\r\n return (
);\r\n } \r\n if (eventInfo.event.allDay === true) {\r\n\r\n }\r\n if (moment(eventInfo.event.start).isBefore(moment())) {\r\n return (<>);\r\n }\r\n return (\r\n <>\r\n
{eventInfo.timeText} - {eventInfo.event.title}
\r\n \r\n \r\n )\r\n }\r\n\r\n \r\n const parseDate = (input) => {\r\n // Transform date from text to date\r\n var parts = input.match(/(\\d+)/g);\r\n // new Date(year, month [, date [, hours[, minutes[, seconds[, ms]]]]])\r\n return new Date(parts[0], parts[1] - 1, parts[2]); // months are 0-based\r\n }\r\n const workingDaysBetweenDates = (d0, d1) => {\r\n var startDate = parseDate(d0);\r\n var endDate = parseDate(d1);\r\n // Validate input\r\n if (endDate < startDate) {\r\n return 0;\r\n }\r\n // Calculate days between dates\r\n var millisecondsPerDay = 86400 * 1000; // Day in milliseconds\r\n startDate.setHours(0, 0, 0, 1); // Start just after midnight\r\n endDate.setHours(23, 59, 59, 999); // End just before midnight\r\n var diff = endDate - startDate; // Milliseconds between datetime objects \r\n var days = Math.ceil(diff / millisecondsPerDay);\r\n\r\n // Subtract two weekend days for every week in between\r\n var weeks = Math.floor(days / 7);\r\n days -= weeks * 2;\r\n\r\n // Handle special cases\r\n var startDay = startDate.getDay();\r\n var endDay = endDate.getDay();\r\n\r\n // Remove weekend not previously removed. \r\n if (startDay - endDay > 1) {\r\n days -= 2;\r\n }\r\n // Remove start day if span starts on Sunday but ends before Saturday\r\n if (startDay == 0 && endDay != 6) {\r\n days--;\r\n }\r\n // Remove end day if span ends on Saturday but starts after Sunday\r\n if (endDay == 6 && startDay != 0) {\r\n days--;\r\n }\r\n /* Here is the code */\r\n //for (var i in holidays) {\r\n // if ((holidays[i] >= d0) && (holidays[i] <= d1)) {\r\n // days--;\r\n // }\r\n //}\r\n return days;\r\n }\r\n const titleFormat = (e) => {\r\n var dateString = \"DMV Select - \" + moment(e.start.marker).clone().add(1, 'day').format(\"MMM Do\") + \" to \" + moment(e.end.marker).format(\"Do\") + \" (available appointments in green)\";\r\n return dateString;\r\n }\r\n const times = [\r\n { title: \"Available\", description: 'recur', startTime: '08:30', endTime: '08:45', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '08:45', endTime: '09:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '09:00', endTime: '09:15', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '09:15', endTime: '09:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '09:30', endTime: '09:45', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '09:45', endTime: '10:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '10:15', endTime: '10:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '10:30', endTime: '10:45', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '10:45', endTime: '11:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '11:00', endTime: '11:15', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '11:30', endTime: '11:45', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '11:45', endTime: '12:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '12:00', endTime: '12:15', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '12:15', endTime: '12:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '12:30', endTime: '12:45', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '13:45', endTime: '14:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '14:00', endTime: '14:15', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '14:15', endTime: '14:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '14:30', endTime: '14:45', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '15:00', endTime: '15:15', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '15:15', endTime: '15:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '15:30', endTime: '15:45', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '15:45', endTime: '16:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '16:00', endTime: '16:15', daysOfWeek: [1, 2, 3, 4, 5], allDay: false }\r\n ]\r\n const headerToolbar = {\r\n left: 'title',\r\n center: '',\r\n right: 'today prev,next'\r\n };\r\n\r\n const initialDate = moment().format(\"ddd\") === \"Fri\" || moment().format(\"ddd\") === \"Sat\" || moment().format(\"ddd\") === \"Sun\" ? moment().clone().add(3, 'days').format(\"YYYY-MM-DD\") : moment().format(\"YYYY-MM-DD\");\r\n return blackouts !== null && (\r\n <>\r\n \r\n \r\n\r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Calendar } from './Calendar/Calendar';\r\nimport { appointmentActions, treasurerAppointmentActions, corAppointmentActions } from '../actions';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { Tooltip } from 'reactstrap';\r\nexport const Home = () => {\r\n const loggedIn = useSelector(state => state.authentication.loggedIn);\r\n const department = useSelector(state => state.authentication.department);\r\n const dispatch = useDispatch();\r\n const [tooltipOpen, setTooltipOpen] = useState(false);\r\n const toggle = () => setTooltipOpen(!tooltipOpen);\r\n const [tooltipOpenCOR, setTooltipOpenCOR] = useState(false);\r\n const toggleCOR = () => setTooltipOpenCOR(!tooltipOpenCOR);\r\n useEffect(() => {\r\n }, [dispatch]);\r\n\r\n const update = () => {\r\n dispatch(appointmentActions.getConflicts());\r\n }\r\n\r\n const handleSendNextDayAppointments = () => {\r\n //Call service to send the appointment email. NDN20210311\r\n dispatch(appointmentActions.sendNextDayAppointments());\r\n }\r\n\r\n return (\r\n
\r\n {loggedIn ? (\r\n
\r\n\r\n
\r\n {(department === \"Treasurer\" || department === \"IT\") && (<>\r\n
\r\n
\r\n
\r\n

DMV Appointments

\r\n
\r\n
\r\n

Administer all upcoming DMV appointments.

\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n

Treasurer Appointments

\r\n
\r\n
\r\n

Administer all upcoming Treasurer appointments.

\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n

COR Appointments

\r\n
\r\n
\r\n

Administer all upcoming COR appointments.

\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n
\r\n

New Blackout Date

\r\n
\r\n
\r\n

Click here to add a new blackout date.

\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n

Email Reports

\r\n
\r\n
\r\n

Send an email to administrators with reported appointments.

\r\n \r\n
\r\n
\r\n )}\r\n {department === \"COR\" && (\r\n <>\r\n\r\n
\r\n
\r\n

New Appointment/Blackout

\r\n
\r\n
\r\n

Click here to book an appointment for someone or add a blackout date.

\r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n

View Upcoming Appointments

\r\n
\r\n
\r\n

Click here to see a calendar view of all upcoming COR appointments.

\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n

View Public Appointments

\r\n
\r\n
\r\n

Click here to see a calendar view of public appointment availability.

\r\n \r\n
\r\n
\r\n \r\n\r\n )}\r\n
\r\n
\r\n ) : (\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n

DMV Select

\r\n
\r\n
\r\n

Click here to book an appointment for the DMV Select office.

\r\n \r\n
\r\n\r\n
\r\n \r\n {/*
*/}\r\n {/*
*/}\r\n {/*

City Treasurer

*/}\r\n {/*
*/}\r\n {/*
*/}\r\n {/*

*/}\r\n {/* Click here to book an appointment with the City Treasurer. ?*/}\r\n {/* */}\r\n {/* Treasurer's Office services available by appointment include City payment transactions such as utilities, taxes, trash decals, and zone parking applications.*/}\r\n {/* */}\r\n\r\n {/*

*/}\r\n {/* */}\r\n {/*
*/}\r\n {/*
*/}\r\n\r\n {/*
*/}\r\n {/*
*/}\r\n {/*

Commissioner of Revenue

*/}\r\n {/*
*/}\r\n {/*
*/}\r\n {/*

Click here to book an appointment with the Commissioner of Revenue. ?*/}\r\n {/* */}\r\n {/* Commissioner of the Revenue services available by appointment include business tax inquiries, relief program applications, Virginia State Income Tax assistance, and personal property (vehicle) tax inquiries.*/}\r\n {/* */}\r\n {/*

*/}\r\n {/* */}\r\n {/*
*/}\r\n\r\n {/*
*/}\r\n
\r\n Note: The public is encouraged to use all available online and telephonic options for conducting business at City Hall. This includes using our payment drop boxes on both sides of City Hall and the drive through drop box located between the City Hall Annex and the Key Recreation Center.\r\n
)}\r\n
\r\n );\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Button, Col, Form, FormGroup, FormText, Input, Label, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\r\nimport moment from 'moment';\r\nimport { history } from '../helpers/history';\r\nimport { appointmentActions, alertActions } from '../actions';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { DateTimePicker } from 'react-widgets';\r\nimport 'react-widgets/dist/css/react-widgets.css';\r\n\r\nexport const EditAppointment = (props) => {\r\n const {\r\n buttonLabel,\r\n className,\r\n open,\r\n toggle,\r\n appointment\r\n } = props;\r\n \r\n const [inputs, setInputs] = useState({\r\n appointmentDateTime: moment(appointment.appointmentDateTime).format(\"YYYY-MM-DD HH:mm:ss\"),\r\n appointmentID: appointment.appointmentID,\r\n department: appointment.department,\r\n email: appointment.email,\r\n firstName: appointment.firstName,\r\n lastName: appointment.lastName,\r\n phoneNumber: appointment.phoneNumber,\r\n reason: appointment.reason,\r\n staffNotes: appointment.staffNotes,\r\n stationNumber: appointment.stationNumber\r\n });\r\n \r\n const [submitted, setSubmitted] = useState(false);\r\n const submitting = useSelector(state => state.appointments.submitting);\r\n const complete = useSelector(state => state.appointments.complete);\r\n const regexp = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n useEffect(() => {\r\n setInputs(appointment);\r\n setValidEmail(regexp.test(appointment.email));\r\n }, [appointment]);\r\n\r\n const { firstName, lastName, reason, phoneNumber, email, department, staffNotes, appointmentDateTime } = inputs;\r\n const [validEmail, setValidEmail] = useState(regexp.test(inputs.email));\r\n const handleChange = (e) => {\r\n const { name, value } = e.target;\r\n setInputs(inputs => ({ ...inputs, [name]: value }));\r\n name === 'email' && setValidEmail(regexp.test(value));\r\n }\r\n const dispatch = useDispatch();\r\n\r\n //NDN20210701: Constants for the start time calendar control.\r\n const [dateOpen, setDateOpen] = useState(false);\r\n const [step, setStep] = useState(15);\r\n const toggleDate = () => {\r\n setDateOpen('date');\r\n }\r\n\r\n const handleDateChange = (e) => {\r\n dateOpen === 'date' ? setDateOpen('time') : setDateOpen(false);\r\n setInputs(inputs => ({ ...inputs, appointmentDateTime: e }));\r\n }\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n setSubmitted(true);\r\n if (firstName && lastName && reason && phoneNumber && email && appointmentDateTime) {\r\n //dispatch(appointmentActions.update({ staffNotes, firstName, lastName, reason, phoneNumber, email, AppointmentDateTime: moment(appointment.appointmentDateTime).format(\"YYYY-MM-DD HH:mm:ss\"), department, AppointmentID: appointment.appointmentID }));\r\n\r\n //NDN20210701: Include the option to update the appointment time.\r\n dispatch(appointmentActions.update({ staffNotes, firstName, lastName, reason, phoneNumber, email, AppointmentDateTime: moment(appointmentDateTime).format(\"YYYY-MM-DD HH:mm:ss\"), department, AppointmentID: appointment.appointmentID }));\r\n }\r\n }\r\n return (\r\n <>\r\n \r\n Edit appointment
{moment(appointment.appointmentDateTime).format(\"dddd, MMM Do, YYYY - h:mm A\")} to {moment(appointment.appointmentDateTime).clone().add(15, 'minutes').format(\"h:mm A\")}
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !firstName &&\r\n
First name is required
\r\n }\r\n \r\n \r\n \r\n \r\n {submitted && !lastName &&\r\n
Last name is required
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !validEmail &&\r\n
Valid email address is required
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !phoneNumber &&\r\n
Phone number is required
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {submitted && !reason &&\r\n
Reason is required
\r\n }\r\n \r\n
\r\n {\r\n //NDN20210701: Administrators need the option to edit the time.\r\n }\r\n \r\n \r\n \r\n setDateOpen(false)} onFocus={toggleDate} open={dateOpen} value={new Date(appointmentDateTime)} onChange={handleDateChange} step={step} name=\"appointmentDateTime\" id=\"appointmentDateTime\" />\r\n {submitted && !appointmentDateTime &&\r\n
Start time is required
\r\n }\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { Button, Col, Form, FormGroup, FormText, Input, Label, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\r\nimport moment from 'moment';\r\nimport { history } from '../../helpers/history';\r\nimport { appointmentActions } from '../../actions';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { EditAppointment } from '../EditAppointment';\r\nimport { App } from '../../App';\r\nexport const AppointmentReview = (props) => {\r\n const {\r\n buttonLabel,\r\n className,\r\n open,\r\n toggle\r\n } = props;\r\n const appointment = useSelector(state => state.appointments.appointment);\r\n const [editFormOpen, setEditFormOpen] = useState(false);\r\n const toggleEdit = () => { setEditFormOpen(!editFormOpen); }\r\n const [showForm, setShowForm] = useState(false);\r\n const [submitted, setSubmitted] = useState(false);\r\n const [input, setInput] = useState({\r\n staffNotes: appointment.staffNotes\r\n });\r\n const { staffNotes } = input;\r\n const handleChange = (e) => {\r\n const { name, value } = e.target;\r\n setInput(input => ({...input, [name]: value}));\r\n }\r\n const dispatch = useDispatch();\r\n const cancel = () => {\r\n dispatch(appointmentActions.cancel(appointment.appointmentID));\r\n history.push('/');\r\n }\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n setSubmitted(true);\r\n if (staffNotes) {\r\n dispatch(appointmentActions.updateStaffNotes({staffNotes, ID: appointment.appointmentID}));\r\n setShowForm(false);\r\n toggle();\r\n }\r\n }\r\n return (\r\n <>\r\n \r\n \r\n {appointment.firstName + ' ' + appointment.lastName} - Station {appointment.stationNumber}\r\n {(appointment.stationNumber === 3) && \r\n (Call-In Registration)\r\n }\r\n {(appointment.stationNumber === 5) &&\r\n (Public Website Registration)\r\n }\r\n \r\n \r\n
\r\n
Appointment #{appointment.appointmentID}
\r\n
Appointment Start Time
\r\n
{moment(appointment.appointmentDateTime).format(\"dddd, MMM Do, YYYY - h:mm A\")}
\r\n
Reason for Appointment
\r\n
{appointment.reason}
\r\n
Email Address
\r\n
{appointment.email}
\r\n
Phone Number
\r\n
{appointment.phoneNumber}
\r\n
Staff Notes
\r\n
{appointment.staffNotes}
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !staffNotes &&\r\n
You must have staff notes to submit.
\r\n }\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { Button, Col, Form, FormGroup, FormText, Input, Label, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\r\nimport moment from 'moment';\r\nimport { history } from '../helpers/history';\r\nimport { appointmentActions } from '../actions';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nexport const BlackoutReview = (props) => {\r\n const {\r\n buttonLabel,\r\n className,\r\n open,\r\n toggle\r\n } = props;\r\n const blackout = useSelector(state => state.appointments.blackout);\r\n const [submitting, setSubmitting] = useState(false);\r\n const dispatch = useDispatch();\r\n const deleteBlackout = () => {\r\n setSubmitting(true);\r\n dispatch(appointmentActions.deleteBlackout(blackout.blackoutID));\r\n }\r\n return (\r\n <>\r\n \r\n Blackout Event\r\n \r\n
\r\n
Blackout Start Time
\r\n
{moment(blackout.blackoutStartDate).format(\"dddd, MMM Do, YYYY - h:mm A\")}
\r\n
Blackout End Time
\r\n
{moment(blackout.blackoutEndDate).format(\"dddd, MMM Do, YYYY - h:mm A\")}
\r\n
Blackout Description
\r\n
{blackout.blackoutDescription}
\r\n
Department
\r\n
{blackout.department}
\r\n
Station Number
\r\n
\r\n {(blackout.stationNumber === 3) &&\r\n 3 (Call-In Registrations are blacked out)\r\n }\r\n {(blackout.stationNumber === 5) &&\r\n 5 (Public Website Registrations are blacked out)\r\n }\r\n {(blackout.stationNumber === 0) &&\r\n 3 and 5 (both Call-In Registrations and Public Website Registrations are blacked out)\r\n }\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n );\r\n}","import React, { useEffect, useRef, useState } from 'react';\r\nimport FullCalendar from '@fullcalendar/react';\r\nimport dayGridPlugin from '@fullcalendar/daygrid';\r\nimport timeGridPlugin from '@fullcalendar/timegrid';\r\nimport interactionPlugin from '@fullcalendar/interaction';\r\nimport momentPlugin, { toMoment } from '@fullcalendar/moment';\r\nimport moment from 'moment';\r\nimport { AppointmentReview } from './AppointmentReview';\r\nimport { BlackoutReview } from '../BlackoutReview';\r\nimport { appointmentActions } from '../../actions';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n\r\nexport const AdminCalendarDisplay = (props) => {\r\n const calendar = useRef();\r\n const [events, setEvents] = useState(null);\r\n const [blackouts, setBlackouts] = useState(null);\r\n const [loaded, setLoaded] = useState(false);\r\n const toggle = () => setOpen(!open);\r\n const [open, setOpen] = useState(false);\r\n const [blackoutOpen, setBlackoutOpen] = useState(false);\r\n const toggleBlackout = () => setBlackoutOpen(!blackoutOpen);\r\n const valid = (nowDate) => {\r\n var today = new Date();\r\n var now = moment(today);\r\n return {\r\n end: now.clone().add(2, 'months').format(\"YYYY-MM-DD\")\r\n };\r\n }\r\n useEffect(() => {\r\n setEvents(props.times);\r\n if (props.blackouts != null) { //NDN20210219\r\n let blackoutTimes = props.blackouts.filter(f => f.description.split(\"$\")[0] === \"DMV\"); \r\n setBlackouts(blackoutTimes);\r\n }\r\n events !== null && setLoaded(true);\r\n }, [props.times]);\r\n const eventContent = (e) => {\r\n return (\r\n <>\r\n
{moment(e.event.start).format('h:mma')} {e.event.title !== \"Lunch\" && e.event.extendedProps.description.indexOf(\"$\") === -1 && \" - Station \" + e.event.extendedProps.description}
\r\n
\r\n
{e.event.title}
\r\n
\r\n \r\n );\r\n }\r\n const recurringEvent = [{ title: \"Lunch\", color: 'gray', display: 'background', startTime: '13:00', endTime: '13:45', daysOfWeek: [1, 2, 3, 4, 5], allDay: false }]\r\n const dispatch = useDispatch();\r\n const eventClick = (e) => {\r\n if (e.event.title !== 'Lunch' && e.event.extendedProps.description.indexOf(\"$\") === -1) {\r\n dispatch(appointmentActions.get(parseInt(e.event.id)));\r\n setOpen(true);\r\n }\r\n else if (e.event.title !== 'Lunch' && e.event.extendedProps.description.indexOf(\"$\") !== -1) {\r\n dispatch(appointmentActions.getBlackoutDate(parseInt(e.event.id)));\r\n setBlackoutOpen(true);\r\n }\r\n }\r\n const titleFormat = (e) => {\r\n var dateString = \"Registered DMV Select Appointments for \" + moment(e.start.marker).clone().add(1, 'day').format(\"MMM Do\") + \" - \" + moment(e.end.marker).format(\"Do\");\r\n return dateString;\r\n }\r\n\r\n return (\r\n <>\r\n {loaded && }\r\n \r\n \r\n \r\n\r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport FullCalendar from '@fullcalendar/react';\r\nimport dayGridPlugin from '@fullcalendar/daygrid';\r\nimport timeGridPlugin from '@fullcalendar/timegrid';\r\nimport interactionPlugin from '@fullcalendar/interaction';\r\nimport momentPlugin, { toMoment } from '@fullcalendar/moment';\r\nimport moment from 'moment';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RegistrationForm } from './RegistrationForm';\r\nimport { appointmentActions } from '../../actions';\r\nimport { AdminCalendarDisplay } from './AdminCalendarDisplay';\r\n\r\nexport const AdminCalendar = (props) => {\r\n const [open, setOpen] = useState(false);\r\n const [eventStart, setEventStart] = useState(null);\r\n const appointments = useSelector(state => state.appointments.appointments);\r\n const blackouts = useSelector(state => state.appointments.blackouts);\r\n let times = [];\r\n const valid = (nowDate) => {\r\n var today = new Date();\r\n var now = moment(today);\r\n return {\r\n end: now.clone().add(2, 'months').format(\"YYYY-MM-DD\")\r\n };\r\n }\r\n const toggle = () => setOpen(!open);\r\n const handleEventClick = (arg) => {\r\n if (arg.el.children[0].children && arg.el.children[0].children[0].innerHTML.indexOf(\"Available\") !== -1) {\r\n setEventStart(arg.event.start);\r\n setOpen(true);\r\n\r\n }\r\n };\r\n const dispatch = useDispatch();\r\n useEffect(() => {\r\n dispatch(appointmentActions.getAll());\r\n dispatch(appointmentActions.getBlackoutDates());\r\n }, [])\r\n const handleDateClick = (arg) => {\r\n };\r\n const eventContent = (eventInfo) => {\r\n return (\r\n <>\r\n
{eventInfo.timeText} - {eventInfo.event.title}
\r\n\r\n \r\n )\r\n }\r\n\r\n\r\n const parseDate = (input) => {\r\n // Transform date from text to date\r\n var parts = input.match(/(\\d+)/g);\r\n // new Date(year, month [, date [, hours[, minutes[, seconds[, ms]]]]])\r\n return new Date(parts[0], parts[1] - 1, parts[2]); // months are 0-based\r\n }\r\n const workingDaysBetweenDates = (d0, d1) => {\r\n var startDate = parseDate(d0);\r\n var endDate = parseDate(d1);\r\n // Validate input\r\n if (endDate < startDate) {\r\n return 0;\r\n }\r\n // Calculate days between dates\r\n var millisecondsPerDay = 86400 * 1000; // Day in milliseconds\r\n startDate.setHours(0, 0, 0, 1); // Start just after midnight\r\n endDate.setHours(23, 59, 59, 999); // End just before midnight\r\n var diff = endDate - startDate; // Milliseconds between datetime objects \r\n var days = Math.ceil(diff / millisecondsPerDay);\r\n\r\n // Subtract two weekend days for every week in between\r\n var weeks = Math.floor(days / 7);\r\n days -= weeks * 2;\r\n\r\n // Handle special cases\r\n var startDay = startDate.getDay();\r\n var endDay = endDate.getDay();\r\n\r\n // Remove weekend not previously removed. \r\n if (startDay - endDay > 1) {\r\n days -= 2;\r\n }\r\n // Remove start day if span starts on Sunday but ends before Saturday\r\n if (startDay == 0 && endDay != 6) {\r\n days--;\r\n }\r\n // Remove end day if span ends on Saturday but starts after Sunday\r\n if (endDay == 6 && startDay != 0) {\r\n days--;\r\n }\r\n /* Here is the code */\r\n //for (var i in holidays) {\r\n // if ((holidays[i] >= d0) && (holidays[i] <= d1)) {\r\n // days--;\r\n // }\r\n //}\r\n return days;\r\n }\r\n return (\r\n \r\n\r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { Button, Col, Form, FormGroup, Label, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\r\nimport moment from 'moment';\r\nimport { history } from '../../helpers/history';\r\nimport { corAppointmentActions as appointmentActions } from '../../actions';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { App } from '../../App';\r\nexport const RegistrationForm = (props) => {\r\n const {\r\n buttonLabel,\r\n className,\r\n open,\r\n toggle,\r\n startTime,\r\n reservedReason\r\n } = props;\r\n\r\n const [inputs, setInputs] = useState({\r\n firstName: '',\r\n lastName: '',\r\n reason: '',\r\n streetAddress: '',\r\n aptNumber: '',\r\n city: '',\r\n state: 'VA',\r\n zipCode: '',\r\n phoneNumber: '',\r\n email: '',\r\n department: 'COR'\r\n });\r\n const [submitted, setSubmitted] = useState(false);\r\n const [validEmail, setValidEmail] = useState(false);\r\n const [validReason, setValidReason] = useState(true);\r\n\r\n useEffect(() => {\r\n if (complete == true) {\r\n toggle();\r\n //window.setTimeout(() => {\r\n // window.location.reload();\r\n //});\r\n }\r\n\r\n }, [complete]);\r\n\r\n const submitting = useSelector(state => state.corAppointments.submitting);\r\n const complete = useSelector(state => state.corAppointments.complete);\r\n const { firstName, lastName, reason, streetAddress, aptNumber, city, state, zipCode, phoneNumber, email, department } = inputs;\r\n const regexp = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n const dispatch = useDispatch();\r\n\r\n //NDN20210208: Set the available reasons for the drop down list. Divide up the reasons into two groups: one employee handles Business taxes, one employee handles everything else. \r\n const reasons1 = ['Business Tax',\r\n 'Business License']; \r\n const reasons2 = ['Personal Property(Vehicle)',\r\n 'Tax Relief',\r\n 'Rental Relief for Elderly and Disabled',\r\n 'Virginia Income Tax']; \r\n\r\n //NDN20210302: Find out which array the reservedReason is in and map the drop down list to the other to avoid a conflicting appointment.\r\n var listReasons;\r\n var reasonsToMap; //The array that we'll be mapping the drop down list to below.\r\n var reservedReasonFoundInList = 0; //In which array is the reserved reason found? This variable makes things easier when validating in handleChange().\r\n var message;\r\n for (var i in reasons1) {\r\n if (reservedReason.toLowerCase().indexOf(reasons1[i].toLowerCase()) != -1) {\r\n reservedReasonFoundInList = 1;\r\n reasonsToMap = reasons2;\r\n message = \"Already reserved for Business Tax and Business License.\";\r\n }\r\n }\r\n for (var i in reasons2) {\r\n if (reservedReason.toLowerCase().indexOf(reasons2[i].toLowerCase()) != -1) {\r\n reservedReasonFoundInList = 2;\r\n reasonsToMap = reasons1;\r\n message = \"Already reserved for Personal Property(Vehicle), Tax Relief, Rental Relief for Elderly and Disabled, and Virginia Income Tax.\";\r\n }\r\n }\r\n if (reservedReasonFoundInList == 0) { //The reserved reason is in neither list, no restrictions on what the person can select.\r\n reasonsToMap = reasons1.concat(reasons2); \r\n }\r\n\r\n //NDN20210216: Make a list with all the reasons mapped out as HTML options.\r\n listReasons = reasonsToMap.map((mapReason) => {\r\n return ;\r\n });\r\n\r\n const handleChange = (e) => {\r\n const { name, value } = e.target;\r\n setInputs(inputs => ({ ...inputs, [name]: value }));\r\n name === 'email' && setValidEmail(regexp.test(value));\r\n\r\n //NDN20210302: Make sure the reason input isn't one of those already reserved for that time.\r\n if (name == \"reason\") {\r\n if (value.length >= 10) { //Wait to search until the string is long enough to make the search meaningful.\r\n var valid = true;\r\n if (reservedReasonFoundInList == 1) { //Everything from the first array has been reserved.\r\n for (var i in reasons1) {\r\n if (value.toLowerCase().indexOf(reasons1[i].toLowerCase()) != -1) valid = false; //Look in the string input for the reasons reserved. Make sure you put everything to lowercase.\r\n }\r\n }\r\n else if (reservedReasonFoundInList == 2) { //Everything from the second array has been reserved.\r\n for (var i in reasons2) {\r\n if (value.toLowerCase().indexOf(reasons2[i].toLowerCase()) != -1) valid = false; //Look in the string input for the reasons reserved. Make sure you put everything to lowercase.\r\n }\r\n }\r\n\r\n setValidReason(valid);\r\n }\r\n\r\n }\r\n }\r\n\r\n const handleClose = () => { //NDN2021224\r\n setInputs(inputs => ({ ...inputs, reason: '' })); //Reset the reason value.\r\n setValidReason(true)\r\n toggle();\r\n }\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n setSubmitted(true);\r\n\r\n if (firstName && lastName && reason && phoneNumber && email && validReason) {\r\n dispatch(appointmentActions.submit({ firstName, lastName, reason, streetAddress, aptNumber, city, state, zipCode, phoneNumber, email, AppointmentDateTime: moment(startTime).format(\"YYYY-MM-DD HH:mm:ss\"), department }));\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n \r\n Register for an appointment
{moment(startTime).format(\"dddd, MMM Do, YYYY - h:mm A\")} to {moment(startTime).clone().add(30, 'minutes').format(\"h:mm A\")}
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !firstName &&\r\n
First name is required
\r\n }\r\n \r\n \r\n \r\n \r\n {submitted && !lastName &&\r\n
Last name is required
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !validEmail &&\r\n
Valid email address is required
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !phoneNumber &&\r\n
Phone number is required
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {message}\r\n \r\n \r\n {listReasons}\r\n \r\n {submitted && !reason &&\r\n
Reason is required
\r\n }\r\n {submitted && !validReason && //NDN20210216\r\n
This time already been reserved for this reason. Please close this window and select another time.
\r\n }\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { Button, Col, Form, FormGroup, FormText, Input, Label, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\r\nimport moment from 'moment';\r\nimport { history } from '../../helpers/history';\r\nimport { corAppointmentActions as appointmentActions } from '../../actions';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { EditAppointment } from '../EditAppointment';\r\n\r\nexport const AppointmentReview = (props) => {\r\n const {\r\n buttonLabel,\r\n className,\r\n open,\r\n toggle\r\n } = props;\r\n const appointment = useSelector(state => state.corAppointments.appointment);\r\n const [editFormOpen, setEditFormOpen] = useState(false);\r\n const toggleEdit = () => { setEditFormOpen(!editFormOpen); }\r\n const [showForm, setShowForm] = useState(false);\r\n const [submitted, setSubmitted] = useState(false);\r\n const [input, setInput] = useState({\r\n staffNotes: appointment.staffNotes\r\n });\r\n const { staffNotes } = input;\r\n const handleChange = (e) => {\r\n const { name, value } = e.target;\r\n setInput(input => ({...input, [name]: value}));\r\n }\r\n const dispatch = useDispatch();\r\n const cancel = () => {\r\n dispatch(appointmentActions.cancel(appointment.appointmentID));\r\n history.push('/');\r\n }\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n setSubmitted(true);\r\n if (staffNotes) {\r\n dispatch(appointmentActions.updateStaffNotes({ staffNotes, ID: appointment.appointmentID}));\r\n setShowForm(false);\r\n toggle();\r\n }\r\n }\r\n return (\r\n <>\r\n \r\n \r\n {appointment.firstName + ' ' + appointment.lastName}\r\n \r\n
\r\n
Appointment #{appointment.appointmentID}
\r\n
Appointment Start Time
\r\n
{moment(appointment.appointmentDateTime).format(\"dddd, MMM Do, YYYY - h:mm A\")}
\r\n
Reason for Appointment
\r\n
{appointment.reason}
\r\n
Email Address
\r\n
{appointment.email}
\r\n
Phone Number
\r\n
{appointment.phoneNumber}
\r\n
Staff Notes
\r\n
{appointment.staffNotes}
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !staffNotes &&\r\n
You must have staff notes to submit.
\r\n }\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n );\r\n}","import React, { useEffect, useRef, useState } from 'react';\r\nimport FullCalendar from '@fullcalendar/react';\r\nimport dayGridPlugin from '@fullcalendar/daygrid';\r\nimport timeGridPlugin from '@fullcalendar/timegrid';\r\nimport interactionPlugin from '@fullcalendar/interaction';\r\nimport momentPlugin from '@fullcalendar/moment';\r\nimport moment from 'moment';\r\nimport { AppointmentReview } from './AppointmentReview';\r\nimport { BlackoutReview } from '../BlackoutReview';\r\nimport { corAppointmentActions as appointmentActions, appointmentActions as AA } from '../../actions';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n\r\nexport const AdminCalendarDisplay = (props) => {\r\n const calendar = useRef();\r\n const [events, setEvents] = useState(null);\r\n const [blackouts, setBlackouts] = useState(null);\r\n const [loaded, setLoaded] = useState(false);\r\n const toggle = () => setOpen(!open);\r\n const [open, setOpen] = useState(false);\r\n const [blackoutOpen, setBlackoutOpen] = useState(false);\r\n const toggleBlackout = () => setBlackoutOpen(!blackoutOpen);\r\n const valid = (nowDate) => {\r\n var today = new Date();\r\n var now = moment(today);\r\n return {\r\n end: now.clone().add(2, 'months').format(\"YYYY-MM-DD\")\r\n };\r\n }\r\n useEffect(() => {\r\n setEvents(props.times);\r\n if (props.blackouts != null) { //NDN20210219\r\n let blackoutTimes = props.blackouts.filter(f => f.description.split(\"$\")[0] === \"COR\");\r\n setBlackouts(blackoutTimes);\r\n }\r\n events !== null && setLoaded(true);\r\n }, [props.times]);\r\n const eventContent = (e) => {\r\n //console.log(\"EVENT DATA\", e);\r\n return (\r\n <>\r\n
{moment(e.event.start).format('hh:mma')}
\r\n
\r\n
{e.event.title}
\r\n
\r\n \r\n );\r\n }\r\n\r\n const dispatch = useDispatch();\r\n const eventClick = (e) => {\r\n if (!e.event.extendedProps.description || (e.event.extendedProps.description && e.event.extendedProps.description.indexOf(\"$\") === -1)) {\r\n dispatch(appointmentActions.get(parseInt(e.event.id)));\r\n setOpen(true);\r\n } else if (e.event.extendedProps.description && e.event.extendedProps.description.indexOf(\"$\") !== -1) {\r\n dispatch(AA.getBlackoutDate(parseInt(e.event.id)));\r\n setBlackoutOpen(true);\r\n }\r\n }\r\n const titleFormat = (e) => {\r\n var dateString = \"Registered Commissioner of Revenue Appointments for \" + moment(e.start.marker).clone().add(1, 'day').format(\"MMM Do\") + \" - \" + moment(e.end.marker).format(\"Do\");\r\n return dateString;\r\n }\r\n\r\n return (\r\n <>\r\n {loaded && }\r\n \r\n \r\n \r\n\r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport FullCalendar from '@fullcalendar/react';\r\nimport dayGridPlugin from '@fullcalendar/daygrid';\r\nimport timeGridPlugin from '@fullcalendar/timegrid';\r\nimport interactionPlugin from '@fullcalendar/interaction';\r\nimport momentPlugin, { toMoment } from '@fullcalendar/moment';\r\nimport moment from 'moment';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RegistrationForm } from './RegistrationForm';\r\nimport { corAppointmentActions as appointmentActions, appointmentActions as AA } from '../../actions';\r\nimport { AdminCalendarDisplay } from './AdminCalendarDisplay';\r\n\r\nexport const AdminCalendar = () => {\r\n const appointments = useSelector(state => state.corAppointments.appointments);\r\n const blackouts = useSelector(state => state.appointments.blackouts);\r\n const dispatch = useDispatch();\r\n useEffect(() => {\r\n dispatch(appointmentActions.getAll());\r\n dispatch(AA.getBlackoutDates());\r\n }, []);\r\n\r\n return (\r\n \r\n\r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { Button, Col, Form, FormGroup, FormText, Input, Label, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\r\nimport moment from 'moment';\r\nimport { history } from '../../helpers/history';\r\nimport { treasurerAppointmentActions as appointmentActions } from '../../actions';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { EditAppointment } from '../EditAppointment';\r\nexport const AppointmentReview = (props) => {\r\n const {\r\n buttonLabel,\r\n className,\r\n open,\r\n toggle\r\n } = props;\r\n const appointment = useSelector(state => state.treasurerAppointments.appointment);\r\n const [editFormOpen, setEditFormOpen] = useState(false);\r\n const toggleEdit = () => { setEditFormOpen(!editFormOpen); }\r\n const [showForm, setShowForm] = useState(false);\r\n const [submitted, setSubmitted] = useState(false);\r\n const [input, setInput] = useState({\r\n staffNotes: appointment.staffNotes\r\n });\r\n const { staffNotes } = input;\r\n const handleChange = (e) => {\r\n const { name, value } = e.target;\r\n setInput(input => ({...input, [name]: value}));\r\n }\r\n const dispatch = useDispatch();\r\n const cancel = () => {\r\n dispatch(appointmentActions.cancel(appointment.appointmentID));\r\n history.push('/');\r\n }\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n setSubmitted(true);\r\n if (staffNotes) {\r\n dispatch(appointmentActions.updateStaffNotes({ staffNotes, ID: appointment.appointmentID}));\r\n setShowForm(false);\r\n toggle();\r\n }\r\n }\r\n return (\r\n <>\r\n \r\n \r\n {appointment.firstName + ' ' + appointment.lastName}\r\n \r\n
\r\n
Appointment #{appointment.appointmentID}
\r\n
Appointment Start Time
\r\n
{moment(appointment.appointmentDateTime).format(\"dddd, MMM Do, YYYY - h:mm A\")}
\r\n
Reason for Appointment
\r\n
{appointment.reason}
\r\n
Email Address
\r\n
{appointment.email}
\r\n
Phone Number
\r\n
{appointment.phoneNumber}
\r\n
Staff Notes
\r\n
{appointment.staffNotes}
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !staffNotes &&\r\n
You must have staff notes to submit.
\r\n }\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n );\r\n}","import React, { useEffect, useRef, useState } from 'react';\r\nimport FullCalendar from '@fullcalendar/react';\r\nimport dayGridPlugin from '@fullcalendar/daygrid';\r\nimport timeGridPlugin from '@fullcalendar/timegrid';\r\nimport interactionPlugin from '@fullcalendar/interaction';\r\nimport momentPlugin from '@fullcalendar/moment';\r\nimport moment from 'moment';\r\nimport { AppointmentReview } from './AppointmentReview';\r\nimport { BlackoutReview } from '../BlackoutReview';\r\nimport { treasurerAppointmentActions as appointmentActions, appointmentActions as AA } from '../../actions';\r\nimport { useDispatch } from 'react-redux';\r\n\r\nexport const AdminCalendarDisplay = (props) => {\r\n const calendar = useRef();\r\n const [events, setEvents] = useState(null);\r\n const [blackouts, setBlackouts] = useState(null);\r\n const [loaded, setLoaded] = useState(false);\r\n const toggle = () => setOpen(!open);\r\n const [open, setOpen] = useState(false);\r\n const [blackoutOpen, setBlackoutOpen] = useState(false);\r\n const toggleBlackout = () => setBlackoutOpen(!blackoutOpen);\r\n const valid = (nowDate) => {\r\n var today = new Date();\r\n var now = moment(today);\r\n return {\r\n end: now.clone().add(2, 'months').format(\"YYYY-MM-DD\")\r\n };\r\n }\r\n useEffect(() => {\r\n setEvents(props.times);\r\n if (props.blackouts != null) { //NDN20210219\r\n let blackoutTimes = props.blackouts.filter(f => f.description.split(\"$\")[0] === \"Treasurer\");\r\n setBlackouts(blackoutTimes);\r\n }\r\n events !== null && setLoaded(true);\r\n }, [props.times]);\r\n const eventContent = (e) => {\r\n return (\r\n <>\r\n
{moment(e.event.start).format('h:mma')}
\r\n
\r\n
{e.event.title}
\r\n
\r\n \r\n );\r\n }\r\n const recurringEvent = [{ title: \"Lunch\", color: 'gray', display: 'background', startTime: '13:00', endTime: '13:45', daysOfWeek: [1, 2, 3, 4, 5], allDay: false }]\r\n const dispatch = useDispatch();\r\n const eventClick = (e) => {\r\n if (e.event.title !== 'Lunch' && !e.event.extendedProps.description || (e.event.extendedProps.description && e.event.extendedProps.description.indexOf(\"$\") === -1)) {\r\n dispatch(appointmentActions.get(parseInt(e.event.id)));\r\n setOpen(true);\r\n }\r\n else if (e.event.title !== 'Lunch' && e.event.extendedProps.description && e.event.extendedProps.description.indexOf(\"$\") !== -1) {\r\n dispatch(AA.getBlackoutDate(parseInt(e.event.id)));\r\n setBlackoutOpen(true);\r\n }\r\n }\r\n const titleFormat = (e) => {\r\n var dateString = \"Registered Treasurer Appointments for \" + moment(e.start.marker).clone().add(1, 'day').format(\"MMM Do\") + \" - \" + moment(e.end.marker).format(\"Do\");\r\n return dateString;\r\n }\r\n\r\n return (\r\n <>\r\n {loaded && }\r\n \r\n \r\n \r\n\r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { treasurerAppointmentActions as appointmentActions, appointmentActions as AA } from '../../actions';\r\nimport { AdminCalendarDisplay } from './AdminCalendarDisplay';\r\n\r\nexport const AdminCalendar = () => {\r\n const appointments = useSelector(state => state.treasurerAppointments.appointments);\r\n const blackouts = useSelector(state => state.appointments.blackouts);\r\n const dispatch = useDispatch();\r\n useEffect(() => {\r\n dispatch(appointmentActions.getAll());\r\n dispatch(AA.getBlackoutDates());\r\n }, []);\r\n\r\n return (\r\n \r\n\r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { appointmentActions } from '../../actions';\r\nimport { Calendar } from './Calendar';\r\n\r\nexport const CalendarContainer = (props) => {\r\n const conflicts = useSelector(state => state.appointments.conflicts);\r\n const blackouts = useSelector(state => state.appointments.blackouts);\r\n const loggedIn = useSelector(state => state.authentication.loggedIn); //NDN20210406 \r\n const dispatch = useDispatch();\r\n useEffect(() => {\r\n //NDN20210406: Pass in whether the user has logged in to determine if they should see only the public website station (5) or both stations (3 and 5)\r\n dispatch(appointmentActions.getConflicts(loggedIn));\r\n dispatch(appointmentActions.getBlackoutDates());\r\n\r\n }, []);\r\n\r\n return (\r\n \r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { Button, Col, Form, FormGroup, Label, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\r\nimport moment from 'moment';\r\nimport { treasurerAppointmentActions as appointmentActions } from '../../actions';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nexport const RegistrationForm = (props) => {\r\n const {\r\n buttonLabel,\r\n className,\r\n open,\r\n toggle,\r\n startTime\r\n } = props;\r\n\r\n const [inputs, setInputs] = useState({\r\n firstName: '',\r\n lastName: '',\r\n reason: '',\r\n streetAddress: '',\r\n aptNumber: '',\r\n city: '',\r\n state: 'VA',\r\n zipCode: '',\r\n phoneNumber: '',\r\n email: '',\r\n department: 'Treasurer'\r\n });\r\n const [submitted, setSubmitted] = useState(false);\r\n const submitting = useSelector(state => state.appointments.submitting);\r\n const complete = useSelector(state => state.appointments.complete);\r\n const [validEmail, setValidEmail] = useState(false);\r\n\r\n useEffect(() => {\r\n if (complete == true) {\r\n toggle();\r\n window.setTimeout(() => {\r\n window.location.reload();\r\n });\r\n }\r\n }, [complete]);\r\n\r\n const { firstName, lastName, reason, streetAddress, aptNumber, city, state, zipCode, phoneNumber, email, department } = inputs;\r\n const regexp = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n const handleChange = (e) => {\r\n const { name, value } = e.target;\r\n setInputs(inputs => ({ ...inputs, [name]: value }));\r\n name === 'email' && setValidEmail(regexp.test(value));\r\n }\r\n const dispatch = useDispatch();\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n setSubmitted(true);\r\n if (firstName && lastName && reason && phoneNumber && email) {\r\n dispatch(appointmentActions.submit({ firstName, lastName, reason, streetAddress, aptNumber, city, state, zipCode, phoneNumber, email, AppointmentDateTime: moment(startTime).format(\"YYYY-MM-DD HH:mm:ss\"), department }));\r\n toggle(); //NDN20210405\r\n }\r\n }\r\n return (\r\n <>\r\n \r\n Register for an appointment
{moment(startTime).format(\"dddd, MMM Do, YYYY - h:mm A\")} to {moment(startTime).clone().add(15, 'minutes').format(\"h:mm A\")}
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !firstName &&\r\n
First name is required
\r\n }\r\n \r\n \r\n \r\n \r\n {submitted && !lastName &&\r\n
Last name is required
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !validEmail &&\r\n
Valid email address is required
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !phoneNumber &&\r\n
Phone number is required
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {submitted && !reason &&\r\n
Reason is required
\r\n }\r\n \r\n
\r\n\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport FullCalendar from '@fullcalendar/react';\r\nimport dayGridPlugin from '@fullcalendar/daygrid';\r\nimport timeGridPlugin from '@fullcalendar/timegrid';\r\nimport interactionPlugin from '@fullcalendar/interaction';\r\nimport momentPlugin, { toMoment } from '@fullcalendar/moment';\r\nimport moment from 'moment';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RegistrationForm } from './RegistrationForm';\r\nimport { appointmentActions } from '../../actions';\r\n\r\nexport const Calendar = (props) => {\r\n\r\n //NDN20230224: If the user hasn't logged in, they shouldn't see this calendar.\r\n const loggedIn = useSelector(state => state.authentication.loggedIn);\r\n if (loggedIn !== true) {\r\n window.location.replace(\"https://www.charlottesville.gov/551/City-Treasurer\");\r\n };\r\n\r\n const [open, setOpen] = useState(false);\r\n const [eventStart, setEventStart] = useState(null);\r\n const { conflicts, blackouts } = props;\r\n const valid = (nowDate) => {\r\n var today = new Date();\r\n var now = moment(today);\r\n return {\r\n start: '2020-07-20',\r\n end: now.clone().add(1, 'months').format(\"YYYY-MM-DD\")\r\n };\r\n }\r\n const toggle = () => setOpen(!open);\r\n const handleEventClick = (arg) => {\r\n if (arg.el.children[0].children && arg.el.children[0].children[0].innerHTML.indexOf(\"Available\") !== -1) {\r\n setEventStart(arg.event.start);\r\n setOpen(true);\r\n \r\n }\r\n };\r\n const eventContent = (eventInfo) => {\r\n const diffDay = 2;\r\n var titleCSS = '';\r\n var borderCSS = '#c2e9d7';\r\n var backgroundCSS = '';\r\n var titleText = 'Available';\r\n var flag = true;\r\n var cur = new Date();\r\n var curMonth = cur.getMonth() + 1;\r\n var curDay = cur.getDate();\r\n var curYear = cur.getFullYear();\r\n cur = curYear + \"-\" + curMonth + \"-\" + curDay;\r\n var tempDate = new Date(eventInfo.event.start);\r\n var tempMonth = tempDate.getMonth() + 1;\r\n var tempDay = tempDate.getDate();\r\n var tempYear = tempDate.getFullYear();\r\n tempDate = tempYear + \"-\" + tempMonth + \"-\" + tempDay;\r\n var diff = workingDaysBetweenDates(cur, tempDate);\r\n if (diff < 1) {\r\n //eventInfo.event.setProp(\"display\", \"none\");\r\n eventInfo.backgroundColor = 'transparent';\r\n eventInfo.borderColor = 'transparent';\r\n return (
);\r\n }\r\n if (eventInfo.event.extendedProps.description === 'special') {\r\n var time = moment(eventInfo.event.start).format(\"HH:mm\");\r\n var date = moment(eventInfo.event.start).format(\"MM DD YYYY\");\r\n var conflictMapping = {\r\n\r\n }\r\n conflicts.map((j, i) => {\r\n if (moment(j.appointmentDateTime).format(\"HH:mm\") === time && moment(j.appointmentDateTime).format(\"MM DD YYYY\") === date) {\r\n conflictMapping[moment(j.appointmentDateTime).format(\"MM DD YYYY HH:mm\")] ? conflictMapping[moment(j.appointmentDateTime).format(\"MM DD YYYY HH:mm\")] += 1 : conflictMapping[moment(j.appointmentDateTime).format(\"MM DD YYYY HH:mm\")] = 1;\r\n if (conflictMapping[moment(j.appointmentDateTime).format(\"MM DD YYYY HH:mm\")] == 3) {\r\n flag = false;\r\n }\r\n }\r\n });\r\n console.log(conflictMapping);\r\n if (!flag) {\r\n //eventInfo.event.setProp(\"display\", \"none\");\r\n eventInfo.backgroundColor = 'transparent';\r\n eventInfo.borderColor = 'transparent';\r\n return (
);\r\n }\r\n }\r\n if (eventInfo.event.extendedProps.description === 'recur') {\r\n var time = moment(eventInfo.event.start).format(\"HH:mm\");\r\n var date = moment(eventInfo.event.start).format(\"MM DD YYYY\");\r\n conflicts.map((j, i) => {\r\n if (moment(j.appointmentDateTime).format(\"HH:mm\") === time && moment(j.appointmentDateTime).format(\"MM DD YYYY\") === date) {\r\n titleCSS = '#fccbbc';\r\n flag = false;\r\n }\r\n //if ((moment(j.start).format(\"MM DD YYYY\") === date) && j.allDay === true) {\r\n // flag = false;\r\n //}\r\n });\r\n\r\n blackouts.map((j, i) => {\r\n var department = j.description.split('$')[0];\r\n if (moment(j.start).isSameOrBefore(moment(eventInfo.event.start)) && moment(eventInfo.event.start).isBefore(moment(j.end)) && department === \"Treasurer\") {\r\n flag = false;\r\n }\r\n });\r\n if (!flag) {\r\n //eventInfo.event.setProp(\"display\", \"none\");\r\n eventInfo.backgroundColor = 'transparent';\r\n eventInfo.borderColor = 'transparent';\r\n return (
);\r\n }\r\n }\r\n if (diff < diffDay && eventInfo.event.description === 'Blackout') {\r\n diffDay++;\r\n }\r\n if ((diff < diffDay && eventInfo.event.allDay === false) || (diff < diffDay && eventInfo.event.title === \"Available\")) {\r\n //eventInfo.event.setProp(\"display\", \"none\");\r\n eventInfo.backgroundColor = 'transparent';\r\n eventInfo.borderColor = 'transparent';\r\n return (
);\r\n } if (eventInfo.event.title === \"Not Available\") {\r\n eventInfo.backgroundColor = 'transparent';\r\n eventInfo.borderColor = 'transparent';\r\n return (
);\r\n\r\n } \r\n if (eventInfo.event.allDay === true) {\r\n\r\n }\r\n if (moment(eventInfo.event.start).isBefore(moment())) {\r\n return (<>);\r\n }\r\n return (\r\n <>\r\n
{eventInfo.timeText} - {eventInfo.event.title}
\r\n \r\n \r\n )\r\n }\r\n\r\n \r\n const parseDate = (input) => {\r\n // Transform date from text to date\r\n var parts = input.match(/(\\d+)/g);\r\n // new Date(year, month [, date [, hours[, minutes[, seconds[, ms]]]]])\r\n return new Date(parts[0], parts[1] - 1, parts[2]); // months are 0-based\r\n }\r\n const workingDaysBetweenDates = (d0, d1) => {\r\n var startDate = parseDate(d0);\r\n var endDate = parseDate(d1);\r\n // Validate input\r\n if (endDate < startDate) {\r\n return 0;\r\n }\r\n // Calculate days between dates\r\n var millisecondsPerDay = 86400 * 1000; // Day in milliseconds\r\n startDate.setHours(0, 0, 0, 1); // Start just after midnight\r\n endDate.setHours(23, 59, 59, 999); // End just before midnight\r\n var diff = endDate - startDate; // Milliseconds between datetime objects \r\n var days = Math.ceil(diff / millisecondsPerDay);\r\n\r\n // Subtract two weekend days for every week in between\r\n var weeks = Math.floor(days / 7);\r\n days -= weeks * 2;\r\n\r\n // Handle special cases\r\n var startDay = startDate.getDay();\r\n var endDay = endDate.getDay();\r\n\r\n // Remove weekend not previously removed. \r\n if (startDay - endDay > 1) {\r\n days -= 2;\r\n }\r\n // Remove start day if span starts on Sunday but ends before Saturday\r\n if (startDay == 0 && endDay != 6) {\r\n days--;\r\n }\r\n // Remove end day if span ends on Saturday but starts after Sunday\r\n if (endDay == 6 && startDay != 0) {\r\n days--;\r\n }\r\n /* Here is the code */\r\n //for (var i in holidays) {\r\n // if ((holidays[i] >= d0) && (holidays[i] <= d1)) {\r\n // days--;\r\n // }\r\n //}\r\n return days;\r\n }\r\n const times = [\r\n { title: \"Available\", description: 'recur', startTime: '08:30', endTime: '08:45', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '08:45', endTime: '09:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '09:00', endTime: '09:15', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '09:15', endTime: '09:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '09:30', endTime: '09:45', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '09:45', endTime: '10:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '10:00', endTime: '10:15', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '10:15', endTime: '10:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '10:30', endTime: '10:45', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '10:45', endTime: '11:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '11:00', endTime: '11:15', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '11:15', endTime: '11:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '11:30', endTime: '11:45', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '11:45', endTime: '12:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '12:00', endTime: '12:15', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '12:15', endTime: '12:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '12:30', endTime: '12:45', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '13:45', endTime: '14:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '14:00', endTime: '14:15', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '14:15', endTime: '14:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '14:30', endTime: '14:45', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '14:45', endTime: '15:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '15:00', endTime: '15:15', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '15:15', endTime: '15:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '15:30', endTime: '15:45', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '15:45', endTime: '16:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '16:00', endTime: '16:15', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '16:15', endTime: '16:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 09:00', end: '2020-12-04 09:15' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 09:15', end: '2020-12-04 09:30' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 09:30', end: '2020-12-04 09:45' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 09:45', end: '2020-12-04 10:00' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 10:00', end: '2020-12-04 10:15' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 10:15', end: '2020-12-04 10:30' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 10:30', end: '2020-12-04 10:45' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 10:45', end: '2020-12-04 11:00' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 11:00', end: '2020-12-04 11:15' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 11:15', end: '2020-12-04 11:30' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 11:30', end: '2020-12-04 11:45' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 11:45', end: '2020-12-04 12:00' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 12:00', end: '2020-12-04 12:15' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 12:15', end: '2020-12-04 12:30' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 12:30', end: '2020-12-04 12:45' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 12:45', end: '2020-12-04 13:00' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 13:45', end: '2020-12-04 14:00' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 14:00', end: '2020-12-04 14:15' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 14:15', end: '2020-12-04 14:30' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 14:30', end: '2020-12-04 14:45' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 14:45', end: '2020-12-04 15:00' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 15:00', end: '2020-12-04 15:15' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 15:15', end: '2020-12-04 15:30' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 15:30', end: '2020-12-04 15:45' },\r\n { title: \"Available\", description: 'special', start: '2020-12-04 15:45', end: '2020-12-04 16:00' }\r\n ]\r\n const headerToolbar = {\r\n left: 'title',\r\n center: '',\r\n right: 'today prev,next'\r\n };\r\n const titleFormat = (e) => {\r\n var dateString = \"Treasurer - \" + moment(e.start.marker).clone().add(1, 'day').format(\"MMM Do\") + \" to \" + moment(e.end.marker).format(\"Do\") + \" (available appointments in green)\";\r\n return dateString;\r\n }\r\n\r\n const initialDate = moment().format(\"ddd\") === \"Fri\" ? moment().clone().add(3, 'days').format(\"YYYY-MM-DD\") : moment().format(\"YYYY-MM-DD\");\r\n\r\n return blackouts !== null && (\r\n <>\r\n \r\n \r\n \r\n );\r\n\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { treasurerAppointmentActions, appointmentActions } from '../../actions';\r\nimport { Calendar } from './Calendar';\r\n\r\nexport const CalendarContainer = (props) => {\r\n const conflicts = useSelector(state => state.treasurerAppointments.conflicts);\r\n const blackouts = useSelector(state => state.appointments.blackouts);\r\n const dispatch = useDispatch();\r\n useEffect(() => {\r\n dispatch(treasurerAppointmentActions.getConflicts());\r\n dispatch(appointmentActions.getBlackoutDates());\r\n }, []);\r\n\r\n return (\r\n \r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport FullCalendar from '@fullcalendar/react';\r\nimport dayGridPlugin from '@fullcalendar/daygrid';\r\nimport timeGridPlugin from '@fullcalendar/timegrid';\r\nimport interactionPlugin from '@fullcalendar/interaction';\r\nimport momentPlugin, { toMoment } from '@fullcalendar/moment';\r\nimport moment from 'moment';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RegistrationForm } from './RegistrationForm';\r\n\r\n\r\nexport const Calendar = (props) => {\r\n\r\n //NDN20230224: If the user hasn't logged in, they shouldn't see this calendar.\r\n const loggedIn = useSelector(state => state.authentication.loggedIn);\r\n if (loggedIn !== true) {\r\n window.location.replace(\"https://www.charlottesville.gov/1345/Commissioner-of-Revenue\");\r\n };\r\n\r\n const [open, setOpen] = useState(false);\r\n const [eventStart, setEventStart] = useState(null);\r\n const [reservedReason, setReservedReason] = useState(\"DEFAULT\"); //NDN20210211\r\n const { conflicts, blackouts } = props;\r\n const valid = (nowDate) => {\r\n var today = new Date();\r\n var now = moment(today);\r\n return {\r\n start: '2020-07-20',\r\n end: now.clone().add(1, 'months').format(\"YYYY-MM-DD\")\r\n };\r\n }\r\n const toggle = () => {\r\n setOpen(!open);\r\n setReservedReason(\"DEFAULT\"); //NDN20210211\r\n }\r\n const handleEventClick = (arg) => {\r\n if (arg.el.children[0].children && arg.el.children[0].children[0].innerHTML.indexOf(\"Available\") !== -1) {\r\n var selectedEventStart = arg.event.start;\r\n setEventStart(selectedEventStart);\r\n\r\n //NDN20210211: If an appointment is already reserved for this time, get the reason. When the registration form pops up, we'll make sure the user can't select that reason.\r\n var thisDate;\r\n for (var i in conflicts) {\r\n thisDate = new Date(conflicts[i].appointmentDateTime).toString();\r\n if (thisDate == selectedEventStart) {\r\n setReservedReason(conflicts[i].reason);\r\n }\r\n }\r\n\r\n setOpen(true);\r\n }\r\n };\r\n const eventContent = (eventInfo) => {\r\n const diffDay = 1;\r\n var titleCSS = '';\r\n var borderCSS = '#c2e9d7';\r\n var backgroundCSS = '';\r\n var titleText = 'Available';\r\n var flag = true;\r\n var cur = new Date();\r\n var curMonth = cur.getMonth() + 1;\r\n var curDay = cur.getDate();\r\n var curYear = cur.getFullYear();\r\n cur = curYear + \"-\" + curMonth + \"-\" + curDay;\r\n var tempDate = new Date(eventInfo.event.start);\r\n var tempMonth = tempDate.getMonth() + 1;\r\n var tempDay = tempDate.getDate();\r\n var tempYear = tempDate.getFullYear();\r\n tempDate = tempYear + \"-\" + tempMonth + \"-\" + tempDay;\r\n var diff = workingDaysBetweenDates(cur, tempDate);\r\n if (diff < 1) {\r\n //eventInfo.event.setProp(\"display\", \"none\");\r\n eventInfo.backgroundColor = 'transparent';\r\n eventInfo.borderColor = 'transparent';\r\n return (
);\r\n }\r\n var bufferDate = moment().clone().add(2, 'hours');\r\n if (moment(eventInfo.event.start) < bufferDate) {\r\n\r\n eventInfo.backgroundColor = 'transparent';\r\n eventInfo.borderColor = 'transparent';\r\n return (
);\r\n }\r\n if (typeof eventInfo.event[\"_def\"].recurringDef.typeData.daysOfWeek !== 'undefined') {\r\n var time = moment(eventInfo.event.start).format(\"HH:mm\");\r\n var date = moment(eventInfo.event.start).format(\"MM DD YYYY\");\r\n var conflictMapping = {\r\n \r\n }\r\n conflicts.map((j, i) => {\r\n if (moment(j.appointmentDateTime).format(\"HH:mm\") === time &&\r\n moment(j.appointmentDateTime).format(\"MM DD YYYY\") === date)\r\n {\r\n conflictMapping[moment(j.appointmentDateTime).format(\"MM DD YYYY HH:mm\")] ?\r\n conflictMapping[moment(j.appointmentDateTime).format(\"MM DD YYYY HH:mm\")] += 1 :\r\n conflictMapping[moment(j.appointmentDateTime).format(\"MM DD YYYY HH:mm\")] = 1;\r\n\r\n if (conflictMapping[moment(j.appointmentDateTime).format(\"MM DD YYYY HH:mm\")] == 2) {\r\n flag = false;\r\n }\r\n }\r\n\r\n //if ((moment(j.start).format(\"MM DD YYYY\") === date) && j.allDay === true) {\r\n // flag = false;\r\n //}\r\n });\r\n blackouts.map((j, i) => {\r\n var department = j.description.split('$')[0];\r\n if (moment(j.start).isSameOrBefore(moment(eventInfo.event.start)) && moment(eventInfo.event.start).isBefore(moment(j.end)) && department === \"COR\") {\r\n flag = false;\r\n }\r\n });\r\n\r\n if (!flag) {\r\n //eventInfo.event.setProp(\"display\", \"none\");\r\n eventInfo.backgroundColor = 'transparent';\r\n eventInfo.borderColor = 'transparent';\r\n return (
);\r\n }\r\n }\r\n if (diff < diffDay && eventInfo.event.description === 'Blackout') {\r\n diffDay++;\r\n }\r\n if ((diff < diffDay && eventInfo.event.allDay === false) || (diff < diffDay && eventInfo.event.title === \"Available\")) {\r\n //eventInfo.event.setProp(\"display\", \"none\");\r\n eventInfo.backgroundColor = 'transparent';\r\n eventInfo.borderColor = 'transparent';\r\n return (
);\r\n } if (eventInfo.event.title === \"Not Available\") {\r\n eventInfo.backgroundColor = 'transparent';\r\n eventInfo.borderColor = 'transparent';\r\n return (
);\r\n\r\n } \r\n if (eventInfo.event.allDay === true) {\r\n\r\n }\r\n if (moment(eventInfo.event.start).isBefore(moment())) {\r\n return (<>);\r\n }\r\n return (\r\n <>\r\n
{eventInfo.timeText} - {eventInfo.event.title}
\r\n \r\n \r\n )\r\n }\r\n\r\n const parseDate = (input) => {\r\n // Transform date from text to date\r\n var parts = input.match(/(\\d+)/g);\r\n // new Date(year, month [, date [, hours[, minutes[, seconds[, ms]]]]])\r\n return new Date(parts[0], parts[1] - 1, parts[2]); // months are 0-based\r\n }\r\n const workingDaysBetweenDates = (d0, d1) => {\r\n var startDate = parseDate(d0);\r\n var endDate = parseDate(d1);\r\n // Validate input\r\n if (endDate < startDate) {\r\n return 0;\r\n }\r\n // Calculate days between dates\r\n var millisecondsPerDay = 86400 * 1000; // Day in milliseconds\r\n startDate.setHours(0, 0, 0, 1); // Start just after midnight\r\n endDate.setHours(23, 59, 59, 999); // End just before midnight\r\n var diff = endDate - startDate; // Milliseconds between datetime objects \r\n var days = Math.ceil(diff / millisecondsPerDay);\r\n\r\n // Subtract two weekend days for every week in between\r\n var weeks = Math.floor(days / 7);\r\n days -= weeks * 2;\r\n\r\n // Handle special cases\r\n var startDay = startDate.getDay();\r\n var endDay = endDate.getDay();\r\n\r\n // Remove weekend not previously removed. \r\n if (startDay - endDay > 1) {\r\n days -= 2;\r\n }\r\n // Remove start day if span starts on Sunday but ends before Saturday\r\n if (startDay == 0 && endDay != 6) {\r\n days--;\r\n }\r\n // Remove end day if span ends on Saturday but starts after Sunday\r\n if (endDay == 6 && startDay != 0) {\r\n days--;\r\n }\r\n /* Here is the code */\r\n //for (var i in holidays) {\r\n // if ((holidays[i] >= d0) && (holidays[i] <= d1)) {\r\n // days--;\r\n // }\r\n //}\r\n return days;\r\n }\r\n const headerToolbar = {\r\n left: 'title',\r\n center: '',\r\n right: 'today prev,next'\r\n };\r\n\r\n const times = [\r\n { title: \"Available\", description: 'recur', startTime: '08:30', endTime: '09:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '09:00', endTime: '09:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '09:30', endTime: '10:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '10:00', endTime: '10:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '10:30', endTime: '11:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '11:00', endTime: '11:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '11:30', endTime: '12:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '12:00', endTime: '12:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '12:30', endTime: '13:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '14:00', endTime: '14:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '14:30', endTime: '15:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '15:00', endTime: '15:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '15:30', endTime: '16:00', daysOfWeek: [1, 2, 3, 4, 5], allDay: false },\r\n { title: \"Available\", description: 'recur', startTime: '16:00', endTime: '16:30', daysOfWeek: [1, 2, 3, 4, 5], allDay: false }\r\n ]\r\n const titleFormat = (e) => {\r\n var dateString = \"Commissioner of Revenue - \" + moment(e.start.marker).clone().add(1, 'day').format(\"MMM Do\") + \" to \" + moment(e.end.marker).format(\"Do\") + \" (available appointments in green)\";\r\n return dateString;\r\n }\r\n return blackouts !== null && (\r\n <>\r\n \r\n \r\n \r\n\r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { corAppointmentActions as appointmentActions, appointmentActions as AA } from '../../actions';\r\nimport { Calendar } from './Calendar';\r\n\r\nexport const CalendarContainer = (props) => {\r\n const conflicts = useSelector(state => state.corAppointments.conflicts);\r\n const blackouts = useSelector(state => state.appointments.blackouts);\r\n const dispatch = useDispatch();\r\n useEffect(() => {\r\n dispatch(appointmentActions.getConflicts());\r\n dispatch(AA.getBlackoutDates());\r\n }, []);\r\n\r\n return (\r\n <>\r\n \r\n \r\n\r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { Button, Col, Form, FormGroup, FormText, Input, Label, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\r\nimport moment from 'moment';\r\nimport { history } from '../helpers/history';\r\nimport { appointmentActions, alertActions } from '../actions';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { DateTimePicker } from 'react-widgets';\r\nimport 'react-widgets/dist/css/react-widgets.css';\r\nimport { Deferred } from 'jquery';\r\n\r\nexport const AdminNewAppointment = (props) => {\r\n const [inputs, setInputs] = useState({\r\n firstName: '',\r\n lastName: '',\r\n reason: '',\r\n streetAddress: '',\r\n aptNumber: '',\r\n city: '',\r\n state: 'VA',\r\n zipCode: '',\r\n phoneNumber: '',\r\n email: '',\r\n stationNumber: '',\r\n department: '',\r\n startTime: null\r\n });\r\n const [dateOpen, setDateOpen] = useState(false);\r\n const [submitted, setSubmitted] = useState(false);\r\n const [showStation, setShowStation] = useState(false);\r\n const submitting = useSelector(state => state.appointments.submitting);\r\n const complete = useSelector(state => state.appointments.complete);\r\n const dept = useSelector(state => state.authentication.department);\r\n const [validEmail, setValidEmail] = useState(false);\r\n const [reasonList, setReasonList] = useState(\"emptyOptions\");\r\n const [step, setStep] = useState(15);\r\n const { firstName, lastName, reason, phoneNumber, email, stationNumber, startTime, department } = inputs;\r\n const regexp = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n const handleChange = (e) => {\r\n //console.log(e);\r\n const { name, value } = e.target;\r\n setInputs(inputs => ({ ...inputs, [name]: value }));\r\n name === 'email' && setValidEmail(regexp.test(value));\r\n name === 'department' && value === 'DMV' ? setShowStation(true) : (name === \"department\" && value !== 'DMV' && setShowStation(false));\r\n name === 'department' && value === 'COR' ? setStep(30) : (name === \"department\" && value !== 'COR' && setStep(15)); //NDN20210223: COR only wants appointments in 30 minute intervals.\r\n\r\n if (name == 'department' && value == 'DMV') setReasonList(\"dmvOptions\");\r\n if (name == 'department' && value == 'COR') setReasonList(\"corOptions\");\r\n if (name == 'department' && value == 'Treasurer') setReasonList(\"treasurerOptions\");\r\n\r\n //if (moment(startTime) > moment('2020-08-20 00:00:00') && moment(startTime) < moment('2020-09-02 17:00:00') && department === 'DMV') {\r\n // dispatch(alertActions.error('You cannot schedule an appointment for station 3 at this time.'));\r\n // setInputs(inputs => ({ ...inputs, stationNumber: 5 }));\r\n //}\r\n }\r\n const handleDateChange = (e) => {\r\n dateOpen === 'date' ? setDateOpen('time') : setDateOpen(false);\r\n setInputs(inputs => ({ ...inputs, startTime: e }));\r\n\r\n //if (moment(startTime) > moment('2020-08-20 00:00:00') && moment(startTime) < moment('2020-09-02 17:00:00') && department === 'DMV') {\r\n // dispatch(alertActions.error('You cannot schedule an appointment for station 3 at this time.'));\r\n // setInputs(inputs => ({ ...inputs, stationNumber: 5 }));\r\n //}\r\n }\r\n const dispatch = useDispatch();\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n setSubmitted(true);\r\n\r\n //NDN20210317: All this stuff is to make sure the start time IS during office hours and ISN'T conflicting with break times.\r\n var timeToValidate = new Date(startTime); \r\n var hours = timeToValidate.getHours().toString();\r\n var minutes = timeToValidate.getMinutes().toString();\r\n if (minutes == \"0\") minutes = \"00\";\r\n var strTimeToValidate = hours + \":\" + minutes; //Putting the time in a readable format.\r\n var validTime = true;\r\n\r\n //Make sure the time specified is during office hours.\r\n if (timeToValidate.getHours() < 8 || timeToValidate.getHours() >= 17) {\r\n validTime = false;\r\n dispatch(alertActions.error(\"You cannot schedule an appointment before 8 AM or after 5 PM.\"));\r\n }\r\n //NDN20210317: DMV and Treasurer don't want to be able to schedule times during breaks.\r\n if ((department == 'DMV') &&\r\n (strTimeToValidate == '10:00' ||\r\n strTimeToValidate == '11:15' ||\r\n strTimeToValidate == '12:45' ||\r\n strTimeToValidate == '13:00' ||\r\n strTimeToValidate == '13:15' ||\r\n strTimeToValidate == '13:30' ||\r\n strTimeToValidate == '14:45')) {\r\n validTime = false;\r\n dispatch(alertActions.error(\"You cannot schedule an appointment during a break time.\"));\r\n }\r\n if ((department == 'Treasurer') &&\r\n (strTimeToValidate == '12:45' ||\r\n strTimeToValidate == '13:00' ||\r\n strTimeToValidate == '13:15' ||\r\n strTimeToValidate == '13:30')) {\r\n validTime = false;\r\n dispatch(alertActions.error(\"You cannot schedule an appointment during a break time.\"));\r\n }\r\n //NDN20210503: COR wants to force 30 minute intervals.\r\n if ((department == 'COR') &&\r\n (minutes != \"00\") && (minutes != \"30\")) {\r\n validTime = false;\r\n dispatch(alertActions.error(\"You must schedule time in 30 minute increments.\"));\r\n }\r\n\r\n if (validTime) {\r\n if (firstName && lastName && reason && phoneNumber && email && startTime && department) {\r\n //dispatch(alertActions.error(\"Start time is a-okay.\"));\r\n dispatch(appointmentActions.submitAdmin({ firstName, lastName, reason, phoneNumber, email, stationNumber, AppointmentDateTime: moment(startTime).format(\"YYYY-MM-DD HH:mm:ss\"), department }));\r\n }\r\n }\r\n }\r\n const toggleDate = () => {\r\n setDateOpen('date');\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !firstName &&\r\n
First name is required
\r\n }\r\n \r\n \r\n \r\n \r\n {submitted && !lastName &&\r\n
Last name is required
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !validEmail &&\r\n
Valid email address is required
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !phoneNumber &&\r\n
Phone number is required
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !department &&\r\n
Department is required
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {submitted && !reason &&\r\n
Phone number is required
\r\n }\r\n \r\n
\r\n {showStation && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {submitted && !stationNumber &&\r\n
Station is required
\r\n }\r\n \r\n
\r\n )}\r\n \r\n \r\n \r\n setDateOpen(false)} onFocus={toggleDate} open={dateOpen} value={startTime} onChange={handleDateChange} step={step} name=\"startTime\" id=\"startTime\" />\r\n {submitted && !startTime &&\r\n
Start time is required
\r\n }\r\n \r\n
\r\n \r\n
\r\n );\r\n}","import React, { useState } from 'react';\r\nimport { Button, Col, Form, FormGroup, Label } from 'reactstrap';\r\nimport moment from 'moment';\r\nimport { appointmentActions } from '../actions';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { DateTimePicker } from 'react-widgets';\r\nimport 'react-widgets/dist/css/react-widgets.css';\r\n\r\n\r\nexport const BlackoutDates = (props) => {\r\n const dept = useSelector(state => state.authentication.department);\r\n const [inputs, setInputs] = useState({\r\n blackoutDescription: '',\r\n blackoutEndDate: null,\r\n blackoutStartDate: null,\r\n stationNumber: 0,\r\n allDay: false,\r\n department: dept\r\n });\r\n const [dateOpen, setDateOpen] = useState(false);\r\n const [endDateOpen, setEndDateOpen] = useState(false);\r\n const [submitted, setSubmitted] = useState(false);\r\n const [showStation, setShowStation] = useState(false);\r\n\r\n const submitting = useSelector(state => state.appointments.submitting);\r\n const { blackoutDescription, blackoutEndDate, blackoutStartDate, stationNumber, allDay, department } = inputs;\r\n\r\n const handleChange = (e) => {\r\n const { name, value } = e.target;\r\n setInputs(inputs => ({ ...inputs, [name]: value }));\r\n name === 'department' && value === 'DMV' ? setShowStation(true) : (name === \"department\" && value !== 'DMV' && setShowStation(false));\r\n \r\n }\r\n const handleDateChange = (e) => {\r\n dateOpen === 'date' ? setDateOpen('time') : setDateOpen(false);\r\n setInputs(inputs => ({ ...inputs, blackoutStartDate: e }));\r\n \r\n }\r\n const handleEndDateChange = (e) => {\r\n endDateOpen === 'date' ? setEndDateOpen('time') : setEndDateOpen(false);\r\n setInputs(inputs => ({ ...inputs, blackoutEndDate: e }));\r\n\r\n }\r\n const dispatch = useDispatch();\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n setSubmitted(true);\r\n if (blackoutDescription && blackoutEndDate && blackoutStartDate && department) {\r\n dispatch(appointmentActions.newBlackoutDate({ blackoutDescription, blackoutEndDate: moment(blackoutEndDate).format(\"YYYY-MM-DD HH:mm:ss\"), blackoutStartDate: moment(blackoutStartDate).format(\"YYYY-MM-DD HH:mm:ss\"), stationNumber, allDay, department }));\r\n\r\n }\r\n }\r\n\r\n const toggleDate = () => {\r\n setDateOpen('date');\r\n }\r\n\r\n const toggleEndDate = () => {\r\n setEndDateOpen('date');\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n\r\n {submitted && !department &&\r\n
Department is required
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {submitted && !blackoutDescription &&\r\n
Description is required
\r\n }\r\n \r\n
\r\n\r\n \r\n \r\n \r\n setDateOpen(false)} onFocus={toggleDate} open={dateOpen} value={blackoutStartDate} onChange={handleDateChange} step={15} name=\"blackoutStartDate\" id=\"blackoutStartDate\" />\r\n {submitted && !blackoutStartDate &&\r\n
Start date is required
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n setEndDateOpen(false)} onFocus={toggleEndDate} open={endDateOpen} value={blackoutEndDate} onChange={handleEndDateChange} step={15} name=\"blackoutEndDate\" id=\"blackoutEndDate\">\r\n {submitted && !blackoutEndDate &&\r\n
End date is required
\r\n }\r\n
\r\n\r\n \r\n
\r\n {showStation && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n

Selecting Station 5 will block off this time from the public calendar.

\r\n \r\n
\r\n )}\r\n \r\n
\r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { appointmentActions } from '../actions';\r\nimport moment from 'moment';\r\n\r\nexport const Search = () => {\r\n const [submitting, setSubmitting] = useState(false);\r\n const [appointmentsFromSearch, setAppointmentsFromSearch] = useState([]);\r\n const dispatch = useDispatch();\r\n const appointments = useSelector(state => state.appointments.appointmentsFromSearch);\r\n useEffect(() => {\r\n dispatch(appointmentActions.getAllForSearch());\r\n }, []);\r\n\r\n const inputChanged = (e) => {\r\n const { n, value } = e.target;\r\n if (value.length > 2) {\r\n const apts = appointments.filter(key => {\r\n var aptName = key.firstName.toString().toLowerCase() + \" \" + key.lastName.toString().toLowerCase();\r\n return aptName.indexOf(value.toString().trim().toLowerCase()) !== -1;\r\n })\r\n .sort((a, b) => {\r\n var name = a.firstName + ' ' + a.lastName;\r\n var nameB = b.firstName + ' ' + b.lastName;\r\n return name.localeCompare(nameB);\r\n });\r\n setAppointmentsFromSearch(apts);\r\n } else if (value.length === 0) {\r\n setAppointmentsFromSearch([]);\r\n }\r\n }\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {appointmentsFromSearch.map(a => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n\r\n
NameDepartmentAppointment TimeReason for AppointmentEmailPhoneStaff NotesCanceled?
{a.firstName + ' ' + a.lastName}{a.department}{moment(a.appointmentDateTime).format(\"MM/DD/YYYY h:mm a\")}{a.reason}{a.email}{a.phoneNumber}{a.staffNotes}{a.isCanceled ? \"Yes\" : \"No\"}
\r\n\r\n
\r\n\r\n
\r\n\r\n )\r\n}","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register () {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW (swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n //console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n //console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister () {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'react-app-polyfill/ie9';\r\nimport 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Router } from 'react-router-dom';\r\nimport { App } from './App';\r\nimport { Provider } from 'react-redux';\r\nimport { store } from './helpers';\r\nimport registerServiceWorker from './registerServiceWorker';\r\nimport { history } from './helpers/history';\r\nimport Moment from 'moment';\r\nimport momentLocalizer from 'react-widgets-moment';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\nMoment.locale('en');\r\nmomentLocalizer();\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement);\r\n\r\n//registerServiceWorker();\r\n\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Route, Router, Switch, Redirect } from 'react-router-dom';\r\nimport { Layout } from './components/Layout';\r\nimport { Home } from './components/Home';\r\nimport { AdminCalendar } from './components/Calendar/AdminCalendar';\r\nimport { AdminCalendar as CorCalendar } from './components/COR/AdminCalendar';\r\nimport { AdminCalendar as TreasCalendar } from './components/CityTreasurer/AdminCalendar';\r\nimport { Calendar as DMVCalendar } from './components/Calendar/Calendar';\r\nimport { CalendarContainer } from './components/Calendar/CalendarContainer';\r\nimport { CalendarContainer as TreasurerCalendarContainer } from './components/CityTreasurer/CalendarContainer';\r\nimport { CalendarContainer as CORCalendarContainer } from './components/COR/CalendarContainer';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { history } from './helpers';\r\nimport { Alert } from 'reactstrap';\r\nimport './custom.css'\r\nimport { appointmentActions } from './actions';\r\nimport { AdminNewAppointment } from './components/AdminNewAppointment';\r\nimport { BlackoutDates } from './components/BlackoutDates';\r\nimport { Search } from './components/Search';\r\n\r\nfunction App() {\r\n const [visible, setVisible] = useState(false);\r\n const showAlert = () => {\r\n setVisible(true);\r\n window.setTimeout(() => {\r\n setVisible(false);\r\n }, 5000);\r\n }\r\n const alert = useSelector(state => state.alert);\r\n useEffect(() => {\r\n alert.type && showAlert();\r\n }, [alert]);\r\n const dispatch = useDispatch();\r\n useEffect(() => {\r\n //NDN20210622: This tends to get called twice: both here and also when a calendar is loaded. This is causing some conflicts with admin calendars, so let's comment it out.\r\n //dispatch(appointmentActions.getConflicts()); \r\n }, [dispatch])\r\n const loggedIn = useSelector(state => state.authentication.loggedIn);\r\n const department = useSelector(state => state.authentication.department);\r\n return (\r\n \r\n \r\n \r\n {alert.message}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {loggedIn && department === \"COR\" && (<>\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {loggedIn && department === \"Treasurer\" && (<>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {loggedIn && department === \"IT\" && (<>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n}\r\nexport { App };\r\n\r\n"],"sourceRoot":""}