{"version":3,"sources":["services/history.js","services/coa-authorization.js","services/State.js","components/AppSkeleton/index.js","pages/Home.js","pages/404.js","forms/member.js","services/date.js","pages/Detail.js","pages/Print.js","App.js","serviceWorker.js","index.js"],"names":["history","createBrowserHistory","userLogin","_callee2","handleNoAuth","fetchUserProfile","regenerator_default","a","wrap","_context2","prev","next","navigator","onLine","localStorage","removeItem","redirect","window","location","href","concat","_ref","Object","asyncToGenerator","mark","_callee","timeout","user","_context","setTimeout","fetch","method","credentials","headers","Content-Type","then","response","clearTimeout","json","_unused","email","setItem","JSON","stringify","catch","sent","abrupt","stop","apply","this","arguments","userLogout","document","StateContext","createContext","reducer","prevState","state","objectSpread","StateProvider","initFn","initialState","children","_useReducer","useReducer","_useReducer2","slicedToArray","dispatch","asyncInitilizer","useCallback","useEffect","react_default","createElement","Provider","value","useStateStore","attr","_useContext","useContext","_useContext2","defineProperty","withStyles","theme","app","flexGrow","zIndex","overflow","position","grow","navIconHideSm","breakpoints","down","display","navIconHideLg","up","menuButton","marginLeft","marginRight","appBar","drawer","textAlign","drawerPaper","width","transitionDuration","drawerDocked","height","toolbar","mixins","list","content","backgroundColor","palette","background","default","padding","spacing","minWidth","boxSizing","overflowY","contentShift","classes","_useState","useState","_useState2","setDrawer","_useState3","_useState4","persistDrawer","setPersistDrawer","_useState5","pathname","_useState6","currentPath","setCurrentPath","_useState7","_useState8","accountIcon","setAccountIcon","_useStateStore","listen","body","addEventListener","event","which","globalPersistDrawer","drawerContents","List","component","ListItem","button","selected","process","onClick","route","push","Fragment","AppBar","className","Toolbar","IconButton","color","aria-label","Menu_default","aria-owns","aria-haspopup","currentTarget","AccountCircle_default","Menu","id","anchorEl","anchorOrigin","vertical","horizontal","transformOrigin","open","Boolean","onClose","MenuItem","Hidden","mdUp","SwipeableDrawer","onOpen","paper","ModalProps","keepMounted","smDown","implementation","Drawer","variant","anchor","docked","HomePage","CACHED_ITEM","parse","getItem","name","term","appointments","meetingSchedule","meetingLocation","website","committees","setCommittees","ok","Error","sort","b","error","console","Button","size","Link","to","Print_default","map","committee","key","tabIndex","NotFound","React","Component","CommitteeMemberForm","props","SCHEMA","committeeID","parseInt","personID","yearAppointed","membershipExpires","membershipType","person","personData","_useSnackbar","useSnackbar","enqueueSnackbar","closeSnackbar","member","committeeMember","setCommitteeMember","address","phone","setPersonData","onSave","data","handleFieldChange","target","handlePersonDataChange","cancelAction","action","onSubmit","preventDefault","stopPropagation","viewModel","Person","ID","Name","PersonData","PersonID","Data","CommitteeMember","CommitteeID","YearAppointed","MembershipExpires","MembershipType","_toAPIDataModel","status","e","persist","type","Grid","container","alignItems","item","xs","TextField","required","autoFocus","label","onChange","md","min","max","Select","native","SelectDisplayProps","inputProps","pattern","style","confirm","Delete_default","Cancel_default","Save_default","handleDateTimeToDate","dt","i","indexOf","substring","Detail","match","CACHED_SCHEMA","committeeMembers","params","setCommittee","editMember","setEditMember","handleGetCommitteeData","keys","forEach","err","handleOpenEditMember","log","getAttribute","handleCloseEditMember","float","Add_default","Table","TableHead","TableRow","TableCell","align","TableBody","memberindex","Dialog","aria-labelledby","DialogTitle","DialogContent","forms_member","PrintPage","handleError","message","statusText","slice","createMuiTheme","typography","useNextVariants","primary","main","secondary","App","userProfile","fullName","firstName","lastName","department","title","employeeNumber","userPrincipalName","roles","init","everyoneFinish","Promise","all","build","autoHideDuration","preventDuplicate","State_StateProvider","MuiThemeProvider","components_AppSkeleton","react_router","basename","exact","path","NotFoundPage","hostname","ReactDOM","render","src_App","getElementById","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.83deedf4.chunk.js","sourcesContent":["import { createBrowserHistory } from 'history';\r\n\r\nexport const history = createBrowserHistory();","//SHOULDNT BE NEEDED IF WE CAN SHARE COOKIE, but right now we need a different cookie per microframework... sooo\r\n//import { useState, useEffect, useCallback } from 'react';\r\n//IE compat (not needed because IE bug: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8680109/)\r\n//import 'whatwg-fetch';\r\n//import Promise from 'promise-polyfill';\r\n//if (!window.Promise) { window.Promise = Promise; }\r\n\r\n/**\r\n * Supports getting user information as well as triggering login when user is not logged in.\r\n *\r\n * @todo Redirecting to login means the potential to lose work if application doesn't saveState / loadState\r\n * @todo Microframeworks share the same cookie/auth but I'd need to create an auth microFramework or share with main apiv2 so we don't need to pass param\r\n * @todo Need to recreate logout (delete localStore and remove cookies)\r\n * @todo Logout timer? You are going to be logged out in? I mean, it already happens based on something from cookie or auth so might as well warn user, perhaps call saveState function\r\n * \r\n * @param {string} microFramework\r\n * @returns {object}\r\n */\r\n// function userAuthStatus(microFramework) {\r\n// const SCHEMA = {\"name\":{\"fullName\":\"\",\"firstName\":\"\",\"lastName\":\"\"},\"email\":\"\",\"phone\":null,\"department\":null,\"title\":null,\"employeeNumber\":null,\"userPrincipalName\":\"\",\"roles\":[]}\r\n// const [accountProfile, setAccountProfile] = useState(SCHEMA);\r\n\r\n// const handleNoAuth = () => {\r\n// //just assume all errors here are for not authorized\r\n// if (navigator.onLine) { // Don't try to redirect to auth server while offline, else user will have a bad time\r\n// //so this works but causes a refresh, we'd need the application to saveState, then update login, then load state. It's possible and likely the best way to handle it.\r\n// let redirect = window.location.href;\r\n// window.location.href = `https://api2.auburnalabama.org/${microFramework}/login?redirect=${redirect}`;\r\n// //However, I'd like to attempt a different solution and see if it's better.\r\n// //iframes and popups just won't set the cookie we need set so we're stuck with plan A till there is some middleware or a better idea\r\n// // let iframe = document.createElement('iframe');\r\n// // iframe.src = `https://api2.auburnalabama.org/${microFramework}/login?redirect=${redirect}`;\r\n// // document.body.appendChild(iframe);\r\n// }\r\n// }\r\n// const fetchUserProfile = () => {\r\n// //if can't get profile in 2.5s, attempt to reauthenticate\r\n// const timeout = setTimeout(handleNoAuth, 2500);\r\n// fetch(`https://api2.auburnalabama.org/${microFramework}/me`, { method: 'GET', credentials: 'include', headers: { 'Content-Type' : 'application/json' }})\r\n// .then((response) => {\r\n// clearTimeout(timeout);\r\n// return response;\r\n// })\r\n// .then((response) => {\r\n// try {\r\n// return response.json();\r\n// } catch { // if we fail to parse json, attempt reauth\r\n// handleNoAuth();\r\n// }\r\n// })\r\n// .then((user) => {\r\n// if (!user.email) { // if user has no email value, attempt reauth\r\n// handleNoAuth();\r\n// }\r\n// // set fetched credentials\r\n// localStorage.setItem('user', JSON.stringify(user));\r\n// setAccountProfile(user);\r\n// })\r\n// .catch(() => {\r\n// clearTimeout(timeout);\r\n// handleNoAuth();\r\n// });\r\n// }\r\n\r\n// //is called anytime a change is made (including load)\r\n// useEffect(() => {\r\n// if (!accountProfile || !accountProfile.email) {\r\n// //go ahead an update, even if credentials are stored in case server auth has timed out\r\n// fetchUserProfile();\r\n// //check for stored creds\r\n// let cached = JSON.parse(localStorage.getItem('user') || '{}');\r\n// if (cached.Email) {\r\n// // set cached credentials\r\n// setAccountProfile(cached);\r\n// }\r\n// }\r\n// },[]);\r\n\r\n// return accountProfile;\r\n// }\r\n\r\n// function userProvider() {\r\n// const SCHEMA = {\"name\":{\"fullName\":\"\",\"firstName\":\"\",\"lastName\":\"\"},\"email\":\"\",\"phone\":null,\"department\":null,\"title\":null,\"employeeNumber\":null,\"userPrincipalName\":\"\",\"roles\":[],\"can\":[],\"logout\":()=>{}}\r\n// const [ user, setUser ] = useState(localStorage.getItem('user') || SCHEMA);\r\n\r\n// const logout = () => {\r\n// localStorage.removeItem('user');\r\n// document.location = 'https://api2.auburnalabama.org/pressrelease/signout';\r\n// }\r\n\r\n// const asyncInitilizer = useCallback(async () => {\r\n// await fetch('https://api2.auburnalabama.org/pressrelease/me', { credentials: 'include' })\r\n// .then((response) => { if (response.ok) return response.json(); else throw new Error(); })\r\n// .then((user) => {\r\n// user.logout = logout;\r\n// //todo CAN permissions\r\n// setUser(user);\r\n// localStorage.setItem('user', user);\r\n// })\r\n// .catch(() => {\r\n// if (navigator.onLine) {\r\n// localStorage.removeItem('user');\r\n// window.location = `https://api2.auburnalabama.org/pressrelease/login?redirect=${window.location.href}`;\r\n// }\r\n// });\r\n// });\r\n\r\n// useEffect(() => {\r\n// if (user.email) {\r\n \r\n// }\r\n// if (navigator.onLine) {\r\n\r\n// }\r\n// }, []);\r\n// }\r\n\r\nasync function userLogin() {\r\n const handleNoAuth = () => {\r\n //just assume all errors here are for not authorized\r\n if (navigator.onLine) { // Don't try to redirect to auth server while offline, else user will have a bad time\r\n localStorage.removeItem('user');\r\n //so this works but causes a refresh, we'd need the application to saveState, then update login, then load state. It's possible and likely the best way to handle it.\r\n let redirect = window.location.href;\r\n window.location.href = `https://api2.auburnalabama.org/pressrelease/login?redirect=${redirect}`;\r\n //However, I'd like to attempt a different solution and see if it's better.\r\n //iframes and popups just won't set the cookie we need set so we're stuck with plan A till there is some middleware or a better idea\r\n // let iframe = document.createElement('iframe');\r\n // iframe.src = `https://api2.auburnalabama.org/${microFramework}/login?redirect=${redirect}`;\r\n // document.body.appendChild(iframe);\r\n }\r\n }\r\n\r\n const fetchUserProfile = async () => {\r\n //if can't get profile in 2.5s, attempt to reauthenticate\r\n const timeout = setTimeout(handleNoAuth, 2500);\r\n let user = await fetch(`https://api2.auburnalabama.org/pressrelease/me`, { method: 'GET', credentials: 'include', headers: { 'Content-Type' : 'application/json' }})\r\n .then((response) => {\r\n clearTimeout(timeout);\r\n return response;\r\n })\r\n .then((response) => {\r\n try {\r\n return response.json();\r\n } catch { // if we fail to parse json, attempt reauth\r\n handleNoAuth();\r\n }\r\n })\r\n .then((user) => {\r\n if (!user.email) { // if user has no email value, attempt reauth\r\n handleNoAuth();\r\n }\r\n // set fetched credentials\r\n localStorage.setItem('user', JSON.stringify(user));\r\n return user;\r\n })\r\n .catch(() => {\r\n clearTimeout(timeout);\r\n handleNoAuth();\r\n });\r\n if (user && user.email) return user;\r\n }\r\n\r\n //const SCHEMA = {\"name\":{\"fullName\":\"\",\"firstName\":\"\",\"lastName\":\"\"},\"email\":\"\",\"phone\":null,\"department\":null,\"title\":null,\"employeeNumber\":null,\"userPrincipalName\":\"\",\"roles\":[]};\r\n //let userProfile = localStorage.getItem('user') || SCHEMA;\r\n \r\n return await fetchUserProfile();\r\n}\r\n\r\nfunction userLogout() {\r\n localStorage.removeItem('user');\r\n //document.cookie = \"MICROAPI_AUTH= ; expires = Thu, 01 Jan 1970 00:00:00 GMT\"; //cookies are secured so I can't mess with them, send it to server instead\r\n //document.location = 'https://www.auburnalabama.org/';\r\n document.location = 'https://api2.auburnalabama.org/pressrelease/signout';\r\n}\r\n\r\nexport { userLogout, userLogin };","import React, {createContext, useContext, useCallback, useReducer, useEffect} from 'react';\r\nexport const StateContext = createContext();\r\nconst reducer = (prevState, state) => {\r\n return {\r\n ...prevState,\r\n ...state\r\n }\r\n}\r\n/** This state provider will be used to handle most data stores in the app\r\n * Desired functions for a data store:\r\n * 1. Loads initially a static/cached value\r\n * 2. Asyncly refresh this static value where needed\r\n * 3. Component useage matches the standard [state, updateState] pattern\r\n * 4. Pushes changes changes, allows changes pushed.\r\n * \r\n * Useage: const [{ trackedObj }, updateState]\r\n * Then: updateState({ trackedObj: trackedObj })\r\n */\r\nexport const StateProvider = ({initFn, initialState, children}) => {\r\n const [ state, dispatch ] = useReducer(reducer, initialState);\r\n //next we'd like to async load our \r\n //can't put async function directly in `useEffect`\r\n //\r\n const asyncInitilizer = useCallback(async () => {\r\n let state = await initFn();\r\n dispatch(state);//merge defaultState with async state fetch\r\n }, [dispatch, initFn]);\r\n useEffect(() => { \r\n asyncInitilizer();\r\n // eslint-disable-next-line\r\n },[]);//run only once\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\nexport const useStateStore = (attr) => {\r\n //if no specific part of the state is defined it can be used as object\r\n //doesn't like conditionally, and I've never used it this way anyways\r\n //if (!attr) return useContext(StateContext); //ex: const trackedObj = [{ trackedObj }, updateState] = getState()\r\n //you can specify a part of the state obj by passing it in\r\n const [state, dispatch] = useContext(StateContext); //ex: const trackedObj = [trackedObj, updateTrackedObj] = getState('trackedObj');\r\n return [state[attr], (value) => { dispatch({ [attr] : value }) }];\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useStateStore } from '../../services/State';\r\nimport { history } from '../../services/history';\r\nimport { userLogout } from '../../services/coa-authorization';\r\nimport { Menu, MenuItem, List, ListItem, AppBar, Toolbar, IconButton, Hidden, SwipeableDrawer, Drawer, withStyles } from '@material-ui/core';\r\nimport AccountCircle from '@material-ui/icons/AccountCircle';\r\nimport MenuIcon from '@material-ui/icons/Menu';\r\n\r\n//Layout styles\r\nconst drawerWidth = 240;\r\nconst styles = theme => ({\r\n app: {\r\n flexGrow: 1,\r\n zIndex: 1,\r\n overflow: 'hidden',\r\n position: 'relative',\r\n },\r\n grow: {\r\n flexGrow: 1,\r\n },\r\n navIconHideSm: {\r\n [theme.breakpoints.down('sm')]: {\r\n display: 'none',\r\n },\r\n },\r\n navIconHideLg: {\r\n [theme.breakpoints.up('md')]: {\r\n display: 'none',\r\n },\r\n },\r\n menuButton: {\r\n marginLeft: -12,\r\n marginRight: 20,\r\n },\r\n appBar: {\r\n position: 'absolute',\r\n zIndex: theme.zIndex.drawer + 1,\r\n textAlign: 'center',\r\n },\r\n drawerPaper: {\r\n position: 'relative',\r\n width: drawerWidth,\r\n transitionDuration: '0ms !important',\r\n },\r\n drawerDocked: {\r\n height: '100%',\r\n },\r\n toolbar: theme.mixins.toolbar,\r\n list: {\r\n },\r\n content: {\r\n flexGrow: 1,\r\n backgroundColor: theme.palette.background.default,\r\n padding: theme.spacing(3),\r\n minWidth: 0, // So the Typography noWrap works\r\n height: '100%',\r\n boxSizing: 'border-box',\r\n overflowY: 'auto',\r\n },\r\n contentShift: {\r\n [theme.breakpoints.up('md')]: {\r\n marginLeft: -drawerWidth,\r\n },\r\n },\r\n});\r\n\r\nfunction AppSkeleton({ classes, children }) {\r\n const [drawer, setDrawer] = useState(false);\r\n const [persistDrawer, setPersistDrawer] = useState(true);\r\n const [currentPath, setCurrentPath] = useState(history.location.pathname);\r\n const [accountIcon, setAccountIcon] = useState(null);\r\n const [user] = useStateStore('userProfile');// userAuthStatus(\"pressrelease\");\r\n \r\n useEffect(() => {\r\n history.listen(() => {\r\n setDrawer(false);\r\n setCurrentPath(history.location.pathname);\r\n });\r\n \r\n //can't get current state, only initial state\r\n document.body.addEventListener('keyup', (event) => {\r\n if (event.which === 27) {\r\n setPersistDrawer(!window.globalPersistDrawer)\r\n }\r\n });\r\n }, [])\r\n \r\n useEffect(() => {\r\n window.globalPersistDrawer = persistDrawer;\r\n }, [persistDrawer]);\r\n\r\n const handleListItemClick = (event, index, route) => {\r\n history.push(`${process.env.PUBLIC_URL}${route}`);\r\n };\r\n\r\n /** Side Navigation */\r\n const drawerContents = (\r\n \r\n handleListItemClick(event, 0, '/')}\r\n >\r\n Home\r\n \r\n \r\n )\r\n\r\n return (\r\n \r\n \r\n \r\n { setDrawer(!drawer)}} className={`${classes.menuButton} ${classes.navIconHideLg}`} color=\"inherit\" aria-label=\"Menu\">\r\n \r\n \r\n { setPersistDrawer(!persistDrawer)}} className={`${classes.menuButton} ${classes.navIconHideSm}`} color=\"inherit\" aria-label=\"Menu\">\r\n \r\n \r\n

Boards and Commissions

\r\n
\r\n { setAccountIcon(event.currentTarget)}}\r\n color=\"inherit\"\r\n >\r\n \r\n \r\n { setAccountIcon(null)}}\r\n >\r\n { setAccountIcon(null)}}>{user.email}\r\n Logout\r\n \r\n
\r\n
\r\n
\r\n \r\n { setDrawer(!drawer)}}\r\n onOpen={() => { setDrawer(!drawer)}}\r\n classes={{\r\n paper: classes.drawerPaper,\r\n }}\r\n ModalProps={{\r\n keepMounted: true, // Better open performance on mobile.\r\n }}\r\n >\r\n
\r\n {drawerContents}\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n {drawerContents}\r\n
\r\n \r\n \r\n
\r\n
\r\n {children}\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default withStyles(styles)(AppSkeleton);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { List, ListItem, Button } from '@material-ui/core';\r\nimport PrintIcon from '@material-ui/icons/Print';\r\nimport './Home.css';\r\n\r\nfunction HomePage() {\r\n /** Vars for caching data, might be overkill but I like the idea, especially if we can work it into the app frameowrk */\r\n const CACHED_NAME = 'committees';\r\n const CACHED_SCHEMA = [\r\n {\r\n \"id\": 0,\r\n \"name\": \"string\",\r\n \"term\": \"string\",\r\n \"appointments\": \"string\",\r\n \"meetingSchedule\": \"string\",\r\n \"meetingLocation\": \"string\",\r\n \"website\": \"string\"\r\n }\r\n ];\r\n //useful for testing\r\n //localStorage.removeItem(CACHED_NAME);\r\n const CACHED_ITEM = JSON.parse(localStorage.getItem(CACHED_NAME)) || CACHED_SCHEMA;\r\n\r\n const [committees, setCommittees] = useState(CACHED_ITEM);\r\n\r\n useEffect(() => {\r\n fetch('https://api2.auburnalabama.org/committee/all', { credentials: 'include' })\r\n .then((response) => { if (response.ok) return response.json(); throw new Error('https://api2.auburnalabama.org/committee/all'); })\r\n .then((committees) => {\r\n committees.sort((a, b) => { return b.name < a.name ? 1 : -1 });\r\n setCommittees(committees);\r\n localStorage.setItem(CACHED_NAME, JSON.stringify(committees));\r\n })\r\n .catch(error => console.error(error));\r\n }, []); //run on initial load\r\n \r\n return (\r\n
\r\n
\r\n

Home

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

Boards and Commissions list

\r\n
\r\n \r\n
\r\n
\r\n \r\n {committees.map((committee) => {\r\n return {committee.name}\r\n })}\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport { HomePage };\r\n","import React from 'react'\r\n\r\nclass NotFound extends React.Component {\r\n render() {\r\n return
404: Not Found
\r\n }\r\n}\r\n\r\nexport { NotFound as NotFoundPage };","import React, { useState, useEffect } from 'react';\r\nimport { useSnackbar } from 'notistack';\r\nimport { Button, Grid, Select, TextField } from '@material-ui/core';\r\nimport CancelIcon from '@material-ui/icons/Cancel';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport SaveIcon from '@material-ui/icons/Save';\r\n\r\nfunction CommitteeMemberForm(props) {\r\n const SCHEMA = {\r\n \"id\": 0,\r\n \"committeeID\": parseInt(props.committeeID),\r\n \"personID\": 0,\r\n \"yearAppointed\": 0,\r\n \"membershipExpires\": \"\",\r\n \"membershipType\": \"\",\r\n \"person\": {\r\n \"id\": 0,\r\n \"name\": \"\",\r\n \"personData\": \"\"\r\n }\r\n };\r\n // Key\r\n //const { member } = props;\r\n // Visual feedbacks\r\n const { enqueueSnackbar, closeSnackbar } = useSnackbar();\r\n // Data\r\n const [ committeeMember, setCommitteeMember ] = useState(props.member || SCHEMA);\r\n const [ personData, setPersonData ] = useState({address: \"\", email: \"\", phone: \"\"});\r\n // Events\r\n const { onClose, onSave } = props;\r\n\r\n // Data Manipulation\r\n useEffect(() => {\r\n if (committeeMember.person.personData && committeeMember.person.personData.data) {\r\n setPersonData(JSON.parse(committeeMember.person.personData.data));\r\n } else {\r\n setPersonData({address: \"\", email: \"\", phone: \"\"});\r\n }\r\n }, [committeeMember.person.personData]);\r\n\r\n // FORM SYNC\r\n const handleFieldChange = event => { setCommitteeMember({...committeeMember, [event.target.name]: event.target.value }) };\r\n const handlePersonNameChange = event => { setCommitteeMember({...committeeMember, person: {...committeeMember.person, name: event.target.value}}); };\r\n const handlePersonDataChange = event => { setPersonData({...personData, [event.target.name]: event.target.value }); };\r\n // Data Transformation for saving\r\n const _toAPIDataModel = (id, data, personData) => {\r\n if (id) { //Updating\r\n return {\r\n Person: { ID: data.personID, Name: data.person.name },\r\n PersonData: personData && (personData.address || personData.email || personData.phone) ? { PersonID: data.personID, Data: JSON.stringify(personData) } : null, // extra data stored as JSON string, in Data field related to person.\r\n CommitteeMember: { ID: data.id, CommitteeID: data.committeeID, PersonID: data.personID, YearAppointed: data.yearAppointed, MembershipExpires: data.membershipExpires, MembershipType: data.membershipType }\r\n }\r\n } else { // Creating\r\n return {\r\n Person: { Name: data.person.name },\r\n PersonData: personData && (personData.address || personData.email || personData.phone) ? { PersonID: data.personID, Data: JSON.stringify(personData) } : null, // extra data stored as JSON string, in Data field related to person.\r\n CommitteeMember: { CommitteeID: data.committeeID, PersonID: data.personID, YearAppointed: data.yearAppointed, MembershipExpires: data.membershipExpires, MembershipType: data.membershipType }\r\n }\r\n }\r\n }\r\n // FORM SUBMIT\r\n const saveAction = event => {\r\n // prevent default save\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // check validity???\r\n\r\n // transform to model view for person and attribute saving\r\n const viewModel = _toAPIDataModel(committeeMember.id, committeeMember, personData);\r\n // save API\r\n fetch(`https://api2.auburnalabama.org/committee/member/${(committeeMember.id || '')}`, { credentials: 'include', headers: { 'Content-Type': 'application/json' }, method: committeeMember.id ? 'PUT' : 'POST', body: JSON.stringify(viewModel) })\r\n .then((response) => { if (response.ok) return true; else throw new Error(response.status); }) //no-content expected on successful PUT\r\n .then(() => {\r\n enqueueSnackbar('Saved', { variant: 'success' });\r\n onSave();\r\n })\r\n .catch((e) => {\r\n // save the work?\r\n enqueueSnackbar(`Save FAILED. (${e})`, { variant: 'error', persist: true, action: (key) => (\r\n \r\n )});\r\n });\r\n // run close event from parent\r\n onClose();\r\n }\r\n // MEMBER DELETE\r\n const deleteAction = event => {\r\n if (window.confirm(\"Are you sure you wish to delete?\")) {\r\n fetch(`https://api2.auburnalabama.org/committee/member/${committeeMember.id}`, { credentials: 'include', method: 'DELETE'})\r\n .then((response) => { if (response.ok) return true; else throw new Error(response.status); })\r\n .then(() => {\r\n enqueueSnackbar('Deleted', { variant: 'success' });\r\n onSave();\r\n })\r\n .catch((e) => {\r\n enqueueSnackbar(`Delete FAILED. (${e})`, { variant: 'error', persist: true, action: (key) => (\r\n \r\n )});\r\n });\r\n onClose();\r\n }\r\n }\r\n // CANCEL ACTION\r\n const cancelAction = onClose;\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 \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 default CommitteeMemberForm;\r\n","const handleDateTimeToDate = (dt) => {\r\n if (!dt) return '';\r\n const i = dt.indexOf('T');\r\n if (i === -1) return dt;\r\n return dt.substring(0, i);\r\n}\r\n\r\nexport { handleDateTimeToDate };","import React, { useCallback, useEffect, useState } from 'react';\r\nimport { useSnackbar } from 'notistack';\r\nimport { Button, Grid, TextField, Table, TableHead, TableBody, TableRow, TableCell, Dialog, DialogTitle, DialogContent } from '@material-ui/core';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport SaveIcon from '@material-ui/icons/Save';\r\nimport CommitteeMember from '../forms/member';\r\nimport { handleDateTimeToDate } from '../services/date';\r\n\r\nfunction Detail({ match }) {\r\n /** Vars for caching data, might be overkill but I like the idea, especially if we can work it into the app frameowrk */\r\n const CACHED_NAME = 'committee';\r\n const CACHED_SCHEMA = {\r\n \"id\": 0,\r\n \"name\": \"string\",\r\n \"term\": \"string\",\r\n \"appointments\": \"string\",\r\n \"meetingSchedule\": \"string\",\r\n \"meetingLocation\": \"string\",\r\n \"website\": \"string\",\r\n \"committeeMembers\": [\r\n {\r\n \"id\": 0,\r\n \"committeeID\": 0,\r\n \"personID\": 0,\r\n \"yearAppointed\": 0,\r\n \"membershipExpires\": \"\",\r\n \"membershipType\": \"\",\r\n \"person\": {\r\n \"id\": 0,\r\n \"name\": \"\"\r\n }\r\n }\r\n ]\r\n };\r\n //useful for testing\r\n //localStorage.removeItem(CACHED_NAME);\r\n const CACHED_ITEM = JSON.parse(localStorage.getItem(CACHED_NAME)) || CACHED_SCHEMA;\r\n //See Press-Release-Manager Edit for example of how to see if persistent snackbar is open and close it on navigation\r\n const { enqueueSnackbar, closeSnackbar } = useSnackbar();\r\n\r\n /** Navigation var, to know which object we're editing */\r\n const committeeID = match.params.id;\r\n /** Main Object of the form */\r\n const [committee, setCommittee] = useState(parseInt(committeeID) === CACHED_ITEM.id ? CACHED_ITEM : CACHED_SCHEMA);\r\n const [editMember, setEditMember] = useState(-1);\r\n\r\n // API Get Data fn\r\n const handleGetCommitteeData = useCallback(() => {\r\n fetch(`https://api2.auburnalabama.org/committee/${committeeID}`, { credentials: 'include' })\r\n .then((response) => { if (response.ok) return response.json(); else throw new Error('Data Download Error'); })\r\n .then((committee) => {\r\n Object.keys(committee).forEach(key => { if (committee[key] === null) committee[key] = '' });//remove null's (React treats components with value=null as 'uncontrolled' for some reason)\r\n //manipulate committee member data\r\n committee.committeeMembers.forEach(member => {\r\n Object.keys(member).forEach(key => { if (member[key] === null) member[key] = ''});\r\n member.membershipExpires = handleDateTimeToDate(member.membershipExpires);\r\n });\r\n //for (var i = 0; i < committee.committeeMembers.length; i++) {\r\n //Object.keys(committee.committeeMembers[i]).forEach(key => { if (committee.committeeMembers[i][key] === null) committee.committeeMembers[i][key] = '' });\r\n //manipulate committee member expire\r\n //committee.committeeMembers[i].membershipExpires = handleDateTimeToDate(committee.committeeMembers[i].membershipExpires);\r\n //}\r\n setCommittee(committee);\r\n localStorage.setItem(CACHED_NAME, JSON.stringify(committee));\r\n })\r\n .catch((err) => console.error(err));\r\n }, [committeeID]);\r\n\r\n // INITIAL LOAD\r\n useEffect(() => {\r\n handleGetCommitteeData();\r\n }, [handleGetCommitteeData]);\r\n\r\n // FORM CONSISTENCY\r\n const handleFieldChange = event => { setCommittee({ ...committee, [event.target.name]: event.target.value }) };\r\n\r\n // SAVE COMMITTEE FUNCTION\r\n const handleEditSubmit = (event) => {\r\n if (event) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n\r\n fetch(`https://api2.auburnalabama.org/committee/${committee.id}`, { credentials: 'include', headers: { 'Content-Type': 'application/json' }, method: 'PUT', body: JSON.stringify(committee) })\r\n .then((response) => { if (response.ok) return; else throw new Error(); })\r\n .then(() => enqueueSnackbar('Saved', { variant: 'success' }))\r\n .catch((e) => {\r\n enqueueSnackbar('Save FAILED', { variant: 'error', persist: true, action: (key) => (\r\n \r\n ) });\r\n });\r\n }\r\n\r\n // MEMBER EDIT - OPEN\r\n const handleOpenEditMember = (event) => {\r\n console.log(event.currentTarget);\r\n setEditMember(event.currentTarget.getAttribute('memberindex'));\r\n }\r\n // MEMBER EDIT - CLOSE\r\n const handleCloseEditMember = (event) => {\r\n setEditMember(-1);\r\n }\r\n // VIEW\r\n return (\r\n \r\n
\r\n
\r\n

Committee Detail {committee.name}

\r\n
\r\n
\r\n \r\n \r\n {/* Name */}\r\n \r\n \r\n \r\n {/* Term */}\r\n \r\n \r\n \r\n {/* Appointments */}\r\n \r\n \r\n \r\n {/* MeetingSchedule */}\r\n \r\n \r\n \r\n {/* MeetingLocation */}\r\n \r\n \r\n \r\n {/* Website */}\r\n \r\n \r\n \r\n {/* Submit */}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Committee Members {committee.name}

\r\n \r\n
\r\n \r\n \r\n \r\n Name\r\n Duration\r\n \r\n \r\n \r\n {committee.committeeMembers.map((member, i) => {\r\n return \r\n {member.person.name}\r\n {`${member.yearAppointed}—${member.membershipExpires}`}\r\n \r\n })}\r\n \r\n
\r\n \r\n Edit Member\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport { Detail }\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\nimport { useSnackbar } from 'notistack';\r\nimport { handleDateTimeToDate } from '../services/date';\r\nimport './Print.css';\r\n\r\nfunction PrintPage() {\r\n const CACHED_NAME = 'committesAndMembers';\r\n const CACHED_SCHEMA = [\r\n {\r\n \"id\": 0,\r\n \"name\": \"string\",\r\n \"term\": \"string\",\r\n \"appointments\": \"string\",\r\n \"meetingSchedule\": \"string\",\r\n \"meetingLocation\": \"string\",\r\n \"website\": \"string\",\r\n \"committeeMembers\": [\r\n {\r\n \"id\": 0,\r\n \"committeeID\": 0,\r\n \"personID\": 0,\r\n \"yearAppointed\": 0,\r\n \"membershipExpires\": \"2019-09-20T15:14:05.195Z\",\r\n \"membershipType\": \"string\",\r\n \"person\": {\r\n \"id\": 0,\r\n \"name\": \"string\",\r\n \"personData\": {\r\n \"id\": 0,\r\n \"personID\": 0,\r\n \"data\": \"string\"\r\n }\r\n }\r\n }\r\n ]\r\n }\r\n ];\r\n //useful for testing\r\n //localStorage.removeItem(CACHED_NAME);\r\n const CACHED_ITEM = JSON.parse(localStorage.getItem(CACHED_NAME)) || CACHED_SCHEMA;\r\n \r\n //Data\r\n const [committees, setCommittees] = useState(CACHED_ITEM);\r\n //Components\r\n const { enqueueSnackbar } = useSnackbar();\r\n //Services (should move to service) along with other ajax helpers\r\n const handleError = useCallback((error) => { enqueueSnackbar(error.message, { variant: 'error' }); },[enqueueSnackbar]);\r\n \r\n useEffect(() => {\r\n fetch('https://api2.auburnalabama.org/committee/all', { credentials: 'include' })\r\n .then((response) => { if (response.ok) return response.json(); else throw new Error(response.statusText)})\r\n .then((committees) => { setCommittees(committees); })\r\n .catch(handleError);\r\n }, [handleError]);\r\n\r\n return (\r\n
\r\n
\r\n

CITY OF AUBURN BOARDS AND COMMISSIONS

\r\n Term expires on date shown opposite name of member\r\n
\r\n {committees.map((committee) => {\r\n return (\r\n
\r\n

{committee.name}

\r\n \r\n {committee.committeeMembers && committee.committeeMembers.map((member) => {\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n })} \r\n
{member.person.name}{`(${(''+member.yearAppointed).slice(-2)})`}{handleDateTimeToDate(member.membershipExpires)}{member.membershipType}
\r\n
{`${committee.appointments} ${committee.term}`}
\r\n
{`Meets: ${committee.meetingSchedule}${(committee.meetingLocation ? ' at ' + committee.meetingLocation : '')}`}
\r\n
\r\n )\r\n })}\r\n
\r\n )\r\n}\r\n\r\nexport { PrintPage };","import React from 'react';\r\nimport { Router, Switch as SwitchRoute, Route } from 'react-router-dom';\r\n//Styles\r\nimport './App.css';\r\n//Routing/History/Services\r\nimport { history } from './services/';\r\nimport { userLogin } from './services/coa-authorization';\r\nimport { StateProvider } from './services/State'; //should be able to get from NPM but microServices aren't sharing cookie\r\n//Material-ui layout needs\r\nimport { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles';\r\n//Components\r\nimport { SnackbarProvider } from 'notistack';\r\nimport AppSkeleton from './components/AppSkeleton';\r\n//Content Pages\r\nimport { NotFoundPage, HomePage } from './pages';\r\nimport { Detail } from './pages/Detail';\r\nimport { PrintPage } from './pages/Print';\r\n\r\n//Layout styles\r\nconst theme = createMuiTheme({\r\n typography: {\r\n useNextVariants: true,\r\n },\r\n palette: {\r\n primary: { main: '#03a9f4' }, //lightblue from @material-ui/core/colors/\r\n secondary: { main: '#ff9800' }, //orange\r\n },\r\n});\r\n\r\n\r\nfunction App() {\r\n // TODO - move out to an appStore.js file?\r\n // TODO - rewrite `reducer` function in State.js to also update localStorage?\r\n // TODO - perhaps make a way to update localStorage without saving the data for local timeouts?\r\n const STORES = {\r\n CACHED_USER: 'userProfile',\r\n }\r\n const initialState = {\r\n userProfile: JSON.parse(localStorage.getItem(STORES.CACHED_USER)) || {\"name\":{\"fullName\":\"\",\"firstName\":\"\",\"lastName\":\"\"},\"email\":\"\",\"phone\":null,\"department\":null,\"title\":null,\"employeeNumber\":null,\"userPrincipalName\":\"\",\"roles\":[]},\r\n };\r\n const init = async () => {\r\n let userProfile = userLogin()\r\n .then((user) => {\r\n // Get additional permissions\r\n // if (user.canPublish === undefined) {\r\n // return fetch('https://api2.auburnalabama.org/pressrelease/canIPublish', { credentials: 'include' })\r\n // .then((response) => { return {...user, canPublish: response.ok}; })\r\n // .catch(() => {return {...user, canPublish: false }; });\r\n // }\r\n\r\n // Return\r\n return user;\r\n });\r\n let everyoneFinish = await Promise.all([userProfile]);\r\n return { userProfile: everyoneFinish[0] };\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\nexport default App;\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\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 subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read http://bit.ly/CRA-PWA\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 function register(config) {\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.href);\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/facebook/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. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit http://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\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 // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\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, config) {\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 const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.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, config);\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 from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nReactDOM.render(, document.getElementById('root'));\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: http://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}